// 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  S3350C4_nt  {
  int s3350c4f0[2];
  void  mf3350c4(); // _ZN10S3350C4_nt8mf3350c4Ev
};
//SIG(-1 S3350C4_nt) C1{ m Fi[2]}


void  S3350C4_nt ::mf3350c4(){}

//skip512 S3350C4_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3350C3_nt  {
  int s3350c3f0;
  __tsi64 s3350c3f1;
  void *s3350c3f2[4];
  int s3350c3f3[2];
  void *s3350c3f4;
  ::S3350C4_nt s3350c3f5;
  void *s3350c3f6[2];
  virtual  ~S3350C3_nt(); // _ZN10S3350C3_ntD1Ev
  virtual void  v6(); // _ZN10S3350C3_nt2v6Ev
  virtual void  v7(); // _ZN10S3350C3_nt2v7Ev
  virtual void  v8(); // _ZN10S3350C3_nt2v8Ev
  virtual void  v9(); // _ZN10S3350C3_nt2v9Ev
  virtual void  v10(); // _ZN10S3350C3_nt3v10Ev
  virtual void  v11(); // _ZN10S3350C3_nt3v11Ev
  virtual void  v12(); // _ZN10S3350C3_nt3v12Ev
  virtual void  v13(); // _ZN10S3350C3_nt3v13Ev
  virtual void  v14(); // _ZN10S3350C3_nt3v14Ev
  virtual void  v15(); // _ZN10S3350C3_nt3v15Ev
  virtual void  v16(); // _ZN10S3350C3_nt3v16Ev
  virtual void  v17(); // _ZN10S3350C3_nt3v17Ev
  virtual void  v18(); // _ZN10S3350C3_nt3v18Ev
  virtual void  v19(); // _ZN10S3350C3_nt3v19Ev
  virtual void  v20(); // _ZN10S3350C3_nt3v20Ev
  virtual void  v21(); // _ZN10S3350C3_nt3v21Ev
  virtual void  v22(); // _ZN10S3350C3_nt3v22Ev
  virtual void  v23(); // _ZN10S3350C3_nt3v23Ev
  virtual void  v24(); // _ZN10S3350C3_nt3v24Ev
  virtual void  v25(); // _ZN10S3350C3_nt3v25Ev
  virtual void  v26(); // _ZN10S3350C3_nt3v26Ev
  virtual void  v27(); // _ZN10S3350C3_nt3v27Ev
  virtual void  v28(); // _ZN10S3350C3_nt3v28Ev
  virtual void  v29(); // _ZN10S3350C3_nt3v29Ev
  virtual void  v30(); // _ZN10S3350C3_nt3v30Ev
  virtual void  v31(); // _ZN10S3350C3_nt3v31Ev
  virtual void  v32(); // _ZN10S3350C3_nt3v32Ev
  virtual void  v33(); // _ZN10S3350C3_nt3v33Ev
  virtual void  v34(); // _ZN10S3350C3_nt3v34Ev
  virtual void  v35(); // _ZN10S3350C3_nt3v35Ev
  virtual void  v36(); // _ZN10S3350C3_nt3v36Ev
  virtual void  v37(); // _ZN10S3350C3_nt3v37Ev
  virtual void  v38(); // _ZN10S3350C3_nt3v38Ev
  virtual void  v39(); // _ZN10S3350C3_nt3v39Ev
  virtual void  v40(); // _ZN10S3350C3_nt3v40Ev
  virtual void  v41(); // _ZN10S3350C3_nt3v41Ev
  virtual void  v42(); // _ZN10S3350C3_nt3v42Ev
  virtual void  v43(); // _ZN10S3350C3_nt3v43Ev
  virtual void  v44(); // _ZN10S3350C3_nt3v44Ev
  virtual void  v45(); // _ZN10S3350C3_nt3v45Ev
  virtual void  v46(); // _ZN10S3350C3_nt3v46Ev
  virtual void  v47(); // _ZN10S3350C3_nt3v47Ev
  virtual void  v48(); // _ZN10S3350C3_nt3v48Ev
  virtual void  v49(); // _ZN10S3350C3_nt3v49Ev
  virtual void  v50(); // _ZN10S3350C3_nt3v50Ev
  virtual void  v51(); // _ZN10S3350C3_nt3v51Ev
  virtual void  v52(); // _ZN10S3350C3_nt3v52Ev
  virtual void  v53(); // _ZN10S3350C3_nt3v53Ev
  virtual void  v54(); // _ZN10S3350C3_nt3v54Ev
  virtual void  v55(); // _ZN10S3350C3_nt3v55Ev
  virtual void  v56(); // _ZN10S3350C3_nt3v56Ev
  virtual void  v57(); // _ZN10S3350C3_nt3v57Ev
  virtual void  v58(); // _ZN10S3350C3_nt3v58Ev
  virtual void  v59(); // _ZN10S3350C3_nt3v59Ev
  virtual void  v60(); // _ZN10S3350C3_nt3v60Ev
  virtual void  v61(); // _ZN10S3350C3_nt3v61Ev
  virtual void  v62(); // _ZN10S3350C3_nt3v62Ev
  virtual void  v63(); // _ZN10S3350C3_nt3v63Ev
  virtual void  v64(); // _ZN10S3350C3_nt3v64Ev
  virtual void  v65(); // _ZN10S3350C3_nt3v65Ev
  virtual void  v66(); // _ZN10S3350C3_nt3v66Ev
  virtual void  v67(); // _ZN10S3350C3_nt3v67Ev
  virtual void  v68(); // _ZN10S3350C3_nt3v68Ev
  virtual void  v69(); // _ZN10S3350C3_nt3v69Ev
  S3350C3_nt(); // tgen
};
//SIG(-1 S3350C3_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]}


 S3350C3_nt ::~S3350C3_nt(){ note_dtor("S3350C3_nt", this);}
void  S3350C3_nt ::v6(){vfunc_called(this, "_ZN10S3350C3_nt2v6Ev");}
void  S3350C3_nt ::v7(){vfunc_called(this, "_ZN10S3350C3_nt2v7Ev");}
void  S3350C3_nt ::v8(){vfunc_called(this, "_ZN10S3350C3_nt2v8Ev");}
void  S3350C3_nt ::v9(){vfunc_called(this, "_ZN10S3350C3_nt2v9Ev");}
void  S3350C3_nt ::v10(){vfunc_called(this, "_ZN10S3350C3_nt3v10Ev");}
void  S3350C3_nt ::v11(){vfunc_called(this, "_ZN10S3350C3_nt3v11Ev");}
void  S3350C3_nt ::v12(){vfunc_called(this, "_ZN10S3350C3_nt3v12Ev");}
void  S3350C3_nt ::v13(){vfunc_called(this, "_ZN10S3350C3_nt3v13Ev");}
void  S3350C3_nt ::v14(){vfunc_called(this, "_ZN10S3350C3_nt3v14Ev");}
void  S3350C3_nt ::v15(){vfunc_called(this, "_ZN10S3350C3_nt3v15Ev");}
void  S3350C3_nt ::v16(){vfunc_called(this, "_ZN10S3350C3_nt3v16Ev");}
void  S3350C3_nt ::v17(){vfunc_called(this, "_ZN10S3350C3_nt3v17Ev");}
void  S3350C3_nt ::v18(){vfunc_called(this, "_ZN10S3350C3_nt3v18Ev");}
void  S3350C3_nt ::v19(){vfunc_called(this, "_ZN10S3350C3_nt3v19Ev");}
void  S3350C3_nt ::v20(){vfunc_called(this, "_ZN10S3350C3_nt3v20Ev");}
void  S3350C3_nt ::v21(){vfunc_called(this, "_ZN10S3350C3_nt3v21Ev");}
void  S3350C3_nt ::v22(){vfunc_called(this, "_ZN10S3350C3_nt3v22Ev");}
void  S3350C3_nt ::v23(){vfunc_called(this, "_ZN10S3350C3_nt3v23Ev");}
void  S3350C3_nt ::v24(){vfunc_called(this, "_ZN10S3350C3_nt3v24Ev");}
void  S3350C3_nt ::v25(){vfunc_called(this, "_ZN10S3350C3_nt3v25Ev");}
void  S3350C3_nt ::v26(){vfunc_called(this, "_ZN10S3350C3_nt3v26Ev");}
void  S3350C3_nt ::v27(){vfunc_called(this, "_ZN10S3350C3_nt3v27Ev");}
void  S3350C3_nt ::v28(){vfunc_called(this, "_ZN10S3350C3_nt3v28Ev");}
void  S3350C3_nt ::v29(){vfunc_called(this, "_ZN10S3350C3_nt3v29Ev");}
void  S3350C3_nt ::v30(){vfunc_called(this, "_ZN10S3350C3_nt3v30Ev");}
void  S3350C3_nt ::v31(){vfunc_called(this, "_ZN10S3350C3_nt3v31Ev");}
void  S3350C3_nt ::v32(){vfunc_called(this, "_ZN10S3350C3_nt3v32Ev");}
void  S3350C3_nt ::v33(){vfunc_called(this, "_ZN10S3350C3_nt3v33Ev");}
void  S3350C3_nt ::v34(){vfunc_called(this, "_ZN10S3350C3_nt3v34Ev");}
void  S3350C3_nt ::v35(){vfunc_called(this, "_ZN10S3350C3_nt3v35Ev");}
void  S3350C3_nt ::v36(){vfunc_called(this, "_ZN10S3350C3_nt3v36Ev");}
void  S3350C3_nt ::v37(){vfunc_called(this, "_ZN10S3350C3_nt3v37Ev");}
void  S3350C3_nt ::v38(){vfunc_called(this, "_ZN10S3350C3_nt3v38Ev");}
void  S3350C3_nt ::v39(){vfunc_called(this, "_ZN10S3350C3_nt3v39Ev");}
void  S3350C3_nt ::v40(){vfunc_called(this, "_ZN10S3350C3_nt3v40Ev");}
void  S3350C3_nt ::v41(){vfunc_called(this, "_ZN10S3350C3_nt3v41Ev");}
void  S3350C3_nt ::v42(){vfunc_called(this, "_ZN10S3350C3_nt3v42Ev");}
void  S3350C3_nt ::v43(){vfunc_called(this, "_ZN10S3350C3_nt3v43Ev");}
void  S3350C3_nt ::v44(){vfunc_called(this, "_ZN10S3350C3_nt3v44Ev");}
void  S3350C3_nt ::v45(){vfunc_called(this, "_ZN10S3350C3_nt3v45Ev");}
void  S3350C3_nt ::v46(){vfunc_called(this, "_ZN10S3350C3_nt3v46Ev");}
void  S3350C3_nt ::v47(){vfunc_called(this, "_ZN10S3350C3_nt3v47Ev");}
void  S3350C3_nt ::v48(){vfunc_called(this, "_ZN10S3350C3_nt3v48Ev");}
void  S3350C3_nt ::v49(){vfunc_called(this, "_ZN10S3350C3_nt3v49Ev");}
void  S3350C3_nt ::v50(){vfunc_called(this, "_ZN10S3350C3_nt3v50Ev");}
void  S3350C3_nt ::v51(){vfunc_called(this, "_ZN10S3350C3_nt3v51Ev");}
void  S3350C3_nt ::v52(){vfunc_called(this, "_ZN10S3350C3_nt3v52Ev");}
void  S3350C3_nt ::v53(){vfunc_called(this, "_ZN10S3350C3_nt3v53Ev");}
void  S3350C3_nt ::v54(){vfunc_called(this, "_ZN10S3350C3_nt3v54Ev");}
void  S3350C3_nt ::v55(){vfunc_called(this, "_ZN10S3350C3_nt3v55Ev");}
void  S3350C3_nt ::v56(){vfunc_called(this, "_ZN10S3350C3_nt3v56Ev");}
void  S3350C3_nt ::v57(){vfunc_called(this, "_ZN10S3350C3_nt3v57Ev");}
void  S3350C3_nt ::v58(){vfunc_called(this, "_ZN10S3350C3_nt3v58Ev");}
void  S3350C3_nt ::v59(){vfunc_called(this, "_ZN10S3350C3_nt3v59Ev");}
void  S3350C3_nt ::v60(){vfunc_called(this, "_ZN10S3350C3_nt3v60Ev");}
void  S3350C3_nt ::v61(){vfunc_called(this, "_ZN10S3350C3_nt3v61Ev");}
void  S3350C3_nt ::v62(){vfunc_called(this, "_ZN10S3350C3_nt3v62Ev");}
void  S3350C3_nt ::v63(){vfunc_called(this, "_ZN10S3350C3_nt3v63Ev");}
void  S3350C3_nt ::v64(){vfunc_called(this, "_ZN10S3350C3_nt3v64Ev");}
void  S3350C3_nt ::v65(){vfunc_called(this, "_ZN10S3350C3_nt3v65Ev");}
void  S3350C3_nt ::v66(){vfunc_called(this, "_ZN10S3350C3_nt3v66Ev");}
void  S3350C3_nt ::v67(){vfunc_called(this, "_ZN10S3350C3_nt3v67Ev");}
void  S3350C3_nt ::v68(){vfunc_called(this, "_ZN10S3350C3_nt3v68Ev");}
void  S3350C3_nt ::v69(){vfunc_called(this, "_ZN10S3350C3_nt3v69Ev");}
S3350C3_nt ::S3350C3_nt(){ note_ctor("S3350C3_nt", this);} // tgen

//skip512 S3350C3_nt

#else // __cplusplus

extern void _ZN10S3350C3_ntC1Ev();
extern void _ZN10S3350C3_ntD1Ev();
Name_Map name_map_S3350C3_nt[] = {
  NSPAIR(_ZN10S3350C3_ntC1Ev),
  NSPAIR(_ZN10S3350C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S3350C3_nt[];
extern void _ZN10S3350C3_ntD1Ev();
extern void _ZN10S3350C3_ntD0Ev();
extern void _ZN10S3350C3_nt2v6Ev();
extern void _ZN10S3350C3_nt2v7Ev();
extern void _ZN10S3350C3_nt2v8Ev();
extern void _ZN10S3350C3_nt2v9Ev();
extern void _ZN10S3350C3_nt3v10Ev();
extern void _ZN10S3350C3_nt3v11Ev();
extern void _ZN10S3350C3_nt3v12Ev();
extern void _ZN10S3350C3_nt3v13Ev();
extern void _ZN10S3350C3_nt3v14Ev();
extern void _ZN10S3350C3_nt3v15Ev();
extern void _ZN10S3350C3_nt3v16Ev();
extern void _ZN10S3350C3_nt3v17Ev();
extern void _ZN10S3350C3_nt3v18Ev();
extern void _ZN10S3350C3_nt3v19Ev();
extern void _ZN10S3350C3_nt3v20Ev();
extern void _ZN10S3350C3_nt3v21Ev();
extern void _ZN10S3350C3_nt3v22Ev();
extern void _ZN10S3350C3_nt3v23Ev();
extern void _ZN10S3350C3_nt3v24Ev();
extern void _ZN10S3350C3_nt3v25Ev();
extern void _ZN10S3350C3_nt3v26Ev();
extern void _ZN10S3350C3_nt3v27Ev();
extern void _ZN10S3350C3_nt3v28Ev();
extern void _ZN10S3350C3_nt3v29Ev();
extern void _ZN10S3350C3_nt3v30Ev();
extern void _ZN10S3350C3_nt3v31Ev();
extern void _ZN10S3350C3_nt3v32Ev();
extern void _ZN10S3350C3_nt3v33Ev();
extern void _ZN10S3350C3_nt3v34Ev();
extern void _ZN10S3350C3_nt3v35Ev();
extern void _ZN10S3350C3_nt3v36Ev();
extern void _ZN10S3350C3_nt3v37Ev();
extern void _ZN10S3350C3_nt3v38Ev();
extern void _ZN10S3350C3_nt3v39Ev();
extern void _ZN10S3350C3_nt3v40Ev();
extern void _ZN10S3350C3_nt3v41Ev();
extern void _ZN10S3350C3_nt3v42Ev();
extern void _ZN10S3350C3_nt3v43Ev();
extern void _ZN10S3350C3_nt3v44Ev();
extern void _ZN10S3350C3_nt3v45Ev();
extern void _ZN10S3350C3_nt3v46Ev();
extern void _ZN10S3350C3_nt3v47Ev();
extern void _ZN10S3350C3_nt3v48Ev();
extern void _ZN10S3350C3_nt3v49Ev();
extern void _ZN10S3350C3_nt3v50Ev();
extern void _ZN10S3350C3_nt3v51Ev();
extern void _ZN10S3350C3_nt3v52Ev();
extern void _ZN10S3350C3_nt3v53Ev();
extern void _ZN10S3350C3_nt3v54Ev();
extern void _ZN10S3350C3_nt3v55Ev();
extern void _ZN10S3350C3_nt3v56Ev();
extern void _ZN10S3350C3_nt3v57Ev();
extern void _ZN10S3350C3_nt3v58Ev();
extern void _ZN10S3350C3_nt3v59Ev();
extern void _ZN10S3350C3_nt3v60Ev();
extern void _ZN10S3350C3_nt3v61Ev();
extern void _ZN10S3350C3_nt3v62Ev();
extern void _ZN10S3350C3_nt3v63Ev();
extern void _ZN10S3350C3_nt3v64Ev();
extern void _ZN10S3350C3_nt3v65Ev();
extern void _ZN10S3350C3_nt3v66Ev();
extern void _ZN10S3350C3_nt3v67Ev();
extern void _ZN10S3350C3_nt3v68Ev();
extern void _ZN10S3350C3_nt3v69Ev();
static  VTBL_ENTRY vtc_S3350C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3350C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S3350C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v69Ev,
};
extern VTBL_ENTRY _ZTI10S3350C3_nt[];
VTBL_ENTRY *P__ZTI10S3350C3_nt = _ZTI10S3350C3_nt; 
extern  VTBL_ENTRY _ZTV10S3350C3_nt[];
Class_Descriptor cd_S3350C3_nt = {  "S3350C3_nt", // class name
  0,0,//no base classes
  &(vtc_S3350C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI10S3350C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S3350C3_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  S3350C7_nt  {
  void *s3350c7f0;
  int s3350c7f1[2];
  void  mf3350c7(); // _ZN10S3350C7_nt8mf3350c7Ev
};
//SIG(-1 S3350C7_nt) C1{ m Fp Fi[2]}


void  S3350C7_nt ::mf3350c7(){}

//skip512 S3350C7_nt

#else // __cplusplus

Class_Descriptor cd_S3350C7_nt = {  "S3350C7_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3350C6_nt  : S3350C7_nt {
};
//SIG(-1 S3350C6_nt) C1{ BC2{ m Fp Fi[2]}}



//skip512 S3350C6_nt

#else // __cplusplus

extern Class_Descriptor cd_S3350C7_nt;
static Base_Class bases_S3350C6_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3350C7_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_S3350C6_nt = {  "S3350C6_nt", // class name
  bases_S3350C6_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  S3350C5_nt  : S3350C6_nt {
};
//SIG(-1 S3350C5_nt) C1{ BC2{ BC3{ m Fp Fi[2]}}}



//skip512 S3350C5_nt

#else // __cplusplus

extern Class_Descriptor cd_S3350C7_nt;
extern Class_Descriptor cd_S3350C6_nt;
static Base_Class bases_S3350C5_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3350C7_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_S3350C6_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  S3350C8_nt  {
  int s3350c8f0;
  void  mf3350c8(); // _ZN10S3350C8_nt8mf3350c8Ev
};
//SIG(-1 S3350C8_nt) C1{ m Fi}


void  S3350C8_nt ::mf3350c8(){}

//skip512 S3350C8_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI10S3350C8_nt[];
VTBL_ENTRY *P__ZTI10S3350C8_nt = _ZTI10S3350C8_nt; 
Class_Descriptor cd_S3350C8_nt = {  "S3350C8_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  4, // object size
  NSPAIRA(_ZTI10S3350C8_nt),ABISELECT(16,8), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3350C12  : S3350C7_nt {
};
//SIG(-1 S3350C12) C1{ BC2{ m Fp Fi[2]}}



static void Test_S3350C12()
{
  extern Class_Descriptor cd_S3350C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S3350C12, buf);
    S3350C12 &lv = *(new (buf) S3350C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S3350C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3350C12)");
    check_base_class_offset(lv, (S3350C7_nt*), 0, "S3350C12");
    test_class_info(&lv, &cd_S3350C12);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3350C12(Test_S3350C12, "S3350C12", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3350C7_nt;
static Base_Class bases_S3350C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3350C7_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_S3350C12 = {  "S3350C12", // class name
  bases_S3350C12, 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  S3350C11  : S3350C12 {
};
//SIG(-1 S3350C11) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S3350C11()
{
  extern Class_Descriptor cd_S3350C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S3350C11, buf);
    S3350C11 &lv = *(new (buf) S3350C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S3350C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3350C11)");
    check_base_class_offset(lv, (S3350C7_nt*)(S3350C12*), 0, "S3350C11");
    check_base_class_offset(lv, (S3350C12*), 0, "S3350C11");
    test_class_info(&lv, &cd_S3350C11);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3350C11(Test_S3350C11, "S3350C11", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3350C7_nt;
extern Class_Descriptor cd_S3350C12;
static Base_Class bases_S3350C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3350C7_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_S3350C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S3350C11 = {  "S3350C11", // class name
  bases_S3350C11, 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  S3350C13_nt  {
  int s3350c13f0[3];
  void  mf3350c13(); // _ZN11S3350C13_nt9mf3350c13Ev
};
//SIG(-1 S3350C13_nt) C1{ m Fi[3]}


void  S3350C13_nt ::mf3350c13(){}

//skip512 S3350C13_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3350C18  : S3350C7_nt {
};
//SIG(-1 S3350C18) C1{ BC2{ m Fp Fi[2]}}



static void Test_S3350C18()
{
  extern Class_Descriptor cd_S3350C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S3350C18, buf);
    S3350C18 &lv = *(new (buf) S3350C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S3350C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3350C18)");
    check_base_class_offset(lv, (S3350C7_nt*), 0, "S3350C18");
    test_class_info(&lv, &cd_S3350C18);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3350C18(Test_S3350C18, "S3350C18", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3350C7_nt;
static Base_Class bases_S3350C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3350C7_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_S3350C18 = {  "S3350C18", // class name
  bases_S3350C18, 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  S3350C17  : S3350C18 {
};
//SIG(-1 S3350C17) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S3350C17()
{
  extern Class_Descriptor cd_S3350C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S3350C17, buf);
    S3350C17 &lv = *(new (buf) S3350C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S3350C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3350C17)");
    check_base_class_offset(lv, (S3350C7_nt*)(S3350C18*), 0, "S3350C17");
    check_base_class_offset(lv, (S3350C18*), 0, "S3350C17");
    test_class_info(&lv, &cd_S3350C17);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3350C17(Test_S3350C17, "S3350C17", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3350C7_nt;
extern Class_Descriptor cd_S3350C18;
static Base_Class bases_S3350C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3350C7_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_S3350C18,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S3350C17 = {  "S3350C17", // class name
  bases_S3350C17, 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  S3350C2_nt  : S3350C3_nt {
  ::S3350C5_nt s3350c2f0;
  ::S3350C5_nt s3350c2f1;
  ::S3350C8_nt s3350c2f2;
  int s3350c2f3;
  char s3350c2f4[4];
  void *s3350c2f5[2];
  ::S3350C5_nt s3350c2f6;
  unsigned int s3350c2f7:1;
  unsigned int s3350c2f8:1;
  unsigned int s3350c2f9:1;
  unsigned int s3350c2f10:1;
  unsigned int s3350c2f11:1;
  unsigned int s3350c2f12:1;
  unsigned int s3350c2f13:1;
  unsigned int s3350c2f14:1;
  unsigned int s3350c2f15:1;
  unsigned int s3350c2f16:1;
  unsigned int s3350c2f17:1;
  unsigned int s3350c2f18:1;
  unsigned int s3350c2f19:1;
  unsigned int s3350c2f20:1;
  unsigned int s3350c2f21:1;
  unsigned int s3350c2f22:1;
  unsigned int s3350c2f23:1;
  unsigned int s3350c2f24:1;
  unsigned int s3350c2f25:1;
  unsigned int s3350c2f26:1;
  unsigned int s3350c2f27:1;
  unsigned int s3350c2f28:1;
  unsigned int s3350c2f29:1;
  unsigned int s3350c2f30:1;
  unsigned int s3350c2f31:1;
  unsigned int s3350c2f32:1;
  unsigned int s3350c2f33:1;
  unsigned int s3350c2f34:1;
  unsigned int s3350c2f35:1;
  unsigned int s3350c2f36:1;
  unsigned int s3350c2f37:1;
  unsigned int s3350c2f38:1;
  unsigned int s3350c2f39:1;
  unsigned int s3350c2f40:1;
  unsigned int s3350c2f41:1;
  unsigned int s3350c2f42:1;
  unsigned int s3350c2f43:1;
  unsigned int s3350c2f44:1;
  unsigned int s3350c2f45:1;
  unsigned int s3350c2f46:1;
  unsigned int s3350c2f47:1;
  unsigned int s3350c2f48:1;
  unsigned int s3350c2f49:1;
  unsigned int s3350c2f50:1;
  unsigned int s3350c2f51:1;
  unsigned int s3350c2f52:1;
  unsigned int s3350c2f53:1;
  unsigned int s3350c2f54:1;
  unsigned int s3350c2f55:1;
  unsigned int s3350c2f56:1;
  unsigned int s3350c2f57:1;
  unsigned int s3350c2f58:1;
  unsigned int s3350c2f59:1;
  unsigned int s3350c2f60:1;
  unsigned int s3350c2f61:1;
  unsigned int s3350c2f62:1;
  unsigned int s3350c2f63:1;
  unsigned int s3350c2f64:1;
  unsigned int s3350c2f65:1;
  unsigned int s3350c2f66:1;
  unsigned int s3350c2f67:1;
  unsigned int s3350c2f68:1;
  unsigned int s3350c2f69:1;
  unsigned int s3350c2f70:1;
  unsigned int s3350c2f71:1;
  unsigned int s3350c2f72:1;
  unsigned int s3350c2f73:1;
  unsigned int s3350c2f74:1;
  unsigned int s3350c2f75:1;
  unsigned int s3350c2f76:1;
  unsigned int s3350c2f77:1;
  unsigned int s3350c2f78:1;
  unsigned int s3350c2f79:1;
  unsigned int s3350c2f80:1;
  unsigned int s3350c2f81:1;
  unsigned int s3350c2f82:1;
  unsigned int s3350c2f83:1;
  int s3350c2f84[5];
  void *s3350c2f85[2];
  int s3350c2f86[3];
  ::S3350C4_nt s3350c2f87;
  ::S3350C4_nt s3350c2f88;
  ::S3350C4_nt s3350c2f89;
  ::S3350C11 s3350c2f90;
  ::S3350C11 s3350c2f91;
  int s3350c2f92;
  void *s3350c2f93[2];
  ::S3350C13_nt s3350c2f94;
  ::S3350C13_nt s3350c2f95;
  ::S3350C13_nt s3350c2f96;
  ::S3350C13_nt s3350c2f97;
  void *s3350c2f98;
  ::S3350C4_nt s3350c2f99;
  ::S3350C11 s3350c2f100;
  ::S3350C13_nt s3350c2f101;
  ::S3350C13_nt s3350c2f102;
  int s3350c2f103;
  ::S3350C13_nt s3350c2f104;
  ::S3350C13_nt s3350c2f105;
  void *s3350c2f106;
  int s3350c2f107;
  char s3350c2f108;
  ::S3350C13_nt s3350c2f109;
  ::S3350C13_nt s3350c2f110;
  void *s3350c2f111;
  int s3350c2f112;
  void *s3350c2f113;
  ::S3350C11 s3350c2f114;
  ::S3350C17 s3350c2f115;
  ::S3350C17 s3350c2f116;
  virtual  ~S3350C2_nt(); // _ZN10S3350C2_ntD1Ev
  virtual void  v70(); // _ZN10S3350C2_nt3v70Ev
  virtual void  v71(); // _ZN10S3350C2_nt3v71Ev
  virtual void  v72(); // _ZN10S3350C2_nt3v72Ev
  virtual void  v73(); // _ZN10S3350C2_nt3v73Ev
  virtual void  v74(); // _ZN10S3350C2_nt3v74Ev
  virtual void  v75(); // _ZN10S3350C2_nt3v75Ev
  virtual void  v76(); // _ZN10S3350C2_nt3v76Ev
  virtual void  v77(); // _ZN10S3350C2_nt3v77Ev
  virtual void  v78(); // _ZN10S3350C2_nt3v78Ev
  virtual void  v79(); // _ZN10S3350C2_nt3v79Ev
  virtual void  v80(); // _ZN10S3350C2_nt3v80Ev
  virtual void  v81(); // _ZN10S3350C2_nt3v81Ev
  virtual void  v82(); // _ZN10S3350C2_nt3v82Ev
  virtual void  v83(); // _ZN10S3350C2_nt3v83Ev
  virtual void  v84(); // _ZN10S3350C2_nt3v84Ev
  virtual void  v85(); // _ZN10S3350C2_nt3v85Ev
  virtual void  v86(); // _ZN10S3350C2_nt3v86Ev
  virtual void  v87(); // _ZN10S3350C2_nt3v87Ev
  virtual void  v88(); // _ZN10S3350C2_nt3v88Ev
  virtual void  v89(); // _ZN10S3350C2_nt3v89Ev
  virtual void  v90(); // _ZN10S3350C2_nt3v90Ev
  virtual void  v91(); // _ZN10S3350C2_nt3v91Ev
  virtual void  v92(); // _ZN10S3350C2_nt3v92Ev
  virtual void  v93(); // _ZN10S3350C2_nt3v93Ev
  virtual void  v94(); // _ZN10S3350C2_nt3v94Ev
  virtual void  v95(); // _ZN10S3350C2_nt3v95Ev
  virtual void  v96(); // _ZN10S3350C2_nt3v96Ev
  virtual void  v97(); // _ZN10S3350C2_nt3v97Ev
  virtual void  v98(); // _ZN10S3350C2_nt3v98Ev
  virtual void  v99(); // _ZN10S3350C2_nt3v99Ev
  virtual void  v100(); // _ZN10S3350C2_nt4v100Ev
  virtual void  v101(); // _ZN10S3350C2_nt4v101Ev
  virtual void  v102(); // _ZN10S3350C2_nt4v102Ev
  virtual void  v103(); // _ZN10S3350C2_nt4v103Ev
  virtual void  v104(); // _ZN10S3350C2_nt4v104Ev
  virtual void  v105(); // _ZN10S3350C2_nt4v105Ev
  virtual void  v106(); // _ZN10S3350C2_nt4v106Ev
  virtual void  v107(); // _ZN10S3350C2_nt4v107Ev
  virtual void  v108(); // _ZN10S3350C2_nt4v108Ev
  virtual void  v109(); // _ZN10S3350C2_nt4v109Ev
  virtual void  v110(); // _ZN10S3350C2_nt4v110Ev
  virtual void  v111(); // _ZN10S3350C2_nt4v111Ev
  virtual void  v112(); // _ZN10S3350C2_nt4v112Ev
  virtual void  v113(); // _ZN10S3350C2_nt4v113Ev
  virtual void  v114(); // _ZN10S3350C2_nt4v114Ev
  virtual void  v115(); // _ZN10S3350C2_nt4v115Ev
  virtual void  v116(); // _ZN10S3350C2_nt4v116Ev
  virtual void  v117(); // _ZN10S3350C2_nt4v117Ev
  virtual void  v118(); // _ZN10S3350C2_nt4v118Ev
  virtual void  v119(); // _ZN10S3350C2_nt4v119Ev
  virtual void  v120(); // _ZN10S3350C2_nt4v120Ev
  virtual void  v121(); // _ZN10S3350C2_nt4v121Ev
  virtual void  v122(); // _ZN10S3350C2_nt4v122Ev
  virtual void  v123(); // _ZN10S3350C2_nt4v123Ev
  virtual void  v124(); // _ZN10S3350C2_nt4v124Ev
  virtual void  v125(); // _ZN10S3350C2_nt4v125Ev
  virtual void  v126(); // _ZN10S3350C2_nt4v126Ev
  virtual void  v127(); // _ZN10S3350C2_nt4v127Ev
  virtual void  v128(); // _ZN10S3350C2_nt4v128Ev
  virtual void  v129(); // _ZN10S3350C2_nt4v129Ev
  virtual void  v130(); // _ZN10S3350C2_nt4v130Ev
  virtual void  v131(); // _ZN10S3350C2_nt4v131Ev
  virtual void  v132(); // _ZN10S3350C2_nt4v132Ev
  virtual void  v133(); // _ZN10S3350C2_nt4v133Ev
  virtual void  v134(); // _ZN10S3350C2_nt4v134Ev
  virtual void  v135(); // _ZN10S3350C2_nt4v135Ev
  virtual void  v136(); // _ZN10S3350C2_nt4v136Ev
  virtual void  v137(); // _ZN10S3350C2_nt4v137Ev
  virtual void  v138(); // _ZN10S3350C2_nt4v138Ev
  virtual void  v139(); // _ZN10S3350C2_nt4v139Ev
  virtual void  v140(); // _ZN10S3350C2_nt4v140Ev
  virtual void  v141(); // _ZN10S3350C2_nt4v141Ev
  virtual void  v142(); // _ZN10S3350C2_nt4v142Ev
  virtual void  v143(); // _ZN10S3350C2_nt4v143Ev
  virtual void  v144(); // _ZN10S3350C2_nt4v144Ev
  virtual void  v145(); // _ZN10S3350C2_nt4v145Ev
  virtual void  v146(); // _ZN10S3350C2_nt4v146Ev
  virtual void  v147(); // _ZN10S3350C2_nt4v147Ev
  virtual void  v148(); // _ZN10S3350C2_nt4v148Ev
  virtual void  v149(); // _ZN10S3350C2_nt4v149Ev
  virtual void  v150(); // _ZN10S3350C2_nt4v150Ev
  virtual void  v151(); // _ZN10S3350C2_nt4v151Ev
  virtual void  v152(); // _ZN10S3350C2_nt4v152Ev
  virtual void  v153(); // _ZN10S3350C2_nt4v153Ev
  virtual void  v154(); // _ZN10S3350C2_nt4v154Ev
  virtual void  v155(); // _ZN10S3350C2_nt4v155Ev
  virtual void  v156(); // _ZN10S3350C2_nt4v156Ev
  virtual void  v157(); // _ZN10S3350C2_nt4v157Ev
  virtual void  v158(); // _ZN10S3350C2_nt4v158Ev
  virtual void  v159(); // _ZN10S3350C2_nt4v159Ev
  virtual void  v160(); // _ZN10S3350C2_nt4v160Ev
  virtual void  v161(); // _ZN10S3350C2_nt4v161Ev
  virtual void  v162(); // _ZN10S3350C2_nt4v162Ev
  virtual void  v163(); // _ZN10S3350C2_nt4v163Ev
  virtual void  v164(); // _ZN10S3350C2_nt4v164Ev
  virtual void  v165(); // _ZN10S3350C2_nt4v165Ev
  virtual void  v166(); // _ZN10S3350C2_nt4v166Ev
  virtual void  v167(); // _ZN10S3350C2_nt4v167Ev
  virtual void  v168(); // _ZN10S3350C2_nt4v168Ev
  virtual void  v169(); // _ZN10S3350C2_nt4v169Ev
  virtual void  v170(); // _ZN10S3350C2_nt4v170Ev
  virtual void  v171(); // _ZN10S3350C2_nt4v171Ev
  virtual void  v172(); // _ZN10S3350C2_nt4v172Ev
  virtual void  v173(); // _ZN10S3350C2_nt4v173Ev
  virtual void  v174(); // _ZN10S3350C2_nt4v174Ev
  virtual void  v175(); // _ZN10S3350C2_nt4v175Ev
  virtual void  v176(); // _ZN10S3350C2_nt4v176Ev
  virtual void  v177(); // _ZN10S3350C2_nt4v177Ev
  virtual void  v178(); // _ZN10S3350C2_nt4v178Ev
  virtual void  v179(); // _ZN10S3350C2_nt4v179Ev
  virtual void  v180(); // _ZN10S3350C2_nt4v180Ev
  virtual void  v181(); // _ZN10S3350C2_nt4v181Ev
  virtual void  v182(); // _ZN10S3350C2_nt4v182Ev
  virtual void  v183(); // _ZN10S3350C2_nt4v183Ev
  virtual void  v184(); // _ZN10S3350C2_nt4v184Ev
  virtual void  v185(); // _ZN10S3350C2_nt4v185Ev
  virtual void  v186(); // _ZN10S3350C2_nt4v186Ev
  virtual void  v187(); // _ZN10S3350C2_nt4v187Ev
  virtual void  v188(); // _ZN10S3350C2_nt4v188Ev
  virtual void  v189(); // _ZN10S3350C2_nt4v189Ev
  virtual void  v190(); // _ZN10S3350C2_nt4v190Ev
  virtual void  v191(); // _ZN10S3350C2_nt4v191Ev
  virtual void  v192(); // _ZN10S3350C2_nt4v192Ev
  virtual void  v193(); // _ZN10S3350C2_nt4v193Ev
  virtual void  v194(); // _ZN10S3350C2_nt4v194Ev
  virtual void  v195(); // _ZN10S3350C2_nt4v195Ev
  virtual void  v196(); // _ZN10S3350C2_nt4v196Ev
  virtual void  v197(); // _ZN10S3350C2_nt4v197Ev
  virtual void  v198(); // _ZN10S3350C2_nt4v198Ev
  virtual void  v199(); // _ZN10S3350C2_nt4v199Ev
  virtual void  v200(); // _ZN10S3350C2_nt4v200Ev
  virtual void  v201(); // _ZN10S3350C2_nt4v201Ev
  virtual void  v202(); // _ZN10S3350C2_nt4v202Ev
  virtual void  v203(); // _ZN10S3350C2_nt4v203Ev
  virtual void  v204(); // _ZN10S3350C2_nt4v204Ev
  virtual void  v205(); // _ZN10S3350C2_nt4v205Ev
  virtual void  v206(); // _ZN10S3350C2_nt4v206Ev
  virtual void  v207(); // _ZN10S3350C2_nt4v207Ev
  virtual void  v208(); // _ZN10S3350C2_nt4v208Ev
  virtual void  v209(); // _ZN10S3350C2_nt4v209Ev
  virtual void  v210(); // _ZN10S3350C2_nt4v210Ev
  virtual void  v211(); // _ZN10S3350C2_nt4v211Ev
  virtual void  v212(); // _ZN10S3350C2_nt4v212Ev
  S3350C2_nt(); // tgen
};
//SIG(-1 S3350C2_nt) C1{ BC2{ vd 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 v176 v177 v178 v179 v180 v181 v182 v183 v184 v185 v186 v187 v188 v189 v190 v191 v192 v193 v194 v195 v196 v197 v198 v199 v200 v201 v202 v203 v204 v205 v206 v207 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 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 v134 v135 v136 v137 v138 v139 v140 v141 v142 v143 FC4{ BC5{ BC6{ m Fp Fi[2]}}} FC4 FC7{ m Fi} Fi Fc[4] Fp[2] FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[5] Fp[2] Fi[3] FC3 FC3 FC3 FC8{ BC9{ BC6}} FC8 Fi Fp[2] FC10{ m Fi[3]} FC10 FC10 FC10 Fp FC3 FC8 FC10 FC10 Fi FC10 FC10 Fp Fi Fc FC10 FC10 Fp Fi Fp FC8 FC11{ BC12{ BC6}} FC11}


 S3350C2_nt ::~S3350C2_nt(){ note_dtor("S3350C2_nt", this);}
void  S3350C2_nt ::v70(){vfunc_called(this, "_ZN10S3350C2_nt3v70Ev");}
void  S3350C2_nt ::v71(){vfunc_called(this, "_ZN10S3350C2_nt3v71Ev");}
void  S3350C2_nt ::v72(){vfunc_called(this, "_ZN10S3350C2_nt3v72Ev");}
void  S3350C2_nt ::v73(){vfunc_called(this, "_ZN10S3350C2_nt3v73Ev");}
void  S3350C2_nt ::v74(){vfunc_called(this, "_ZN10S3350C2_nt3v74Ev");}
void  S3350C2_nt ::v75(){vfunc_called(this, "_ZN10S3350C2_nt3v75Ev");}
void  S3350C2_nt ::v76(){vfunc_called(this, "_ZN10S3350C2_nt3v76Ev");}
void  S3350C2_nt ::v77(){vfunc_called(this, "_ZN10S3350C2_nt3v77Ev");}
void  S3350C2_nt ::v78(){vfunc_called(this, "_ZN10S3350C2_nt3v78Ev");}
void  S3350C2_nt ::v79(){vfunc_called(this, "_ZN10S3350C2_nt3v79Ev");}
void  S3350C2_nt ::v80(){vfunc_called(this, "_ZN10S3350C2_nt3v80Ev");}
void  S3350C2_nt ::v81(){vfunc_called(this, "_ZN10S3350C2_nt3v81Ev");}
void  S3350C2_nt ::v82(){vfunc_called(this, "_ZN10S3350C2_nt3v82Ev");}
void  S3350C2_nt ::v83(){vfunc_called(this, "_ZN10S3350C2_nt3v83Ev");}
void  S3350C2_nt ::v84(){vfunc_called(this, "_ZN10S3350C2_nt3v84Ev");}
void  S3350C2_nt ::v85(){vfunc_called(this, "_ZN10S3350C2_nt3v85Ev");}
void  S3350C2_nt ::v86(){vfunc_called(this, "_ZN10S3350C2_nt3v86Ev");}
void  S3350C2_nt ::v87(){vfunc_called(this, "_ZN10S3350C2_nt3v87Ev");}
void  S3350C2_nt ::v88(){vfunc_called(this, "_ZN10S3350C2_nt3v88Ev");}
void  S3350C2_nt ::v89(){vfunc_called(this, "_ZN10S3350C2_nt3v89Ev");}
void  S3350C2_nt ::v90(){vfunc_called(this, "_ZN10S3350C2_nt3v90Ev");}
void  S3350C2_nt ::v91(){vfunc_called(this, "_ZN10S3350C2_nt3v91Ev");}
void  S3350C2_nt ::v92(){vfunc_called(this, "_ZN10S3350C2_nt3v92Ev");}
void  S3350C2_nt ::v93(){vfunc_called(this, "_ZN10S3350C2_nt3v93Ev");}
void  S3350C2_nt ::v94(){vfunc_called(this, "_ZN10S3350C2_nt3v94Ev");}
void  S3350C2_nt ::v95(){vfunc_called(this, "_ZN10S3350C2_nt3v95Ev");}
void  S3350C2_nt ::v96(){vfunc_called(this, "_ZN10S3350C2_nt3v96Ev");}
void  S3350C2_nt ::v97(){vfunc_called(this, "_ZN10S3350C2_nt3v97Ev");}
void  S3350C2_nt ::v98(){vfunc_called(this, "_ZN10S3350C2_nt3v98Ev");}
void  S3350C2_nt ::v99(){vfunc_called(this, "_ZN10S3350C2_nt3v99Ev");}
void  S3350C2_nt ::v100(){vfunc_called(this, "_ZN10S3350C2_nt4v100Ev");}
void  S3350C2_nt ::v101(){vfunc_called(this, "_ZN10S3350C2_nt4v101Ev");}
void  S3350C2_nt ::v102(){vfunc_called(this, "_ZN10S3350C2_nt4v102Ev");}
void  S3350C2_nt ::v103(){vfunc_called(this, "_ZN10S3350C2_nt4v103Ev");}
void  S3350C2_nt ::v104(){vfunc_called(this, "_ZN10S3350C2_nt4v104Ev");}
void  S3350C2_nt ::v105(){vfunc_called(this, "_ZN10S3350C2_nt4v105Ev");}
void  S3350C2_nt ::v106(){vfunc_called(this, "_ZN10S3350C2_nt4v106Ev");}
void  S3350C2_nt ::v107(){vfunc_called(this, "_ZN10S3350C2_nt4v107Ev");}
void  S3350C2_nt ::v108(){vfunc_called(this, "_ZN10S3350C2_nt4v108Ev");}
void  S3350C2_nt ::v109(){vfunc_called(this, "_ZN10S3350C2_nt4v109Ev");}
void  S3350C2_nt ::v110(){vfunc_called(this, "_ZN10S3350C2_nt4v110Ev");}
void  S3350C2_nt ::v111(){vfunc_called(this, "_ZN10S3350C2_nt4v111Ev");}
void  S3350C2_nt ::v112(){vfunc_called(this, "_ZN10S3350C2_nt4v112Ev");}
void  S3350C2_nt ::v113(){vfunc_called(this, "_ZN10S3350C2_nt4v113Ev");}
void  S3350C2_nt ::v114(){vfunc_called(this, "_ZN10S3350C2_nt4v114Ev");}
void  S3350C2_nt ::v115(){vfunc_called(this, "_ZN10S3350C2_nt4v115Ev");}
void  S3350C2_nt ::v116(){vfunc_called(this, "_ZN10S3350C2_nt4v116Ev");}
void  S3350C2_nt ::v117(){vfunc_called(this, "_ZN10S3350C2_nt4v117Ev");}
void  S3350C2_nt ::v118(){vfunc_called(this, "_ZN10S3350C2_nt4v118Ev");}
void  S3350C2_nt ::v119(){vfunc_called(this, "_ZN10S3350C2_nt4v119Ev");}
void  S3350C2_nt ::v120(){vfunc_called(this, "_ZN10S3350C2_nt4v120Ev");}
void  S3350C2_nt ::v121(){vfunc_called(this, "_ZN10S3350C2_nt4v121Ev");}
void  S3350C2_nt ::v122(){vfunc_called(this, "_ZN10S3350C2_nt4v122Ev");}
void  S3350C2_nt ::v123(){vfunc_called(this, "_ZN10S3350C2_nt4v123Ev");}
void  S3350C2_nt ::v124(){vfunc_called(this, "_ZN10S3350C2_nt4v124Ev");}
void  S3350C2_nt ::v125(){vfunc_called(this, "_ZN10S3350C2_nt4v125Ev");}
void  S3350C2_nt ::v126(){vfunc_called(this, "_ZN10S3350C2_nt4v126Ev");}
void  S3350C2_nt ::v127(){vfunc_called(this, "_ZN10S3350C2_nt4v127Ev");}
void  S3350C2_nt ::v128(){vfunc_called(this, "_ZN10S3350C2_nt4v128Ev");}
void  S3350C2_nt ::v129(){vfunc_called(this, "_ZN10S3350C2_nt4v129Ev");}
void  S3350C2_nt ::v130(){vfunc_called(this, "_ZN10S3350C2_nt4v130Ev");}
void  S3350C2_nt ::v131(){vfunc_called(this, "_ZN10S3350C2_nt4v131Ev");}
void  S3350C2_nt ::v132(){vfunc_called(this, "_ZN10S3350C2_nt4v132Ev");}
void  S3350C2_nt ::v133(){vfunc_called(this, "_ZN10S3350C2_nt4v133Ev");}
void  S3350C2_nt ::v134(){vfunc_called(this, "_ZN10S3350C2_nt4v134Ev");}
void  S3350C2_nt ::v135(){vfunc_called(this, "_ZN10S3350C2_nt4v135Ev");}
void  S3350C2_nt ::v136(){vfunc_called(this, "_ZN10S3350C2_nt4v136Ev");}
void  S3350C2_nt ::v137(){vfunc_called(this, "_ZN10S3350C2_nt4v137Ev");}
void  S3350C2_nt ::v138(){vfunc_called(this, "_ZN10S3350C2_nt4v138Ev");}
void  S3350C2_nt ::v139(){vfunc_called(this, "_ZN10S3350C2_nt4v139Ev");}
void  S3350C2_nt ::v140(){vfunc_called(this, "_ZN10S3350C2_nt4v140Ev");}
void  S3350C2_nt ::v141(){vfunc_called(this, "_ZN10S3350C2_nt4v141Ev");}
void  S3350C2_nt ::v142(){vfunc_called(this, "_ZN10S3350C2_nt4v142Ev");}
void  S3350C2_nt ::v143(){vfunc_called(this, "_ZN10S3350C2_nt4v143Ev");}
void  S3350C2_nt ::v144(){vfunc_called(this, "_ZN10S3350C2_nt4v144Ev");}
void  S3350C2_nt ::v145(){vfunc_called(this, "_ZN10S3350C2_nt4v145Ev");}
void  S3350C2_nt ::v146(){vfunc_called(this, "_ZN10S3350C2_nt4v146Ev");}
void  S3350C2_nt ::v147(){vfunc_called(this, "_ZN10S3350C2_nt4v147Ev");}
void  S3350C2_nt ::v148(){vfunc_called(this, "_ZN10S3350C2_nt4v148Ev");}
void  S3350C2_nt ::v149(){vfunc_called(this, "_ZN10S3350C2_nt4v149Ev");}
void  S3350C2_nt ::v150(){vfunc_called(this, "_ZN10S3350C2_nt4v150Ev");}
void  S3350C2_nt ::v151(){vfunc_called(this, "_ZN10S3350C2_nt4v151Ev");}
void  S3350C2_nt ::v152(){vfunc_called(this, "_ZN10S3350C2_nt4v152Ev");}
void  S3350C2_nt ::v153(){vfunc_called(this, "_ZN10S3350C2_nt4v153Ev");}
void  S3350C2_nt ::v154(){vfunc_called(this, "_ZN10S3350C2_nt4v154Ev");}
void  S3350C2_nt ::v155(){vfunc_called(this, "_ZN10S3350C2_nt4v155Ev");}
void  S3350C2_nt ::v156(){vfunc_called(this, "_ZN10S3350C2_nt4v156Ev");}
void  S3350C2_nt ::v157(){vfunc_called(this, "_ZN10S3350C2_nt4v157Ev");}
void  S3350C2_nt ::v158(){vfunc_called(this, "_ZN10S3350C2_nt4v158Ev");}
void  S3350C2_nt ::v159(){vfunc_called(this, "_ZN10S3350C2_nt4v159Ev");}
void  S3350C2_nt ::v160(){vfunc_called(this, "_ZN10S3350C2_nt4v160Ev");}
void  S3350C2_nt ::v161(){vfunc_called(this, "_ZN10S3350C2_nt4v161Ev");}
void  S3350C2_nt ::v162(){vfunc_called(this, "_ZN10S3350C2_nt4v162Ev");}
void  S3350C2_nt ::v163(){vfunc_called(this, "_ZN10S3350C2_nt4v163Ev");}
void  S3350C2_nt ::v164(){vfunc_called(this, "_ZN10S3350C2_nt4v164Ev");}
void  S3350C2_nt ::v165(){vfunc_called(this, "_ZN10S3350C2_nt4v165Ev");}
void  S3350C2_nt ::v166(){vfunc_called(this, "_ZN10S3350C2_nt4v166Ev");}
void  S3350C2_nt ::v167(){vfunc_called(this, "_ZN10S3350C2_nt4v167Ev");}
void  S3350C2_nt ::v168(){vfunc_called(this, "_ZN10S3350C2_nt4v168Ev");}
void  S3350C2_nt ::v169(){vfunc_called(this, "_ZN10S3350C2_nt4v169Ev");}
void  S3350C2_nt ::v170(){vfunc_called(this, "_ZN10S3350C2_nt4v170Ev");}
void  S3350C2_nt ::v171(){vfunc_called(this, "_ZN10S3350C2_nt4v171Ev");}
void  S3350C2_nt ::v172(){vfunc_called(this, "_ZN10S3350C2_nt4v172Ev");}
void  S3350C2_nt ::v173(){vfunc_called(this, "_ZN10S3350C2_nt4v173Ev");}
void  S3350C2_nt ::v174(){vfunc_called(this, "_ZN10S3350C2_nt4v174Ev");}
void  S3350C2_nt ::v175(){vfunc_called(this, "_ZN10S3350C2_nt4v175Ev");}
void  S3350C2_nt ::v176(){vfunc_called(this, "_ZN10S3350C2_nt4v176Ev");}
void  S3350C2_nt ::v177(){vfunc_called(this, "_ZN10S3350C2_nt4v177Ev");}
void  S3350C2_nt ::v178(){vfunc_called(this, "_ZN10S3350C2_nt4v178Ev");}
void  S3350C2_nt ::v179(){vfunc_called(this, "_ZN10S3350C2_nt4v179Ev");}
void  S3350C2_nt ::v180(){vfunc_called(this, "_ZN10S3350C2_nt4v180Ev");}
void  S3350C2_nt ::v181(){vfunc_called(this, "_ZN10S3350C2_nt4v181Ev");}
void  S3350C2_nt ::v182(){vfunc_called(this, "_ZN10S3350C2_nt4v182Ev");}
void  S3350C2_nt ::v183(){vfunc_called(this, "_ZN10S3350C2_nt4v183Ev");}
void  S3350C2_nt ::v184(){vfunc_called(this, "_ZN10S3350C2_nt4v184Ev");}
void  S3350C2_nt ::v185(){vfunc_called(this, "_ZN10S3350C2_nt4v185Ev");}
void  S3350C2_nt ::v186(){vfunc_called(this, "_ZN10S3350C2_nt4v186Ev");}
void  S3350C2_nt ::v187(){vfunc_called(this, "_ZN10S3350C2_nt4v187Ev");}
void  S3350C2_nt ::v188(){vfunc_called(this, "_ZN10S3350C2_nt4v188Ev");}
void  S3350C2_nt ::v189(){vfunc_called(this, "_ZN10S3350C2_nt4v189Ev");}
void  S3350C2_nt ::v190(){vfunc_called(this, "_ZN10S3350C2_nt4v190Ev");}
void  S3350C2_nt ::v191(){vfunc_called(this, "_ZN10S3350C2_nt4v191Ev");}
void  S3350C2_nt ::v192(){vfunc_called(this, "_ZN10S3350C2_nt4v192Ev");}
void  S3350C2_nt ::v193(){vfunc_called(this, "_ZN10S3350C2_nt4v193Ev");}
void  S3350C2_nt ::v194(){vfunc_called(this, "_ZN10S3350C2_nt4v194Ev");}
void  S3350C2_nt ::v195(){vfunc_called(this, "_ZN10S3350C2_nt4v195Ev");}
void  S3350C2_nt ::v196(){vfunc_called(this, "_ZN10S3350C2_nt4v196Ev");}
void  S3350C2_nt ::v197(){vfunc_called(this, "_ZN10S3350C2_nt4v197Ev");}
void  S3350C2_nt ::v198(){vfunc_called(this, "_ZN10S3350C2_nt4v198Ev");}
void  S3350C2_nt ::v199(){vfunc_called(this, "_ZN10S3350C2_nt4v199Ev");}
void  S3350C2_nt ::v200(){vfunc_called(this, "_ZN10S3350C2_nt4v200Ev");}
void  S3350C2_nt ::v201(){vfunc_called(this, "_ZN10S3350C2_nt4v201Ev");}
void  S3350C2_nt ::v202(){vfunc_called(this, "_ZN10S3350C2_nt4v202Ev");}
void  S3350C2_nt ::v203(){vfunc_called(this, "_ZN10S3350C2_nt4v203Ev");}
void  S3350C2_nt ::v204(){vfunc_called(this, "_ZN10S3350C2_nt4v204Ev");}
void  S3350C2_nt ::v205(){vfunc_called(this, "_ZN10S3350C2_nt4v205Ev");}
void  S3350C2_nt ::v206(){vfunc_called(this, "_ZN10S3350C2_nt4v206Ev");}
void  S3350C2_nt ::v207(){vfunc_called(this, "_ZN10S3350C2_nt4v207Ev");}
void  S3350C2_nt ::v208(){vfunc_called(this, "_ZN10S3350C2_nt4v208Ev");}
void  S3350C2_nt ::v209(){vfunc_called(this, "_ZN10S3350C2_nt4v209Ev");}
void  S3350C2_nt ::v210(){vfunc_called(this, "_ZN10S3350C2_nt4v210Ev");}
void  S3350C2_nt ::v211(){vfunc_called(this, "_ZN10S3350C2_nt4v211Ev");}
void  S3350C2_nt ::v212(){vfunc_called(this, "_ZN10S3350C2_nt4v212Ev");}
S3350C2_nt ::S3350C2_nt(){ note_ctor("S3350C2_nt", this);} // tgen

//skip512 S3350C2_nt

#else // __cplusplus

extern void _ZN10S3350C2_ntC1Ev();
extern void _ZN10S3350C2_ntD1Ev();
Name_Map name_map_S3350C2_nt[] = {
  NSPAIR(_ZN10S3350C2_ntC1Ev),
  NSPAIR(_ZN10S3350C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3350C3_nt;
extern VTBL_ENTRY _ZTI10S3350C3_nt[];
extern  VTBL_ENTRY _ZTV10S3350C3_nt[];
static Base_Class bases_S3350C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3350C3_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 _ZTI10S3350C2_nt[];
extern void _ZN10S3350C2_ntD1Ev();
extern void _ZN10S3350C2_ntD0Ev();
extern void _ZN10S3350C3_nt2v6Ev();
extern void _ZN10S3350C3_nt2v7Ev();
extern void _ZN10S3350C3_nt2v8Ev();
extern void _ZN10S3350C3_nt2v9Ev();
extern void _ZN10S3350C3_nt3v10Ev();
extern void _ZN10S3350C3_nt3v11Ev();
extern void _ZN10S3350C3_nt3v12Ev();
extern void _ZN10S3350C3_nt3v13Ev();
extern void _ZN10S3350C3_nt3v14Ev();
extern void _ZN10S3350C3_nt3v15Ev();
extern void _ZN10S3350C3_nt3v16Ev();
extern void _ZN10S3350C3_nt3v17Ev();
extern void _ZN10S3350C3_nt3v18Ev();
extern void _ZN10S3350C3_nt3v19Ev();
extern void _ZN10S3350C3_nt3v20Ev();
extern void _ZN10S3350C3_nt3v21Ev();
extern void _ZN10S3350C3_nt3v22Ev();
extern void _ZN10S3350C3_nt3v23Ev();
extern void _ZN10S3350C3_nt3v24Ev();
extern void _ZN10S3350C3_nt3v25Ev();
extern void _ZN10S3350C3_nt3v26Ev();
extern void _ZN10S3350C3_nt3v27Ev();
extern void _ZN10S3350C3_nt3v28Ev();
extern void _ZN10S3350C3_nt3v29Ev();
extern void _ZN10S3350C3_nt3v30Ev();
extern void _ZN10S3350C3_nt3v31Ev();
extern void _ZN10S3350C3_nt3v32Ev();
extern void _ZN10S3350C3_nt3v33Ev();
extern void _ZN10S3350C3_nt3v34Ev();
extern void _ZN10S3350C3_nt3v35Ev();
extern void _ZN10S3350C3_nt3v36Ev();
extern void _ZN10S3350C3_nt3v37Ev();
extern void _ZN10S3350C3_nt3v38Ev();
extern void _ZN10S3350C3_nt3v39Ev();
extern void _ZN10S3350C3_nt3v40Ev();
extern void _ZN10S3350C3_nt3v41Ev();
extern void _ZN10S3350C3_nt3v42Ev();
extern void _ZN10S3350C3_nt3v43Ev();
extern void _ZN10S3350C3_nt3v44Ev();
extern void _ZN10S3350C3_nt3v45Ev();
extern void _ZN10S3350C3_nt3v46Ev();
extern void _ZN10S3350C3_nt3v47Ev();
extern void _ZN10S3350C3_nt3v48Ev();
extern void _ZN10S3350C3_nt3v49Ev();
extern void _ZN10S3350C3_nt3v50Ev();
extern void _ZN10S3350C3_nt3v51Ev();
extern void _ZN10S3350C3_nt3v52Ev();
extern void _ZN10S3350C3_nt3v53Ev();
extern void _ZN10S3350C3_nt3v54Ev();
extern void _ZN10S3350C3_nt3v55Ev();
extern void _ZN10S3350C3_nt3v56Ev();
extern void _ZN10S3350C3_nt3v57Ev();
extern void _ZN10S3350C3_nt3v58Ev();
extern void _ZN10S3350C3_nt3v59Ev();
extern void _ZN10S3350C3_nt3v60Ev();
extern void _ZN10S3350C3_nt3v61Ev();
extern void _ZN10S3350C3_nt3v62Ev();
extern void _ZN10S3350C3_nt3v63Ev();
extern void _ZN10S3350C3_nt3v64Ev();
extern void _ZN10S3350C3_nt3v65Ev();
extern void _ZN10S3350C3_nt3v66Ev();
extern void _ZN10S3350C3_nt3v67Ev();
extern void _ZN10S3350C3_nt3v68Ev();
extern void _ZN10S3350C3_nt3v69Ev();
extern void _ZN10S3350C2_nt3v70Ev();
extern void _ZN10S3350C2_nt3v71Ev();
extern void _ZN10S3350C2_nt3v72Ev();
extern void _ZN10S3350C2_nt3v73Ev();
extern void _ZN10S3350C2_nt3v74Ev();
extern void _ZN10S3350C2_nt3v75Ev();
extern void _ZN10S3350C2_nt3v76Ev();
extern void _ZN10S3350C2_nt3v77Ev();
extern void _ZN10S3350C2_nt3v78Ev();
extern void _ZN10S3350C2_nt3v79Ev();
extern void _ZN10S3350C2_nt3v80Ev();
extern void _ZN10S3350C2_nt3v81Ev();
extern void _ZN10S3350C2_nt3v82Ev();
extern void _ZN10S3350C2_nt3v83Ev();
extern void _ZN10S3350C2_nt3v84Ev();
extern void _ZN10S3350C2_nt3v85Ev();
extern void _ZN10S3350C2_nt3v86Ev();
extern void _ZN10S3350C2_nt3v87Ev();
extern void _ZN10S3350C2_nt3v88Ev();
extern void _ZN10S3350C2_nt3v89Ev();
extern void _ZN10S3350C2_nt3v90Ev();
extern void _ZN10S3350C2_nt3v91Ev();
extern void _ZN10S3350C2_nt3v92Ev();
extern void _ZN10S3350C2_nt3v93Ev();
extern void _ZN10S3350C2_nt3v94Ev();
extern void _ZN10S3350C2_nt3v95Ev();
extern void _ZN10S3350C2_nt3v96Ev();
extern void _ZN10S3350C2_nt3v97Ev();
extern void _ZN10S3350C2_nt3v98Ev();
extern void _ZN10S3350C2_nt3v99Ev();
extern void _ZN10S3350C2_nt4v100Ev();
extern void _ZN10S3350C2_nt4v101Ev();
extern void _ZN10S3350C2_nt4v102Ev();
extern void _ZN10S3350C2_nt4v103Ev();
extern void _ZN10S3350C2_nt4v104Ev();
extern void _ZN10S3350C2_nt4v105Ev();
extern void _ZN10S3350C2_nt4v106Ev();
extern void _ZN10S3350C2_nt4v107Ev();
extern void _ZN10S3350C2_nt4v108Ev();
extern void _ZN10S3350C2_nt4v109Ev();
extern void _ZN10S3350C2_nt4v110Ev();
extern void _ZN10S3350C2_nt4v111Ev();
extern void _ZN10S3350C2_nt4v112Ev();
extern void _ZN10S3350C2_nt4v113Ev();
extern void _ZN10S3350C2_nt4v114Ev();
extern void _ZN10S3350C2_nt4v115Ev();
extern void _ZN10S3350C2_nt4v116Ev();
extern void _ZN10S3350C2_nt4v117Ev();
extern void _ZN10S3350C2_nt4v118Ev();
extern void _ZN10S3350C2_nt4v119Ev();
extern void _ZN10S3350C2_nt4v120Ev();
extern void _ZN10S3350C2_nt4v121Ev();
extern void _ZN10S3350C2_nt4v122Ev();
extern void _ZN10S3350C2_nt4v123Ev();
extern void _ZN10S3350C2_nt4v124Ev();
extern void _ZN10S3350C2_nt4v125Ev();
extern void _ZN10S3350C2_nt4v126Ev();
extern void _ZN10S3350C2_nt4v127Ev();
extern void _ZN10S3350C2_nt4v128Ev();
extern void _ZN10S3350C2_nt4v129Ev();
extern void _ZN10S3350C2_nt4v130Ev();
extern void _ZN10S3350C2_nt4v131Ev();
extern void _ZN10S3350C2_nt4v132Ev();
extern void _ZN10S3350C2_nt4v133Ev();
extern void _ZN10S3350C2_nt4v134Ev();
extern void _ZN10S3350C2_nt4v135Ev();
extern void _ZN10S3350C2_nt4v136Ev();
extern void _ZN10S3350C2_nt4v137Ev();
extern void _ZN10S3350C2_nt4v138Ev();
extern void _ZN10S3350C2_nt4v139Ev();
extern void _ZN10S3350C2_nt4v140Ev();
extern void _ZN10S3350C2_nt4v141Ev();
extern void _ZN10S3350C2_nt4v142Ev();
extern void _ZN10S3350C2_nt4v143Ev();
extern void _ZN10S3350C2_nt4v144Ev();
extern void _ZN10S3350C2_nt4v145Ev();
extern void _ZN10S3350C2_nt4v146Ev();
extern void _ZN10S3350C2_nt4v147Ev();
extern void _ZN10S3350C2_nt4v148Ev();
extern void _ZN10S3350C2_nt4v149Ev();
extern void _ZN10S3350C2_nt4v150Ev();
extern void _ZN10S3350C2_nt4v151Ev();
extern void _ZN10S3350C2_nt4v152Ev();
extern void _ZN10S3350C2_nt4v153Ev();
extern void _ZN10S3350C2_nt4v154Ev();
extern void _ZN10S3350C2_nt4v155Ev();
extern void _ZN10S3350C2_nt4v156Ev();
extern void _ZN10S3350C2_nt4v157Ev();
extern void _ZN10S3350C2_nt4v158Ev();
extern void _ZN10S3350C2_nt4v159Ev();
extern void _ZN10S3350C2_nt4v160Ev();
extern void _ZN10S3350C2_nt4v161Ev();
extern void _ZN10S3350C2_nt4v162Ev();
extern void _ZN10S3350C2_nt4v163Ev();
extern void _ZN10S3350C2_nt4v164Ev();
extern void _ZN10S3350C2_nt4v165Ev();
extern void _ZN10S3350C2_nt4v166Ev();
extern void _ZN10S3350C2_nt4v167Ev();
extern void _ZN10S3350C2_nt4v168Ev();
extern void _ZN10S3350C2_nt4v169Ev();
extern void _ZN10S3350C2_nt4v170Ev();
extern void _ZN10S3350C2_nt4v171Ev();
extern void _ZN10S3350C2_nt4v172Ev();
extern void _ZN10S3350C2_nt4v173Ev();
extern void _ZN10S3350C2_nt4v174Ev();
extern void _ZN10S3350C2_nt4v175Ev();
extern void _ZN10S3350C2_nt4v176Ev();
extern void _ZN10S3350C2_nt4v177Ev();
extern void _ZN10S3350C2_nt4v178Ev();
extern void _ZN10S3350C2_nt4v179Ev();
extern void _ZN10S3350C2_nt4v180Ev();
extern void _ZN10S3350C2_nt4v181Ev();
extern void _ZN10S3350C2_nt4v182Ev();
extern void _ZN10S3350C2_nt4v183Ev();
extern void _ZN10S3350C2_nt4v184Ev();
extern void _ZN10S3350C2_nt4v185Ev();
extern void _ZN10S3350C2_nt4v186Ev();
extern void _ZN10S3350C2_nt4v187Ev();
extern void _ZN10S3350C2_nt4v188Ev();
extern void _ZN10S3350C2_nt4v189Ev();
extern void _ZN10S3350C2_nt4v190Ev();
extern void _ZN10S3350C2_nt4v191Ev();
extern void _ZN10S3350C2_nt4v192Ev();
extern void _ZN10S3350C2_nt4v193Ev();
extern void _ZN10S3350C2_nt4v194Ev();
extern void _ZN10S3350C2_nt4v195Ev();
extern void _ZN10S3350C2_nt4v196Ev();
extern void _ZN10S3350C2_nt4v197Ev();
extern void _ZN10S3350C2_nt4v198Ev();
extern void _ZN10S3350C2_nt4v199Ev();
extern void _ZN10S3350C2_nt4v200Ev();
extern void _ZN10S3350C2_nt4v201Ev();
extern void _ZN10S3350C2_nt4v202Ev();
extern void _ZN10S3350C2_nt4v203Ev();
extern void _ZN10S3350C2_nt4v204Ev();
extern void _ZN10S3350C2_nt4v205Ev();
extern void _ZN10S3350C2_nt4v206Ev();
extern void _ZN10S3350C2_nt4v207Ev();
extern void _ZN10S3350C2_nt4v208Ev();
extern void _ZN10S3350C2_nt4v209Ev();
extern void _ZN10S3350C2_nt4v210Ev();
extern void _ZN10S3350C2_nt4v211Ev();
extern void _ZN10S3350C2_nt4v212Ev();
static  VTBL_ENTRY vtc_S3350C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3350C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S3350C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v102Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v103Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v104Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v105Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v106Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v107Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v108Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v109Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v110Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v111Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v112Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v113Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v114Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v115Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v116Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v117Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v118Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v119Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v120Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v121Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v122Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v123Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v124Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v125Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v126Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v127Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v128Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v129Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v130Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v131Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v132Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v133Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v134Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v135Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v136Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v137Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v138Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v139Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v140Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v141Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v142Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v143Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v144Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v145Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v146Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v147Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v148Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v149Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v150Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v151Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v152Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v153Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v154Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v155Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v156Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v157Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v158Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v159Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v160Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v161Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v162Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v163Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v164Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v165Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v166Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v167Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v168Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v169Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v170Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v171Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v172Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v173Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v174Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v175Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v176Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v177Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v178Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v179Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v180Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v181Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v182Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v183Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v184Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v185Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v186Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v187Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v188Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v189Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v190Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v191Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v192Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v193Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v194Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v195Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v196Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v197Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v198Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v199Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v200Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v201Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v202Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v203Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v204Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v205Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v206Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v207Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v208Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v209Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v210Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v211Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v212Ev,
};
extern VTBL_ENTRY _ZTI10S3350C2_nt[];
VTBL_ENTRY *P__ZTI10S3350C2_nt = _ZTI10S3350C2_nt; 
extern  VTBL_ENTRY _ZTV10S3350C2_nt[];
Class_Descriptor cd_S3350C2_nt = {  "S3350C2_nt", // class name
  bases_S3350C2_nt, 1,
  &(vtc_S3350C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(568,436), // object size
  NSPAIRA(_ZTI10S3350C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S3350C2_nt),211, //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  S3350C21_nt  {
  void *s3350c21f0;
  ::S3350C4_nt s3350c21f1;
  void  mf3350c21(); // _ZN11S3350C21_nt9mf3350c21Ev
};
//SIG(-1 S3350C21_nt) C1{ m Fp FC2{ m Fi[2]}}


void  S3350C21_nt ::mf3350c21(){}

//skip512 S3350C21_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3350C1  : S3350C2_nt {
  void *s3350c1f0;
  char s3350c1f1;
  void *s3350c1f2;
  ::S3350C13_nt s3350c1f3;
  void *s3350c1f4;
  unsigned int s3350c1f5:1;
  ::S3350C21_nt s3350c1f6;
  virtual  ~S3350C1(); // _ZN7S3350C1D1Ev
  virtual void  v1(); // _ZN7S3350C12v1Ev
  virtual void  v2(); // _ZN7S3350C12v2Ev
  virtual void  v3(); // _ZN7S3350C12v3Ev
  virtual void  v4(); // _ZN7S3350C12v4Ev
  virtual void  v5(); // _ZN7S3350C12v5Ev
  S3350C1(); // tgen
};
//SIG(1 S3350C1) C1{ BC2{ BC3{ 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 FC4{ m Fi[2]} Fp[2]} vd v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 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 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 v163 v164 v165 v166 v167 v168 v169 v170 v171 v172 v173 v174 v175 v176 v177 v178 v179 v180 v181 v182 v183 v184 v185 v186 v187 v188 v189 v190 v191 v192 v193 v194 v195 v196 v197 v198 v199 v200 v201 v202 v203 v204 v205 v206 v207 v208 v209 v210 v211 v212 FC5{ BC6{ BC7{ m Fp Fi[2]}}} FC5 FC8{ m Fi} Fi Fc[4] Fp[2] FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[5] Fp[2] Fi[3] FC4 FC4 FC4 FC9{ BC10{ BC7}} FC9 Fi Fp[2] FC11{ m Fi[3]} FC11 FC11 FC11 Fp FC4 FC9 FC11 FC11 Fi FC11 FC11 Fp Fi Fc FC11 FC11 Fp Fi Fp FC9 FC12{ BC13{ BC7}} FC12} vd v1 v2 v3 v4 v5 Fp Fc Fp FC11 Fp Fi:1 FC14{ m Fp FC4}}


 S3350C1 ::~S3350C1(){ note_dtor("S3350C1", this);}
void  S3350C1 ::v1(){vfunc_called(this, "_ZN7S3350C12v1Ev");}
void  S3350C1 ::v2(){vfunc_called(this, "_ZN7S3350C12v2Ev");}
void  S3350C1 ::v3(){vfunc_called(this, "_ZN7S3350C12v3Ev");}
void  S3350C1 ::v4(){vfunc_called(this, "_ZN7S3350C12v4Ev");}
void  S3350C1 ::v5(){vfunc_called(this, "_ZN7S3350C12v5Ev");}
S3350C1 ::S3350C1(){ note_ctor("S3350C1", this);} // tgen

static void Test_S3350C1()
{
  extern Class_Descriptor cd_S3350C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(81,121)];
    init_test(&cd_S3350C1, buf);
    S3350C1 *dp, &lv = *(dp=new (buf) S3350C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(640,480), "sizeof(S3350C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3350C1)");
    check_base_class_offset(lv, (S3350C3_nt*)(S3350C2_nt*), 0, "S3350C1");
    check_base_class_offset(lv, (S3350C2_nt*), 0, "S3350C1");
    check_field_offset(lv, s3350c1f0, ABISELECT(568,436), "S3350C1.s3350c1f0");
    check_field_offset(lv, s3350c1f1, ABISELECT(576,440), "S3350C1.s3350c1f1");
    check_field_offset(lv, s3350c1f2, ABISELECT(584,444), "S3350C1.s3350c1f2");
    check_field_offset(lv, s3350c1f3, ABISELECT(592,448), "S3350C1.s3350c1f3");
    check_field_offset(lv, s3350c1f4, ABISELECT(608,460), "S3350C1.s3350c1f4");
    set_bf_and_test(lv, s3350c1f5, ABISELECT(616,464), 0, 1, 1, "S3350C1");
    check_field_offset(lv, s3350c1f6, ABISELECT(624,468), "S3350C1.s3350c1f6");
    test_class_info(&lv, &cd_S3350C1);
    dp->~S3350C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3350C1(Test_S3350C1, "S3350C1", ABISELECT(640,480));

#else // __cplusplus

extern void _ZN7S3350C1C1Ev();
extern void _ZN7S3350C1D1Ev();
Name_Map name_map_S3350C1[] = {
  NSPAIR(_ZN7S3350C1C1Ev),
  NSPAIR(_ZN7S3350C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3350C3_nt;
extern VTBL_ENTRY _ZTI10S3350C3_nt[];
extern  VTBL_ENTRY _ZTV10S3350C3_nt[];
extern Class_Descriptor cd_S3350C2_nt;
extern VTBL_ENTRY _ZTI10S3350C2_nt[];
extern  VTBL_ENTRY _ZTV10S3350C2_nt[];
static Base_Class bases_S3350C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3350C3_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_S3350C2_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 _ZTI7S3350C1[];
extern void _ZN7S3350C1D1Ev();
extern void _ZN7S3350C1D0Ev();
extern void _ZN10S3350C3_nt2v6Ev();
extern void _ZN10S3350C3_nt2v7Ev();
extern void _ZN10S3350C3_nt2v8Ev();
extern void _ZN10S3350C3_nt2v9Ev();
extern void _ZN10S3350C3_nt3v10Ev();
extern void _ZN10S3350C3_nt3v11Ev();
extern void _ZN10S3350C3_nt3v12Ev();
extern void _ZN10S3350C3_nt3v13Ev();
extern void _ZN10S3350C3_nt3v14Ev();
extern void _ZN10S3350C3_nt3v15Ev();
extern void _ZN10S3350C3_nt3v16Ev();
extern void _ZN10S3350C3_nt3v17Ev();
extern void _ZN10S3350C3_nt3v18Ev();
extern void _ZN10S3350C3_nt3v19Ev();
extern void _ZN10S3350C3_nt3v20Ev();
extern void _ZN10S3350C3_nt3v21Ev();
extern void _ZN10S3350C3_nt3v22Ev();
extern void _ZN10S3350C3_nt3v23Ev();
extern void _ZN10S3350C3_nt3v24Ev();
extern void _ZN10S3350C3_nt3v25Ev();
extern void _ZN10S3350C3_nt3v26Ev();
extern void _ZN10S3350C3_nt3v27Ev();
extern void _ZN10S3350C3_nt3v28Ev();
extern void _ZN10S3350C3_nt3v29Ev();
extern void _ZN10S3350C3_nt3v30Ev();
extern void _ZN10S3350C3_nt3v31Ev();
extern void _ZN10S3350C3_nt3v32Ev();
extern void _ZN10S3350C3_nt3v33Ev();
extern void _ZN10S3350C3_nt3v34Ev();
extern void _ZN10S3350C3_nt3v35Ev();
extern void _ZN10S3350C3_nt3v36Ev();
extern void _ZN10S3350C3_nt3v37Ev();
extern void _ZN10S3350C3_nt3v38Ev();
extern void _ZN10S3350C3_nt3v39Ev();
extern void _ZN10S3350C3_nt3v40Ev();
extern void _ZN10S3350C3_nt3v41Ev();
extern void _ZN10S3350C3_nt3v42Ev();
extern void _ZN10S3350C3_nt3v43Ev();
extern void _ZN10S3350C3_nt3v44Ev();
extern void _ZN10S3350C3_nt3v45Ev();
extern void _ZN10S3350C3_nt3v46Ev();
extern void _ZN10S3350C3_nt3v47Ev();
extern void _ZN10S3350C3_nt3v48Ev();
extern void _ZN10S3350C3_nt3v49Ev();
extern void _ZN10S3350C3_nt3v50Ev();
extern void _ZN10S3350C3_nt3v51Ev();
extern void _ZN10S3350C3_nt3v52Ev();
extern void _ZN10S3350C3_nt3v53Ev();
extern void _ZN10S3350C3_nt3v54Ev();
extern void _ZN10S3350C3_nt3v55Ev();
extern void _ZN10S3350C3_nt3v56Ev();
extern void _ZN10S3350C3_nt3v57Ev();
extern void _ZN10S3350C3_nt3v58Ev();
extern void _ZN10S3350C3_nt3v59Ev();
extern void _ZN10S3350C3_nt3v60Ev();
extern void _ZN10S3350C3_nt3v61Ev();
extern void _ZN10S3350C3_nt3v62Ev();
extern void _ZN10S3350C3_nt3v63Ev();
extern void _ZN10S3350C3_nt3v64Ev();
extern void _ZN10S3350C3_nt3v65Ev();
extern void _ZN10S3350C3_nt3v66Ev();
extern void _ZN10S3350C3_nt3v67Ev();
extern void _ZN10S3350C3_nt3v68Ev();
extern void _ZN10S3350C3_nt3v69Ev();
extern void _ZN10S3350C2_nt3v70Ev();
extern void _ZN10S3350C2_nt3v71Ev();
extern void _ZN10S3350C2_nt3v72Ev();
extern void _ZN10S3350C2_nt3v73Ev();
extern void _ZN10S3350C2_nt3v74Ev();
extern void _ZN10S3350C2_nt3v75Ev();
extern void _ZN10S3350C2_nt3v76Ev();
extern void _ZN10S3350C2_nt3v77Ev();
extern void _ZN10S3350C2_nt3v78Ev();
extern void _ZN10S3350C2_nt3v79Ev();
extern void _ZN10S3350C2_nt3v80Ev();
extern void _ZN10S3350C2_nt3v81Ev();
extern void _ZN10S3350C2_nt3v82Ev();
extern void _ZN10S3350C2_nt3v83Ev();
extern void _ZN10S3350C2_nt3v84Ev();
extern void _ZN10S3350C2_nt3v85Ev();
extern void _ZN10S3350C2_nt3v86Ev();
extern void _ZN10S3350C2_nt3v87Ev();
extern void _ZN10S3350C2_nt3v88Ev();
extern void _ZN10S3350C2_nt3v89Ev();
extern void _ZN10S3350C2_nt3v90Ev();
extern void _ZN10S3350C2_nt3v91Ev();
extern void _ZN10S3350C2_nt3v92Ev();
extern void _ZN10S3350C2_nt3v93Ev();
extern void _ZN10S3350C2_nt3v94Ev();
extern void _ZN10S3350C2_nt3v95Ev();
extern void _ZN10S3350C2_nt3v96Ev();
extern void _ZN10S3350C2_nt3v97Ev();
extern void _ZN10S3350C2_nt3v98Ev();
extern void _ZN10S3350C2_nt3v99Ev();
extern void _ZN10S3350C2_nt4v100Ev();
extern void _ZN10S3350C2_nt4v101Ev();
extern void _ZN10S3350C2_nt4v102Ev();
extern void _ZN10S3350C2_nt4v103Ev();
extern void _ZN10S3350C2_nt4v104Ev();
extern void _ZN10S3350C2_nt4v105Ev();
extern void _ZN10S3350C2_nt4v106Ev();
extern void _ZN10S3350C2_nt4v107Ev();
extern void _ZN10S3350C2_nt4v108Ev();
extern void _ZN10S3350C2_nt4v109Ev();
extern void _ZN10S3350C2_nt4v110Ev();
extern void _ZN10S3350C2_nt4v111Ev();
extern void _ZN10S3350C2_nt4v112Ev();
extern void _ZN10S3350C2_nt4v113Ev();
extern void _ZN10S3350C2_nt4v114Ev();
extern void _ZN10S3350C2_nt4v115Ev();
extern void _ZN10S3350C2_nt4v116Ev();
extern void _ZN10S3350C2_nt4v117Ev();
extern void _ZN10S3350C2_nt4v118Ev();
extern void _ZN10S3350C2_nt4v119Ev();
extern void _ZN10S3350C2_nt4v120Ev();
extern void _ZN10S3350C2_nt4v121Ev();
extern void _ZN10S3350C2_nt4v122Ev();
extern void _ZN10S3350C2_nt4v123Ev();
extern void _ZN10S3350C2_nt4v124Ev();
extern void _ZN10S3350C2_nt4v125Ev();
extern void _ZN10S3350C2_nt4v126Ev();
extern void _ZN10S3350C2_nt4v127Ev();
extern void _ZN10S3350C2_nt4v128Ev();
extern void _ZN10S3350C2_nt4v129Ev();
extern void _ZN10S3350C2_nt4v130Ev();
extern void _ZN10S3350C2_nt4v131Ev();
extern void _ZN10S3350C2_nt4v132Ev();
extern void _ZN10S3350C2_nt4v133Ev();
extern void _ZN10S3350C2_nt4v134Ev();
extern void _ZN10S3350C2_nt4v135Ev();
extern void _ZN10S3350C2_nt4v136Ev();
extern void _ZN10S3350C2_nt4v137Ev();
extern void _ZN10S3350C2_nt4v138Ev();
extern void _ZN10S3350C2_nt4v139Ev();
extern void _ZN10S3350C2_nt4v140Ev();
extern void _ZN10S3350C2_nt4v141Ev();
extern void _ZN10S3350C2_nt4v142Ev();
extern void _ZN10S3350C2_nt4v143Ev();
extern void _ZN10S3350C2_nt4v144Ev();
extern void _ZN10S3350C2_nt4v145Ev();
extern void _ZN10S3350C2_nt4v146Ev();
extern void _ZN10S3350C2_nt4v147Ev();
extern void _ZN10S3350C2_nt4v148Ev();
extern void _ZN10S3350C2_nt4v149Ev();
extern void _ZN10S3350C2_nt4v150Ev();
extern void _ZN10S3350C2_nt4v151Ev();
extern void _ZN10S3350C2_nt4v152Ev();
extern void _ZN10S3350C2_nt4v153Ev();
extern void _ZN10S3350C2_nt4v154Ev();
extern void _ZN10S3350C2_nt4v155Ev();
extern void _ZN10S3350C2_nt4v156Ev();
extern void _ZN10S3350C2_nt4v157Ev();
extern void _ZN10S3350C2_nt4v158Ev();
extern void _ZN10S3350C2_nt4v159Ev();
extern void _ZN10S3350C2_nt4v160Ev();
extern void _ZN10S3350C2_nt4v161Ev();
extern void _ZN10S3350C2_nt4v162Ev();
extern void _ZN10S3350C2_nt4v163Ev();
extern void _ZN10S3350C2_nt4v164Ev();
extern void _ZN10S3350C2_nt4v165Ev();
extern void _ZN10S3350C2_nt4v166Ev();
extern void _ZN10S3350C2_nt4v167Ev();
extern void _ZN10S3350C2_nt4v168Ev();
extern void _ZN10S3350C2_nt4v169Ev();
extern void _ZN10S3350C2_nt4v170Ev();
extern void _ZN10S3350C2_nt4v171Ev();
extern void _ZN10S3350C2_nt4v172Ev();
extern void _ZN10S3350C2_nt4v173Ev();
extern void _ZN10S3350C2_nt4v174Ev();
extern void _ZN10S3350C2_nt4v175Ev();
extern void _ZN10S3350C2_nt4v176Ev();
extern void _ZN10S3350C2_nt4v177Ev();
extern void _ZN10S3350C2_nt4v178Ev();
extern void _ZN10S3350C2_nt4v179Ev();
extern void _ZN10S3350C2_nt4v180Ev();
extern void _ZN10S3350C2_nt4v181Ev();
extern void _ZN10S3350C2_nt4v182Ev();
extern void _ZN10S3350C2_nt4v183Ev();
extern void _ZN10S3350C2_nt4v184Ev();
extern void _ZN10S3350C2_nt4v185Ev();
extern void _ZN10S3350C2_nt4v186Ev();
extern void _ZN10S3350C2_nt4v187Ev();
extern void _ZN10S3350C2_nt4v188Ev();
extern void _ZN10S3350C2_nt4v189Ev();
extern void _ZN10S3350C2_nt4v190Ev();
extern void _ZN10S3350C2_nt4v191Ev();
extern void _ZN10S3350C2_nt4v192Ev();
extern void _ZN10S3350C2_nt4v193Ev();
extern void _ZN10S3350C2_nt4v194Ev();
extern void _ZN10S3350C2_nt4v195Ev();
extern void _ZN10S3350C2_nt4v196Ev();
extern void _ZN10S3350C2_nt4v197Ev();
extern void _ZN10S3350C2_nt4v198Ev();
extern void _ZN10S3350C2_nt4v199Ev();
extern void _ZN10S3350C2_nt4v200Ev();
extern void _ZN10S3350C2_nt4v201Ev();
extern void _ZN10S3350C2_nt4v202Ev();
extern void _ZN10S3350C2_nt4v203Ev();
extern void _ZN10S3350C2_nt4v204Ev();
extern void _ZN10S3350C2_nt4v205Ev();
extern void _ZN10S3350C2_nt4v206Ev();
extern void _ZN10S3350C2_nt4v207Ev();
extern void _ZN10S3350C2_nt4v208Ev();
extern void _ZN10S3350C2_nt4v209Ev();
extern void _ZN10S3350C2_nt4v210Ev();
extern void _ZN10S3350C2_nt4v211Ev();
extern void _ZN10S3350C2_nt4v212Ev();
extern void _ZN7S3350C12v1Ev();
extern void _ZN7S3350C12v2Ev();
extern void _ZN7S3350C12v3Ev();
extern void _ZN7S3350C12v4Ev();
extern void _ZN7S3350C12v5Ev();
static  VTBL_ENTRY vtc_S3350C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3350C1[0]),
  (VTBL_ENTRY)&_ZN7S3350C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3350C1D0Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v102Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v103Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v104Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v105Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v106Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v107Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v108Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v109Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v110Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v111Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v112Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v113Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v114Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v115Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v116Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v117Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v118Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v119Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v120Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v121Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v122Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v123Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v124Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v125Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v126Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v127Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v128Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v129Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v130Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v131Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v132Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v133Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v134Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v135Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v136Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v137Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v138Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v139Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v140Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v141Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v142Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v143Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v144Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v145Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v146Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v147Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v148Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v149Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v150Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v151Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v152Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v153Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v154Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v155Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v156Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v157Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v158Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v159Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v160Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v161Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v162Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v163Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v164Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v165Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v166Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v167Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v168Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v169Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v170Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v171Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v172Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v173Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v174Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v175Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v176Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v177Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v178Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v179Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v180Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v181Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v182Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v183Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v184Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v185Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v186Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v187Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v188Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v189Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v190Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v191Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v192Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v193Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v194Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v195Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v196Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v197Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v198Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v199Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v200Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v201Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v202Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v203Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v204Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v205Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v206Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v207Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v208Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v209Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v210Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v211Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v212Ev,
  (VTBL_ENTRY)&_ZN7S3350C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3350C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3350C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3350C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3350C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S3350C1[];
extern  VTBL_ENTRY _ZTV7S3350C1[];
Class_Descriptor cd_S3350C1 = {  "S3350C1", // class name
  bases_S3350C1, 2,
  &(vtc_S3350C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(640,480), // object size
  NSPAIRA(_ZTI7S3350C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3350C1),216, //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  S2121C7_nt  {
  void  mf2121c7(); // _ZN10S2121C7_nt8mf2121c7Ev
};
//SIG(-1 S2121C7_nt) C1{ m}


void  S2121C7_nt ::mf2121c7(){}

//skip512 S2121C7_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2121C6_nt  {
  void *s2121c6f0;
  int s2121c6f1;
  ::S2121C7_nt s2121c6f2;
  ::S2121C7_nt s2121c6f3;
  void  mf2121c6(); // _ZN10S2121C6_nt8mf2121c6Ev
};
//SIG(-1 S2121C6_nt) C1{ m Fp Fi FC2{ m} FC2}


void  S2121C6_nt ::mf2121c6(){}

//skip512 S2121C6_nt

#else // __cplusplus

Class_Descriptor cd_S2121C6_nt = {  "S2121C6_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2121C5_nt  : S2121C6_nt {
};
//SIG(-1 S2121C5_nt) C1{ BC2{ m Fp Fi FC3{ m} FC3}}



//skip512 S2121C5_nt

#else // __cplusplus

extern Class_Descriptor cd_S2121C6_nt;
static Base_Class bases_S2121C5_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C6_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  S2121C4_nt  {
  void *s2121c4f0;
  int s2121c4f1;
  ::S2121C5_nt s2121c4f2;
  ::S2121C5_nt s2121c4f3;
  int s2121c4f4;
  virtual  ~S2121C4_nt(); // _ZN10S2121C4_ntD1Ev
  virtual void  v2(); // _ZN10S2121C4_nt2v2Ev
  virtual void  v3(); // _ZN10S2121C4_nt2v3Ev
  virtual void  v4(); // _ZN10S2121C4_nt2v4Ev
  virtual void  v5(); // _ZN10S2121C4_nt2v5Ev
  virtual void  v6(); // _ZN10S2121C4_nt2v6Ev
  virtual void  v7(); // _ZN10S2121C4_nt2v7Ev
  virtual void  v8(); // _ZN10S2121C4_nt2v8Ev
  virtual void  v9(); // _ZN10S2121C4_nt2v9Ev
  virtual void  v10(); // _ZN10S2121C4_nt3v10Ev
  virtual void  v11(); // _ZN10S2121C4_nt3v11Ev
  virtual void  v12(); // _ZN10S2121C4_nt3v12Ev
  virtual void  v13(); // _ZN10S2121C4_nt3v13Ev
  virtual void  v14(); // _ZN10S2121C4_nt3v14Ev
  virtual void  v15(); // _ZN10S2121C4_nt3v15Ev
  virtual void  v16(); // _ZN10S2121C4_nt3v16Ev
  virtual void  v17(); // _ZN10S2121C4_nt3v17Ev
  virtual void  v18(); // _ZN10S2121C4_nt3v18Ev
  virtual void  v19(); // _ZN10S2121C4_nt3v19Ev
  virtual void  v20(); // _ZN10S2121C4_nt3v20Ev
  virtual void  v21(); // _ZN10S2121C4_nt3v21Ev
  virtual void  v22(); // _ZN10S2121C4_nt3v22Ev
  virtual void  v23(); // _ZN10S2121C4_nt3v23Ev
  virtual void  v24(); // _ZN10S2121C4_nt3v24Ev
  S2121C4_nt(); // tgen
};
//SIG(-1 S2121C4_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 Fp Fi FC2{ BC3{ m Fp Fi FC4{ m} FC4}} FC2 Fi}


 S2121C4_nt ::~S2121C4_nt(){ note_dtor("S2121C4_nt", this);}
void  S2121C4_nt ::v2(){vfunc_called(this, "_ZN10S2121C4_nt2v2Ev");}
void  S2121C4_nt ::v3(){vfunc_called(this, "_ZN10S2121C4_nt2v3Ev");}
void  S2121C4_nt ::v4(){vfunc_called(this, "_ZN10S2121C4_nt2v4Ev");}
void  S2121C4_nt ::v5(){vfunc_called(this, "_ZN10S2121C4_nt2v5Ev");}
void  S2121C4_nt ::v6(){vfunc_called(this, "_ZN10S2121C4_nt2v6Ev");}
void  S2121C4_nt ::v7(){vfunc_called(this, "_ZN10S2121C4_nt2v7Ev");}
void  S2121C4_nt ::v8(){vfunc_called(this, "_ZN10S2121C4_nt2v8Ev");}
void  S2121C4_nt ::v9(){vfunc_called(this, "_ZN10S2121C4_nt2v9Ev");}
void  S2121C4_nt ::v10(){vfunc_called(this, "_ZN10S2121C4_nt3v10Ev");}
void  S2121C4_nt ::v11(){vfunc_called(this, "_ZN10S2121C4_nt3v11Ev");}
void  S2121C4_nt ::v12(){vfunc_called(this, "_ZN10S2121C4_nt3v12Ev");}
void  S2121C4_nt ::v13(){vfunc_called(this, "_ZN10S2121C4_nt3v13Ev");}
void  S2121C4_nt ::v14(){vfunc_called(this, "_ZN10S2121C4_nt3v14Ev");}
void  S2121C4_nt ::v15(){vfunc_called(this, "_ZN10S2121C4_nt3v15Ev");}
void  S2121C4_nt ::v16(){vfunc_called(this, "_ZN10S2121C4_nt3v16Ev");}
void  S2121C4_nt ::v17(){vfunc_called(this, "_ZN10S2121C4_nt3v17Ev");}
void  S2121C4_nt ::v18(){vfunc_called(this, "_ZN10S2121C4_nt3v18Ev");}
void  S2121C4_nt ::v19(){vfunc_called(this, "_ZN10S2121C4_nt3v19Ev");}
void  S2121C4_nt ::v20(){vfunc_called(this, "_ZN10S2121C4_nt3v20Ev");}
void  S2121C4_nt ::v21(){vfunc_called(this, "_ZN10S2121C4_nt3v21Ev");}
void  S2121C4_nt ::v22(){vfunc_called(this, "_ZN10S2121C4_nt3v22Ev");}
void  S2121C4_nt ::v23(){vfunc_called(this, "_ZN10S2121C4_nt3v23Ev");}
void  S2121C4_nt ::v24(){vfunc_called(this, "_ZN10S2121C4_nt3v24Ev");}
S2121C4_nt ::S2121C4_nt(){ note_ctor("S2121C4_nt", this);} // tgen

//skip512 S2121C4_nt

#else // __cplusplus

extern void _ZN10S2121C4_ntC1Ev();
extern void _ZN10S2121C4_ntD1Ev();
Name_Map name_map_S2121C4_nt[] = {
  NSPAIR(_ZN10S2121C4_ntC1Ev),
  NSPAIR(_ZN10S2121C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S2121C4_nt[];
extern void _ZN10S2121C4_ntD1Ev();
extern void _ZN10S2121C4_ntD0Ev();
extern void _ZN10S2121C4_nt2v2Ev();
extern void _ZN10S2121C4_nt2v3Ev();
extern void _ZN10S2121C4_nt2v4Ev();
extern void _ZN10S2121C4_nt2v5Ev();
extern void _ZN10S2121C4_nt2v6Ev();
extern void _ZN10S2121C4_nt2v7Ev();
extern void _ZN10S2121C4_nt2v8Ev();
extern void _ZN10S2121C4_nt2v9Ev();
extern void _ZN10S2121C4_nt3v10Ev();
extern void _ZN10S2121C4_nt3v11Ev();
extern void _ZN10S2121C4_nt3v12Ev();
extern void _ZN10S2121C4_nt3v13Ev();
extern void _ZN10S2121C4_nt3v14Ev();
extern void _ZN10S2121C4_nt3v15Ev();
extern void _ZN10S2121C4_nt3v16Ev();
extern void _ZN10S2121C4_nt3v17Ev();
extern void _ZN10S2121C4_nt3v18Ev();
extern void _ZN10S2121C4_nt3v19Ev();
extern void _ZN10S2121C4_nt3v20Ev();
extern void _ZN10S2121C4_nt3v21Ev();
extern void _ZN10S2121C4_nt3v22Ev();
extern void _ZN10S2121C4_nt3v23Ev();
extern void _ZN10S2121C4_nt3v24Ev();
static  VTBL_ENTRY vtc_S2121C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2121C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S2121C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v24Ev,
};
extern VTBL_ENTRY _ZTI10S2121C4_nt[];
VTBL_ENTRY *P__ZTI10S2121C4_nt = _ZTI10S2121C4_nt; 
extern  VTBL_ENTRY _ZTV10S2121C4_nt[];
Class_Descriptor cd_S2121C4_nt = {  "S2121C4_nt", // class name
  0,0,//no base classes
  &(vtc_S2121C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI10S2121C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S2121C4_nt),27, //virtual function table var
  2, // 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  S2121C14_nt  {
  __tsi64 s2121c14f0[2];
  void  mf2121c14(); // _ZN11S2121C14_nt9mf2121c14Ev
};
//SIG(-1 S2121C14_nt) C1{ m FL[2]}


void  S2121C14_nt ::mf2121c14(){}

//skip512 S2121C14_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2121C13_nt  {
  ::S2121C14_nt s2121c13f0;
  void  mf2121c13(); // _ZN11S2121C13_nt9mf2121c13Ev
};
//SIG(-1 S2121C13_nt) C1{ m FC2{ m FL[2]}}


void  S2121C13_nt ::mf2121c13(){}

//skip512 S2121C13_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2121C17_nt  {
  ::S2121C13_nt s2121c17f0;
  void  mf2121c17(); // _ZN11S2121C17_nt9mf2121c17Ev
};
//SIG(-1 S2121C17_nt) C1{ m FC2{ m FC3{ m FL[2]}}}


void  S2121C17_nt ::mf2121c17(){}

//skip512 S2121C17_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2121C18_nt  {
  ::S2121C13_nt s2121c18f0;
  ::S2121C13_nt s2121c18f1;
  ::S2121C13_nt s2121c18f2;
  ::S2121C13_nt s2121c18f3;
  void  mf2121c18(); // _ZN11S2121C18_nt9mf2121c18Ev
};
//SIG(-1 S2121C18_nt) C1{ m FC2{ m FC3{ m FL[2]}} FC2 FC2 FC2}


void  S2121C18_nt ::mf2121c18(){}

//skip512 S2121C18_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2121C21  {
  void  mf2121c21(); // _ZN8S2121C219mf2121c21Ev
};
//SIG(-1 S2121C21) C1{ m}


void  S2121C21 ::mf2121c21(){}

static void Test_S2121C21()
{
  {
    init_simple_test("S2121C21");
    S2121C21 lv;
    check2(sizeof(lv), 1, "sizeof(S2121C21)");
    check2(__alignof__(lv), 1, "__alignof__(S2121C21)");
  }
}
static Arrange_To_Call_Me vS2121C21(Test_S2121C21, "S2121C21", 1);

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S2121C21[];
VTBL_ENTRY *P__ZTI8S2121C21 = _ZTI8S2121C21; 
Class_Descriptor cd_S2121C21 = {  "S2121C21", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI8S2121C21),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  S2121C20_nt  {
  void *s2121c20f0;
  int s2121c20f1;
  ::S2121C21 s2121c20f2;
  void  mf2121c20(); // _ZN11S2121C20_nt9mf2121c20Ev
};
//SIG(-1 S2121C20_nt) C1{ m Fp Fi FC2{ m}}


void  S2121C20_nt ::mf2121c20(){}

//skip512 S2121C20_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2121C19_nt  {
  ::S2121C20_nt s2121c19f0;
  int s2121c19f1;
  void  mf2121c19(); // _ZN11S2121C19_nt9mf2121c19Ev
};
//SIG(-1 S2121C19_nt) C1{ m FC2{ m Fp Fi FC3{ m}} Fi}


void  S2121C19_nt ::mf2121c19(){}

//skip512 S2121C19_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2121C24  {
  void  mf2121c24(); // _ZN8S2121C249mf2121c24Ev
};
//SIG(-1 S2121C24) C1{ m}


void  S2121C24 ::mf2121c24(){}

static void Test_S2121C24()
{
  {
    init_simple_test("S2121C24");
    S2121C24 lv;
    check2(sizeof(lv), 1, "sizeof(S2121C24)");
    check2(__alignof__(lv), 1, "__alignof__(S2121C24)");
  }
}
static Arrange_To_Call_Me vS2121C24(Test_S2121C24, "S2121C24", 1);

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S2121C24[];
VTBL_ENTRY *P__ZTI8S2121C24 = _ZTI8S2121C24; 
Class_Descriptor cd_S2121C24 = {  "S2121C24", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI8S2121C24),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  S2121C22  {
  void *s2121c22f0;
  int s2121c22f1;
  ::S2121C21 s2121c22f2;
  ::S2121C24 s2121c22f3;
  void  mf2121c22(); // _ZN8S2121C229mf2121c22Ev
};
//SIG(-1 S2121C22) C1{ m Fp Fi FC2{ m} FC3{ m}}


void  S2121C22 ::mf2121c22(){}

static void Test_S2121C22()
{
  {
    init_simple_test("S2121C22");
    S2121C22 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2121C22)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2121C22)");
    check_field_offset(lv, s2121c22f0, 0, "S2121C22.s2121c22f0");
    check_field_offset(lv, s2121c22f1, ABISELECT(8,4), "S2121C22.s2121c22f1");
    check_field_offset(lv, s2121c22f2, ABISELECT(12,8), "S2121C22.s2121c22f2");
    check_field_offset(lv, s2121c22f3, ABISELECT(13,9), "S2121C22.s2121c22f3");
  }
}
static Arrange_To_Call_Me vS2121C22(Test_S2121C22, "S2121C22", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2121C28  {
  void  mf2121c28(); // _ZN8S2121C289mf2121c28Ev
};
//SIG(-1 S2121C28) C1{ m}


void  S2121C28 ::mf2121c28(){}

static void Test_S2121C28()
{
  {
    init_simple_test("S2121C28");
    S2121C28 lv;
    check2(sizeof(lv), 1, "sizeof(S2121C28)");
    check2(__alignof__(lv), 1, "__alignof__(S2121C28)");
  }
}
static Arrange_To_Call_Me vS2121C28(Test_S2121C28, "S2121C28", 1);

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S2121C28[];
VTBL_ENTRY *P__ZTI8S2121C28 = _ZTI8S2121C28; 
Class_Descriptor cd_S2121C28 = {  "S2121C28", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI8S2121C28),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  S2121C26  {
  void *s2121c26f0;
  int s2121c26f1;
  ::S2121C24 s2121c26f2;
  ::S2121C28 s2121c26f3;
  void  mf2121c26(); // _ZN8S2121C269mf2121c26Ev
};
//SIG(-1 S2121C26) C1{ m Fp Fi FC2{ m} FC3{ m}}


void  S2121C26 ::mf2121c26(){}

static void Test_S2121C26()
{
  {
    init_simple_test("S2121C26");
    S2121C26 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2121C26)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2121C26)");
    check_field_offset(lv, s2121c26f0, 0, "S2121C26.s2121c26f0");
    check_field_offset(lv, s2121c26f1, ABISELECT(8,4), "S2121C26.s2121c26f1");
    check_field_offset(lv, s2121c26f2, ABISELECT(12,8), "S2121C26.s2121c26f2");
    check_field_offset(lv, s2121c26f3, ABISELECT(13,9), "S2121C26.s2121c26f3");
  }
}
static Arrange_To_Call_Me vS2121C26(Test_S2121C26, "S2121C26", ABISELECT(16,12));

#else // __cplusplus

Class_Descriptor cd_S2121C26 = {  "S2121C26", // 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  S2121C25  : S2121C26 {
};
//SIG(-1 S2121C25) C1{ BC2{ m Fp Fi FC3{ m} FC4{ m}}}



static void Test_S2121C25()
{
  extern Class_Descriptor cd_S2121C25;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S2121C25, buf);
    S2121C25 &lv = *(new (buf) S2121C25());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2121C25)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2121C25)");
    check_base_class_offset(lv, (S2121C26*), 0, "S2121C25");
    test_class_info(&lv, &cd_S2121C25);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2121C25(Test_S2121C25, "S2121C25", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S2121C26;
static Base_Class bases_S2121C25[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S2121C25 = {  "S2121C25", // class name
  bases_S2121C25, 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  S2121C29_nt  {
  void *s2121c29f0;
  int s2121c29f1[2];
  ::S2121C28 s2121c29f2;
  void  mf2121c29(); // _ZN11S2121C29_nt9mf2121c29Ev
};
//SIG(-1 S2121C29_nt) C1{ m Fp Fi[2] FC2{ m}}


void  S2121C29_nt ::mf2121c29(){}

//skip512 S2121C29_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2121C38  {
  void  mf2121c38(); // _ZN8S2121C389mf2121c38Ev
};
//SIG(-1 S2121C38) C1{ m}


void  S2121C38 ::mf2121c38(){}

static void Test_S2121C38()
{
  {
    init_simple_test("S2121C38");
    S2121C38 lv;
    check2(sizeof(lv), 1, "sizeof(S2121C38)");
    check2(__alignof__(lv), 1, "__alignof__(S2121C38)");
  }
}
static Arrange_To_Call_Me vS2121C38(Test_S2121C38, "S2121C38", 1);

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S2121C38[];
VTBL_ENTRY *P__ZTI8S2121C38 = _ZTI8S2121C38; 
Class_Descriptor cd_S2121C38 = {  "S2121C38", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI8S2121C38),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  S2121C37  {
  void *s2121c37f0;
  int s2121c37f1[2];
  ::S2121C38 s2121c37f2;
  void  mf2121c37(); // _ZN8S2121C379mf2121c37Ev
};
//SIG(-1 S2121C37) C1{ m Fp Fi[2] FC2{ m}}


void  S2121C37 ::mf2121c37(){}

static void Test_S2121C37()
{
  {
    init_simple_test("S2121C37");
    S2121C37 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S2121C37)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2121C37)");
    check_field_offset(lv, s2121c37f0, 0, "S2121C37.s2121c37f0");
    check_field_offset(lv, s2121c37f1, ABISELECT(8,4), "S2121C37.s2121c37f1");
    check_field_offset(lv, s2121c37f2, ABISELECT(16,12), "S2121C37.s2121c37f2");
  }
}
static Arrange_To_Call_Me vS2121C37(Test_S2121C37, "S2121C37", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2121C3_nt  : S2121C4_nt {
  ::S2121C13_nt s2121c3f0;
  ::S2121C13_nt s2121c3f1;
  ::S2121C13_nt s2121c3f2;
  ::S2121C13_nt s2121c3f3;
  ::S2121C17_nt s2121c3f4;
  ::S2121C18_nt s2121c3f5;
  ::S2121C18_nt s2121c3f6;
  ::S2121C13_nt s2121c3f7;
  ::S2121C13_nt s2121c3f8;
  ::S2121C13_nt s2121c3f9;
  void *s2121c3f10;
  ::S2121C17_nt s2121c3f11;
  ::S2121C19_nt s2121c3f12;
  int s2121c3f13;
  void *s2121c3f14[7];
  ::S2121C22 s2121c3f15;
  int s2121c3f16:8;
  int s2121c3f17:8;
  int s2121c3f18:16;
  int s2121c3f19:16;
  int s2121c3f20:8;
  int s2121c3f21:8;
  int s2121c3f22:8;
  int s2121c3f23:32;
  int s2121c3f24:8;
  int s2121c3f25:4;
  int s2121c3f26:4;
  int s2121c3f27:4;
  int s2121c3f28:4;
  int s2121c3f29:4;
  int s2121c3f30:4;
  int s2121c3f31:4;
  int s2121c3f32:4;
  int s2121c3f33:4;
  int s2121c3f34:4;
  unsigned char s2121c3f35:1;
  unsigned char s2121c3f36:1;
  unsigned char s2121c3f37:1;
  unsigned char s2121c3f38:1;
  unsigned char s2121c3f39:1;
  unsigned char s2121c3f40:1;
  unsigned char s2121c3f41:1;
  unsigned char s2121c3f42:1;
  unsigned char s2121c3f43:1;
  unsigned char s2121c3f44:1;
  unsigned char s2121c3f45:1;
  unsigned char s2121c3f46:1;
  unsigned char s2121c3f47:1;
  unsigned char s2121c3f48:1;
  unsigned char s2121c3f49:1;
  unsigned char s2121c3f50:1;
  unsigned char s2121c3f51:1;
  unsigned char s2121c3f52:1;
  unsigned char s2121c3f53:1;
  unsigned char s2121c3f54:1;
  unsigned char s2121c3f55:1;
  unsigned char s2121c3f56:1;
  unsigned char s2121c3f57:1;
  unsigned char s2121c3f58:1;
  unsigned char s2121c3f59:1;
  unsigned char s2121c3f60:1;
  unsigned char s2121c3f61:1;
  unsigned char s2121c3f62:1;
  unsigned char s2121c3f63:1;
  unsigned char s2121c3f64:1;
  unsigned char s2121c3f65:1;
  unsigned char s2121c3f66:1;
  unsigned char s2121c3f67:1;
  unsigned char s2121c3f68:1;
  unsigned char s2121c3f69:1;
  unsigned char s2121c3f70:1;
  unsigned char s2121c3f71:1;
  unsigned char s2121c3f72:1;
  unsigned char s2121c3f73:1;
  unsigned char s2121c3f74:1;
  unsigned char s2121c3f75:1;
  int s2121c3f76[7];
  void *s2121c3f77[6];
  int s2121c3f78:8;
  int s2121c3f79:8;
  int s2121c3f80:8;
  int s2121c3f81:8;
  int s2121c3f82:8;
  int s2121c3f83:8;
  ::S2121C25 s2121c3f84;
  void *s2121c3f85[4];
  int s2121c3f86:8;
  int s2121c3f87:8;
  int s2121c3f88:8;
  int s2121c3f89:8;
  int s2121c3f90:8;
  int s2121c3f91:16;
  int s2121c3f92:16;
  int s2121c3f93:16;
  int s2121c3f94:4;
  int s2121c3f95:4;
  int s2121c3f96:4;
  int s2121c3f97:4;
  int s2121c3f98:4;
  int s2121c3f99:4;
  int s2121c3f100:4;
  int s2121c3f101:4;
  int s2121c3f102:4;
  int s2121c3f103:4;
  int s2121c3f104:4;
  int s2121c3f105:4;
  int s2121c3f106:8;
  int s2121c3f107:8;
  int s2121c3f108:8;
  void *s2121c3f109[7];
  ::S2121C29_nt s2121c3f110;
  void *s2121c3f111[2];
  int s2121c3f112:16;
  int s2121c3f113:16;
  ::S2121C25 s2121c3f114;
  ::S2121C29_nt s2121c3f115;
  ::S2121C37 s2121c3f116;
  void *s2121c3f117[2];
  int s2121c3f118:24;
  int s2121c3f119:8;
  void *s2121c3f120;
  virtual  ~S2121C3_nt(); // _ZN10S2121C3_ntD1Ev
  virtual void  v25(); // _ZN10S2121C3_nt3v25Ev
  virtual void  v26(); // _ZN10S2121C3_nt3v26Ev
  virtual void  v27(); // _ZN10S2121C3_nt3v27Ev
  virtual void  v28(); // _ZN10S2121C3_nt3v28Ev
  virtual void  v29(); // _ZN10S2121C3_nt3v29Ev
  virtual void  v30(); // _ZN10S2121C3_nt3v30Ev
  virtual void  v31(); // _ZN10S2121C3_nt3v31Ev
  virtual void  v32(); // _ZN10S2121C3_nt3v32Ev
  virtual void  v33(); // _ZN10S2121C3_nt3v33Ev
  virtual void  v34(); // _ZN10S2121C3_nt3v34Ev
  virtual void  v35(); // _ZN10S2121C3_nt3v35Ev
  virtual void  v36(); // _ZN10S2121C3_nt3v36Ev
  virtual void  v37(); // _ZN10S2121C3_nt3v37Ev
  virtual void  v38(); // _ZN10S2121C3_nt3v38Ev
  virtual void  v39(); // _ZN10S2121C3_nt3v39Ev
  virtual void  v40(); // _ZN10S2121C3_nt3v40Ev
  virtual void  v41(); // _ZN10S2121C3_nt3v41Ev
  virtual void  v42(); // _ZN10S2121C3_nt3v42Ev
  virtual void  v43(); // _ZN10S2121C3_nt3v43Ev
  virtual void  v44(); // _ZN10S2121C3_nt3v44Ev
  virtual void  v45(); // _ZN10S2121C3_nt3v45Ev
  virtual void  v46(); // _ZN10S2121C3_nt3v46Ev
  virtual void  v47(); // _ZN10S2121C3_nt3v47Ev
  virtual void  v48(); // _ZN10S2121C3_nt3v48Ev
  virtual void  v49(); // _ZN10S2121C3_nt3v49Ev
  virtual void  v50(); // _ZN10S2121C3_nt3v50Ev
  virtual void  v51(); // _ZN10S2121C3_nt3v51Ev
  virtual void  v52(); // _ZN10S2121C3_nt3v52Ev
  virtual void  v53(); // _ZN10S2121C3_nt3v53Ev
  virtual void  v54(); // _ZN10S2121C3_nt3v54Ev
  virtual void  v55(); // _ZN10S2121C3_nt3v55Ev
  virtual void  v56(); // _ZN10S2121C3_nt3v56Ev
  virtual void  v57(); // _ZN10S2121C3_nt3v57Ev
  virtual void  v58(); // _ZN10S2121C3_nt3v58Ev
  virtual void  v59(); // _ZN10S2121C3_nt3v59Ev
  virtual void  v60(); // _ZN10S2121C3_nt3v60Ev
  virtual void  v61(); // _ZN10S2121C3_nt3v61Ev
  virtual void  v62(); // _ZN10S2121C3_nt3v62Ev
  virtual void  v63(); // _ZN10S2121C3_nt3v63Ev
  virtual void  v64(); // _ZN10S2121C3_nt3v64Ev
  virtual void  v65(); // _ZN10S2121C3_nt3v65Ev
  virtual void  v66(); // _ZN10S2121C3_nt3v66Ev
  virtual void  v67(); // _ZN10S2121C3_nt3v67Ev
  virtual void  v68(); // _ZN10S2121C3_nt3v68Ev
  virtual void  v69(); // _ZN10S2121C3_nt3v69Ev
  virtual void  v70(); // _ZN10S2121C3_nt3v70Ev
  virtual void  v71(); // _ZN10S2121C3_nt3v71Ev
  virtual void  v72(); // _ZN10S2121C3_nt3v72Ev
  virtual void  v73(); // _ZN10S2121C3_nt3v73Ev
  virtual void  v74(); // _ZN10S2121C3_nt3v74Ev
  virtual void  v75(); // _ZN10S2121C3_nt3v75Ev
  virtual void  v76(); // _ZN10S2121C3_nt3v76Ev
  virtual void  v77(); // _ZN10S2121C3_nt3v77Ev
  virtual void  v78(); // _ZN10S2121C3_nt3v78Ev
  virtual void  v79(); // _ZN10S2121C3_nt3v79Ev
  virtual void  v80(); // _ZN10S2121C3_nt3v80Ev
  virtual void  v81(); // _ZN10S2121C3_nt3v81Ev
  virtual void  v82(); // _ZN10S2121C3_nt3v82Ev
  virtual void  v83(); // _ZN10S2121C3_nt3v83Ev
  virtual void  v84(); // _ZN10S2121C3_nt3v84Ev
  virtual void  v85(); // _ZN10S2121C3_nt3v85Ev
  virtual void  v86(); // _ZN10S2121C3_nt3v86Ev
  virtual void  v87(); // _ZN10S2121C3_nt3v87Ev
  virtual void  v88(); // _ZN10S2121C3_nt3v88Ev
  virtual void  v89(); // _ZN10S2121C3_nt3v89Ev
  virtual void  v90(); // _ZN10S2121C3_nt3v90Ev
  virtual void  v91(); // _ZN10S2121C3_nt3v91Ev
  virtual void  v92(); // _ZN10S2121C3_nt3v92Ev
  virtual void  v93(); // _ZN10S2121C3_nt3v93Ev
  virtual void  v94(); // _ZN10S2121C3_nt3v94Ev
  virtual void  v95(); // _ZN10S2121C3_nt3v95Ev
  virtual void  v96(); // _ZN10S2121C3_nt3v96Ev
  virtual void  v97(); // _ZN10S2121C3_nt3v97Ev
  virtual void  v98(); // _ZN10S2121C3_nt3v98Ev
  virtual void  v99(); // _ZN10S2121C3_nt3v99Ev
  virtual void  v100(); // _ZN10S2121C3_nt4v100Ev
  virtual void  v101(); // _ZN10S2121C3_nt4v101Ev
  virtual void  v102(); // _ZN10S2121C3_nt4v102Ev
  S2121C3_nt(); // tgen
};
//SIG(-1 S2121C3_nt) C1{ BC2{ vd v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 Fp Fi FC3{ BC4{ m Fp Fi FC5{ m} FC5}} FC3 Fi} 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 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 FC6{ m FC7{ m FL[2]}} FC6 FC6 FC6 FC8{ m FC6} FC9{ m FC6 FC6 FC6 FC6} FC9 FC6 FC6 FC6 Fp FC8 FC10{ m FC11{ m Fp Fi FC12{ m}} Fi} Fi Fp[7] FC13{ m Fp Fi FC12 FC14{ m}} Fi:8 Fi:8 Fi:16 Fi:16 Fi:8 Fi:8 Fi:8 Fi:32 Fi:8 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fi[7] Fp[6] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 FC15{ BC16{ m Fp Fi FC14 FC17{ m}}} Fp[4] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:16 Fi:16 Fi:16 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:8 Fi:8 Fi:8 Fp[7] FC18{ m Fp Fi[2] FC17} Fp[2] Fi:16 Fi:16 FC15 FC18 FC19{ m Fp Fi[2] FC20{ m}} Fp[2] Fi:24 Fi:8 Fp}


 S2121C3_nt ::~S2121C3_nt(){ note_dtor("S2121C3_nt", this);}
void  S2121C3_nt ::v25(){vfunc_called(this, "_ZN10S2121C3_nt3v25Ev");}
void  S2121C3_nt ::v26(){vfunc_called(this, "_ZN10S2121C3_nt3v26Ev");}
void  S2121C3_nt ::v27(){vfunc_called(this, "_ZN10S2121C3_nt3v27Ev");}
void  S2121C3_nt ::v28(){vfunc_called(this, "_ZN10S2121C3_nt3v28Ev");}
void  S2121C3_nt ::v29(){vfunc_called(this, "_ZN10S2121C3_nt3v29Ev");}
void  S2121C3_nt ::v30(){vfunc_called(this, "_ZN10S2121C3_nt3v30Ev");}
void  S2121C3_nt ::v31(){vfunc_called(this, "_ZN10S2121C3_nt3v31Ev");}
void  S2121C3_nt ::v32(){vfunc_called(this, "_ZN10S2121C3_nt3v32Ev");}
void  S2121C3_nt ::v33(){vfunc_called(this, "_ZN10S2121C3_nt3v33Ev");}
void  S2121C3_nt ::v34(){vfunc_called(this, "_ZN10S2121C3_nt3v34Ev");}
void  S2121C3_nt ::v35(){vfunc_called(this, "_ZN10S2121C3_nt3v35Ev");}
void  S2121C3_nt ::v36(){vfunc_called(this, "_ZN10S2121C3_nt3v36Ev");}
void  S2121C3_nt ::v37(){vfunc_called(this, "_ZN10S2121C3_nt3v37Ev");}
void  S2121C3_nt ::v38(){vfunc_called(this, "_ZN10S2121C3_nt3v38Ev");}
void  S2121C3_nt ::v39(){vfunc_called(this, "_ZN10S2121C3_nt3v39Ev");}
void  S2121C3_nt ::v40(){vfunc_called(this, "_ZN10S2121C3_nt3v40Ev");}
void  S2121C3_nt ::v41(){vfunc_called(this, "_ZN10S2121C3_nt3v41Ev");}
void  S2121C3_nt ::v42(){vfunc_called(this, "_ZN10S2121C3_nt3v42Ev");}
void  S2121C3_nt ::v43(){vfunc_called(this, "_ZN10S2121C3_nt3v43Ev");}
void  S2121C3_nt ::v44(){vfunc_called(this, "_ZN10S2121C3_nt3v44Ev");}
void  S2121C3_nt ::v45(){vfunc_called(this, "_ZN10S2121C3_nt3v45Ev");}
void  S2121C3_nt ::v46(){vfunc_called(this, "_ZN10S2121C3_nt3v46Ev");}
void  S2121C3_nt ::v47(){vfunc_called(this, "_ZN10S2121C3_nt3v47Ev");}
void  S2121C3_nt ::v48(){vfunc_called(this, "_ZN10S2121C3_nt3v48Ev");}
void  S2121C3_nt ::v49(){vfunc_called(this, "_ZN10S2121C3_nt3v49Ev");}
void  S2121C3_nt ::v50(){vfunc_called(this, "_ZN10S2121C3_nt3v50Ev");}
void  S2121C3_nt ::v51(){vfunc_called(this, "_ZN10S2121C3_nt3v51Ev");}
void  S2121C3_nt ::v52(){vfunc_called(this, "_ZN10S2121C3_nt3v52Ev");}
void  S2121C3_nt ::v53(){vfunc_called(this, "_ZN10S2121C3_nt3v53Ev");}
void  S2121C3_nt ::v54(){vfunc_called(this, "_ZN10S2121C3_nt3v54Ev");}
void  S2121C3_nt ::v55(){vfunc_called(this, "_ZN10S2121C3_nt3v55Ev");}
void  S2121C3_nt ::v56(){vfunc_called(this, "_ZN10S2121C3_nt3v56Ev");}
void  S2121C3_nt ::v57(){vfunc_called(this, "_ZN10S2121C3_nt3v57Ev");}
void  S2121C3_nt ::v58(){vfunc_called(this, "_ZN10S2121C3_nt3v58Ev");}
void  S2121C3_nt ::v59(){vfunc_called(this, "_ZN10S2121C3_nt3v59Ev");}
void  S2121C3_nt ::v60(){vfunc_called(this, "_ZN10S2121C3_nt3v60Ev");}
void  S2121C3_nt ::v61(){vfunc_called(this, "_ZN10S2121C3_nt3v61Ev");}
void  S2121C3_nt ::v62(){vfunc_called(this, "_ZN10S2121C3_nt3v62Ev");}
void  S2121C3_nt ::v63(){vfunc_called(this, "_ZN10S2121C3_nt3v63Ev");}
void  S2121C3_nt ::v64(){vfunc_called(this, "_ZN10S2121C3_nt3v64Ev");}
void  S2121C3_nt ::v65(){vfunc_called(this, "_ZN10S2121C3_nt3v65Ev");}
void  S2121C3_nt ::v66(){vfunc_called(this, "_ZN10S2121C3_nt3v66Ev");}
void  S2121C3_nt ::v67(){vfunc_called(this, "_ZN10S2121C3_nt3v67Ev");}
void  S2121C3_nt ::v68(){vfunc_called(this, "_ZN10S2121C3_nt3v68Ev");}
void  S2121C3_nt ::v69(){vfunc_called(this, "_ZN10S2121C3_nt3v69Ev");}
void  S2121C3_nt ::v70(){vfunc_called(this, "_ZN10S2121C3_nt3v70Ev");}
void  S2121C3_nt ::v71(){vfunc_called(this, "_ZN10S2121C3_nt3v71Ev");}
void  S2121C3_nt ::v72(){vfunc_called(this, "_ZN10S2121C3_nt3v72Ev");}
void  S2121C3_nt ::v73(){vfunc_called(this, "_ZN10S2121C3_nt3v73Ev");}
void  S2121C3_nt ::v74(){vfunc_called(this, "_ZN10S2121C3_nt3v74Ev");}
void  S2121C3_nt ::v75(){vfunc_called(this, "_ZN10S2121C3_nt3v75Ev");}
void  S2121C3_nt ::v76(){vfunc_called(this, "_ZN10S2121C3_nt3v76Ev");}
void  S2121C3_nt ::v77(){vfunc_called(this, "_ZN10S2121C3_nt3v77Ev");}
void  S2121C3_nt ::v78(){vfunc_called(this, "_ZN10S2121C3_nt3v78Ev");}
void  S2121C3_nt ::v79(){vfunc_called(this, "_ZN10S2121C3_nt3v79Ev");}
void  S2121C3_nt ::v80(){vfunc_called(this, "_ZN10S2121C3_nt3v80Ev");}
void  S2121C3_nt ::v81(){vfunc_called(this, "_ZN10S2121C3_nt3v81Ev");}
void  S2121C3_nt ::v82(){vfunc_called(this, "_ZN10S2121C3_nt3v82Ev");}
void  S2121C3_nt ::v83(){vfunc_called(this, "_ZN10S2121C3_nt3v83Ev");}
void  S2121C3_nt ::v84(){vfunc_called(this, "_ZN10S2121C3_nt3v84Ev");}
void  S2121C3_nt ::v85(){vfunc_called(this, "_ZN10S2121C3_nt3v85Ev");}
void  S2121C3_nt ::v86(){vfunc_called(this, "_ZN10S2121C3_nt3v86Ev");}
void  S2121C3_nt ::v87(){vfunc_called(this, "_ZN10S2121C3_nt3v87Ev");}
void  S2121C3_nt ::v88(){vfunc_called(this, "_ZN10S2121C3_nt3v88Ev");}
void  S2121C3_nt ::v89(){vfunc_called(this, "_ZN10S2121C3_nt3v89Ev");}
void  S2121C3_nt ::v90(){vfunc_called(this, "_ZN10S2121C3_nt3v90Ev");}
void  S2121C3_nt ::v91(){vfunc_called(this, "_ZN10S2121C3_nt3v91Ev");}
void  S2121C3_nt ::v92(){vfunc_called(this, "_ZN10S2121C3_nt3v92Ev");}
void  S2121C3_nt ::v93(){vfunc_called(this, "_ZN10S2121C3_nt3v93Ev");}
void  S2121C3_nt ::v94(){vfunc_called(this, "_ZN10S2121C3_nt3v94Ev");}
void  S2121C3_nt ::v95(){vfunc_called(this, "_ZN10S2121C3_nt3v95Ev");}
void  S2121C3_nt ::v96(){vfunc_called(this, "_ZN10S2121C3_nt3v96Ev");}
void  S2121C3_nt ::v97(){vfunc_called(this, "_ZN10S2121C3_nt3v97Ev");}
void  S2121C3_nt ::v98(){vfunc_called(this, "_ZN10S2121C3_nt3v98Ev");}
void  S2121C3_nt ::v99(){vfunc_called(this, "_ZN10S2121C3_nt3v99Ev");}
void  S2121C3_nt ::v100(){vfunc_called(this, "_ZN10S2121C3_nt4v100Ev");}
void  S2121C3_nt ::v101(){vfunc_called(this, "_ZN10S2121C3_nt4v101Ev");}
void  S2121C3_nt ::v102(){vfunc_called(this, "_ZN10S2121C3_nt4v102Ev");}
S2121C3_nt ::S2121C3_nt(){ note_ctor("S2121C3_nt", this);} // tgen

//skip512 S2121C3_nt

#else // __cplusplus

extern void _ZN10S2121C3_ntC1Ev();
extern void _ZN10S2121C3_ntD1Ev();
Name_Map name_map_S2121C3_nt[] = {
  NSPAIR(_ZN10S2121C3_ntC1Ev),
  NSPAIR(_ZN10S2121C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C4_nt;
extern VTBL_ENTRY _ZTI10S2121C4_nt[];
extern  VTBL_ENTRY _ZTV10S2121C4_nt[];
static Base_Class bases_S2121C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C4_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 _ZTI10S2121C3_nt[];
extern void _ZN10S2121C3_ntD1Ev();
extern void _ZN10S2121C3_ntD0Ev();
extern void _ZN10S2121C4_nt2v2Ev();
extern void _ZN10S2121C4_nt2v3Ev();
extern void _ZN10S2121C4_nt2v4Ev();
extern void _ZN10S2121C4_nt2v5Ev();
extern void _ZN10S2121C4_nt2v6Ev();
extern void _ZN10S2121C4_nt2v7Ev();
extern void _ZN10S2121C4_nt2v8Ev();
extern void _ZN10S2121C4_nt2v9Ev();
extern void _ZN10S2121C4_nt3v10Ev();
extern void _ZN10S2121C4_nt3v11Ev();
extern void _ZN10S2121C4_nt3v12Ev();
extern void _ZN10S2121C4_nt3v13Ev();
extern void _ZN10S2121C4_nt3v14Ev();
extern void _ZN10S2121C4_nt3v15Ev();
extern void _ZN10S2121C4_nt3v16Ev();
extern void _ZN10S2121C4_nt3v17Ev();
extern void _ZN10S2121C4_nt3v18Ev();
extern void _ZN10S2121C4_nt3v19Ev();
extern void _ZN10S2121C4_nt3v20Ev();
extern void _ZN10S2121C4_nt3v21Ev();
extern void _ZN10S2121C4_nt3v22Ev();
extern void _ZN10S2121C4_nt3v23Ev();
extern void _ZN10S2121C4_nt3v24Ev();
extern void _ZN10S2121C3_nt3v25Ev();
extern void _ZN10S2121C3_nt3v26Ev();
extern void _ZN10S2121C3_nt3v27Ev();
extern void _ZN10S2121C3_nt3v28Ev();
extern void _ZN10S2121C3_nt3v29Ev();
extern void _ZN10S2121C3_nt3v30Ev();
extern void _ZN10S2121C3_nt3v31Ev();
extern void _ZN10S2121C3_nt3v32Ev();
extern void _ZN10S2121C3_nt3v33Ev();
extern void _ZN10S2121C3_nt3v34Ev();
extern void _ZN10S2121C3_nt3v35Ev();
extern void _ZN10S2121C3_nt3v36Ev();
extern void _ZN10S2121C3_nt3v37Ev();
extern void _ZN10S2121C3_nt3v38Ev();
extern void _ZN10S2121C3_nt3v39Ev();
extern void _ZN10S2121C3_nt3v40Ev();
extern void _ZN10S2121C3_nt3v41Ev();
extern void _ZN10S2121C3_nt3v42Ev();
extern void _ZN10S2121C3_nt3v43Ev();
extern void _ZN10S2121C3_nt3v44Ev();
extern void _ZN10S2121C3_nt3v45Ev();
extern void _ZN10S2121C3_nt3v46Ev();
extern void _ZN10S2121C3_nt3v47Ev();
extern void _ZN10S2121C3_nt3v48Ev();
extern void _ZN10S2121C3_nt3v49Ev();
extern void _ZN10S2121C3_nt3v50Ev();
extern void _ZN10S2121C3_nt3v51Ev();
extern void _ZN10S2121C3_nt3v52Ev();
extern void _ZN10S2121C3_nt3v53Ev();
extern void _ZN10S2121C3_nt3v54Ev();
extern void _ZN10S2121C3_nt3v55Ev();
extern void _ZN10S2121C3_nt3v56Ev();
extern void _ZN10S2121C3_nt3v57Ev();
extern void _ZN10S2121C3_nt3v58Ev();
extern void _ZN10S2121C3_nt3v59Ev();
extern void _ZN10S2121C3_nt3v60Ev();
extern void _ZN10S2121C3_nt3v61Ev();
extern void _ZN10S2121C3_nt3v62Ev();
extern void _ZN10S2121C3_nt3v63Ev();
extern void _ZN10S2121C3_nt3v64Ev();
extern void _ZN10S2121C3_nt3v65Ev();
extern void _ZN10S2121C3_nt3v66Ev();
extern void _ZN10S2121C3_nt3v67Ev();
extern void _ZN10S2121C3_nt3v68Ev();
extern void _ZN10S2121C3_nt3v69Ev();
extern void _ZN10S2121C3_nt3v70Ev();
extern void _ZN10S2121C3_nt3v71Ev();
extern void _ZN10S2121C3_nt3v72Ev();
extern void _ZN10S2121C3_nt3v73Ev();
extern void _ZN10S2121C3_nt3v74Ev();
extern void _ZN10S2121C3_nt3v75Ev();
extern void _ZN10S2121C3_nt3v76Ev();
extern void _ZN10S2121C3_nt3v77Ev();
extern void _ZN10S2121C3_nt3v78Ev();
extern void _ZN10S2121C3_nt3v79Ev();
extern void _ZN10S2121C3_nt3v80Ev();
extern void _ZN10S2121C3_nt3v81Ev();
extern void _ZN10S2121C3_nt3v82Ev();
extern void _ZN10S2121C3_nt3v83Ev();
extern void _ZN10S2121C3_nt3v84Ev();
extern void _ZN10S2121C3_nt3v85Ev();
extern void _ZN10S2121C3_nt3v86Ev();
extern void _ZN10S2121C3_nt3v87Ev();
extern void _ZN10S2121C3_nt3v88Ev();
extern void _ZN10S2121C3_nt3v89Ev();
extern void _ZN10S2121C3_nt3v90Ev();
extern void _ZN10S2121C3_nt3v91Ev();
extern void _ZN10S2121C3_nt3v92Ev();
extern void _ZN10S2121C3_nt3v93Ev();
extern void _ZN10S2121C3_nt3v94Ev();
extern void _ZN10S2121C3_nt3v95Ev();
extern void _ZN10S2121C3_nt3v96Ev();
extern void _ZN10S2121C3_nt3v97Ev();
extern void _ZN10S2121C3_nt3v98Ev();
extern void _ZN10S2121C3_nt3v99Ev();
extern void _ZN10S2121C3_nt4v100Ev();
extern void _ZN10S2121C3_nt4v101Ev();
extern void _ZN10S2121C3_nt4v102Ev();
static  VTBL_ENTRY vtc_S2121C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2121C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S2121C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt4v102Ev,
};
extern VTBL_ENTRY _ZTI10S2121C3_nt[];
VTBL_ENTRY *P__ZTI10S2121C3_nt = _ZTI10S2121C3_nt; 
extern  VTBL_ENTRY _ZTV10S2121C3_nt[];
Class_Descriptor cd_S2121C3_nt = {  "S2121C3_nt", // class name
  bases_S2121C3_nt, 1,
  &(vtc_S2121C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(832,632), // object size
  NSPAIRA(_ZTI10S2121C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S2121C3_nt),105, //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  S2121C2_nt  : S2121C3_nt {
  void *s2121c2f0;
  virtual  ~S2121C2_nt(); // _ZN10S2121C2_ntD1Ev
  virtual void  v103(); // _ZN10S2121C2_nt4v103Ev
  virtual void  v104(); // _ZN10S2121C2_nt4v104Ev
  virtual void  v105(); // _ZN10S2121C2_nt4v105Ev
  virtual void  v106(); // _ZN10S2121C2_nt4v106Ev
  virtual void  v107(); // _ZN10S2121C2_nt4v107Ev
  virtual void  v108(); // _ZN10S2121C2_nt4v108Ev
  virtual void  v109(); // _ZN10S2121C2_nt4v109Ev
  virtual void  v110(); // _ZN10S2121C2_nt4v110Ev
  virtual void  v111(); // _ZN10S2121C2_nt4v111Ev
  virtual void  v112(); // _ZN10S2121C2_nt4v112Ev
  S2121C2_nt(); // tgen
};
//SIG(-1 S2121C2_nt) C1{ BC2{ BC3{ vd v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 Fp Fi FC4{ BC5{ m Fp Fi FC6{ m} FC6}} FC4 Fi} vd v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 FC7{ m FC8{ m FL[2]}} FC7 FC7 FC7 FC9{ m FC7} FC10{ m FC7 FC7 FC7 FC7} FC10 FC7 FC7 FC7 Fp FC9 FC11{ m FC12{ m Fp Fi FC13{ m}} Fi} Fi Fp[7] FC14{ m Fp Fi FC13 FC15{ m}} Fi:8 Fi:8 Fi:16 Fi:16 Fi:8 Fi:8 Fi:8 Fi:32 Fi:8 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fi[7] Fp[6] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 FC16{ BC17{ m Fp Fi FC15 FC18{ m}}} Fp[4] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:16 Fi:16 Fi:16 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:8 Fi:8 Fi:8 Fp[7] FC19{ m Fp Fi[2] FC18} Fp[2] Fi:16 Fi:16 FC16 FC19 FC20{ m Fp Fi[2] FC21{ m}} Fp[2] Fi:24 Fi:8 Fp} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fp}


 S2121C2_nt ::~S2121C2_nt(){ note_dtor("S2121C2_nt", this);}
void  S2121C2_nt ::v103(){vfunc_called(this, "_ZN10S2121C2_nt4v103Ev");}
void  S2121C2_nt ::v104(){vfunc_called(this, "_ZN10S2121C2_nt4v104Ev");}
void  S2121C2_nt ::v105(){vfunc_called(this, "_ZN10S2121C2_nt4v105Ev");}
void  S2121C2_nt ::v106(){vfunc_called(this, "_ZN10S2121C2_nt4v106Ev");}
void  S2121C2_nt ::v107(){vfunc_called(this, "_ZN10S2121C2_nt4v107Ev");}
void  S2121C2_nt ::v108(){vfunc_called(this, "_ZN10S2121C2_nt4v108Ev");}
void  S2121C2_nt ::v109(){vfunc_called(this, "_ZN10S2121C2_nt4v109Ev");}
void  S2121C2_nt ::v110(){vfunc_called(this, "_ZN10S2121C2_nt4v110Ev");}
void  S2121C2_nt ::v111(){vfunc_called(this, "_ZN10S2121C2_nt4v111Ev");}
void  S2121C2_nt ::v112(){vfunc_called(this, "_ZN10S2121C2_nt4v112Ev");}
S2121C2_nt ::S2121C2_nt(){ note_ctor("S2121C2_nt", this);} // tgen

//skip512 S2121C2_nt

#else // __cplusplus

extern void _ZN10S2121C2_ntC1Ev();
extern void _ZN10S2121C2_ntD1Ev();
Name_Map name_map_S2121C2_nt[] = {
  NSPAIR(_ZN10S2121C2_ntC1Ev),
  NSPAIR(_ZN10S2121C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C4_nt;
extern VTBL_ENTRY _ZTI10S2121C4_nt[];
extern  VTBL_ENTRY _ZTV10S2121C4_nt[];
extern Class_Descriptor cd_S2121C3_nt;
extern VTBL_ENTRY _ZTI10S2121C3_nt[];
extern  VTBL_ENTRY _ZTV10S2121C3_nt[];
static Base_Class bases_S2121C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C4_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_S2121C3_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 _ZTI10S2121C2_nt[];
extern void _ZN10S2121C2_ntD1Ev();
extern void _ZN10S2121C2_ntD0Ev();
extern void _ZN10S2121C4_nt2v2Ev();
extern void _ZN10S2121C4_nt2v3Ev();
extern void _ZN10S2121C4_nt2v4Ev();
extern void _ZN10S2121C4_nt2v5Ev();
extern void _ZN10S2121C4_nt2v6Ev();
extern void _ZN10S2121C4_nt2v7Ev();
extern void _ZN10S2121C4_nt2v8Ev();
extern void _ZN10S2121C4_nt2v9Ev();
extern void _ZN10S2121C4_nt3v10Ev();
extern void _ZN10S2121C4_nt3v11Ev();
extern void _ZN10S2121C4_nt3v12Ev();
extern void _ZN10S2121C4_nt3v13Ev();
extern void _ZN10S2121C4_nt3v14Ev();
extern void _ZN10S2121C4_nt3v15Ev();
extern void _ZN10S2121C4_nt3v16Ev();
extern void _ZN10S2121C4_nt3v17Ev();
extern void _ZN10S2121C4_nt3v18Ev();
extern void _ZN10S2121C4_nt3v19Ev();
extern void _ZN10S2121C4_nt3v20Ev();
extern void _ZN10S2121C4_nt3v21Ev();
extern void _ZN10S2121C4_nt3v22Ev();
extern void _ZN10S2121C4_nt3v23Ev();
extern void _ZN10S2121C4_nt3v24Ev();
extern void _ZN10S2121C3_nt3v25Ev();
extern void _ZN10S2121C3_nt3v26Ev();
extern void _ZN10S2121C3_nt3v27Ev();
extern void _ZN10S2121C3_nt3v28Ev();
extern void _ZN10S2121C3_nt3v29Ev();
extern void _ZN10S2121C3_nt3v30Ev();
extern void _ZN10S2121C3_nt3v31Ev();
extern void _ZN10S2121C3_nt3v32Ev();
extern void _ZN10S2121C3_nt3v33Ev();
extern void _ZN10S2121C3_nt3v34Ev();
extern void _ZN10S2121C3_nt3v35Ev();
extern void _ZN10S2121C3_nt3v36Ev();
extern void _ZN10S2121C3_nt3v37Ev();
extern void _ZN10S2121C3_nt3v38Ev();
extern void _ZN10S2121C3_nt3v39Ev();
extern void _ZN10S2121C3_nt3v40Ev();
extern void _ZN10S2121C3_nt3v41Ev();
extern void _ZN10S2121C3_nt3v42Ev();
extern void _ZN10S2121C3_nt3v43Ev();
extern void _ZN10S2121C3_nt3v44Ev();
extern void _ZN10S2121C3_nt3v45Ev();
extern void _ZN10S2121C3_nt3v46Ev();
extern void _ZN10S2121C3_nt3v47Ev();
extern void _ZN10S2121C3_nt3v48Ev();
extern void _ZN10S2121C3_nt3v49Ev();
extern void _ZN10S2121C3_nt3v50Ev();
extern void _ZN10S2121C3_nt3v51Ev();
extern void _ZN10S2121C3_nt3v52Ev();
extern void _ZN10S2121C3_nt3v53Ev();
extern void _ZN10S2121C3_nt3v54Ev();
extern void _ZN10S2121C3_nt3v55Ev();
extern void _ZN10S2121C3_nt3v56Ev();
extern void _ZN10S2121C3_nt3v57Ev();
extern void _ZN10S2121C3_nt3v58Ev();
extern void _ZN10S2121C3_nt3v59Ev();
extern void _ZN10S2121C3_nt3v60Ev();
extern void _ZN10S2121C3_nt3v61Ev();
extern void _ZN10S2121C3_nt3v62Ev();
extern void _ZN10S2121C3_nt3v63Ev();
extern void _ZN10S2121C3_nt3v64Ev();
extern void _ZN10S2121C3_nt3v65Ev();
extern void _ZN10S2121C3_nt3v66Ev();
extern void _ZN10S2121C3_nt3v67Ev();
extern void _ZN10S2121C3_nt3v68Ev();
extern void _ZN10S2121C3_nt3v69Ev();
extern void _ZN10S2121C3_nt3v70Ev();
extern void _ZN10S2121C3_nt3v71Ev();
extern void _ZN10S2121C3_nt3v72Ev();
extern void _ZN10S2121C3_nt3v73Ev();
extern void _ZN10S2121C3_nt3v74Ev();
extern void _ZN10S2121C3_nt3v75Ev();
extern void _ZN10S2121C3_nt3v76Ev();
extern void _ZN10S2121C3_nt3v77Ev();
extern void _ZN10S2121C3_nt3v78Ev();
extern void _ZN10S2121C3_nt3v79Ev();
extern void _ZN10S2121C3_nt3v80Ev();
extern void _ZN10S2121C3_nt3v81Ev();
extern void _ZN10S2121C3_nt3v82Ev();
extern void _ZN10S2121C3_nt3v83Ev();
extern void _ZN10S2121C3_nt3v84Ev();
extern void _ZN10S2121C3_nt3v85Ev();
extern void _ZN10S2121C3_nt3v86Ev();
extern void _ZN10S2121C3_nt3v87Ev();
extern void _ZN10S2121C3_nt3v88Ev();
extern void _ZN10S2121C3_nt3v89Ev();
extern void _ZN10S2121C3_nt3v90Ev();
extern void _ZN10S2121C3_nt3v91Ev();
extern void _ZN10S2121C3_nt3v92Ev();
extern void _ZN10S2121C3_nt3v93Ev();
extern void _ZN10S2121C3_nt3v94Ev();
extern void _ZN10S2121C3_nt3v95Ev();
extern void _ZN10S2121C3_nt3v96Ev();
extern void _ZN10S2121C3_nt3v97Ev();
extern void _ZN10S2121C3_nt3v98Ev();
extern void _ZN10S2121C3_nt3v99Ev();
extern void _ZN10S2121C3_nt4v100Ev();
extern void _ZN10S2121C3_nt4v101Ev();
extern void _ZN10S2121C3_nt4v102Ev();
extern void _ZN10S2121C2_nt4v103Ev();
extern void _ZN10S2121C2_nt4v104Ev();
extern void _ZN10S2121C2_nt4v105Ev();
extern void _ZN10S2121C2_nt4v106Ev();
extern void _ZN10S2121C2_nt4v107Ev();
extern void _ZN10S2121C2_nt4v108Ev();
extern void _ZN10S2121C2_nt4v109Ev();
extern void _ZN10S2121C2_nt4v110Ev();
extern void _ZN10S2121C2_nt4v111Ev();
extern void _ZN10S2121C2_nt4v112Ev();
static  VTBL_ENTRY vtc_S2121C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2121C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S2121C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2121C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN10S2121C2_nt4v103Ev,
  (VTBL_ENTRY)&_ZN10S2121C2_nt4v104Ev,
  (VTBL_ENTRY)&_ZN10S2121C2_nt4v105Ev,
  (VTBL_ENTRY)&_ZN10S2121C2_nt4v106Ev,
  (VTBL_ENTRY)&_ZN10S2121C2_nt4v107Ev,
  (VTBL_ENTRY)&_ZN10S2121C2_nt4v108Ev,
  (VTBL_ENTRY)&_ZN10S2121C2_nt4v109Ev,
  (VTBL_ENTRY)&_ZN10S2121C2_nt4v110Ev,
  (VTBL_ENTRY)&_ZN10S2121C2_nt4v111Ev,
  (VTBL_ENTRY)&_ZN10S2121C2_nt4v112Ev,
};
extern VTBL_ENTRY _ZTI10S2121C2_nt[];
VTBL_ENTRY *P__ZTI10S2121C2_nt = _ZTI10S2121C2_nt; 
extern  VTBL_ENTRY _ZTV10S2121C2_nt[];
Class_Descriptor cd_S2121C2_nt = {  "S2121C2_nt", // class name
  bases_S2121C2_nt, 2,
  &(vtc_S2121C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(840,636), // object size
  NSPAIRA(_ZTI10S2121C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S2121C2_nt),115, //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  S2121C39_nt  {
  long s2121c39f0;
  void  mf2121c39(); // _ZN11S2121C39_nt9mf2121c39Ev
};
//SIG(-1 S2121C39_nt) C1{ m Fl}


void  S2121C39_nt ::mf2121c39(){}

//skip512 S2121C39_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2121C1  : S2121C2_nt {
  int s2121c1f0[3];
  ::S2121C39_nt s2121c1f1;
  int s2121c1f2[4];
  char s2121c1f3;
  int s2121c1f4[38];
  char s2121c1f5[12];
  void *s2121c1f6[3];
  ::S2121C13_nt s2121c1f7;
  ::S2121C13_nt s2121c1f8;
  ::S2121C13_nt s2121c1f9;
  virtual  ~S2121C1(); // _ZN7S2121C1D1Ev
  virtual void  v1(); // _ZN7S2121C12v1Ev
  S2121C1(); // tgen
};
//SIG(1 S2121C1) C1{ BC2{ BC3{ BC4{ vd v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 Fp Fi FC5{ BC6{ m Fp Fi FC7{ m} FC7}} FC5 Fi} vd v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 FC8{ m FC9{ m FL[2]}} FC8 FC8 FC8 FC10{ m FC8} FC11{ m FC8 FC8 FC8 FC8} FC11 FC8 FC8 FC8 Fp FC10 FC12{ m FC13{ m Fp Fi FC14{ m}} Fi} Fi Fp[7] FC15{ m Fp Fi FC14 FC16{ m}} Fi:8 Fi:8 Fi:16 Fi:16 Fi:8 Fi:8 Fi:8 Fi:32 Fi:8 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fi[7] Fp[6] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 FC17{ BC18{ m Fp Fi FC16 FC19{ m}}} Fp[4] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:16 Fi:16 Fi:16 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:8 Fi:8 Fi:8 Fp[7] FC20{ m Fp Fi[2] FC19} Fp[2] Fi:16 Fi:16 FC17 FC20 FC21{ m Fp Fi[2] FC22{ m}} Fp[2] Fi:24 Fi:8 Fp} vd v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 Fp} vd v1 Fi[3] FC23{ m Fl} Fi[4] Fc Fi[38] Fc[12] Fp[3] FC8 FC8 FC8}


 S2121C1 ::~S2121C1(){ note_dtor("S2121C1", this);}
void  S2121C1 ::v1(){vfunc_called(this, "_ZN7S2121C12v1Ev");}
S2121C1 ::S2121C1(){ note_ctor("S2121C1", this);} // tgen

static void Test_S2121C1()
{
  extern Class_Descriptor cd_S2121C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(141,225)];
    init_test(&cd_S2121C1, buf);
    S2121C1 *dp, &lv = *(dp=new (buf) S2121C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1120,896), "sizeof(S2121C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2121C1)");
    check_base_class_offset(lv, (S2121C4_nt*)(S2121C3_nt*)(S2121C2_nt*), 0, "S2121C1");
    check_base_class_offset(lv, (S2121C3_nt*)(S2121C2_nt*), 0, "S2121C1");
    check_base_class_offset(lv, (S2121C2_nt*), 0, "S2121C1");
    check_field_offset(lv, s2121c1f0, ABISELECT(840,636), "S2121C1.s2121c1f0");
    check_field_offset(lv, s2121c1f1, ABISELECT(856,648), "S2121C1.s2121c1f1");
    check_field_offset(lv, s2121c1f2, ABISELECT(864,652), "S2121C1.s2121c1f2");
    check_field_offset(lv, s2121c1f3, ABISELECT(880,668), "S2121C1.s2121c1f3");
    check_field_offset(lv, s2121c1f4, ABISELECT(884,672), "S2121C1.s2121c1f4");
    check_field_offset(lv, s2121c1f5, ABISELECT(1036,824), "S2121C1.s2121c1f5");
    check_field_offset(lv, s2121c1f6, ABISELECT(1048,836), "S2121C1.s2121c1f6");
    check_field_offset(lv, s2121c1f7, ABISELECT(1072,848), "S2121C1.s2121c1f7");
    check_field_offset(lv, s2121c1f8, ABISELECT(1088,864), "S2121C1.s2121c1f8");
    check_field_offset(lv, s2121c1f9, ABISELECT(1104,880), "S2121C1.s2121c1f9");
    test_class_info(&lv, &cd_S2121C1);
    dp->~S2121C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2121C1(Test_S2121C1, "S2121C1", ABISELECT(1120,896));

#else // __cplusplus

extern void _ZN7S2121C1C1Ev();
extern void _ZN7S2121C1D1Ev();
Name_Map name_map_S2121C1[] = {
  NSPAIR(_ZN7S2121C1C1Ev),
  NSPAIR(_ZN7S2121C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C4_nt;
extern VTBL_ENTRY _ZTI10S2121C4_nt[];
extern  VTBL_ENTRY _ZTV10S2121C4_nt[];
extern Class_Descriptor cd_S2121C3_nt;
extern VTBL_ENTRY _ZTI10S2121C3_nt[];
extern  VTBL_ENTRY _ZTV10S2121C3_nt[];
extern Class_Descriptor cd_S2121C2_nt;
extern VTBL_ENTRY _ZTI10S2121C2_nt[];
extern  VTBL_ENTRY _ZTV10S2121C2_nt[];
static Base_Class bases_S2121C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C4_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_S2121C3_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_S2121C2_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 _ZTI7S2121C1[];
extern void _ZN7S2121C1D1Ev();
extern void _ZN7S2121C1D0Ev();
extern void _ZN10S2121C4_nt2v2Ev();
extern void _ZN10S2121C4_nt2v3Ev();
extern void _ZN10S2121C4_nt2v4Ev();
extern void _ZN10S2121C4_nt2v5Ev();
extern void _ZN10S2121C4_nt2v6Ev();
extern void _ZN10S2121C4_nt2v7Ev();
extern void _ZN10S2121C4_nt2v8Ev();
extern void _ZN10S2121C4_nt2v9Ev();
extern void _ZN10S2121C4_nt3v10Ev();
extern void _ZN10S2121C4_nt3v11Ev();
extern void _ZN10S2121C4_nt3v12Ev();
extern void _ZN10S2121C4_nt3v13Ev();
extern void _ZN10S2121C4_nt3v14Ev();
extern void _ZN10S2121C4_nt3v15Ev();
extern void _ZN10S2121C4_nt3v16Ev();
extern void _ZN10S2121C4_nt3v17Ev();
extern void _ZN10S2121C4_nt3v18Ev();
extern void _ZN10S2121C4_nt3v19Ev();
extern void _ZN10S2121C4_nt3v20Ev();
extern void _ZN10S2121C4_nt3v21Ev();
extern void _ZN10S2121C4_nt3v22Ev();
extern void _ZN10S2121C4_nt3v23Ev();
extern void _ZN10S2121C4_nt3v24Ev();
extern void _ZN10S2121C3_nt3v25Ev();
extern void _ZN10S2121C3_nt3v26Ev();
extern void _ZN10S2121C3_nt3v27Ev();
extern void _ZN10S2121C3_nt3v28Ev();
extern void _ZN10S2121C3_nt3v29Ev();
extern void _ZN10S2121C3_nt3v30Ev();
extern void _ZN10S2121C3_nt3v31Ev();
extern void _ZN10S2121C3_nt3v32Ev();
extern void _ZN10S2121C3_nt3v33Ev();
extern void _ZN10S2121C3_nt3v34Ev();
extern void _ZN10S2121C3_nt3v35Ev();
extern void _ZN10S2121C3_nt3v36Ev();
extern void _ZN10S2121C3_nt3v37Ev();
extern void _ZN10S2121C3_nt3v38Ev();
extern void _ZN10S2121C3_nt3v39Ev();
extern void _ZN10S2121C3_nt3v40Ev();
extern void _ZN10S2121C3_nt3v41Ev();
extern void _ZN10S2121C3_nt3v42Ev();
extern void _ZN10S2121C3_nt3v43Ev();
extern void _ZN10S2121C3_nt3v44Ev();
extern void _ZN10S2121C3_nt3v45Ev();
extern void _ZN10S2121C3_nt3v46Ev();
extern void _ZN10S2121C3_nt3v47Ev();
extern void _ZN10S2121C3_nt3v48Ev();
extern void _ZN10S2121C3_nt3v49Ev();
extern void _ZN10S2121C3_nt3v50Ev();
extern void _ZN10S2121C3_nt3v51Ev();
extern void _ZN10S2121C3_nt3v52Ev();
extern void _ZN10S2121C3_nt3v53Ev();
extern void _ZN10S2121C3_nt3v54Ev();
extern void _ZN10S2121C3_nt3v55Ev();
extern void _ZN10S2121C3_nt3v56Ev();
extern void _ZN10S2121C3_nt3v57Ev();
extern void _ZN10S2121C3_nt3v58Ev();
extern void _ZN10S2121C3_nt3v59Ev();
extern void _ZN10S2121C3_nt3v60Ev();
extern void _ZN10S2121C3_nt3v61Ev();
extern void _ZN10S2121C3_nt3v62Ev();
extern void _ZN10S2121C3_nt3v63Ev();
extern void _ZN10S2121C3_nt3v64Ev();
extern void _ZN10S2121C3_nt3v65Ev();
extern void _ZN10S2121C3_nt3v66Ev();
extern void _ZN10S2121C3_nt3v67Ev();
extern void _ZN10S2121C3_nt3v68Ev();
extern void _ZN10S2121C3_nt3v69Ev();
extern void _ZN10S2121C3_nt3v70Ev();
extern void _ZN10S2121C3_nt3v71Ev();
extern void _ZN10S2121C3_nt3v72Ev();
extern void _ZN10S2121C3_nt3v73Ev();
extern void _ZN10S2121C3_nt3v74Ev();
extern void _ZN10S2121C3_nt3v75Ev();
extern void _ZN10S2121C3_nt3v76Ev();
extern void _ZN10S2121C3_nt3v77Ev();
extern void _ZN10S2121C3_nt3v78Ev();
extern void _ZN10S2121C3_nt3v79Ev();
extern void _ZN10S2121C3_nt3v80Ev();
extern void _ZN10S2121C3_nt3v81Ev();
extern void _ZN10S2121C3_nt3v82Ev();
extern void _ZN10S2121C3_nt3v83Ev();
extern void _ZN10S2121C3_nt3v84Ev();
extern void _ZN10S2121C3_nt3v85Ev();
extern void _ZN10S2121C3_nt3v86Ev();
extern void _ZN10S2121C3_nt3v87Ev();
extern void _ZN10S2121C3_nt3v88Ev();
extern void _ZN10S2121C3_nt3v89Ev();
extern void _ZN10S2121C3_nt3v90Ev();
extern void _ZN10S2121C3_nt3v91Ev();
extern void _ZN10S2121C3_nt3v92Ev();
extern void _ZN10S2121C3_nt3v93Ev();
extern void _ZN10S2121C3_nt3v94Ev();
extern void _ZN10S2121C3_nt3v95Ev();
extern void _ZN10S2121C3_nt3v96Ev();
extern void _ZN10S2121C3_nt3v97Ev();
extern void _ZN10S2121C3_nt3v98Ev();
extern void _ZN10S2121C3_nt3v99Ev();
extern void _ZN10S2121C3_nt4v100Ev();
extern void _ZN10S2121C3_nt4v101Ev();
extern void _ZN10S2121C3_nt4v102Ev();
extern void _ZN10S2121C2_nt4v103Ev();
extern void _ZN10S2121C2_nt4v104Ev();
extern void _ZN10S2121C2_nt4v105Ev();
extern void _ZN10S2121C2_nt4v106Ev();
extern void _ZN10S2121C2_nt4v107Ev();
extern void _ZN10S2121C2_nt4v108Ev();
extern void _ZN10S2121C2_nt4v109Ev();
extern void _ZN10S2121C2_nt4v110Ev();
extern void _ZN10S2121C2_nt4v111Ev();
extern void _ZN10S2121C2_nt4v112Ev();
extern void _ZN7S2121C12v1Ev();
static  VTBL_ENTRY vtc_S2121C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2121C1[0]),
  (VTBL_ENTRY)&_ZN7S2121C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2121C1D0Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN10S2121C2_nt4v103Ev,
  (VTBL_ENTRY)&_ZN10S2121C2_nt4v104Ev,
  (VTBL_ENTRY)&_ZN10S2121C2_nt4v105Ev,
  (VTBL_ENTRY)&_ZN10S2121C2_nt4v106Ev,
  (VTBL_ENTRY)&_ZN10S2121C2_nt4v107Ev,
  (VTBL_ENTRY)&_ZN10S2121C2_nt4v108Ev,
  (VTBL_ENTRY)&_ZN10S2121C2_nt4v109Ev,
  (VTBL_ENTRY)&_ZN10S2121C2_nt4v110Ev,
  (VTBL_ENTRY)&_ZN10S2121C2_nt4v111Ev,
  (VTBL_ENTRY)&_ZN10S2121C2_nt4v112Ev,
  (VTBL_ENTRY)&_ZN7S2121C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S2121C1[];
extern  VTBL_ENTRY _ZTV7S2121C1[];
Class_Descriptor cd_S2121C1 = {  "S2121C1", // class name
  bases_S2121C1, 3,
  &(vtc_S2121C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1120,896), // object size
  NSPAIRA(_ZTI7S2121C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2121C1),116, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S287C6  {
  int s287c6f0;
  __tsi64 s287c6f1;
  void *s287c6f2[4];
  int s287c6f3[2];
  void *s287c6f4;
  ::S3350C4_nt s287c6f5;
  void *s287c6f6[2];
  virtual  ~S287C6(); // _ZN6S287C6D1Ev
  virtual void  v9(); // _ZN6S287C62v9Ev
  virtual void  v10(); // _ZN6S287C63v10Ev
  virtual void  v11(); // _ZN6S287C63v11Ev
  virtual void  v12(); // _ZN6S287C63v12Ev
  virtual void  v13(); // _ZN6S287C63v13Ev
  virtual void  v14(); // _ZN6S287C63v14Ev
  virtual void  v15(); // _ZN6S287C63v15Ev
  virtual void  v16(); // _ZN6S287C63v16Ev
  virtual void  v17(); // _ZN6S287C63v17Ev
  virtual void  v18(); // _ZN6S287C63v18Ev
  virtual void  v19(); // _ZN6S287C63v19Ev
  virtual void  v20(); // _ZN6S287C63v20Ev
  virtual void  v21(); // _ZN6S287C63v21Ev
  virtual void  v22(); // _ZN6S287C63v22Ev
  virtual void  v23(); // _ZN6S287C63v23Ev
  virtual void  v24(); // _ZN6S287C63v24Ev
  virtual void  v25(); // _ZN6S287C63v25Ev
  virtual void  v26(); // _ZN6S287C63v26Ev
  virtual void  v27(); // _ZN6S287C63v27Ev
  virtual void  v28(); // _ZN6S287C63v28Ev
  virtual void  v29(); // _ZN6S287C63v29Ev
  virtual void  v30(); // _ZN6S287C63v30Ev
  virtual void  v31(); // _ZN6S287C63v31Ev
  virtual void  v32(); // _ZN6S287C63v32Ev
  virtual void  v33(); // _ZN6S287C63v33Ev
  virtual void  v34(); // _ZN6S287C63v34Ev
  virtual void  v35(); // _ZN6S287C63v35Ev
  virtual void  v36(); // _ZN6S287C63v36Ev
  virtual void  v37(); // _ZN6S287C63v37Ev
  virtual void  v38(); // _ZN6S287C63v38Ev
  virtual void  v39(); // _ZN6S287C63v39Ev
  virtual void  v40(); // _ZN6S287C63v40Ev
  virtual void  v41(); // _ZN6S287C63v41Ev
  virtual void  v42(); // _ZN6S287C63v42Ev
  virtual void  v43(); // _ZN6S287C63v43Ev
  virtual void  v44(); // _ZN6S287C63v44Ev
  virtual void  v45(); // _ZN6S287C63v45Ev
  virtual void  v46(); // _ZN6S287C63v46Ev
  virtual void  v47(); // _ZN6S287C63v47Ev
  virtual void  v48(); // _ZN6S287C63v48Ev
  virtual void  v49(); // _ZN6S287C63v49Ev
  virtual void  v50(); // _ZN6S287C63v50Ev
  virtual void  v51(); // _ZN6S287C63v51Ev
  virtual void  v52(); // _ZN6S287C63v52Ev
  virtual void  v53(); // _ZN6S287C63v53Ev
  virtual void  v54(); // _ZN6S287C63v54Ev
  virtual void  v55(); // _ZN6S287C63v55Ev
  virtual void  v56(); // _ZN6S287C63v56Ev
  virtual void  v57(); // _ZN6S287C63v57Ev
  virtual void  v58(); // _ZN6S287C63v58Ev
  virtual void  v59(); // _ZN6S287C63v59Ev
  virtual void  v60(); // _ZN6S287C63v60Ev
  virtual void  v61(); // _ZN6S287C63v61Ev
  virtual void  v62(); // _ZN6S287C63v62Ev
  virtual void  v63(); // _ZN6S287C63v63Ev
  virtual void  v64(); // _ZN6S287C63v64Ev
  virtual void  v65(); // _ZN6S287C63v65Ev
  virtual void  v66(); // _ZN6S287C63v66Ev
  virtual void  v67(); // _ZN6S287C63v67Ev
  virtual void  v68(); // _ZN6S287C63v68Ev
  virtual void  v69(); // _ZN6S287C63v69Ev
  virtual void  v70(); // _ZN6S287C63v70Ev
  virtual void  v71(); // _ZN6S287C63v71Ev
  virtual void  v72(); // _ZN6S287C63v72Ev
  S287C6(); // tgen
};
//SIG(-1 S287C6) 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]}


 S287C6 ::~S287C6(){ note_dtor("S287C6", this);}
void  S287C6 ::v9(){vfunc_called(this, "_ZN6S287C62v9Ev");}
void  S287C6 ::v10(){vfunc_called(this, "_ZN6S287C63v10Ev");}
void  S287C6 ::v11(){vfunc_called(this, "_ZN6S287C63v11Ev");}
void  S287C6 ::v12(){vfunc_called(this, "_ZN6S287C63v12Ev");}
void  S287C6 ::v13(){vfunc_called(this, "_ZN6S287C63v13Ev");}
void  S287C6 ::v14(){vfunc_called(this, "_ZN6S287C63v14Ev");}
void  S287C6 ::v15(){vfunc_called(this, "_ZN6S287C63v15Ev");}
void  S287C6 ::v16(){vfunc_called(this, "_ZN6S287C63v16Ev");}
void  S287C6 ::v17(){vfunc_called(this, "_ZN6S287C63v17Ev");}
void  S287C6 ::v18(){vfunc_called(this, "_ZN6S287C63v18Ev");}
void  S287C6 ::v19(){vfunc_called(this, "_ZN6S287C63v19Ev");}
void  S287C6 ::v20(){vfunc_called(this, "_ZN6S287C63v20Ev");}
void  S287C6 ::v21(){vfunc_called(this, "_ZN6S287C63v21Ev");}
void  S287C6 ::v22(){vfunc_called(this, "_ZN6S287C63v22Ev");}
void  S287C6 ::v23(){vfunc_called(this, "_ZN6S287C63v23Ev");}
void  S287C6 ::v24(){vfunc_called(this, "_ZN6S287C63v24Ev");}
void  S287C6 ::v25(){vfunc_called(this, "_ZN6S287C63v25Ev");}
void  S287C6 ::v26(){vfunc_called(this, "_ZN6S287C63v26Ev");}
void  S287C6 ::v27(){vfunc_called(this, "_ZN6S287C63v27Ev");}
void  S287C6 ::v28(){vfunc_called(this, "_ZN6S287C63v28Ev");}
void  S287C6 ::v29(){vfunc_called(this, "_ZN6S287C63v29Ev");}
void  S287C6 ::v30(){vfunc_called(this, "_ZN6S287C63v30Ev");}
void  S287C6 ::v31(){vfunc_called(this, "_ZN6S287C63v31Ev");}
void  S287C6 ::v32(){vfunc_called(this, "_ZN6S287C63v32Ev");}
void  S287C6 ::v33(){vfunc_called(this, "_ZN6S287C63v33Ev");}
void  S287C6 ::v34(){vfunc_called(this, "_ZN6S287C63v34Ev");}
void  S287C6 ::v35(){vfunc_called(this, "_ZN6S287C63v35Ev");}
void  S287C6 ::v36(){vfunc_called(this, "_ZN6S287C63v36Ev");}
void  S287C6 ::v37(){vfunc_called(this, "_ZN6S287C63v37Ev");}
void  S287C6 ::v38(){vfunc_called(this, "_ZN6S287C63v38Ev");}
void  S287C6 ::v39(){vfunc_called(this, "_ZN6S287C63v39Ev");}
void  S287C6 ::v40(){vfunc_called(this, "_ZN6S287C63v40Ev");}
void  S287C6 ::v41(){vfunc_called(this, "_ZN6S287C63v41Ev");}
void  S287C6 ::v42(){vfunc_called(this, "_ZN6S287C63v42Ev");}
void  S287C6 ::v43(){vfunc_called(this, "_ZN6S287C63v43Ev");}
void  S287C6 ::v44(){vfunc_called(this, "_ZN6S287C63v44Ev");}
void  S287C6 ::v45(){vfunc_called(this, "_ZN6S287C63v45Ev");}
void  S287C6 ::v46(){vfunc_called(this, "_ZN6S287C63v46Ev");}
void  S287C6 ::v47(){vfunc_called(this, "_ZN6S287C63v47Ev");}
void  S287C6 ::v48(){vfunc_called(this, "_ZN6S287C63v48Ev");}
void  S287C6 ::v49(){vfunc_called(this, "_ZN6S287C63v49Ev");}
void  S287C6 ::v50(){vfunc_called(this, "_ZN6S287C63v50Ev");}
void  S287C6 ::v51(){vfunc_called(this, "_ZN6S287C63v51Ev");}
void  S287C6 ::v52(){vfunc_called(this, "_ZN6S287C63v52Ev");}
void  S287C6 ::v53(){vfunc_called(this, "_ZN6S287C63v53Ev");}
void  S287C6 ::v54(){vfunc_called(this, "_ZN6S287C63v54Ev");}
void  S287C6 ::v55(){vfunc_called(this, "_ZN6S287C63v55Ev");}
void  S287C6 ::v56(){vfunc_called(this, "_ZN6S287C63v56Ev");}
void  S287C6 ::v57(){vfunc_called(this, "_ZN6S287C63v57Ev");}
void  S287C6 ::v58(){vfunc_called(this, "_ZN6S287C63v58Ev");}
void  S287C6 ::v59(){vfunc_called(this, "_ZN6S287C63v59Ev");}
void  S287C6 ::v60(){vfunc_called(this, "_ZN6S287C63v60Ev");}
void  S287C6 ::v61(){vfunc_called(this, "_ZN6S287C63v61Ev");}
void  S287C6 ::v62(){vfunc_called(this, "_ZN6S287C63v62Ev");}
void  S287C6 ::v63(){vfunc_called(this, "_ZN6S287C63v63Ev");}
void  S287C6 ::v64(){vfunc_called(this, "_ZN6S287C63v64Ev");}
void  S287C6 ::v65(){vfunc_called(this, "_ZN6S287C63v65Ev");}
void  S287C6 ::v66(){vfunc_called(this, "_ZN6S287C63v66Ev");}
void  S287C6 ::v67(){vfunc_called(this, "_ZN6S287C63v67Ev");}
void  S287C6 ::v68(){vfunc_called(this, "_ZN6S287C63v68Ev");}
void  S287C6 ::v69(){vfunc_called(this, "_ZN6S287C63v69Ev");}
void  S287C6 ::v70(){vfunc_called(this, "_ZN6S287C63v70Ev");}
void  S287C6 ::v71(){vfunc_called(this, "_ZN6S287C63v71Ev");}
void  S287C6 ::v72(){vfunc_called(this, "_ZN6S287C63v72Ev");}
S287C6 ::S287C6(){ note_ctor("S287C6", this);} // tgen

static void Test_S287C6()
{
  extern Class_Descriptor cd_S287C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S287C6, buf);
    S287C6 *dp, &lv = *(dp=new (buf) S287C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S287C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S287C6)");
    check_field_offset(lv, s287c6f0, ABISELECT(8,4), "S287C6.s287c6f0");
    check_field_offset(lv, s287c6f1, ABISELECT(16,8), "S287C6.s287c6f1");
    check_field_offset(lv, s287c6f2, ABISELECT(24,16), "S287C6.s287c6f2");
    check_field_offset(lv, s287c6f3, ABISELECT(56,32), "S287C6.s287c6f3");
    check_field_offset(lv, s287c6f4, ABISELECT(64,40), "S287C6.s287c6f4");
    check_field_offset(lv, s287c6f5, ABISELECT(72,44), "S287C6.s287c6f5");
    check_field_offset(lv, s287c6f6, ABISELECT(80,52), "S287C6.s287c6f6");
    test_class_info(&lv, &cd_S287C6);
    dp->~S287C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS287C6(Test_S287C6, "S287C6", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S287C6C1Ev();
extern void _ZN6S287C6D1Ev();
Name_Map name_map_S287C6[] = {
  NSPAIR(_ZN6S287C6C1Ev),
  NSPAIR(_ZN6S287C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S287C6[];
extern void _ZN6S287C6D1Ev();
extern void _ZN6S287C6D0Ev();
extern void _ZN6S287C62v9Ev();
extern void _ZN6S287C63v10Ev();
extern void _ZN6S287C63v11Ev();
extern void _ZN6S287C63v12Ev();
extern void _ZN6S287C63v13Ev();
extern void _ZN6S287C63v14Ev();
extern void _ZN6S287C63v15Ev();
extern void _ZN6S287C63v16Ev();
extern void _ZN6S287C63v17Ev();
extern void _ZN6S287C63v18Ev();
extern void _ZN6S287C63v19Ev();
extern void _ZN6S287C63v20Ev();
extern void _ZN6S287C63v21Ev();
extern void _ZN6S287C63v22Ev();
extern void _ZN6S287C63v23Ev();
extern void _ZN6S287C63v24Ev();
extern void _ZN6S287C63v25Ev();
extern void _ZN6S287C63v26Ev();
extern void _ZN6S287C63v27Ev();
extern void _ZN6S287C63v28Ev();
extern void _ZN6S287C63v29Ev();
extern void _ZN6S287C63v30Ev();
extern void _ZN6S287C63v31Ev();
extern void _ZN6S287C63v32Ev();
extern void _ZN6S287C63v33Ev();
extern void _ZN6S287C63v34Ev();
extern void _ZN6S287C63v35Ev();
extern void _ZN6S287C63v36Ev();
extern void _ZN6S287C63v37Ev();
extern void _ZN6S287C63v38Ev();
extern void _ZN6S287C63v39Ev();
extern void _ZN6S287C63v40Ev();
extern void _ZN6S287C63v41Ev();
extern void _ZN6S287C63v42Ev();
extern void _ZN6S287C63v43Ev();
extern void _ZN6S287C63v44Ev();
extern void _ZN6S287C63v45Ev();
extern void _ZN6S287C63v46Ev();
extern void _ZN6S287C63v47Ev();
extern void _ZN6S287C63v48Ev();
extern void _ZN6S287C63v49Ev();
extern void _ZN6S287C63v50Ev();
extern void _ZN6S287C63v51Ev();
extern void _ZN6S287C63v52Ev();
extern void _ZN6S287C63v53Ev();
extern void _ZN6S287C63v54Ev();
extern void _ZN6S287C63v55Ev();
extern void _ZN6S287C63v56Ev();
extern void _ZN6S287C63v57Ev();
extern void _ZN6S287C63v58Ev();
extern void _ZN6S287C63v59Ev();
extern void _ZN6S287C63v60Ev();
extern void _ZN6S287C63v61Ev();
extern void _ZN6S287C63v62Ev();
extern void _ZN6S287C63v63Ev();
extern void _ZN6S287C63v64Ev();
extern void _ZN6S287C63v65Ev();
extern void _ZN6S287C63v66Ev();
extern void _ZN6S287C63v67Ev();
extern void _ZN6S287C63v68Ev();
extern void _ZN6S287C63v69Ev();
extern void _ZN6S287C63v70Ev();
extern void _ZN6S287C63v71Ev();
extern void _ZN6S287C63v72Ev();
static  VTBL_ENTRY vtc_S287C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S287C6[0]),
  (VTBL_ENTRY)&_ZN6S287C6D1Ev,
  (VTBL_ENTRY)&_ZN6S287C6D0Ev,
  (VTBL_ENTRY)&_ZN6S287C62v9Ev,
  (VTBL_ENTRY)&_ZN6S287C63v10Ev,
  (VTBL_ENTRY)&_ZN6S287C63v11Ev,
  (VTBL_ENTRY)&_ZN6S287C63v12Ev,
  (VTBL_ENTRY)&_ZN6S287C63v13Ev,
  (VTBL_ENTRY)&_ZN6S287C63v14Ev,
  (VTBL_ENTRY)&_ZN6S287C63v15Ev,
  (VTBL_ENTRY)&_ZN6S287C63v16Ev,
  (VTBL_ENTRY)&_ZN6S287C63v17Ev,
  (VTBL_ENTRY)&_ZN6S287C63v18Ev,
  (VTBL_ENTRY)&_ZN6S287C63v19Ev,
  (VTBL_ENTRY)&_ZN6S287C63v20Ev,
  (VTBL_ENTRY)&_ZN6S287C63v21Ev,
  (VTBL_ENTRY)&_ZN6S287C63v22Ev,
  (VTBL_ENTRY)&_ZN6S287C63v23Ev,
  (VTBL_ENTRY)&_ZN6S287C63v24Ev,
  (VTBL_ENTRY)&_ZN6S287C63v25Ev,
  (VTBL_ENTRY)&_ZN6S287C63v26Ev,
  (VTBL_ENTRY)&_ZN6S287C63v27Ev,
  (VTBL_ENTRY)&_ZN6S287C63v28Ev,
  (VTBL_ENTRY)&_ZN6S287C63v29Ev,
  (VTBL_ENTRY)&_ZN6S287C63v30Ev,
  (VTBL_ENTRY)&_ZN6S287C63v31Ev,
  (VTBL_ENTRY)&_ZN6S287C63v32Ev,
  (VTBL_ENTRY)&_ZN6S287C63v33Ev,
  (VTBL_ENTRY)&_ZN6S287C63v34Ev,
  (VTBL_ENTRY)&_ZN6S287C63v35Ev,
  (VTBL_ENTRY)&_ZN6S287C63v36Ev,
  (VTBL_ENTRY)&_ZN6S287C63v37Ev,
  (VTBL_ENTRY)&_ZN6S287C63v38Ev,
  (VTBL_ENTRY)&_ZN6S287C63v39Ev,
  (VTBL_ENTRY)&_ZN6S287C63v40Ev,
  (VTBL_ENTRY)&_ZN6S287C63v41Ev,
  (VTBL_ENTRY)&_ZN6S287C63v42Ev,
  (VTBL_ENTRY)&_ZN6S287C63v43Ev,
  (VTBL_ENTRY)&_ZN6S287C63v44Ev,
  (VTBL_ENTRY)&_ZN6S287C63v45Ev,
  (VTBL_ENTRY)&_ZN6S287C63v46Ev,
  (VTBL_ENTRY)&_ZN6S287C63v47Ev,
  (VTBL_ENTRY)&_ZN6S287C63v48Ev,
  (VTBL_ENTRY)&_ZN6S287C63v49Ev,
  (VTBL_ENTRY)&_ZN6S287C63v50Ev,
  (VTBL_ENTRY)&_ZN6S287C63v51Ev,
  (VTBL_ENTRY)&_ZN6S287C63v52Ev,
  (VTBL_ENTRY)&_ZN6S287C63v53Ev,
  (VTBL_ENTRY)&_ZN6S287C63v54Ev,
  (VTBL_ENTRY)&_ZN6S287C63v55Ev,
  (VTBL_ENTRY)&_ZN6S287C63v56Ev,
  (VTBL_ENTRY)&_ZN6S287C63v57Ev,
  (VTBL_ENTRY)&_ZN6S287C63v58Ev,
  (VTBL_ENTRY)&_ZN6S287C63v59Ev,
  (VTBL_ENTRY)&_ZN6S287C63v60Ev,
  (VTBL_ENTRY)&_ZN6S287C63v61Ev,
  (VTBL_ENTRY)&_ZN6S287C63v62Ev,
  (VTBL_ENTRY)&_ZN6S287C63v63Ev,
  (VTBL_ENTRY)&_ZN6S287C63v64Ev,
  (VTBL_ENTRY)&_ZN6S287C63v65Ev,
  (VTBL_ENTRY)&_ZN6S287C63v66Ev,
  (VTBL_ENTRY)&_ZN6S287C63v67Ev,
  (VTBL_ENTRY)&_ZN6S287C63v68Ev,
  (VTBL_ENTRY)&_ZN6S287C63v69Ev,
  (VTBL_ENTRY)&_ZN6S287C63v70Ev,
  (VTBL_ENTRY)&_ZN6S287C63v71Ev,
  (VTBL_ENTRY)&_ZN6S287C63v72Ev,
};
extern VTBL_ENTRY _ZTI6S287C6[];
extern  VTBL_ENTRY _ZTV6S287C6[];
Class_Descriptor cd_S287C6 = {  "S287C6", // class name
  0,0,//no base classes
  &(vtc_S287C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S287C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S287C6),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  S287C10  : S3350C7_nt {
};
//SIG(-1 S287C10) C1{ BC2{ m Fp Fi[2]}}



static void Test_S287C10()
{
  extern Class_Descriptor cd_S287C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S287C10, buf);
    S287C10 &lv = *(new (buf) S287C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S287C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S287C10)");
    check_base_class_offset(lv, (S3350C7_nt*), 0, "S287C10");
    test_class_info(&lv, &cd_S287C10);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS287C10(Test_S287C10, "S287C10", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3350C7_nt;
static Base_Class bases_S287C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3350C7_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_S287C10 = {  "S287C10", // class name
  bases_S287C10, 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  S287C9  : S287C10 {
};
//SIG(-1 S287C9) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S287C9()
{
  extern Class_Descriptor cd_S287C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S287C9, buf);
    S287C9 &lv = *(new (buf) S287C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S287C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S287C9)");
    check_base_class_offset(lv, (S3350C7_nt*)(S287C10*), 0, "S287C9");
    check_base_class_offset(lv, (S287C10*), 0, "S287C9");
    test_class_info(&lv, &cd_S287C9);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS287C9(Test_S287C9, "S287C9", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3350C7_nt;
extern Class_Descriptor cd_S287C10;
static Base_Class bases_S287C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3350C7_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_S287C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S287C9 = {  "S287C9", // class name
  bases_S287C9, 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  S287C8_nt  : S287C9 {
};
//SIG(-1 S287C8_nt) C1{ BC2{ BC3{ BC4{ m Fp Fi[2]}}}}



//skip512 S287C8_nt

#else // __cplusplus

extern Class_Descriptor cd_S3350C7_nt;
extern Class_Descriptor cd_S287C10;
extern Class_Descriptor cd_S287C9;
static Base_Class bases_S287C8_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3350C7_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_S287C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S287C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S287C5  : S287C6 {
  int s287c5f0[2];
  void *s287c5f1;
  int s287c5f2[2];
  ::S287C8_nt s287c5f3;
  ::S287C8_nt s287c5f4;
  ::S2121C38 s287c5f5;
  ::S287C8_nt s287c5f6;
  unsigned int s287c5f7:1;
  unsigned int s287c5f8:1;
  unsigned int s287c5f9:1;
  unsigned int s287c5f10:1;
  unsigned int s287c5f11:1;
  int s287c5f12[2];
  virtual  ~S287C5(); // _ZN6S287C5D1Ev
  virtual void  v73(); // _ZN6S287C53v73Ev
  virtual void  v74(); // _ZN6S287C53v74Ev
  virtual void  v75(); // _ZN6S287C53v75Ev
  virtual void  v76(); // _ZN6S287C53v76Ev
  virtual void  v77(); // _ZN6S287C53v77Ev
  virtual void  v78(); // _ZN6S287C53v78Ev
  virtual void  v79(); // _ZN6S287C53v79Ev
  virtual void  v80(); // _ZN6S287C53v80Ev
  virtual void  v81(); // _ZN6S287C53v81Ev
  virtual void  v82(); // _ZN6S287C53v82Ev
  virtual void  v83(); // _ZN6S287C53v83Ev
  virtual void  v84(); // _ZN6S287C53v84Ev
  virtual void  v85(); // _ZN6S287C53v85Ev
  virtual void  v86(); // _ZN6S287C53v86Ev
  virtual void  v87(); // _ZN6S287C53v87Ev
  virtual void  v88(); // _ZN6S287C53v88Ev
  virtual void  v89(); // _ZN6S287C53v89Ev
  virtual void  v90(); // _ZN6S287C53v90Ev
  virtual void  v91(); // _ZN6S287C53v91Ev
  virtual void  v92(); // _ZN6S287C53v92Ev
  virtual void  v93(); // _ZN6S287C53v93Ev
  virtual void  v94(); // _ZN6S287C53v94Ev
  S287C5(); // tgen
};
//SIG(-1 S287C5) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S287C5 ::~S287C5(){ note_dtor("S287C5", this);}
void  S287C5 ::v73(){vfunc_called(this, "_ZN6S287C53v73Ev");}
void  S287C5 ::v74(){vfunc_called(this, "_ZN6S287C53v74Ev");}
void  S287C5 ::v75(){vfunc_called(this, "_ZN6S287C53v75Ev");}
void  S287C5 ::v76(){vfunc_called(this, "_ZN6S287C53v76Ev");}
void  S287C5 ::v77(){vfunc_called(this, "_ZN6S287C53v77Ev");}
void  S287C5 ::v78(){vfunc_called(this, "_ZN6S287C53v78Ev");}
void  S287C5 ::v79(){vfunc_called(this, "_ZN6S287C53v79Ev");}
void  S287C5 ::v80(){vfunc_called(this, "_ZN6S287C53v80Ev");}
void  S287C5 ::v81(){vfunc_called(this, "_ZN6S287C53v81Ev");}
void  S287C5 ::v82(){vfunc_called(this, "_ZN6S287C53v82Ev");}
void  S287C5 ::v83(){vfunc_called(this, "_ZN6S287C53v83Ev");}
void  S287C5 ::v84(){vfunc_called(this, "_ZN6S287C53v84Ev");}
void  S287C5 ::v85(){vfunc_called(this, "_ZN6S287C53v85Ev");}
void  S287C5 ::v86(){vfunc_called(this, "_ZN6S287C53v86Ev");}
void  S287C5 ::v87(){vfunc_called(this, "_ZN6S287C53v87Ev");}
void  S287C5 ::v88(){vfunc_called(this, "_ZN6S287C53v88Ev");}
void  S287C5 ::v89(){vfunc_called(this, "_ZN6S287C53v89Ev");}
void  S287C5 ::v90(){vfunc_called(this, "_ZN6S287C53v90Ev");}
void  S287C5 ::v91(){vfunc_called(this, "_ZN6S287C53v91Ev");}
void  S287C5 ::v92(){vfunc_called(this, "_ZN6S287C53v92Ev");}
void  S287C5 ::v93(){vfunc_called(this, "_ZN6S287C53v93Ev");}
void  S287C5 ::v94(){vfunc_called(this, "_ZN6S287C53v94Ev");}
S287C5 ::S287C5(){ note_ctor("S287C5", this);} // tgen

static void Test_S287C5()
{
  extern Class_Descriptor cd_S287C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S287C5, buf);
    S287C5 *dp, &lv = *(dp=new (buf) S287C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S287C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S287C5)");
    check_base_class_offset(lv, (S287C6*), 0, "S287C5");
    check_field_offset(lv, s287c5f0, ABISELECT(96,60), "S287C5.s287c5f0");
    check_field_offset(lv, s287c5f1, ABISELECT(104,68), "S287C5.s287c5f1");
    check_field_offset(lv, s287c5f2, ABISELECT(112,72), "S287C5.s287c5f2");
    check_field_offset(lv, s287c5f3, ABISELECT(120,80), "S287C5.s287c5f3");
    check_field_offset(lv, s287c5f4, ABISELECT(136,92), "S287C5.s287c5f4");
    check_field_offset(lv, s287c5f5, ABISELECT(152,104), "S287C5.s287c5f5");
    check_field_offset(lv, s287c5f6, ABISELECT(160,108), "S287C5.s287c5f6");
    set_bf_and_test(lv, s287c5f7, ABISELECT(176,120), 0, 1, 1, "S287C5");
    set_bf_and_test(lv, s287c5f8, ABISELECT(176,120), 1, 1, 1, "S287C5");
    set_bf_and_test(lv, s287c5f9, ABISELECT(176,120), 2, 1, 1, "S287C5");
    set_bf_and_test(lv, s287c5f10, ABISELECT(176,120), 3, 1, 1, "S287C5");
    set_bf_and_test(lv, s287c5f11, ABISELECT(176,120), 4, 1, 1, "S287C5");
    check_field_offset(lv, s287c5f12, ABISELECT(180,124), "S287C5.s287c5f12");
    test_class_info(&lv, &cd_S287C5);
    dp->~S287C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS287C5(Test_S287C5, "S287C5", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN6S287C5C1Ev();
extern void _ZN6S287C5D1Ev();
Name_Map name_map_S287C5[] = {
  NSPAIR(_ZN6S287C5C1Ev),
  NSPAIR(_ZN6S287C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S287C6;
extern VTBL_ENTRY _ZTI6S287C6[];
extern  VTBL_ENTRY _ZTV6S287C6[];
static Base_Class bases_S287C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S287C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI6S287C5[];
extern void _ZN6S287C5D1Ev();
extern void _ZN6S287C5D0Ev();
extern void _ZN6S287C62v9Ev();
extern void _ZN6S287C63v10Ev();
extern void _ZN6S287C63v11Ev();
extern void _ZN6S287C63v12Ev();
extern void _ZN6S287C63v13Ev();
extern void _ZN6S287C63v14Ev();
extern void _ZN6S287C63v15Ev();
extern void _ZN6S287C63v16Ev();
extern void _ZN6S287C63v17Ev();
extern void _ZN6S287C63v18Ev();
extern void _ZN6S287C63v19Ev();
extern void _ZN6S287C63v20Ev();
extern void _ZN6S287C63v21Ev();
extern void _ZN6S287C63v22Ev();
extern void _ZN6S287C63v23Ev();
extern void _ZN6S287C63v24Ev();
extern void _ZN6S287C63v25Ev();
extern void _ZN6S287C63v26Ev();
extern void _ZN6S287C63v27Ev();
extern void _ZN6S287C63v28Ev();
extern void _ZN6S287C63v29Ev();
extern void _ZN6S287C63v30Ev();
extern void _ZN6S287C63v31Ev();
extern void _ZN6S287C63v32Ev();
extern void _ZN6S287C63v33Ev();
extern void _ZN6S287C63v34Ev();
extern void _ZN6S287C63v35Ev();
extern void _ZN6S287C63v36Ev();
extern void _ZN6S287C63v37Ev();
extern void _ZN6S287C63v38Ev();
extern void _ZN6S287C63v39Ev();
extern void _ZN6S287C63v40Ev();
extern void _ZN6S287C63v41Ev();
extern void _ZN6S287C63v42Ev();
extern void _ZN6S287C63v43Ev();
extern void _ZN6S287C63v44Ev();
extern void _ZN6S287C63v45Ev();
extern void _ZN6S287C63v46Ev();
extern void _ZN6S287C63v47Ev();
extern void _ZN6S287C63v48Ev();
extern void _ZN6S287C63v49Ev();
extern void _ZN6S287C63v50Ev();
extern void _ZN6S287C63v51Ev();
extern void _ZN6S287C63v52Ev();
extern void _ZN6S287C63v53Ev();
extern void _ZN6S287C63v54Ev();
extern void _ZN6S287C63v55Ev();
extern void _ZN6S287C63v56Ev();
extern void _ZN6S287C63v57Ev();
extern void _ZN6S287C63v58Ev();
extern void _ZN6S287C63v59Ev();
extern void _ZN6S287C63v60Ev();
extern void _ZN6S287C63v61Ev();
extern void _ZN6S287C63v62Ev();
extern void _ZN6S287C63v63Ev();
extern void _ZN6S287C63v64Ev();
extern void _ZN6S287C63v65Ev();
extern void _ZN6S287C63v66Ev();
extern void _ZN6S287C63v67Ev();
extern void _ZN6S287C63v68Ev();
extern void _ZN6S287C63v69Ev();
extern void _ZN6S287C63v70Ev();
extern void _ZN6S287C63v71Ev();
extern void _ZN6S287C63v72Ev();
extern void _ZN6S287C53v73Ev();
extern void _ZN6S287C53v74Ev();
extern void _ZN6S287C53v75Ev();
extern void _ZN6S287C53v76Ev();
extern void _ZN6S287C53v77Ev();
extern void _ZN6S287C53v78Ev();
extern void _ZN6S287C53v79Ev();
extern void _ZN6S287C53v80Ev();
extern void _ZN6S287C53v81Ev();
extern void _ZN6S287C53v82Ev();
extern void _ZN6S287C53v83Ev();
extern void _ZN6S287C53v84Ev();
extern void _ZN6S287C53v85Ev();
extern void _ZN6S287C53v86Ev();
extern void _ZN6S287C53v87Ev();
extern void _ZN6S287C53v88Ev();
extern void _ZN6S287C53v89Ev();
extern void _ZN6S287C53v90Ev();
extern void _ZN6S287C53v91Ev();
extern void _ZN6S287C53v92Ev();
extern void _ZN6S287C53v93Ev();
extern void _ZN6S287C53v94Ev();
static  VTBL_ENTRY vtc_S287C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S287C5[0]),
  (VTBL_ENTRY)&_ZN6S287C5D1Ev,
  (VTBL_ENTRY)&_ZN6S287C5D0Ev,
  (VTBL_ENTRY)&_ZN6S287C62v9Ev,
  (VTBL_ENTRY)&_ZN6S287C63v10Ev,
  (VTBL_ENTRY)&_ZN6S287C63v11Ev,
  (VTBL_ENTRY)&_ZN6S287C63v12Ev,
  (VTBL_ENTRY)&_ZN6S287C63v13Ev,
  (VTBL_ENTRY)&_ZN6S287C63v14Ev,
  (VTBL_ENTRY)&_ZN6S287C63v15Ev,
  (VTBL_ENTRY)&_ZN6S287C63v16Ev,
  (VTBL_ENTRY)&_ZN6S287C63v17Ev,
  (VTBL_ENTRY)&_ZN6S287C63v18Ev,
  (VTBL_ENTRY)&_ZN6S287C63v19Ev,
  (VTBL_ENTRY)&_ZN6S287C63v20Ev,
  (VTBL_ENTRY)&_ZN6S287C63v21Ev,
  (VTBL_ENTRY)&_ZN6S287C63v22Ev,
  (VTBL_ENTRY)&_ZN6S287C63v23Ev,
  (VTBL_ENTRY)&_ZN6S287C63v24Ev,
  (VTBL_ENTRY)&_ZN6S287C63v25Ev,
  (VTBL_ENTRY)&_ZN6S287C63v26Ev,
  (VTBL_ENTRY)&_ZN6S287C63v27Ev,
  (VTBL_ENTRY)&_ZN6S287C63v28Ev,
  (VTBL_ENTRY)&_ZN6S287C63v29Ev,
  (VTBL_ENTRY)&_ZN6S287C63v30Ev,
  (VTBL_ENTRY)&_ZN6S287C63v31Ev,
  (VTBL_ENTRY)&_ZN6S287C63v32Ev,
  (VTBL_ENTRY)&_ZN6S287C63v33Ev,
  (VTBL_ENTRY)&_ZN6S287C63v34Ev,
  (VTBL_ENTRY)&_ZN6S287C63v35Ev,
  (VTBL_ENTRY)&_ZN6S287C63v36Ev,
  (VTBL_ENTRY)&_ZN6S287C63v37Ev,
  (VTBL_ENTRY)&_ZN6S287C63v38Ev,
  (VTBL_ENTRY)&_ZN6S287C63v39Ev,
  (VTBL_ENTRY)&_ZN6S287C63v40Ev,
  (VTBL_ENTRY)&_ZN6S287C63v41Ev,
  (VTBL_ENTRY)&_ZN6S287C63v42Ev,
  (VTBL_ENTRY)&_ZN6S287C63v43Ev,
  (VTBL_ENTRY)&_ZN6S287C63v44Ev,
  (VTBL_ENTRY)&_ZN6S287C63v45Ev,
  (VTBL_ENTRY)&_ZN6S287C63v46Ev,
  (VTBL_ENTRY)&_ZN6S287C63v47Ev,
  (VTBL_ENTRY)&_ZN6S287C63v48Ev,
  (VTBL_ENTRY)&_ZN6S287C63v49Ev,
  (VTBL_ENTRY)&_ZN6S287C63v50Ev,
  (VTBL_ENTRY)&_ZN6S287C63v51Ev,
  (VTBL_ENTRY)&_ZN6S287C63v52Ev,
  (VTBL_ENTRY)&_ZN6S287C63v53Ev,
  (VTBL_ENTRY)&_ZN6S287C63v54Ev,
  (VTBL_ENTRY)&_ZN6S287C63v55Ev,
  (VTBL_ENTRY)&_ZN6S287C63v56Ev,
  (VTBL_ENTRY)&_ZN6S287C63v57Ev,
  (VTBL_ENTRY)&_ZN6S287C63v58Ev,
  (VTBL_ENTRY)&_ZN6S287C63v59Ev,
  (VTBL_ENTRY)&_ZN6S287C63v60Ev,
  (VTBL_ENTRY)&_ZN6S287C63v61Ev,
  (VTBL_ENTRY)&_ZN6S287C63v62Ev,
  (VTBL_ENTRY)&_ZN6S287C63v63Ev,
  (VTBL_ENTRY)&_ZN6S287C63v64Ev,
  (VTBL_ENTRY)&_ZN6S287C63v65Ev,
  (VTBL_ENTRY)&_ZN6S287C63v66Ev,
  (VTBL_ENTRY)&_ZN6S287C63v67Ev,
  (VTBL_ENTRY)&_ZN6S287C63v68Ev,
  (VTBL_ENTRY)&_ZN6S287C63v69Ev,
  (VTBL_ENTRY)&_ZN6S287C63v70Ev,
  (VTBL_ENTRY)&_ZN6S287C63v71Ev,
  (VTBL_ENTRY)&_ZN6S287C63v72Ev,
  (VTBL_ENTRY)&_ZN6S287C53v73Ev,
  (VTBL_ENTRY)&_ZN6S287C53v74Ev,
  (VTBL_ENTRY)&_ZN6S287C53v75Ev,
  (VTBL_ENTRY)&_ZN6S287C53v76Ev,
  (VTBL_ENTRY)&_ZN6S287C53v77Ev,
  (VTBL_ENTRY)&_ZN6S287C53v78Ev,
  (VTBL_ENTRY)&_ZN6S287C53v79Ev,
  (VTBL_ENTRY)&_ZN6S287C53v80Ev,
  (VTBL_ENTRY)&_ZN6S287C53v81Ev,
  (VTBL_ENTRY)&_ZN6S287C53v82Ev,
  (VTBL_ENTRY)&_ZN6S287C53v83Ev,
  (VTBL_ENTRY)&_ZN6S287C53v84Ev,
  (VTBL_ENTRY)&_ZN6S287C53v85Ev,
  (VTBL_ENTRY)&_ZN6S287C53v86Ev,
  (VTBL_ENTRY)&_ZN6S287C53v87Ev,
  (VTBL_ENTRY)&_ZN6S287C53v88Ev,
  (VTBL_ENTRY)&_ZN6S287C53v89Ev,
  (VTBL_ENTRY)&_ZN6S287C53v90Ev,
  (VTBL_ENTRY)&_ZN6S287C53v91Ev,
  (VTBL_ENTRY)&_ZN6S287C53v92Ev,
  (VTBL_ENTRY)&_ZN6S287C53v93Ev,
  (VTBL_ENTRY)&_ZN6S287C53v94Ev,
};
extern VTBL_ENTRY _ZTI6S287C5[];
extern  VTBL_ENTRY _ZTV6S287C5[];
Class_Descriptor cd_S287C5 = {  "S287C5", // class name
  bases_S287C5, 1,
  &(vtc_S287C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI6S287C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S287C5),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S287C20  : S3350C7_nt {
};
//SIG(-1 S287C20) C1{ BC2{ m Fp Fi[2]}}



static void Test_S287C20()
{
  extern Class_Descriptor cd_S287C20;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S287C20, buf);
    S287C20 &lv = *(new (buf) S287C20());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S287C20)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S287C20)");
    check_base_class_offset(lv, (S3350C7_nt*), 0, "S287C20");
    test_class_info(&lv, &cd_S287C20);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS287C20(Test_S287C20, "S287C20", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3350C7_nt;
static Base_Class bases_S287C20[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3350C7_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_S287C20 = {  "S287C20", // class name
  bases_S287C20, 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  S287C19  : S287C20 {
};
//SIG(-1 S287C19) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S287C19()
{
  extern Class_Descriptor cd_S287C19;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S287C19, buf);
    S287C19 &lv = *(new (buf) S287C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S287C19)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S287C19)");
    check_base_class_offset(lv, (S3350C7_nt*)(S287C20*), 0, "S287C19");
    check_base_class_offset(lv, (S287C20*), 0, "S287C19");
    test_class_info(&lv, &cd_S287C19);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS287C19(Test_S287C19, "S287C19", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3350C7_nt;
extern Class_Descriptor cd_S287C20;
static Base_Class bases_S287C19[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3350C7_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_S287C20,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S287C19 = {  "S287C19", // class name
  bases_S287C19, 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  S287C4  : S287C5 {
  unsigned int s287c4f0:1;
  unsigned int s287c4f1:1;
  unsigned int s287c4f2:1;
  ::S3350C17 s287c4f3;
  ::S3350C11 s287c4f4;
  ::S3350C5_nt s287c4f5;
  ::S287C19 s287c4f6;
  int s287c4f7[3];
  virtual  ~S287C4(); // _ZN6S287C4D1Ev
  virtual void  v95(); // _ZN6S287C43v95Ev
  virtual void  v96(); // _ZN6S287C43v96Ev
  virtual void  v97(); // _ZN6S287C43v97Ev
  virtual void  v98(); // _ZN6S287C43v98Ev
  virtual void  v99(); // _ZN6S287C43v99Ev
  virtual void  v100(); // _ZN6S287C44v100Ev
  virtual void  v101(); // _ZN6S287C44v101Ev
  virtual void  v102(); // _ZN6S287C44v102Ev
  virtual void  v103(); // _ZN6S287C44v103Ev
  virtual void  v104(); // _ZN6S287C44v104Ev
  virtual void  v105(); // _ZN6S287C44v105Ev
  virtual void  v106(); // _ZN6S287C44v106Ev
  virtual void  v107(); // _ZN6S287C44v107Ev
  virtual void  v108(); // _ZN6S287C44v108Ev
  virtual void  v109(); // _ZN6S287C44v109Ev
  virtual void  v110(); // _ZN6S287C44v110Ev
  virtual void  v111(); // _ZN6S287C44v111Ev
  virtual void  v112(); // _ZN6S287C44v112Ev
  virtual void  v113(); // _ZN6S287C44v113Ev
  virtual void  v114(); // _ZN6S287C44v114Ev
  S287C4(); // tgen
};
//SIG(-1 S287C4) C1{ BC2{ BC3{ vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 FC10{ BC11{ BC8}} FC12{ BC13{ BC8}} FC14{ BC15{ BC8}} FC16{ BC17{ BC8}} Fi[3]}


 S287C4 ::~S287C4(){ note_dtor("S287C4", this);}
void  S287C4 ::v95(){vfunc_called(this, "_ZN6S287C43v95Ev");}
void  S287C4 ::v96(){vfunc_called(this, "_ZN6S287C43v96Ev");}
void  S287C4 ::v97(){vfunc_called(this, "_ZN6S287C43v97Ev");}
void  S287C4 ::v98(){vfunc_called(this, "_ZN6S287C43v98Ev");}
void  S287C4 ::v99(){vfunc_called(this, "_ZN6S287C43v99Ev");}
void  S287C4 ::v100(){vfunc_called(this, "_ZN6S287C44v100Ev");}
void  S287C4 ::v101(){vfunc_called(this, "_ZN6S287C44v101Ev");}
void  S287C4 ::v102(){vfunc_called(this, "_ZN6S287C44v102Ev");}
void  S287C4 ::v103(){vfunc_called(this, "_ZN6S287C44v103Ev");}
void  S287C4 ::v104(){vfunc_called(this, "_ZN6S287C44v104Ev");}
void  S287C4 ::v105(){vfunc_called(this, "_ZN6S287C44v105Ev");}
void  S287C4 ::v106(){vfunc_called(this, "_ZN6S287C44v106Ev");}
void  S287C4 ::v107(){vfunc_called(this, "_ZN6S287C44v107Ev");}
void  S287C4 ::v108(){vfunc_called(this, "_ZN6S287C44v108Ev");}
void  S287C4 ::v109(){vfunc_called(this, "_ZN6S287C44v109Ev");}
void  S287C4 ::v110(){vfunc_called(this, "_ZN6S287C44v110Ev");}
void  S287C4 ::v111(){vfunc_called(this, "_ZN6S287C44v111Ev");}
void  S287C4 ::v112(){vfunc_called(this, "_ZN6S287C44v112Ev");}
void  S287C4 ::v113(){vfunc_called(this, "_ZN6S287C44v113Ev");}
void  S287C4 ::v114(){vfunc_called(this, "_ZN6S287C44v114Ev");}
S287C4 ::S287C4(){ note_ctor("S287C4", this);} // tgen

static void Test_S287C4()
{
  extern Class_Descriptor cd_S287C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S287C4, buf);
    S287C4 *dp, &lv = *(dp=new (buf) S287C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S287C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S287C4)");
    check_base_class_offset(lv, (S287C6*)(S287C5*), 0, "S287C4");
    check_base_class_offset(lv, (S287C5*), 0, "S287C4");
    set_bf_and_test(lv, s287c4f0, ABISELECT(188,132), 0, 1, 1, "S287C4");
    set_bf_and_test(lv, s287c4f1, ABISELECT(188,132), 1, 1, 1, "S287C4");
    set_bf_and_test(lv, s287c4f2, ABISELECT(188,132), 2, 1, 1, "S287C4");
    check_field_offset(lv, s287c4f3, ABISELECT(192,136), "S287C4.s287c4f3");
    check_field_offset(lv, s287c4f4, ABISELECT(208,148), "S287C4.s287c4f4");
    check_field_offset(lv, s287c4f5, ABISELECT(224,160), "S287C4.s287c4f5");
    check_field_offset(lv, s287c4f6, ABISELECT(240,172), "S287C4.s287c4f6");
    check_field_offset(lv, s287c4f7, ABISELECT(256,184), "S287C4.s287c4f7");
    test_class_info(&lv, &cd_S287C4);
    dp->~S287C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS287C4(Test_S287C4, "S287C4", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN6S287C4C1Ev();
extern void _ZN6S287C4D1Ev();
Name_Map name_map_S287C4[] = {
  NSPAIR(_ZN6S287C4C1Ev),
  NSPAIR(_ZN6S287C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S287C6;
extern VTBL_ENTRY _ZTI6S287C6[];
extern  VTBL_ENTRY _ZTV6S287C6[];
extern Class_Descriptor cd_S287C5;
extern VTBL_ENTRY _ZTI6S287C5[];
extern  VTBL_ENTRY _ZTV6S287C5[];
static Base_Class bases_S287C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S287C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S287C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S287C4[];
extern void _ZN6S287C4D1Ev();
extern void _ZN6S287C4D0Ev();
extern void _ZN6S287C62v9Ev();
extern void _ZN6S287C63v10Ev();
extern void _ZN6S287C63v11Ev();
extern void _ZN6S287C63v12Ev();
extern void _ZN6S287C63v13Ev();
extern void _ZN6S287C63v14Ev();
extern void _ZN6S287C63v15Ev();
extern void _ZN6S287C63v16Ev();
extern void _ZN6S287C63v17Ev();
extern void _ZN6S287C63v18Ev();
extern void _ZN6S287C63v19Ev();
extern void _ZN6S287C63v20Ev();
extern void _ZN6S287C63v21Ev();
extern void _ZN6S287C63v22Ev();
extern void _ZN6S287C63v23Ev();
extern void _ZN6S287C63v24Ev();
extern void _ZN6S287C63v25Ev();
extern void _ZN6S287C63v26Ev();
extern void _ZN6S287C63v27Ev();
extern void _ZN6S287C63v28Ev();
extern void _ZN6S287C63v29Ev();
extern void _ZN6S287C63v30Ev();
extern void _ZN6S287C63v31Ev();
extern void _ZN6S287C63v32Ev();
extern void _ZN6S287C63v33Ev();
extern void _ZN6S287C63v34Ev();
extern void _ZN6S287C63v35Ev();
extern void _ZN6S287C63v36Ev();
extern void _ZN6S287C63v37Ev();
extern void _ZN6S287C63v38Ev();
extern void _ZN6S287C63v39Ev();
extern void _ZN6S287C63v40Ev();
extern void _ZN6S287C63v41Ev();
extern void _ZN6S287C63v42Ev();
extern void _ZN6S287C63v43Ev();
extern void _ZN6S287C63v44Ev();
extern void _ZN6S287C63v45Ev();
extern void _ZN6S287C63v46Ev();
extern void _ZN6S287C63v47Ev();
extern void _ZN6S287C63v48Ev();
extern void _ZN6S287C63v49Ev();
extern void _ZN6S287C63v50Ev();
extern void _ZN6S287C63v51Ev();
extern void _ZN6S287C63v52Ev();
extern void _ZN6S287C63v53Ev();
extern void _ZN6S287C63v54Ev();
extern void _ZN6S287C63v55Ev();
extern void _ZN6S287C63v56Ev();
extern void _ZN6S287C63v57Ev();
extern void _ZN6S287C63v58Ev();
extern void _ZN6S287C63v59Ev();
extern void _ZN6S287C63v60Ev();
extern void _ZN6S287C63v61Ev();
extern void _ZN6S287C63v62Ev();
extern void _ZN6S287C63v63Ev();
extern void _ZN6S287C63v64Ev();
extern void _ZN6S287C63v65Ev();
extern void _ZN6S287C63v66Ev();
extern void _ZN6S287C63v67Ev();
extern void _ZN6S287C63v68Ev();
extern void _ZN6S287C63v69Ev();
extern void _ZN6S287C63v70Ev();
extern void _ZN6S287C63v71Ev();
extern void _ZN6S287C63v72Ev();
extern void _ZN6S287C53v73Ev();
extern void _ZN6S287C53v74Ev();
extern void _ZN6S287C53v75Ev();
extern void _ZN6S287C53v76Ev();
extern void _ZN6S287C53v77Ev();
extern void _ZN6S287C53v78Ev();
extern void _ZN6S287C53v79Ev();
extern void _ZN6S287C53v80Ev();
extern void _ZN6S287C53v81Ev();
extern void _ZN6S287C53v82Ev();
extern void _ZN6S287C53v83Ev();
extern void _ZN6S287C53v84Ev();
extern void _ZN6S287C53v85Ev();
extern void _ZN6S287C53v86Ev();
extern void _ZN6S287C53v87Ev();
extern void _ZN6S287C53v88Ev();
extern void _ZN6S287C53v89Ev();
extern void _ZN6S287C53v90Ev();
extern void _ZN6S287C53v91Ev();
extern void _ZN6S287C53v92Ev();
extern void _ZN6S287C53v93Ev();
extern void _ZN6S287C53v94Ev();
extern void _ZN6S287C43v95Ev();
extern void _ZN6S287C43v96Ev();
extern void _ZN6S287C43v97Ev();
extern void _ZN6S287C43v98Ev();
extern void _ZN6S287C43v99Ev();
extern void _ZN6S287C44v100Ev();
extern void _ZN6S287C44v101Ev();
extern void _ZN6S287C44v102Ev();
extern void _ZN6S287C44v103Ev();
extern void _ZN6S287C44v104Ev();
extern void _ZN6S287C44v105Ev();
extern void _ZN6S287C44v106Ev();
extern void _ZN6S287C44v107Ev();
extern void _ZN6S287C44v108Ev();
extern void _ZN6S287C44v109Ev();
extern void _ZN6S287C44v110Ev();
extern void _ZN6S287C44v111Ev();
extern void _ZN6S287C44v112Ev();
extern void _ZN6S287C44v113Ev();
extern void _ZN6S287C44v114Ev();
static  VTBL_ENTRY vtc_S287C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S287C4[0]),
  (VTBL_ENTRY)&_ZN6S287C4D1Ev,
  (VTBL_ENTRY)&_ZN6S287C4D0Ev,
  (VTBL_ENTRY)&_ZN6S287C62v9Ev,
  (VTBL_ENTRY)&_ZN6S287C63v10Ev,
  (VTBL_ENTRY)&_ZN6S287C63v11Ev,
  (VTBL_ENTRY)&_ZN6S287C63v12Ev,
  (VTBL_ENTRY)&_ZN6S287C63v13Ev,
  (VTBL_ENTRY)&_ZN6S287C63v14Ev,
  (VTBL_ENTRY)&_ZN6S287C63v15Ev,
  (VTBL_ENTRY)&_ZN6S287C63v16Ev,
  (VTBL_ENTRY)&_ZN6S287C63v17Ev,
  (VTBL_ENTRY)&_ZN6S287C63v18Ev,
  (VTBL_ENTRY)&_ZN6S287C63v19Ev,
  (VTBL_ENTRY)&_ZN6S287C63v20Ev,
  (VTBL_ENTRY)&_ZN6S287C63v21Ev,
  (VTBL_ENTRY)&_ZN6S287C63v22Ev,
  (VTBL_ENTRY)&_ZN6S287C63v23Ev,
  (VTBL_ENTRY)&_ZN6S287C63v24Ev,
  (VTBL_ENTRY)&_ZN6S287C63v25Ev,
  (VTBL_ENTRY)&_ZN6S287C63v26Ev,
  (VTBL_ENTRY)&_ZN6S287C63v27Ev,
  (VTBL_ENTRY)&_ZN6S287C63v28Ev,
  (VTBL_ENTRY)&_ZN6S287C63v29Ev,
  (VTBL_ENTRY)&_ZN6S287C63v30Ev,
  (VTBL_ENTRY)&_ZN6S287C63v31Ev,
  (VTBL_ENTRY)&_ZN6S287C63v32Ev,
  (VTBL_ENTRY)&_ZN6S287C63v33Ev,
  (VTBL_ENTRY)&_ZN6S287C63v34Ev,
  (VTBL_ENTRY)&_ZN6S287C63v35Ev,
  (VTBL_ENTRY)&_ZN6S287C63v36Ev,
  (VTBL_ENTRY)&_ZN6S287C63v37Ev,
  (VTBL_ENTRY)&_ZN6S287C63v38Ev,
  (VTBL_ENTRY)&_ZN6S287C63v39Ev,
  (VTBL_ENTRY)&_ZN6S287C63v40Ev,
  (VTBL_ENTRY)&_ZN6S287C63v41Ev,
  (VTBL_ENTRY)&_ZN6S287C63v42Ev,
  (VTBL_ENTRY)&_ZN6S287C63v43Ev,
  (VTBL_ENTRY)&_ZN6S287C63v44Ev,
  (VTBL_ENTRY)&_ZN6S287C63v45Ev,
  (VTBL_ENTRY)&_ZN6S287C63v46Ev,
  (VTBL_ENTRY)&_ZN6S287C63v47Ev,
  (VTBL_ENTRY)&_ZN6S287C63v48Ev,
  (VTBL_ENTRY)&_ZN6S287C63v49Ev,
  (VTBL_ENTRY)&_ZN6S287C63v50Ev,
  (VTBL_ENTRY)&_ZN6S287C63v51Ev,
  (VTBL_ENTRY)&_ZN6S287C63v52Ev,
  (VTBL_ENTRY)&_ZN6S287C63v53Ev,
  (VTBL_ENTRY)&_ZN6S287C63v54Ev,
  (VTBL_ENTRY)&_ZN6S287C63v55Ev,
  (VTBL_ENTRY)&_ZN6S287C63v56Ev,
  (VTBL_ENTRY)&_ZN6S287C63v57Ev,
  (VTBL_ENTRY)&_ZN6S287C63v58Ev,
  (VTBL_ENTRY)&_ZN6S287C63v59Ev,
  (VTBL_ENTRY)&_ZN6S287C63v60Ev,
  (VTBL_ENTRY)&_ZN6S287C63v61Ev,
  (VTBL_ENTRY)&_ZN6S287C63v62Ev,
  (VTBL_ENTRY)&_ZN6S287C63v63Ev,
  (VTBL_ENTRY)&_ZN6S287C63v64Ev,
  (VTBL_ENTRY)&_ZN6S287C63v65Ev,
  (VTBL_ENTRY)&_ZN6S287C63v66Ev,
  (VTBL_ENTRY)&_ZN6S287C63v67Ev,
  (VTBL_ENTRY)&_ZN6S287C63v68Ev,
  (VTBL_ENTRY)&_ZN6S287C63v69Ev,
  (VTBL_ENTRY)&_ZN6S287C63v70Ev,
  (VTBL_ENTRY)&_ZN6S287C63v71Ev,
  (VTBL_ENTRY)&_ZN6S287C63v72Ev,
  (VTBL_ENTRY)&_ZN6S287C53v73Ev,
  (VTBL_ENTRY)&_ZN6S287C53v74Ev,
  (VTBL_ENTRY)&_ZN6S287C53v75Ev,
  (VTBL_ENTRY)&_ZN6S287C53v76Ev,
  (VTBL_ENTRY)&_ZN6S287C53v77Ev,
  (VTBL_ENTRY)&_ZN6S287C53v78Ev,
  (VTBL_ENTRY)&_ZN6S287C53v79Ev,
  (VTBL_ENTRY)&_ZN6S287C53v80Ev,
  (VTBL_ENTRY)&_ZN6S287C53v81Ev,
  (VTBL_ENTRY)&_ZN6S287C53v82Ev,
  (VTBL_ENTRY)&_ZN6S287C53v83Ev,
  (VTBL_ENTRY)&_ZN6S287C53v84Ev,
  (VTBL_ENTRY)&_ZN6S287C53v85Ev,
  (VTBL_ENTRY)&_ZN6S287C53v86Ev,
  (VTBL_ENTRY)&_ZN6S287C53v87Ev,
  (VTBL_ENTRY)&_ZN6S287C53v88Ev,
  (VTBL_ENTRY)&_ZN6S287C53v89Ev,
  (VTBL_ENTRY)&_ZN6S287C53v90Ev,
  (VTBL_ENTRY)&_ZN6S287C53v91Ev,
  (VTBL_ENTRY)&_ZN6S287C53v92Ev,
  (VTBL_ENTRY)&_ZN6S287C53v93Ev,
  (VTBL_ENTRY)&_ZN6S287C53v94Ev,
  (VTBL_ENTRY)&_ZN6S287C43v95Ev,
  (VTBL_ENTRY)&_ZN6S287C43v96Ev,
  (VTBL_ENTRY)&_ZN6S287C43v97Ev,
  (VTBL_ENTRY)&_ZN6S287C43v98Ev,
  (VTBL_ENTRY)&_ZN6S287C43v99Ev,
  (VTBL_ENTRY)&_ZN6S287C44v100Ev,
  (VTBL_ENTRY)&_ZN6S287C44v101Ev,
  (VTBL_ENTRY)&_ZN6S287C44v102Ev,
  (VTBL_ENTRY)&_ZN6S287C44v103Ev,
  (VTBL_ENTRY)&_ZN6S287C44v104Ev,
  (VTBL_ENTRY)&_ZN6S287C44v105Ev,
  (VTBL_ENTRY)&_ZN6S287C44v106Ev,
  (VTBL_ENTRY)&_ZN6S287C44v107Ev,
  (VTBL_ENTRY)&_ZN6S287C44v108Ev,
  (VTBL_ENTRY)&_ZN6S287C44v109Ev,
  (VTBL_ENTRY)&_ZN6S287C44v110Ev,
  (VTBL_ENTRY)&_ZN6S287C44v111Ev,
  (VTBL_ENTRY)&_ZN6S287C44v112Ev,
  (VTBL_ENTRY)&_ZN6S287C44v113Ev,
  (VTBL_ENTRY)&_ZN6S287C44v114Ev,
};
extern VTBL_ENTRY _ZTI6S287C4[];
extern  VTBL_ENTRY _ZTV6S287C4[];
Class_Descriptor cd_S287C4 = {  "S287C4", // class name
  bases_S287C4, 2,
  &(vtc_S287C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI6S287C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S287C4),110, //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  S287C24  : S3350C7_nt {
};
//SIG(-1 S287C24) C1{ BC2{ m Fp Fi[2]}}



static void Test_S287C24()
{
  extern Class_Descriptor cd_S287C24;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S287C24, buf);
    S287C24 &lv = *(new (buf) S287C24());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S287C24)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S287C24)");
    check_base_class_offset(lv, (S3350C7_nt*), 0, "S287C24");
    test_class_info(&lv, &cd_S287C24);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS287C24(Test_S287C24, "S287C24", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3350C7_nt;
static Base_Class bases_S287C24[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3350C7_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_S287C24 = {  "S287C24", // class name
  bases_S287C24, 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  S287C23  : S287C24 {
};
//SIG(-1 S287C23) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S287C23()
{
  extern Class_Descriptor cd_S287C23;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S287C23, buf);
    S287C23 &lv = *(new (buf) S287C23());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S287C23)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S287C23)");
    check_base_class_offset(lv, (S3350C7_nt*)(S287C24*), 0, "S287C23");
    check_base_class_offset(lv, (S287C24*), 0, "S287C23");
    test_class_info(&lv, &cd_S287C23);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS287C23(Test_S287C23, "S287C23", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3350C7_nt;
extern Class_Descriptor cd_S287C24;
static Base_Class bases_S287C23[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3350C7_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_S287C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S287C23 = {  "S287C23", // class name
  bases_S287C23, 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  S287C28  : S3350C7_nt {
};
//SIG(-1 S287C28) C1{ BC2{ m Fp Fi[2]}}



static void Test_S287C28()
{
  extern Class_Descriptor cd_S287C28;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S287C28, buf);
    S287C28 &lv = *(new (buf) S287C28());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S287C28)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S287C28)");
    check_base_class_offset(lv, (S3350C7_nt*), 0, "S287C28");
    test_class_info(&lv, &cd_S287C28);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS287C28(Test_S287C28, "S287C28", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3350C7_nt;
static Base_Class bases_S287C28[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3350C7_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_S287C28 = {  "S287C28", // class name
  bases_S287C28, 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  S287C27  : S287C28 {
};
//SIG(-1 S287C27) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S287C27()
{
  extern Class_Descriptor cd_S287C27;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S287C27, buf);
    S287C27 &lv = *(new (buf) S287C27());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S287C27)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S287C27)");
    check_base_class_offset(lv, (S3350C7_nt*)(S287C28*), 0, "S287C27");
    check_base_class_offset(lv, (S287C28*), 0, "S287C27");
    test_class_info(&lv, &cd_S287C27);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS287C27(Test_S287C27, "S287C27", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3350C7_nt;
extern Class_Descriptor cd_S287C28;
static Base_Class bases_S287C27[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3350C7_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_S287C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S287C27 = {  "S287C27", // class name
  bases_S287C27, 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  S287C3  : S287C4 {
  void *s287c3f0;
  ::S287C19 s287c3f1;
  ::S287C23 s287c3f2;
  ::S287C23 s287c3f3;
  ::S287C27 s287c3f4;
  ::S287C27 s287c3f5;
  unsigned int s287c3f6:1;
  int s287c3f7[3];
  virtual  ~S287C3(); // _ZN6S287C3D1Ev
  virtual void  v115(); // _ZN6S287C34v115Ev
  virtual void  v116(); // _ZN6S287C34v116Ev
  virtual void  v117(); // _ZN6S287C34v117Ev
  virtual void  v118(); // _ZN6S287C34v118Ev
  virtual void  v119(); // _ZN6S287C34v119Ev
  virtual void  v120(); // _ZN6S287C34v120Ev
  virtual void  v121(); // _ZN6S287C34v121Ev
  virtual void  v122(); // _ZN6S287C34v122Ev
  virtual void  v123(); // _ZN6S287C34v123Ev
  virtual void  v124(); // _ZN6S287C34v124Ev
  virtual void  v125(); // _ZN6S287C34v125Ev
  virtual void  v126(); // _ZN6S287C34v126Ev
  virtual void  v127(); // _ZN6S287C34v127Ev
  virtual void  v128(); // _ZN6S287C34v128Ev
  virtual void  v129(); // _ZN6S287C34v129Ev
  virtual void  v130(); // _ZN6S287C34v130Ev
  virtual void  v131(); // _ZN6S287C34v131Ev
  virtual void  v132(); // _ZN6S287C34v132Ev
  virtual void  v133(); // _ZN6S287C34v133Ev
  virtual void  v134(); // _ZN6S287C34v134Ev
  virtual void  v135(); // _ZN6S287C34v135Ev
  virtual void  v136(); // _ZN6S287C34v136Ev
  S287C3(); // tgen
};
//SIG(-1 S287C3) C1{ BC2{ BC3{ BC4{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 Fi:1 Fi:1 Fi:1 FC11{ BC12{ BC9}} FC13{ BC14{ BC9}} FC15{ BC16{ BC9}} FC17{ BC18{ BC9}} Fi[3]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fp FC17 FC19{ BC20{ BC9}} FC19 FC21{ BC22{ BC9}} FC21 Fi:1 Fi[3]}


 S287C3 ::~S287C3(){ note_dtor("S287C3", this);}
void  S287C3 ::v115(){vfunc_called(this, "_ZN6S287C34v115Ev");}
void  S287C3 ::v116(){vfunc_called(this, "_ZN6S287C34v116Ev");}
void  S287C3 ::v117(){vfunc_called(this, "_ZN6S287C34v117Ev");}
void  S287C3 ::v118(){vfunc_called(this, "_ZN6S287C34v118Ev");}
void  S287C3 ::v119(){vfunc_called(this, "_ZN6S287C34v119Ev");}
void  S287C3 ::v120(){vfunc_called(this, "_ZN6S287C34v120Ev");}
void  S287C3 ::v121(){vfunc_called(this, "_ZN6S287C34v121Ev");}
void  S287C3 ::v122(){vfunc_called(this, "_ZN6S287C34v122Ev");}
void  S287C3 ::v123(){vfunc_called(this, "_ZN6S287C34v123Ev");}
void  S287C3 ::v124(){vfunc_called(this, "_ZN6S287C34v124Ev");}
void  S287C3 ::v125(){vfunc_called(this, "_ZN6S287C34v125Ev");}
void  S287C3 ::v126(){vfunc_called(this, "_ZN6S287C34v126Ev");}
void  S287C3 ::v127(){vfunc_called(this, "_ZN6S287C34v127Ev");}
void  S287C3 ::v128(){vfunc_called(this, "_ZN6S287C34v128Ev");}
void  S287C3 ::v129(){vfunc_called(this, "_ZN6S287C34v129Ev");}
void  S287C3 ::v130(){vfunc_called(this, "_ZN6S287C34v130Ev");}
void  S287C3 ::v131(){vfunc_called(this, "_ZN6S287C34v131Ev");}
void  S287C3 ::v132(){vfunc_called(this, "_ZN6S287C34v132Ev");}
void  S287C3 ::v133(){vfunc_called(this, "_ZN6S287C34v133Ev");}
void  S287C3 ::v134(){vfunc_called(this, "_ZN6S287C34v134Ev");}
void  S287C3 ::v135(){vfunc_called(this, "_ZN6S287C34v135Ev");}
void  S287C3 ::v136(){vfunc_called(this, "_ZN6S287C34v136Ev");}
S287C3 ::S287C3(){ note_ctor("S287C3", this);} // tgen

static void Test_S287C3()
{
  extern Class_Descriptor cd_S287C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(48,70)];
    init_test(&cd_S287C3, buf);
    S287C3 *dp, &lv = *(dp=new (buf) S287C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(376,276), "sizeof(S287C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S287C3)");
    check_base_class_offset(lv, (S287C6*)(S287C5*)(S287C4*), 0, "S287C3");
    check_base_class_offset(lv, (S287C5*)(S287C4*), 0, "S287C3");
    check_base_class_offset(lv, (S287C4*), 0, "S287C3");
    check_field_offset(lv, s287c3f0, ABISELECT(272,196), "S287C3.s287c3f0");
    check_field_offset(lv, s287c3f1, ABISELECT(280,200), "S287C3.s287c3f1");
    check_field_offset(lv, s287c3f2, ABISELECT(296,212), "S287C3.s287c3f2");
    check_field_offset(lv, s287c3f3, ABISELECT(312,224), "S287C3.s287c3f3");
    check_field_offset(lv, s287c3f4, ABISELECT(328,236), "S287C3.s287c3f4");
    check_field_offset(lv, s287c3f5, ABISELECT(344,248), "S287C3.s287c3f5");
    set_bf_and_test(lv, s287c3f6, ABISELECT(360,260), 0, 1, 1, "S287C3");
    check_field_offset(lv, s287c3f7, ABISELECT(364,264), "S287C3.s287c3f7");
    test_class_info(&lv, &cd_S287C3);
    dp->~S287C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS287C3(Test_S287C3, "S287C3", ABISELECT(376,276));

#else // __cplusplus

extern void _ZN6S287C3C1Ev();
extern void _ZN6S287C3D1Ev();
Name_Map name_map_S287C3[] = {
  NSPAIR(_ZN6S287C3C1Ev),
  NSPAIR(_ZN6S287C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S287C6;
extern VTBL_ENTRY _ZTI6S287C6[];
extern  VTBL_ENTRY _ZTV6S287C6[];
extern Class_Descriptor cd_S287C5;
extern VTBL_ENTRY _ZTI6S287C5[];
extern  VTBL_ENTRY _ZTV6S287C5[];
extern Class_Descriptor cd_S287C4;
extern VTBL_ENTRY _ZTI6S287C4[];
extern  VTBL_ENTRY _ZTV6S287C4[];
static Base_Class bases_S287C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S287C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S287C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S287C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S287C3[];
extern void _ZN6S287C3D1Ev();
extern void _ZN6S287C3D0Ev();
extern void _ZN6S287C62v9Ev();
extern void _ZN6S287C63v10Ev();
extern void _ZN6S287C63v11Ev();
extern void _ZN6S287C63v12Ev();
extern void _ZN6S287C63v13Ev();
extern void _ZN6S287C63v14Ev();
extern void _ZN6S287C63v15Ev();
extern void _ZN6S287C63v16Ev();
extern void _ZN6S287C63v17Ev();
extern void _ZN6S287C63v18Ev();
extern void _ZN6S287C63v19Ev();
extern void _ZN6S287C63v20Ev();
extern void _ZN6S287C63v21Ev();
extern void _ZN6S287C63v22Ev();
extern void _ZN6S287C63v23Ev();
extern void _ZN6S287C63v24Ev();
extern void _ZN6S287C63v25Ev();
extern void _ZN6S287C63v26Ev();
extern void _ZN6S287C63v27Ev();
extern void _ZN6S287C63v28Ev();
extern void _ZN6S287C63v29Ev();
extern void _ZN6S287C63v30Ev();
extern void _ZN6S287C63v31Ev();
extern void _ZN6S287C63v32Ev();
extern void _ZN6S287C63v33Ev();
extern void _ZN6S287C63v34Ev();
extern void _ZN6S287C63v35Ev();
extern void _ZN6S287C63v36Ev();
extern void _ZN6S287C63v37Ev();
extern void _ZN6S287C63v38Ev();
extern void _ZN6S287C63v39Ev();
extern void _ZN6S287C63v40Ev();
extern void _ZN6S287C63v41Ev();
extern void _ZN6S287C63v42Ev();
extern void _ZN6S287C63v43Ev();
extern void _ZN6S287C63v44Ev();
extern void _ZN6S287C63v45Ev();
extern void _ZN6S287C63v46Ev();
extern void _ZN6S287C63v47Ev();
extern void _ZN6S287C63v48Ev();
extern void _ZN6S287C63v49Ev();
extern void _ZN6S287C63v50Ev();
extern void _ZN6S287C63v51Ev();
extern void _ZN6S287C63v52Ev();
extern void _ZN6S287C63v53Ev();
extern void _ZN6S287C63v54Ev();
extern void _ZN6S287C63v55Ev();
extern void _ZN6S287C63v56Ev();
extern void _ZN6S287C63v57Ev();
extern void _ZN6S287C63v58Ev();
extern void _ZN6S287C63v59Ev();
extern void _ZN6S287C63v60Ev();
extern void _ZN6S287C63v61Ev();
extern void _ZN6S287C63v62Ev();
extern void _ZN6S287C63v63Ev();
extern void _ZN6S287C63v64Ev();
extern void _ZN6S287C63v65Ev();
extern void _ZN6S287C63v66Ev();
extern void _ZN6S287C63v67Ev();
extern void _ZN6S287C63v68Ev();
extern void _ZN6S287C63v69Ev();
extern void _ZN6S287C63v70Ev();
extern void _ZN6S287C63v71Ev();
extern void _ZN6S287C63v72Ev();
extern void _ZN6S287C53v73Ev();
extern void _ZN6S287C53v74Ev();
extern void _ZN6S287C53v75Ev();
extern void _ZN6S287C53v76Ev();
extern void _ZN6S287C53v77Ev();
extern void _ZN6S287C53v78Ev();
extern void _ZN6S287C53v79Ev();
extern void _ZN6S287C53v80Ev();
extern void _ZN6S287C53v81Ev();
extern void _ZN6S287C53v82Ev();
extern void _ZN6S287C53v83Ev();
extern void _ZN6S287C53v84Ev();
extern void _ZN6S287C53v85Ev();
extern void _ZN6S287C53v86Ev();
extern void _ZN6S287C53v87Ev();
extern void _ZN6S287C53v88Ev();
extern void _ZN6S287C53v89Ev();
extern void _ZN6S287C53v90Ev();
extern void _ZN6S287C53v91Ev();
extern void _ZN6S287C53v92Ev();
extern void _ZN6S287C53v93Ev();
extern void _ZN6S287C53v94Ev();
extern void _ZN6S287C43v95Ev();
extern void _ZN6S287C43v96Ev();
extern void _ZN6S287C43v97Ev();
extern void _ZN6S287C43v98Ev();
extern void _ZN6S287C43v99Ev();
extern void _ZN6S287C44v100Ev();
extern void _ZN6S287C44v101Ev();
extern void _ZN6S287C44v102Ev();
extern void _ZN6S287C44v103Ev();
extern void _ZN6S287C44v104Ev();
extern void _ZN6S287C44v105Ev();
extern void _ZN6S287C44v106Ev();
extern void _ZN6S287C44v107Ev();
extern void _ZN6S287C44v108Ev();
extern void _ZN6S287C44v109Ev();
extern void _ZN6S287C44v110Ev();
extern void _ZN6S287C44v111Ev();
extern void _ZN6S287C44v112Ev();
extern void _ZN6S287C44v113Ev();
extern void _ZN6S287C44v114Ev();
extern void _ZN6S287C34v115Ev();
extern void _ZN6S287C34v116Ev();
extern void _ZN6S287C34v117Ev();
extern void _ZN6S287C34v118Ev();
extern void _ZN6S287C34v119Ev();
extern void _ZN6S287C34v120Ev();
extern void _ZN6S287C34v121Ev();
extern void _ZN6S287C34v122Ev();
extern void _ZN6S287C34v123Ev();
extern void _ZN6S287C34v124Ev();
extern void _ZN6S287C34v125Ev();
extern void _ZN6S287C34v126Ev();
extern void _ZN6S287C34v127Ev();
extern void _ZN6S287C34v128Ev();
extern void _ZN6S287C34v129Ev();
extern void _ZN6S287C34v130Ev();
extern void _ZN6S287C34v131Ev();
extern void _ZN6S287C34v132Ev();
extern void _ZN6S287C34v133Ev();
extern void _ZN6S287C34v134Ev();
extern void _ZN6S287C34v135Ev();
extern void _ZN6S287C34v136Ev();
static  VTBL_ENTRY vtc_S287C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S287C3[0]),
  (VTBL_ENTRY)&_ZN6S287C3D1Ev,
  (VTBL_ENTRY)&_ZN6S287C3D0Ev,
  (VTBL_ENTRY)&_ZN6S287C62v9Ev,
  (VTBL_ENTRY)&_ZN6S287C63v10Ev,
  (VTBL_ENTRY)&_ZN6S287C63v11Ev,
  (VTBL_ENTRY)&_ZN6S287C63v12Ev,
  (VTBL_ENTRY)&_ZN6S287C63v13Ev,
  (VTBL_ENTRY)&_ZN6S287C63v14Ev,
  (VTBL_ENTRY)&_ZN6S287C63v15Ev,
  (VTBL_ENTRY)&_ZN6S287C63v16Ev,
  (VTBL_ENTRY)&_ZN6S287C63v17Ev,
  (VTBL_ENTRY)&_ZN6S287C63v18Ev,
  (VTBL_ENTRY)&_ZN6S287C63v19Ev,
  (VTBL_ENTRY)&_ZN6S287C63v20Ev,
  (VTBL_ENTRY)&_ZN6S287C63v21Ev,
  (VTBL_ENTRY)&_ZN6S287C63v22Ev,
  (VTBL_ENTRY)&_ZN6S287C63v23Ev,
  (VTBL_ENTRY)&_ZN6S287C63v24Ev,
  (VTBL_ENTRY)&_ZN6S287C63v25Ev,
  (VTBL_ENTRY)&_ZN6S287C63v26Ev,
  (VTBL_ENTRY)&_ZN6S287C63v27Ev,
  (VTBL_ENTRY)&_ZN6S287C63v28Ev,
  (VTBL_ENTRY)&_ZN6S287C63v29Ev,
  (VTBL_ENTRY)&_ZN6S287C63v30Ev,
  (VTBL_ENTRY)&_ZN6S287C63v31Ev,
  (VTBL_ENTRY)&_ZN6S287C63v32Ev,
  (VTBL_ENTRY)&_ZN6S287C63v33Ev,
  (VTBL_ENTRY)&_ZN6S287C63v34Ev,
  (VTBL_ENTRY)&_ZN6S287C63v35Ev,
  (VTBL_ENTRY)&_ZN6S287C63v36Ev,
  (VTBL_ENTRY)&_ZN6S287C63v37Ev,
  (VTBL_ENTRY)&_ZN6S287C63v38Ev,
  (VTBL_ENTRY)&_ZN6S287C63v39Ev,
  (VTBL_ENTRY)&_ZN6S287C63v40Ev,
  (VTBL_ENTRY)&_ZN6S287C63v41Ev,
  (VTBL_ENTRY)&_ZN6S287C63v42Ev,
  (VTBL_ENTRY)&_ZN6S287C63v43Ev,
  (VTBL_ENTRY)&_ZN6S287C63v44Ev,
  (VTBL_ENTRY)&_ZN6S287C63v45Ev,
  (VTBL_ENTRY)&_ZN6S287C63v46Ev,
  (VTBL_ENTRY)&_ZN6S287C63v47Ev,
  (VTBL_ENTRY)&_ZN6S287C63v48Ev,
  (VTBL_ENTRY)&_ZN6S287C63v49Ev,
  (VTBL_ENTRY)&_ZN6S287C63v50Ev,
  (VTBL_ENTRY)&_ZN6S287C63v51Ev,
  (VTBL_ENTRY)&_ZN6S287C63v52Ev,
  (VTBL_ENTRY)&_ZN6S287C63v53Ev,
  (VTBL_ENTRY)&_ZN6S287C63v54Ev,
  (VTBL_ENTRY)&_ZN6S287C63v55Ev,
  (VTBL_ENTRY)&_ZN6S287C63v56Ev,
  (VTBL_ENTRY)&_ZN6S287C63v57Ev,
  (VTBL_ENTRY)&_ZN6S287C63v58Ev,
  (VTBL_ENTRY)&_ZN6S287C63v59Ev,
  (VTBL_ENTRY)&_ZN6S287C63v60Ev,
  (VTBL_ENTRY)&_ZN6S287C63v61Ev,
  (VTBL_ENTRY)&_ZN6S287C63v62Ev,
  (VTBL_ENTRY)&_ZN6S287C63v63Ev,
  (VTBL_ENTRY)&_ZN6S287C63v64Ev,
  (VTBL_ENTRY)&_ZN6S287C63v65Ev,
  (VTBL_ENTRY)&_ZN6S287C63v66Ev,
  (VTBL_ENTRY)&_ZN6S287C63v67Ev,
  (VTBL_ENTRY)&_ZN6S287C63v68Ev,
  (VTBL_ENTRY)&_ZN6S287C63v69Ev,
  (VTBL_ENTRY)&_ZN6S287C63v70Ev,
  (VTBL_ENTRY)&_ZN6S287C63v71Ev,
  (VTBL_ENTRY)&_ZN6S287C63v72Ev,
  (VTBL_ENTRY)&_ZN6S287C53v73Ev,
  (VTBL_ENTRY)&_ZN6S287C53v74Ev,
  (VTBL_ENTRY)&_ZN6S287C53v75Ev,
  (VTBL_ENTRY)&_ZN6S287C53v76Ev,
  (VTBL_ENTRY)&_ZN6S287C53v77Ev,
  (VTBL_ENTRY)&_ZN6S287C53v78Ev,
  (VTBL_ENTRY)&_ZN6S287C53v79Ev,
  (VTBL_ENTRY)&_ZN6S287C53v80Ev,
  (VTBL_ENTRY)&_ZN6S287C53v81Ev,
  (VTBL_ENTRY)&_ZN6S287C53v82Ev,
  (VTBL_ENTRY)&_ZN6S287C53v83Ev,
  (VTBL_ENTRY)&_ZN6S287C53v84Ev,
  (VTBL_ENTRY)&_ZN6S287C53v85Ev,
  (VTBL_ENTRY)&_ZN6S287C53v86Ev,
  (VTBL_ENTRY)&_ZN6S287C53v87Ev,
  (VTBL_ENTRY)&_ZN6S287C53v88Ev,
  (VTBL_ENTRY)&_ZN6S287C53v89Ev,
  (VTBL_ENTRY)&_ZN6S287C53v90Ev,
  (VTBL_ENTRY)&_ZN6S287C53v91Ev,
  (VTBL_ENTRY)&_ZN6S287C53v92Ev,
  (VTBL_ENTRY)&_ZN6S287C53v93Ev,
  (VTBL_ENTRY)&_ZN6S287C53v94Ev,
  (VTBL_ENTRY)&_ZN6S287C43v95Ev,
  (VTBL_ENTRY)&_ZN6S287C43v96Ev,
  (VTBL_ENTRY)&_ZN6S287C43v97Ev,
  (VTBL_ENTRY)&_ZN6S287C43v98Ev,
  (VTBL_ENTRY)&_ZN6S287C43v99Ev,
  (VTBL_ENTRY)&_ZN6S287C44v100Ev,
  (VTBL_ENTRY)&_ZN6S287C44v101Ev,
  (VTBL_ENTRY)&_ZN6S287C44v102Ev,
  (VTBL_ENTRY)&_ZN6S287C44v103Ev,
  (VTBL_ENTRY)&_ZN6S287C44v104Ev,
  (VTBL_ENTRY)&_ZN6S287C44v105Ev,
  (VTBL_ENTRY)&_ZN6S287C44v106Ev,
  (VTBL_ENTRY)&_ZN6S287C44v107Ev,
  (VTBL_ENTRY)&_ZN6S287C44v108Ev,
  (VTBL_ENTRY)&_ZN6S287C44v109Ev,
  (VTBL_ENTRY)&_ZN6S287C44v110Ev,
  (VTBL_ENTRY)&_ZN6S287C44v111Ev,
  (VTBL_ENTRY)&_ZN6S287C44v112Ev,
  (VTBL_ENTRY)&_ZN6S287C44v113Ev,
  (VTBL_ENTRY)&_ZN6S287C44v114Ev,
  (VTBL_ENTRY)&_ZN6S287C34v115Ev,
  (VTBL_ENTRY)&_ZN6S287C34v116Ev,
  (VTBL_ENTRY)&_ZN6S287C34v117Ev,
  (VTBL_ENTRY)&_ZN6S287C34v118Ev,
  (VTBL_ENTRY)&_ZN6S287C34v119Ev,
  (VTBL_ENTRY)&_ZN6S287C34v120Ev,
  (VTBL_ENTRY)&_ZN6S287C34v121Ev,
  (VTBL_ENTRY)&_ZN6S287C34v122Ev,
  (VTBL_ENTRY)&_ZN6S287C34v123Ev,
  (VTBL_ENTRY)&_ZN6S287C34v124Ev,
  (VTBL_ENTRY)&_ZN6S287C34v125Ev,
  (VTBL_ENTRY)&_ZN6S287C34v126Ev,
  (VTBL_ENTRY)&_ZN6S287C34v127Ev,
  (VTBL_ENTRY)&_ZN6S287C34v128Ev,
  (VTBL_ENTRY)&_ZN6S287C34v129Ev,
  (VTBL_ENTRY)&_ZN6S287C34v130Ev,
  (VTBL_ENTRY)&_ZN6S287C34v131Ev,
  (VTBL_ENTRY)&_ZN6S287C34v132Ev,
  (VTBL_ENTRY)&_ZN6S287C34v133Ev,
  (VTBL_ENTRY)&_ZN6S287C34v134Ev,
  (VTBL_ENTRY)&_ZN6S287C34v135Ev,
  (VTBL_ENTRY)&_ZN6S287C34v136Ev,
};
extern VTBL_ENTRY _ZTI6S287C3[];
extern  VTBL_ENTRY _ZTV6S287C3[];
Class_Descriptor cd_S287C3 = {  "S287C3", // class name
  bases_S287C3, 3,
  &(vtc_S287C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(376,276), // object size
  NSPAIRA(_ZTI6S287C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S287C3),132, //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  S287C31_nt  {
  virtual  ~S287C31_nt(); // _ZN10S287C31_ntD1Ev
  virtual void  v137(); // _ZN10S287C31_nt4v137Ev
  virtual void  v138(); // _ZN10S287C31_nt4v138Ev
  virtual void  v139(); // _ZN10S287C31_nt4v139Ev
  virtual void  v140(); // _ZN10S287C31_nt4v140Ev
  virtual void  v141(); // _ZN10S287C31_nt4v141Ev
  S287C31_nt(); // tgen
};
//SIG(-1 S287C31_nt) C1{ vd v1 v2 v3 v4 v5}


 S287C31_nt ::~S287C31_nt(){ note_dtor("S287C31_nt", this);}
void  S287C31_nt ::v137(){vfunc_called(this, "_ZN10S287C31_nt4v137Ev");}
void  S287C31_nt ::v138(){vfunc_called(this, "_ZN10S287C31_nt4v138Ev");}
void  S287C31_nt ::v139(){vfunc_called(this, "_ZN10S287C31_nt4v139Ev");}
void  S287C31_nt ::v140(){vfunc_called(this, "_ZN10S287C31_nt4v140Ev");}
void  S287C31_nt ::v141(){vfunc_called(this, "_ZN10S287C31_nt4v141Ev");}
S287C31_nt ::S287C31_nt(){ note_ctor("S287C31_nt", this);} // tgen

//skip512 S287C31_nt

#else // __cplusplus

extern void _ZN10S287C31_ntC1Ev();
extern void _ZN10S287C31_ntD1Ev();
Name_Map name_map_S287C31_nt[] = {
  NSPAIR(_ZN10S287C31_ntC1Ev),
  NSPAIR(_ZN10S287C31_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S287C31_nt[];
extern void _ZN10S287C31_ntD1Ev();
extern void _ZN10S287C31_ntD0Ev();
extern void _ZN10S287C31_nt4v137Ev();
extern void _ZN10S287C31_nt4v138Ev();
extern void _ZN10S287C31_nt4v139Ev();
extern void _ZN10S287C31_nt4v140Ev();
extern void _ZN10S287C31_nt4v141Ev();
static  VTBL_ENTRY vtc_S287C31_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S287C31_nt[0]),
  (VTBL_ENTRY)&_ZN10S287C31_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S287C31_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S287C31_nt4v137Ev,
  (VTBL_ENTRY)&_ZN10S287C31_nt4v138Ev,
  (VTBL_ENTRY)&_ZN10S287C31_nt4v139Ev,
  (VTBL_ENTRY)&_ZN10S287C31_nt4v140Ev,
  (VTBL_ENTRY)&_ZN10S287C31_nt4v141Ev,
};
extern VTBL_ENTRY _ZTI10S287C31_nt[];
VTBL_ENTRY *P__ZTI10S287C31_nt = _ZTI10S287C31_nt; 
extern  VTBL_ENTRY _ZTV10S287C31_nt[];
Class_Descriptor cd_S287C31_nt = {  "S287C31_nt", // class name
  0,0,//no base classes
  &(vtc_S287C31_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S287C31_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S287C31_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  S287C2  : S287C3 , S287C31_nt {
  ::S3350C18 s287c2f0;
  virtual  ~S287C2(); // _ZN6S287C2D1Ev
  virtual void  v142(); // _ZN6S287C24v142Ev
  virtual void  v143(); // _ZN6S287C24v143Ev
  virtual void  v144(); // _ZN6S287C24v144Ev
  virtual void  v145(); // _ZN6S287C24v145Ev
  virtual void  v146(); // _ZN6S287C24v146Ev
  virtual void  v147(); // _ZN6S287C24v147Ev
  virtual void  v148(); // _ZN6S287C24v148Ev
  virtual void  v149(); // _ZN6S287C24v149Ev
  virtual void  v150(); // _ZN6S287C24v150Ev
  virtual void  v151(); // _ZN6S287C24v151Ev
  virtual void  v152(); // _ZN6S287C24v152Ev
  virtual void  v153(); // _ZN6S287C24v153Ev
  virtual void  v154(); // _ZN6S287C24v154Ev
  virtual void  v155(); // _ZN6S287C24v155Ev
  virtual void  v156(); // _ZN6S287C24v156Ev
  virtual void  v157(); // _ZN6S287C24v157Ev
  virtual void  v158(); // _ZN6S287C24v158Ev
  virtual void  v159(); // _ZN6S287C24v159Ev
  virtual void  v160(); // _ZN6S287C24v160Ev
  S287C2(); // tgen
};
//SIG(-1 S287C2) C1{ BC2{ BC3{ BC4{ BC5{ vd v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 Fi[2] Fp Fi[2] FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} FC7 FC11{ m} FC7 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 Fi:1 Fi:1 Fi:1 FC12{ BC13{ BC10}} FC14{ BC15{ BC10}} FC16{ BC17{ BC10}} FC18{ BC19{ BC10}} Fi[3]} vd v126 v127 v128 v129 v130 v131 v132 v133 v134 v135 v136 v137 v138 v139 v140 v141 v142 v143 v144 v145 v146 v147 Fp FC18 FC20{ BC21{ BC10}} FC20 FC22{ BC23{ BC10}} FC22 Fi:1 Fi[3]} BC24{ vd v148 v149 v150 v151 v152} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 FC13}


 S287C2 ::~S287C2(){ note_dtor("S287C2", this);}
void  S287C2 ::v142(){vfunc_called(this, "_ZN6S287C24v142Ev");}
void  S287C2 ::v143(){vfunc_called(this, "_ZN6S287C24v143Ev");}
void  S287C2 ::v144(){vfunc_called(this, "_ZN6S287C24v144Ev");}
void  S287C2 ::v145(){vfunc_called(this, "_ZN6S287C24v145Ev");}
void  S287C2 ::v146(){vfunc_called(this, "_ZN6S287C24v146Ev");}
void  S287C2 ::v147(){vfunc_called(this, "_ZN6S287C24v147Ev");}
void  S287C2 ::v148(){vfunc_called(this, "_ZN6S287C24v148Ev");}
void  S287C2 ::v149(){vfunc_called(this, "_ZN6S287C24v149Ev");}
void  S287C2 ::v150(){vfunc_called(this, "_ZN6S287C24v150Ev");}
void  S287C2 ::v151(){vfunc_called(this, "_ZN6S287C24v151Ev");}
void  S287C2 ::v152(){vfunc_called(this, "_ZN6S287C24v152Ev");}
void  S287C2 ::v153(){vfunc_called(this, "_ZN6S287C24v153Ev");}
void  S287C2 ::v154(){vfunc_called(this, "_ZN6S287C24v154Ev");}
void  S287C2 ::v155(){vfunc_called(this, "_ZN6S287C24v155Ev");}
void  S287C2 ::v156(){vfunc_called(this, "_ZN6S287C24v156Ev");}
void  S287C2 ::v157(){vfunc_called(this, "_ZN6S287C24v157Ev");}
void  S287C2 ::v158(){vfunc_called(this, "_ZN6S287C24v158Ev");}
void  S287C2 ::v159(){vfunc_called(this, "_ZN6S287C24v159Ev");}
void  S287C2 ::v160(){vfunc_called(this, "_ZN6S287C24v160Ev");}
S287C2 ::S287C2(){ note_ctor("S287C2", this);} // tgen

static void Test_S287C2()
{
  extern Class_Descriptor cd_S287C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(51,74)];
    init_test(&cd_S287C2, buf);
    S287C2 *dp, &lv = *(dp=new (buf) S287C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(400,292), "sizeof(S287C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S287C2)");
    check_base_class_offset(lv, (S287C6*)(S287C5*)(S287C4*)(S287C3*), 0, "S287C2");
    check_base_class_offset(lv, (S287C5*)(S287C4*)(S287C3*), 0, "S287C2");
    check_base_class_offset(lv, (S287C4*)(S287C3*), 0, "S287C2");
    check_base_class_offset(lv, (S287C3*), 0, "S287C2");
    check_base_class_offset(lv, (S287C31_nt*), ABISELECT(376,276), "S287C2");
    check_field_offset(lv, s287c2f0, ABISELECT(384,280), "S287C2.s287c2f0");
    test_class_info(&lv, &cd_S287C2);
    dp->~S287C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS287C2(Test_S287C2, "S287C2", ABISELECT(400,292));

#else // __cplusplus

extern void _ZN6S287C2C1Ev();
extern void _ZN6S287C2D1Ev();
Name_Map name_map_S287C2[] = {
  NSPAIR(_ZN6S287C2C1Ev),
  NSPAIR(_ZN6S287C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S287C6;
extern VTBL_ENTRY _ZTI6S287C6[];
extern  VTBL_ENTRY _ZTV6S287C6[];
extern Class_Descriptor cd_S287C5;
extern VTBL_ENTRY _ZTI6S287C5[];
extern  VTBL_ENTRY _ZTV6S287C5[];
extern Class_Descriptor cd_S287C4;
extern VTBL_ENTRY _ZTI6S287C4[];
extern  VTBL_ENTRY _ZTV6S287C4[];
extern Class_Descriptor cd_S287C3;
extern VTBL_ENTRY _ZTI6S287C3[];
extern  VTBL_ENTRY _ZTV6S287C3[];
extern Class_Descriptor cd_S287C31_nt;
extern VTBL_ENTRY _ZTI10S287C31_nt[];
extern  VTBL_ENTRY _ZTV10S287C31_nt[];
static Base_Class bases_S287C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S287C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S287C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S287C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S287C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S287C31_nt,    ABISELECT(376,276), //bcp->offset
    151, //bcp->virtual_function_table_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 _ZTI6S287C2[];
extern void _ZN6S287C2D1Ev();
extern void _ZN6S287C2D0Ev();
extern void _ZN6S287C62v9Ev();
extern void _ZN6S287C63v10Ev();
extern void _ZN6S287C63v11Ev();
extern void _ZN6S287C63v12Ev();
extern void _ZN6S287C63v13Ev();
extern void _ZN6S287C63v14Ev();
extern void _ZN6S287C63v15Ev();
extern void _ZN6S287C63v16Ev();
extern void _ZN6S287C63v17Ev();
extern void _ZN6S287C63v18Ev();
extern void _ZN6S287C63v19Ev();
extern void _ZN6S287C63v20Ev();
extern void _ZN6S287C63v21Ev();
extern void _ZN6S287C63v22Ev();
extern void _ZN6S287C63v23Ev();
extern void _ZN6S287C63v24Ev();
extern void _ZN6S287C63v25Ev();
extern void _ZN6S287C63v26Ev();
extern void _ZN6S287C63v27Ev();
extern void _ZN6S287C63v28Ev();
extern void _ZN6S287C63v29Ev();
extern void _ZN6S287C63v30Ev();
extern void _ZN6S287C63v31Ev();
extern void _ZN6S287C63v32Ev();
extern void _ZN6S287C63v33Ev();
extern void _ZN6S287C63v34Ev();
extern void _ZN6S287C63v35Ev();
extern void _ZN6S287C63v36Ev();
extern void _ZN6S287C63v37Ev();
extern void _ZN6S287C63v38Ev();
extern void _ZN6S287C63v39Ev();
extern void _ZN6S287C63v40Ev();
extern void _ZN6S287C63v41Ev();
extern void _ZN6S287C63v42Ev();
extern void _ZN6S287C63v43Ev();
extern void _ZN6S287C63v44Ev();
extern void _ZN6S287C63v45Ev();
extern void _ZN6S287C63v46Ev();
extern void _ZN6S287C63v47Ev();
extern void _ZN6S287C63v48Ev();
extern void _ZN6S287C63v49Ev();
extern void _ZN6S287C63v50Ev();
extern void _ZN6S287C63v51Ev();
extern void _ZN6S287C63v52Ev();
extern void _ZN6S287C63v53Ev();
extern void _ZN6S287C63v54Ev();
extern void _ZN6S287C63v55Ev();
extern void _ZN6S287C63v56Ev();
extern void _ZN6S287C63v57Ev();
extern void _ZN6S287C63v58Ev();
extern void _ZN6S287C63v59Ev();
extern void _ZN6S287C63v60Ev();
extern void _ZN6S287C63v61Ev();
extern void _ZN6S287C63v62Ev();
extern void _ZN6S287C63v63Ev();
extern void _ZN6S287C63v64Ev();
extern void _ZN6S287C63v65Ev();
extern void _ZN6S287C63v66Ev();
extern void _ZN6S287C63v67Ev();
extern void _ZN6S287C63v68Ev();
extern void _ZN6S287C63v69Ev();
extern void _ZN6S287C63v70Ev();
extern void _ZN6S287C63v71Ev();
extern void _ZN6S287C63v72Ev();
extern void _ZN6S287C53v73Ev();
extern void _ZN6S287C53v74Ev();
extern void _ZN6S287C53v75Ev();
extern void _ZN6S287C53v76Ev();
extern void _ZN6S287C53v77Ev();
extern void _ZN6S287C53v78Ev();
extern void _ZN6S287C53v79Ev();
extern void _ZN6S287C53v80Ev();
extern void _ZN6S287C53v81Ev();
extern void _ZN6S287C53v82Ev();
extern void _ZN6S287C53v83Ev();
extern void _ZN6S287C53v84Ev();
extern void _ZN6S287C53v85Ev();
extern void _ZN6S287C53v86Ev();
extern void _ZN6S287C53v87Ev();
extern void _ZN6S287C53v88Ev();
extern void _ZN6S287C53v89Ev();
extern void _ZN6S287C53v90Ev();
extern void _ZN6S287C53v91Ev();
extern void _ZN6S287C53v92Ev();
extern void _ZN6S287C53v93Ev();
extern void _ZN6S287C53v94Ev();
extern void _ZN6S287C43v95Ev();
extern void _ZN6S287C43v96Ev();
extern void _ZN6S287C43v97Ev();
extern void _ZN6S287C43v98Ev();
extern void _ZN6S287C43v99Ev();
extern void _ZN6S287C44v100Ev();
extern void _ZN6S287C44v101Ev();
extern void _ZN6S287C44v102Ev();
extern void _ZN6S287C44v103Ev();
extern void _ZN6S287C44v104Ev();
extern void _ZN6S287C44v105Ev();
extern void _ZN6S287C44v106Ev();
extern void _ZN6S287C44v107Ev();
extern void _ZN6S287C44v108Ev();
extern void _ZN6S287C44v109Ev();
extern void _ZN6S287C44v110Ev();
extern void _ZN6S287C44v111Ev();
extern void _ZN6S287C44v112Ev();
extern void _ZN6S287C44v113Ev();
extern void _ZN6S287C44v114Ev();
extern void _ZN6S287C34v115Ev();
extern void _ZN6S287C34v116Ev();
extern void _ZN6S287C34v117Ev();
extern void _ZN6S287C34v118Ev();
extern void _ZN6S287C34v119Ev();
extern void _ZN6S287C34v120Ev();
extern void _ZN6S287C34v121Ev();
extern void _ZN6S287C34v122Ev();
extern void _ZN6S287C34v123Ev();
extern void _ZN6S287C34v124Ev();
extern void _ZN6S287C34v125Ev();
extern void _ZN6S287C34v126Ev();
extern void _ZN6S287C34v127Ev();
extern void _ZN6S287C34v128Ev();
extern void _ZN6S287C34v129Ev();
extern void _ZN6S287C34v130Ev();
extern void _ZN6S287C34v131Ev();
extern void _ZN6S287C34v132Ev();
extern void _ZN6S287C34v133Ev();
extern void _ZN6S287C34v134Ev();
extern void _ZN6S287C34v135Ev();
extern void _ZN6S287C34v136Ev();
extern void _ZN6S287C24v142Ev();
extern void _ZN6S287C24v143Ev();
extern void _ZN6S287C24v144Ev();
extern void _ZN6S287C24v145Ev();
extern void _ZN6S287C24v146Ev();
extern void _ZN6S287C24v147Ev();
extern void _ZN6S287C24v148Ev();
extern void _ZN6S287C24v149Ev();
extern void _ZN6S287C24v150Ev();
extern void _ZN6S287C24v151Ev();
extern void _ZN6S287C24v152Ev();
extern void _ZN6S287C24v153Ev();
extern void _ZN6S287C24v154Ev();
extern void _ZN6S287C24v155Ev();
extern void _ZN6S287C24v156Ev();
extern void _ZN6S287C24v157Ev();
extern void _ZN6S287C24v158Ev();
extern void _ZN6S287C24v159Ev();
extern void _ZN6S287C24v160Ev();
extern void ABISELECT(_ZThn376_N6S287C2D1Ev,_ZThn276_N6S287C2D1Ev)();
extern void ABISELECT(_ZThn376_N6S287C2D0Ev,_ZThn276_N6S287C2D0Ev)();
extern void _ZN10S287C31_nt4v137Ev();
extern void _ZN10S287C31_nt4v138Ev();
extern void _ZN10S287C31_nt4v139Ev();
extern void _ZN10S287C31_nt4v140Ev();
extern void _ZN10S287C31_nt4v141Ev();
static  VTBL_ENTRY vtc_S287C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S287C2[0]),
  (VTBL_ENTRY)&_ZN6S287C2D1Ev,
  (VTBL_ENTRY)&_ZN6S287C2D0Ev,
  (VTBL_ENTRY)&_ZN6S287C62v9Ev,
  (VTBL_ENTRY)&_ZN6S287C63v10Ev,
  (VTBL_ENTRY)&_ZN6S287C63v11Ev,
  (VTBL_ENTRY)&_ZN6S287C63v12Ev,
  (VTBL_ENTRY)&_ZN6S287C63v13Ev,
  (VTBL_ENTRY)&_ZN6S287C63v14Ev,
  (VTBL_ENTRY)&_ZN6S287C63v15Ev,
  (VTBL_ENTRY)&_ZN6S287C63v16Ev,
  (VTBL_ENTRY)&_ZN6S287C63v17Ev,
  (VTBL_ENTRY)&_ZN6S287C63v18Ev,
  (VTBL_ENTRY)&_ZN6S287C63v19Ev,
  (VTBL_ENTRY)&_ZN6S287C63v20Ev,
  (VTBL_ENTRY)&_ZN6S287C63v21Ev,
  (VTBL_ENTRY)&_ZN6S287C63v22Ev,
  (VTBL_ENTRY)&_ZN6S287C63v23Ev,
  (VTBL_ENTRY)&_ZN6S287C63v24Ev,
  (VTBL_ENTRY)&_ZN6S287C63v25Ev,
  (VTBL_ENTRY)&_ZN6S287C63v26Ev,
  (VTBL_ENTRY)&_ZN6S287C63v27Ev,
  (VTBL_ENTRY)&_ZN6S287C63v28Ev,
  (VTBL_ENTRY)&_ZN6S287C63v29Ev,
  (VTBL_ENTRY)&_ZN6S287C63v30Ev,
  (VTBL_ENTRY)&_ZN6S287C63v31Ev,
  (VTBL_ENTRY)&_ZN6S287C63v32Ev,
  (VTBL_ENTRY)&_ZN6S287C63v33Ev,
  (VTBL_ENTRY)&_ZN6S287C63v34Ev,
  (VTBL_ENTRY)&_ZN6S287C63v35Ev,
  (VTBL_ENTRY)&_ZN6S287C63v36Ev,
  (VTBL_ENTRY)&_ZN6S287C63v37Ev,
  (VTBL_ENTRY)&_ZN6S287C63v38Ev,
  (VTBL_ENTRY)&_ZN6S287C63v39Ev,
  (VTBL_ENTRY)&_ZN6S287C63v40Ev,
  (VTBL_ENTRY)&_ZN6S287C63v41Ev,
  (VTBL_ENTRY)&_ZN6S287C63v42Ev,
  (VTBL_ENTRY)&_ZN6S287C63v43Ev,
  (VTBL_ENTRY)&_ZN6S287C63v44Ev,
  (VTBL_ENTRY)&_ZN6S287C63v45Ev,
  (VTBL_ENTRY)&_ZN6S287C63v46Ev,
  (VTBL_ENTRY)&_ZN6S287C63v47Ev,
  (VTBL_ENTRY)&_ZN6S287C63v48Ev,
  (VTBL_ENTRY)&_ZN6S287C63v49Ev,
  (VTBL_ENTRY)&_ZN6S287C63v50Ev,
  (VTBL_ENTRY)&_ZN6S287C63v51Ev,
  (VTBL_ENTRY)&_ZN6S287C63v52Ev,
  (VTBL_ENTRY)&_ZN6S287C63v53Ev,
  (VTBL_ENTRY)&_ZN6S287C63v54Ev,
  (VTBL_ENTRY)&_ZN6S287C63v55Ev,
  (VTBL_ENTRY)&_ZN6S287C63v56Ev,
  (VTBL_ENTRY)&_ZN6S287C63v57Ev,
  (VTBL_ENTRY)&_ZN6S287C63v58Ev,
  (VTBL_ENTRY)&_ZN6S287C63v59Ev,
  (VTBL_ENTRY)&_ZN6S287C63v60Ev,
  (VTBL_ENTRY)&_ZN6S287C63v61Ev,
  (VTBL_ENTRY)&_ZN6S287C63v62Ev,
  (VTBL_ENTRY)&_ZN6S287C63v63Ev,
  (VTBL_ENTRY)&_ZN6S287C63v64Ev,
  (VTBL_ENTRY)&_ZN6S287C63v65Ev,
  (VTBL_ENTRY)&_ZN6S287C63v66Ev,
  (VTBL_ENTRY)&_ZN6S287C63v67Ev,
  (VTBL_ENTRY)&_ZN6S287C63v68Ev,
  (VTBL_ENTRY)&_ZN6S287C63v69Ev,
  (VTBL_ENTRY)&_ZN6S287C63v70Ev,
  (VTBL_ENTRY)&_ZN6S287C63v71Ev,
  (VTBL_ENTRY)&_ZN6S287C63v72Ev,
  (VTBL_ENTRY)&_ZN6S287C53v73Ev,
  (VTBL_ENTRY)&_ZN6S287C53v74Ev,
  (VTBL_ENTRY)&_ZN6S287C53v75Ev,
  (VTBL_ENTRY)&_ZN6S287C53v76Ev,
  (VTBL_ENTRY)&_ZN6S287C53v77Ev,
  (VTBL_ENTRY)&_ZN6S287C53v78Ev,
  (VTBL_ENTRY)&_ZN6S287C53v79Ev,
  (VTBL_ENTRY)&_ZN6S287C53v80Ev,
  (VTBL_ENTRY)&_ZN6S287C53v81Ev,
  (VTBL_ENTRY)&_ZN6S287C53v82Ev,
  (VTBL_ENTRY)&_ZN6S287C53v83Ev,
  (VTBL_ENTRY)&_ZN6S287C53v84Ev,
  (VTBL_ENTRY)&_ZN6S287C53v85Ev,
  (VTBL_ENTRY)&_ZN6S287C53v86Ev,
  (VTBL_ENTRY)&_ZN6S287C53v87Ev,
  (VTBL_ENTRY)&_ZN6S287C53v88Ev,
  (VTBL_ENTRY)&_ZN6S287C53v89Ev,
  (VTBL_ENTRY)&_ZN6S287C53v90Ev,
  (VTBL_ENTRY)&_ZN6S287C53v91Ev,
  (VTBL_ENTRY)&_ZN6S287C53v92Ev,
  (VTBL_ENTRY)&_ZN6S287C53v93Ev,
  (VTBL_ENTRY)&_ZN6S287C53v94Ev,
  (VTBL_ENTRY)&_ZN6S287C43v95Ev,
  (VTBL_ENTRY)&_ZN6S287C43v96Ev,
  (VTBL_ENTRY)&_ZN6S287C43v97Ev,
  (VTBL_ENTRY)&_ZN6S287C43v98Ev,
  (VTBL_ENTRY)&_ZN6S287C43v99Ev,
  (VTBL_ENTRY)&_ZN6S287C44v100Ev,
  (VTBL_ENTRY)&_ZN6S287C44v101Ev,
  (VTBL_ENTRY)&_ZN6S287C44v102Ev,
  (VTBL_ENTRY)&_ZN6S287C44v103Ev,
  (VTBL_ENTRY)&_ZN6S287C44v104Ev,
  (VTBL_ENTRY)&_ZN6S287C44v105Ev,
  (VTBL_ENTRY)&_ZN6S287C44v106Ev,
  (VTBL_ENTRY)&_ZN6S287C44v107Ev,
  (VTBL_ENTRY)&_ZN6S287C44v108Ev,
  (VTBL_ENTRY)&_ZN6S287C44v109Ev,
  (VTBL_ENTRY)&_ZN6S287C44v110Ev,
  (VTBL_ENTRY)&_ZN6S287C44v111Ev,
  (VTBL_ENTRY)&_ZN6S287C44v112Ev,
  (VTBL_ENTRY)&_ZN6S287C44v113Ev,
  (VTBL_ENTRY)&_ZN6S287C44v114Ev,
  (VTBL_ENTRY)&_ZN6S287C34v115Ev,
  (VTBL_ENTRY)&_ZN6S287C34v116Ev,
  (VTBL_ENTRY)&_ZN6S287C34v117Ev,
  (VTBL_ENTRY)&_ZN6S287C34v118Ev,
  (VTBL_ENTRY)&_ZN6S287C34v119Ev,
  (VTBL_ENTRY)&_ZN6S287C34v120Ev,
  (VTBL_ENTRY)&_ZN6S287C34v121Ev,
  (VTBL_ENTRY)&_ZN6S287C34v122Ev,
  (VTBL_ENTRY)&_ZN6S287C34v123Ev,
  (VTBL_ENTRY)&_ZN6S287C34v124Ev,
  (VTBL_ENTRY)&_ZN6S287C34v125Ev,
  (VTBL_ENTRY)&_ZN6S287C34v126Ev,
  (VTBL_ENTRY)&_ZN6S287C34v127Ev,
  (VTBL_ENTRY)&_ZN6S287C34v128Ev,
  (VTBL_ENTRY)&_ZN6S287C34v129Ev,
  (VTBL_ENTRY)&_ZN6S287C34v130Ev,
  (VTBL_ENTRY)&_ZN6S287C34v131Ev,
  (VTBL_ENTRY)&_ZN6S287C34v132Ev,
  (VTBL_ENTRY)&_ZN6S287C34v133Ev,
  (VTBL_ENTRY)&_ZN6S287C34v134Ev,
  (VTBL_ENTRY)&_ZN6S287C34v135Ev,
  (VTBL_ENTRY)&_ZN6S287C34v136Ev,
  (VTBL_ENTRY)&_ZN6S287C24v142Ev,
  (VTBL_ENTRY)&_ZN6S287C24v143Ev,
  (VTBL_ENTRY)&_ZN6S287C24v144Ev,
  (VTBL_ENTRY)&_ZN6S287C24v145Ev,
  (VTBL_ENTRY)&_ZN6S287C24v146Ev,
  (VTBL_ENTRY)&_ZN6S287C24v147Ev,
  (VTBL_ENTRY)&_ZN6S287C24v148Ev,
  (VTBL_ENTRY)&_ZN6S287C24v149Ev,
  (VTBL_ENTRY)&_ZN6S287C24v150Ev,
  (VTBL_ENTRY)&_ZN6S287C24v151Ev,
  (VTBL_ENTRY)&_ZN6S287C24v152Ev,
  (VTBL_ENTRY)&_ZN6S287C24v153Ev,
  (VTBL_ENTRY)&_ZN6S287C24v154Ev,
  (VTBL_ENTRY)&_ZN6S287C24v155Ev,
  (VTBL_ENTRY)&_ZN6S287C24v156Ev,
  (VTBL_ENTRY)&_ZN6S287C24v157Ev,
  (VTBL_ENTRY)&_ZN6S287C24v158Ev,
  (VTBL_ENTRY)&_ZN6S287C24v159Ev,
  (VTBL_ENTRY)&_ZN6S287C24v160Ev,
  ABISELECT(-376,-276),
  (VTBL_ENTRY)&(_ZTI6S287C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn376_N6S287C2D1Ev,_ZThn276_N6S287C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn376_N6S287C2D0Ev,_ZThn276_N6S287C2D0Ev),
  (VTBL_ENTRY)&_ZN10S287C31_nt4v137Ev,
  (VTBL_ENTRY)&_ZN10S287C31_nt4v138Ev,
  (VTBL_ENTRY)&_ZN10S287C31_nt4v139Ev,
  (VTBL_ENTRY)&_ZN10S287C31_nt4v140Ev,
  (VTBL_ENTRY)&_ZN10S287C31_nt4v141Ev,
};
extern VTBL_ENTRY _ZTI6S287C2[];
extern  VTBL_ENTRY _ZTV6S287C2[];
Class_Descriptor cd_S287C2 = {  "S287C2", // class name
  bases_S287C2, 5,
  &(vtc_S287C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(400,292), // object size
  NSPAIRA(_ZTI6S287C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV6S287C2),160, //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  S287C1  : S287C2 {
  virtual  ~S287C1(); // _ZN6S287C1D1Ev
  virtual void  v1(); // _ZN6S287C12v1Ev
  virtual void  v2(); // _ZN6S287C12v2Ev
  virtual void  v3(); // _ZN6S287C12v3Ev
  virtual void  v4(); // _ZN6S287C12v4Ev
  virtual void  v5(); // _ZN6S287C12v5Ev
  virtual void  v6(); // _ZN6S287C12v6Ev
  virtual void  v7(); // _ZN6S287C12v7Ev
  virtual void  v8(); // _ZN6S287C12v8Ev
  S287C1(); // tgen
};
//SIG(1 S287C1) C1{ BC2{ BC3{ BC4{ BC5{ 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 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 Fi FL Fp[4] Fi[2] Fp FC7{ m Fi[2]} Fp[2]} vd v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 Fi[2] Fp Fi[2] FC8{ BC9{ BC10{ BC11{ m Fp Fi[2]}}}} FC8 FC12{ m} FC8 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 Fi:1 Fi:1 Fi:1 FC13{ BC14{ BC11}} FC15{ BC16{ BC11}} FC17{ BC18{ BC11}} FC19{ BC20{ BC11}} Fi[3]} vd v115 v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 v134 v135 v136 Fp FC19 FC21{ BC22{ BC11}} FC21 FC23{ BC24{ BC11}} FC23 Fi:1 Fi[3]} BC25{ vd v137 v138 v139 v140 v141} vd v142 v143 v144 v145 v146 v147 v148 v149 v150 v151 v152 v153 v154 v155 v156 v157 v158 v159 v160 FC14} vd v1 v2 v3 v4 v5 v6 v7 v8}


 S287C1 ::~S287C1(){ note_dtor("S287C1", this);}
void  S287C1 ::v1(){vfunc_called(this, "_ZN6S287C12v1Ev");}
void  S287C1 ::v2(){vfunc_called(this, "_ZN6S287C12v2Ev");}
void  S287C1 ::v3(){vfunc_called(this, "_ZN6S287C12v3Ev");}
void  S287C1 ::v4(){vfunc_called(this, "_ZN6S287C12v4Ev");}
void  S287C1 ::v5(){vfunc_called(this, "_ZN6S287C12v5Ev");}
void  S287C1 ::v6(){vfunc_called(this, "_ZN6S287C12v6Ev");}
void  S287C1 ::v7(){vfunc_called(this, "_ZN6S287C12v7Ev");}
void  S287C1 ::v8(){vfunc_called(this, "_ZN6S287C12v8Ev");}
S287C1 ::S287C1(){ note_ctor("S287C1", this);} // tgen

static void Test_S287C1()
{
  extern Class_Descriptor cd_S287C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(51,74)];
    init_test(&cd_S287C1, buf);
    S287C1 *dp, &lv = *(dp=new (buf) S287C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(400,292), "sizeof(S287C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S287C1)");
    check_base_class_offset(lv, (S287C6*)(S287C5*)(S287C4*)(S287C3*)(S287C2*), 0, "S287C1");
    check_base_class_offset(lv, (S287C5*)(S287C4*)(S287C3*)(S287C2*), 0, "S287C1");
    check_base_class_offset(lv, (S287C4*)(S287C3*)(S287C2*), 0, "S287C1");
    check_base_class_offset(lv, (S287C3*)(S287C2*), 0, "S287C1");
    check_base_class_offset(lv, (S287C31_nt*)(S287C2*), ABISELECT(376,276), "S287C1");
    check_base_class_offset(lv, (S287C2*), 0, "S287C1");
    test_class_info(&lv, &cd_S287C1);
    dp->~S287C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS287C1(Test_S287C1, "S287C1", ABISELECT(400,292));

#else // __cplusplus

extern void _ZN6S287C1C1Ev();
extern void _ZN6S287C1D1Ev();
Name_Map name_map_S287C1[] = {
  NSPAIR(_ZN6S287C1C1Ev),
  NSPAIR(_ZN6S287C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S287C6;
extern VTBL_ENTRY _ZTI6S287C6[];
extern  VTBL_ENTRY _ZTV6S287C6[];
extern Class_Descriptor cd_S287C5;
extern VTBL_ENTRY _ZTI6S287C5[];
extern  VTBL_ENTRY _ZTV6S287C5[];
extern Class_Descriptor cd_S287C4;
extern VTBL_ENTRY _ZTI6S287C4[];
extern  VTBL_ENTRY _ZTV6S287C4[];
extern Class_Descriptor cd_S287C3;
extern VTBL_ENTRY _ZTI6S287C3[];
extern  VTBL_ENTRY _ZTV6S287C3[];
extern Class_Descriptor cd_S287C31_nt;
extern VTBL_ENTRY _ZTI10S287C31_nt[];
extern  VTBL_ENTRY _ZTV10S287C31_nt[];
extern Class_Descriptor cd_S287C2;
extern VTBL_ENTRY _ZTI6S287C2[];
extern  VTBL_ENTRY _ZTV6S287C2[];
static Base_Class bases_S287C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S287C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S287C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S287C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S287C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S287C31_nt,    ABISELECT(376,276), //bcp->offset
    159, //bcp->virtual_function_table_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_S287C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S287C1[];
extern void _ZN6S287C1D1Ev();
extern void _ZN6S287C1D0Ev();
extern void _ZN6S287C62v9Ev();
extern void _ZN6S287C63v10Ev();
extern void _ZN6S287C63v11Ev();
extern void _ZN6S287C63v12Ev();
extern void _ZN6S287C63v13Ev();
extern void _ZN6S287C63v14Ev();
extern void _ZN6S287C63v15Ev();
extern void _ZN6S287C63v16Ev();
extern void _ZN6S287C63v17Ev();
extern void _ZN6S287C63v18Ev();
extern void _ZN6S287C63v19Ev();
extern void _ZN6S287C63v20Ev();
extern void _ZN6S287C63v21Ev();
extern void _ZN6S287C63v22Ev();
extern void _ZN6S287C63v23Ev();
extern void _ZN6S287C63v24Ev();
extern void _ZN6S287C63v25Ev();
extern void _ZN6S287C63v26Ev();
extern void _ZN6S287C63v27Ev();
extern void _ZN6S287C63v28Ev();
extern void _ZN6S287C63v29Ev();
extern void _ZN6S287C63v30Ev();
extern void _ZN6S287C63v31Ev();
extern void _ZN6S287C63v32Ev();
extern void _ZN6S287C63v33Ev();
extern void _ZN6S287C63v34Ev();
extern void _ZN6S287C63v35Ev();
extern void _ZN6S287C63v36Ev();
extern void _ZN6S287C63v37Ev();
extern void _ZN6S287C63v38Ev();
extern void _ZN6S287C63v39Ev();
extern void _ZN6S287C63v40Ev();
extern void _ZN6S287C63v41Ev();
extern void _ZN6S287C63v42Ev();
extern void _ZN6S287C63v43Ev();
extern void _ZN6S287C63v44Ev();
extern void _ZN6S287C63v45Ev();
extern void _ZN6S287C63v46Ev();
extern void _ZN6S287C63v47Ev();
extern void _ZN6S287C63v48Ev();
extern void _ZN6S287C63v49Ev();
extern void _ZN6S287C63v50Ev();
extern void _ZN6S287C63v51Ev();
extern void _ZN6S287C63v52Ev();
extern void _ZN6S287C63v53Ev();
extern void _ZN6S287C63v54Ev();
extern void _ZN6S287C63v55Ev();
extern void _ZN6S287C63v56Ev();
extern void _ZN6S287C63v57Ev();
extern void _ZN6S287C63v58Ev();
extern void _ZN6S287C63v59Ev();
extern void _ZN6S287C63v60Ev();
extern void _ZN6S287C63v61Ev();
extern void _ZN6S287C63v62Ev();
extern void _ZN6S287C63v63Ev();
extern void _ZN6S287C63v64Ev();
extern void _ZN6S287C63v65Ev();
extern void _ZN6S287C63v66Ev();
extern void _ZN6S287C63v67Ev();
extern void _ZN6S287C63v68Ev();
extern void _ZN6S287C63v69Ev();
extern void _ZN6S287C63v70Ev();
extern void _ZN6S287C63v71Ev();
extern void _ZN6S287C63v72Ev();
extern void _ZN6S287C53v73Ev();
extern void _ZN6S287C53v74Ev();
extern void _ZN6S287C53v75Ev();
extern void _ZN6S287C53v76Ev();
extern void _ZN6S287C53v77Ev();
extern void _ZN6S287C53v78Ev();
extern void _ZN6S287C53v79Ev();
extern void _ZN6S287C53v80Ev();
extern void _ZN6S287C53v81Ev();
extern void _ZN6S287C53v82Ev();
extern void _ZN6S287C53v83Ev();
extern void _ZN6S287C53v84Ev();
extern void _ZN6S287C53v85Ev();
extern void _ZN6S287C53v86Ev();
extern void _ZN6S287C53v87Ev();
extern void _ZN6S287C53v88Ev();
extern void _ZN6S287C53v89Ev();
extern void _ZN6S287C53v90Ev();
extern void _ZN6S287C53v91Ev();
extern void _ZN6S287C53v92Ev();
extern void _ZN6S287C53v93Ev();
extern void _ZN6S287C53v94Ev();
extern void _ZN6S287C43v95Ev();
extern void _ZN6S287C43v96Ev();
extern void _ZN6S287C43v97Ev();
extern void _ZN6S287C43v98Ev();
extern void _ZN6S287C43v99Ev();
extern void _ZN6S287C44v100Ev();
extern void _ZN6S287C44v101Ev();
extern void _ZN6S287C44v102Ev();
extern void _ZN6S287C44v103Ev();
extern void _ZN6S287C44v104Ev();
extern void _ZN6S287C44v105Ev();
extern void _ZN6S287C44v106Ev();
extern void _ZN6S287C44v107Ev();
extern void _ZN6S287C44v108Ev();
extern void _ZN6S287C44v109Ev();
extern void _ZN6S287C44v110Ev();
extern void _ZN6S287C44v111Ev();
extern void _ZN6S287C44v112Ev();
extern void _ZN6S287C44v113Ev();
extern void _ZN6S287C44v114Ev();
extern void _ZN6S287C34v115Ev();
extern void _ZN6S287C34v116Ev();
extern void _ZN6S287C34v117Ev();
extern void _ZN6S287C34v118Ev();
extern void _ZN6S287C34v119Ev();
extern void _ZN6S287C34v120Ev();
extern void _ZN6S287C34v121Ev();
extern void _ZN6S287C34v122Ev();
extern void _ZN6S287C34v123Ev();
extern void _ZN6S287C34v124Ev();
extern void _ZN6S287C34v125Ev();
extern void _ZN6S287C34v126Ev();
extern void _ZN6S287C34v127Ev();
extern void _ZN6S287C34v128Ev();
extern void _ZN6S287C34v129Ev();
extern void _ZN6S287C34v130Ev();
extern void _ZN6S287C34v131Ev();
extern void _ZN6S287C34v132Ev();
extern void _ZN6S287C34v133Ev();
extern void _ZN6S287C34v134Ev();
extern void _ZN6S287C34v135Ev();
extern void _ZN6S287C34v136Ev();
extern void _ZN6S287C24v142Ev();
extern void _ZN6S287C24v143Ev();
extern void _ZN6S287C24v144Ev();
extern void _ZN6S287C24v145Ev();
extern void _ZN6S287C24v146Ev();
extern void _ZN6S287C24v147Ev();
extern void _ZN6S287C24v148Ev();
extern void _ZN6S287C24v149Ev();
extern void _ZN6S287C24v150Ev();
extern void _ZN6S287C24v151Ev();
extern void _ZN6S287C24v152Ev();
extern void _ZN6S287C24v153Ev();
extern void _ZN6S287C24v154Ev();
extern void _ZN6S287C24v155Ev();
extern void _ZN6S287C24v156Ev();
extern void _ZN6S287C24v157Ev();
extern void _ZN6S287C24v158Ev();
extern void _ZN6S287C24v159Ev();
extern void _ZN6S287C24v160Ev();
extern void _ZN6S287C12v1Ev();
extern void _ZN6S287C12v2Ev();
extern void _ZN6S287C12v3Ev();
extern void _ZN6S287C12v4Ev();
extern void _ZN6S287C12v5Ev();
extern void _ZN6S287C12v6Ev();
extern void _ZN6S287C12v7Ev();
extern void _ZN6S287C12v8Ev();
extern void ABISELECT(_ZThn376_N6S287C1D1Ev,_ZThn276_N6S287C1D1Ev)();
extern void ABISELECT(_ZThn376_N6S287C1D0Ev,_ZThn276_N6S287C1D0Ev)();
extern void _ZN10S287C31_nt4v137Ev();
extern void _ZN10S287C31_nt4v138Ev();
extern void _ZN10S287C31_nt4v139Ev();
extern void _ZN10S287C31_nt4v140Ev();
extern void _ZN10S287C31_nt4v141Ev();
static  VTBL_ENTRY vtc_S287C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S287C1[0]),
  (VTBL_ENTRY)&_ZN6S287C1D1Ev,
  (VTBL_ENTRY)&_ZN6S287C1D0Ev,
  (VTBL_ENTRY)&_ZN6S287C62v9Ev,
  (VTBL_ENTRY)&_ZN6S287C63v10Ev,
  (VTBL_ENTRY)&_ZN6S287C63v11Ev,
  (VTBL_ENTRY)&_ZN6S287C63v12Ev,
  (VTBL_ENTRY)&_ZN6S287C63v13Ev,
  (VTBL_ENTRY)&_ZN6S287C63v14Ev,
  (VTBL_ENTRY)&_ZN6S287C63v15Ev,
  (VTBL_ENTRY)&_ZN6S287C63v16Ev,
  (VTBL_ENTRY)&_ZN6S287C63v17Ev,
  (VTBL_ENTRY)&_ZN6S287C63v18Ev,
  (VTBL_ENTRY)&_ZN6S287C63v19Ev,
  (VTBL_ENTRY)&_ZN6S287C63v20Ev,
  (VTBL_ENTRY)&_ZN6S287C63v21Ev,
  (VTBL_ENTRY)&_ZN6S287C63v22Ev,
  (VTBL_ENTRY)&_ZN6S287C63v23Ev,
  (VTBL_ENTRY)&_ZN6S287C63v24Ev,
  (VTBL_ENTRY)&_ZN6S287C63v25Ev,
  (VTBL_ENTRY)&_ZN6S287C63v26Ev,
  (VTBL_ENTRY)&_ZN6S287C63v27Ev,
  (VTBL_ENTRY)&_ZN6S287C63v28Ev,
  (VTBL_ENTRY)&_ZN6S287C63v29Ev,
  (VTBL_ENTRY)&_ZN6S287C63v30Ev,
  (VTBL_ENTRY)&_ZN6S287C63v31Ev,
  (VTBL_ENTRY)&_ZN6S287C63v32Ev,
  (VTBL_ENTRY)&_ZN6S287C63v33Ev,
  (VTBL_ENTRY)&_ZN6S287C63v34Ev,
  (VTBL_ENTRY)&_ZN6S287C63v35Ev,
  (VTBL_ENTRY)&_ZN6S287C63v36Ev,
  (VTBL_ENTRY)&_ZN6S287C63v37Ev,
  (VTBL_ENTRY)&_ZN6S287C63v38Ev,
  (VTBL_ENTRY)&_ZN6S287C63v39Ev,
  (VTBL_ENTRY)&_ZN6S287C63v40Ev,
  (VTBL_ENTRY)&_ZN6S287C63v41Ev,
  (VTBL_ENTRY)&_ZN6S287C63v42Ev,
  (VTBL_ENTRY)&_ZN6S287C63v43Ev,
  (VTBL_ENTRY)&_ZN6S287C63v44Ev,
  (VTBL_ENTRY)&_ZN6S287C63v45Ev,
  (VTBL_ENTRY)&_ZN6S287C63v46Ev,
  (VTBL_ENTRY)&_ZN6S287C63v47Ev,
  (VTBL_ENTRY)&_ZN6S287C63v48Ev,
  (VTBL_ENTRY)&_ZN6S287C63v49Ev,
  (VTBL_ENTRY)&_ZN6S287C63v50Ev,
  (VTBL_ENTRY)&_ZN6S287C63v51Ev,
  (VTBL_ENTRY)&_ZN6S287C63v52Ev,
  (VTBL_ENTRY)&_ZN6S287C63v53Ev,
  (VTBL_ENTRY)&_ZN6S287C63v54Ev,
  (VTBL_ENTRY)&_ZN6S287C63v55Ev,
  (VTBL_ENTRY)&_ZN6S287C63v56Ev,
  (VTBL_ENTRY)&_ZN6S287C63v57Ev,
  (VTBL_ENTRY)&_ZN6S287C63v58Ev,
  (VTBL_ENTRY)&_ZN6S287C63v59Ev,
  (VTBL_ENTRY)&_ZN6S287C63v60Ev,
  (VTBL_ENTRY)&_ZN6S287C63v61Ev,
  (VTBL_ENTRY)&_ZN6S287C63v62Ev,
  (VTBL_ENTRY)&_ZN6S287C63v63Ev,
  (VTBL_ENTRY)&_ZN6S287C63v64Ev,
  (VTBL_ENTRY)&_ZN6S287C63v65Ev,
  (VTBL_ENTRY)&_ZN6S287C63v66Ev,
  (VTBL_ENTRY)&_ZN6S287C63v67Ev,
  (VTBL_ENTRY)&_ZN6S287C63v68Ev,
  (VTBL_ENTRY)&_ZN6S287C63v69Ev,
  (VTBL_ENTRY)&_ZN6S287C63v70Ev,
  (VTBL_ENTRY)&_ZN6S287C63v71Ev,
  (VTBL_ENTRY)&_ZN6S287C63v72Ev,
  (VTBL_ENTRY)&_ZN6S287C53v73Ev,
  (VTBL_ENTRY)&_ZN6S287C53v74Ev,
  (VTBL_ENTRY)&_ZN6S287C53v75Ev,
  (VTBL_ENTRY)&_ZN6S287C53v76Ev,
  (VTBL_ENTRY)&_ZN6S287C53v77Ev,
  (VTBL_ENTRY)&_ZN6S287C53v78Ev,
  (VTBL_ENTRY)&_ZN6S287C53v79Ev,
  (VTBL_ENTRY)&_ZN6S287C53v80Ev,
  (VTBL_ENTRY)&_ZN6S287C53v81Ev,
  (VTBL_ENTRY)&_ZN6S287C53v82Ev,
  (VTBL_ENTRY)&_ZN6S287C53v83Ev,
  (VTBL_ENTRY)&_ZN6S287C53v84Ev,
  (VTBL_ENTRY)&_ZN6S287C53v85Ev,
  (VTBL_ENTRY)&_ZN6S287C53v86Ev,
  (VTBL_ENTRY)&_ZN6S287C53v87Ev,
  (VTBL_ENTRY)&_ZN6S287C53v88Ev,
  (VTBL_ENTRY)&_ZN6S287C53v89Ev,
  (VTBL_ENTRY)&_ZN6S287C53v90Ev,
  (VTBL_ENTRY)&_ZN6S287C53v91Ev,
  (VTBL_ENTRY)&_ZN6S287C53v92Ev,
  (VTBL_ENTRY)&_ZN6S287C53v93Ev,
  (VTBL_ENTRY)&_ZN6S287C53v94Ev,
  (VTBL_ENTRY)&_ZN6S287C43v95Ev,
  (VTBL_ENTRY)&_ZN6S287C43v96Ev,
  (VTBL_ENTRY)&_ZN6S287C43v97Ev,
  (VTBL_ENTRY)&_ZN6S287C43v98Ev,
  (VTBL_ENTRY)&_ZN6S287C43v99Ev,
  (VTBL_ENTRY)&_ZN6S287C44v100Ev,
  (VTBL_ENTRY)&_ZN6S287C44v101Ev,
  (VTBL_ENTRY)&_ZN6S287C44v102Ev,
  (VTBL_ENTRY)&_ZN6S287C44v103Ev,
  (VTBL_ENTRY)&_ZN6S287C44v104Ev,
  (VTBL_ENTRY)&_ZN6S287C44v105Ev,
  (VTBL_ENTRY)&_ZN6S287C44v106Ev,
  (VTBL_ENTRY)&_ZN6S287C44v107Ev,
  (VTBL_ENTRY)&_ZN6S287C44v108Ev,
  (VTBL_ENTRY)&_ZN6S287C44v109Ev,
  (VTBL_ENTRY)&_ZN6S287C44v110Ev,
  (VTBL_ENTRY)&_ZN6S287C44v111Ev,
  (VTBL_ENTRY)&_ZN6S287C44v112Ev,
  (VTBL_ENTRY)&_ZN6S287C44v113Ev,
  (VTBL_ENTRY)&_ZN6S287C44v114Ev,
  (VTBL_ENTRY)&_ZN6S287C34v115Ev,
  (VTBL_ENTRY)&_ZN6S287C34v116Ev,
  (VTBL_ENTRY)&_ZN6S287C34v117Ev,
  (VTBL_ENTRY)&_ZN6S287C34v118Ev,
  (VTBL_ENTRY)&_ZN6S287C34v119Ev,
  (VTBL_ENTRY)&_ZN6S287C34v120Ev,
  (VTBL_ENTRY)&_ZN6S287C34v121Ev,
  (VTBL_ENTRY)&_ZN6S287C34v122Ev,
  (VTBL_ENTRY)&_ZN6S287C34v123Ev,
  (VTBL_ENTRY)&_ZN6S287C34v124Ev,
  (VTBL_ENTRY)&_ZN6S287C34v125Ev,
  (VTBL_ENTRY)&_ZN6S287C34v126Ev,
  (VTBL_ENTRY)&_ZN6S287C34v127Ev,
  (VTBL_ENTRY)&_ZN6S287C34v128Ev,
  (VTBL_ENTRY)&_ZN6S287C34v129Ev,
  (VTBL_ENTRY)&_ZN6S287C34v130Ev,
  (VTBL_ENTRY)&_ZN6S287C34v131Ev,
  (VTBL_ENTRY)&_ZN6S287C34v132Ev,
  (VTBL_ENTRY)&_ZN6S287C34v133Ev,
  (VTBL_ENTRY)&_ZN6S287C34v134Ev,
  (VTBL_ENTRY)&_ZN6S287C34v135Ev,
  (VTBL_ENTRY)&_ZN6S287C34v136Ev,
  (VTBL_ENTRY)&_ZN6S287C24v142Ev,
  (VTBL_ENTRY)&_ZN6S287C24v143Ev,
  (VTBL_ENTRY)&_ZN6S287C24v144Ev,
  (VTBL_ENTRY)&_ZN6S287C24v145Ev,
  (VTBL_ENTRY)&_ZN6S287C24v146Ev,
  (VTBL_ENTRY)&_ZN6S287C24v147Ev,
  (VTBL_ENTRY)&_ZN6S287C24v148Ev,
  (VTBL_ENTRY)&_ZN6S287C24v149Ev,
  (VTBL_ENTRY)&_ZN6S287C24v150Ev,
  (VTBL_ENTRY)&_ZN6S287C24v151Ev,
  (VTBL_ENTRY)&_ZN6S287C24v152Ev,
  (VTBL_ENTRY)&_ZN6S287C24v153Ev,
  (VTBL_ENTRY)&_ZN6S287C24v154Ev,
  (VTBL_ENTRY)&_ZN6S287C24v155Ev,
  (VTBL_ENTRY)&_ZN6S287C24v156Ev,
  (VTBL_ENTRY)&_ZN6S287C24v157Ev,
  (VTBL_ENTRY)&_ZN6S287C24v158Ev,
  (VTBL_ENTRY)&_ZN6S287C24v159Ev,
  (VTBL_ENTRY)&_ZN6S287C24v160Ev,
  (VTBL_ENTRY)&_ZN6S287C12v1Ev,
  (VTBL_ENTRY)&_ZN6S287C12v2Ev,
  (VTBL_ENTRY)&_ZN6S287C12v3Ev,
  (VTBL_ENTRY)&_ZN6S287C12v4Ev,
  (VTBL_ENTRY)&_ZN6S287C12v5Ev,
  (VTBL_ENTRY)&_ZN6S287C12v6Ev,
  (VTBL_ENTRY)&_ZN6S287C12v7Ev,
  (VTBL_ENTRY)&_ZN6S287C12v8Ev,
  ABISELECT(-376,-276),
  (VTBL_ENTRY)&(_ZTI6S287C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn376_N6S287C1D1Ev,_ZThn276_N6S287C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn376_N6S287C1D0Ev,_ZThn276_N6S287C1D0Ev),
  (VTBL_ENTRY)&_ZN10S287C31_nt4v137Ev,
  (VTBL_ENTRY)&_ZN10S287C31_nt4v138Ev,
  (VTBL_ENTRY)&_ZN10S287C31_nt4v139Ev,
  (VTBL_ENTRY)&_ZN10S287C31_nt4v140Ev,
  (VTBL_ENTRY)&_ZN10S287C31_nt4v141Ev,
};
extern VTBL_ENTRY _ZTI6S287C1[];
extern  VTBL_ENTRY _ZTV6S287C1[];
Class_Descriptor cd_S287C1 = {  "S287C1", // class name
  bases_S287C1, 6,
  &(vtc_S287C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(400,292), // object size
  NSPAIRA(_ZTI6S287C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S287C1),168, //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  S113C7  {
  int s113c7f0;
  __tsi64 s113c7f1;
  void *s113c7f2[4];
  int s113c7f3[2];
  void *s113c7f4;
  ::S3350C4_nt s113c7f5;
  void *s113c7f6[2];
  virtual  ~S113C7(); // _ZN6S113C7D1Ev
  virtual void  v7(); // _ZN6S113C72v7Ev
  virtual void  v8(); // _ZN6S113C72v8Ev
  virtual void  v9(); // _ZN6S113C72v9Ev
  virtual void  v10(); // _ZN6S113C73v10Ev
  virtual void  v11(); // _ZN6S113C73v11Ev
  virtual void  v12(); // _ZN6S113C73v12Ev
  virtual void  v13(); // _ZN6S113C73v13Ev
  virtual void  v14(); // _ZN6S113C73v14Ev
  virtual void  v15(); // _ZN6S113C73v15Ev
  virtual void  v16(); // _ZN6S113C73v16Ev
  virtual void  v17(); // _ZN6S113C73v17Ev
  virtual void  v18(); // _ZN6S113C73v18Ev
  virtual void  v19(); // _ZN6S113C73v19Ev
  virtual void  v20(); // _ZN6S113C73v20Ev
  virtual void  v21(); // _ZN6S113C73v21Ev
  virtual void  v22(); // _ZN6S113C73v22Ev
  virtual void  v23(); // _ZN6S113C73v23Ev
  virtual void  v24(); // _ZN6S113C73v24Ev
  virtual void  v25(); // _ZN6S113C73v25Ev
  virtual void  v26(); // _ZN6S113C73v26Ev
  virtual void  v27(); // _ZN6S113C73v27Ev
  virtual void  v28(); // _ZN6S113C73v28Ev
  virtual void  v29(); // _ZN6S113C73v29Ev
  virtual void  v30(); // _ZN6S113C73v30Ev
  virtual void  v31(); // _ZN6S113C73v31Ev
  virtual void  v32(); // _ZN6S113C73v32Ev
  virtual void  v33(); // _ZN6S113C73v33Ev
  virtual void  v34(); // _ZN6S113C73v34Ev
  virtual void  v35(); // _ZN6S113C73v35Ev
  virtual void  v36(); // _ZN6S113C73v36Ev
  virtual void  v37(); // _ZN6S113C73v37Ev
  virtual void  v38(); // _ZN6S113C73v38Ev
  virtual void  v39(); // _ZN6S113C73v39Ev
  virtual void  v40(); // _ZN6S113C73v40Ev
  virtual void  v41(); // _ZN6S113C73v41Ev
  virtual void  v42(); // _ZN6S113C73v42Ev
  virtual void  v43(); // _ZN6S113C73v43Ev
  virtual void  v44(); // _ZN6S113C73v44Ev
  virtual void  v45(); // _ZN6S113C73v45Ev
  virtual void  v46(); // _ZN6S113C73v46Ev
  virtual void  v47(); // _ZN6S113C73v47Ev
  virtual void  v48(); // _ZN6S113C73v48Ev
  virtual void  v49(); // _ZN6S113C73v49Ev
  virtual void  v50(); // _ZN6S113C73v50Ev
  virtual void  v51(); // _ZN6S113C73v51Ev
  virtual void  v52(); // _ZN6S113C73v52Ev
  virtual void  v53(); // _ZN6S113C73v53Ev
  virtual void  v54(); // _ZN6S113C73v54Ev
  virtual void  v55(); // _ZN6S113C73v55Ev
  virtual void  v56(); // _ZN6S113C73v56Ev
  virtual void  v57(); // _ZN6S113C73v57Ev
  virtual void  v58(); // _ZN6S113C73v58Ev
  virtual void  v59(); // _ZN6S113C73v59Ev
  virtual void  v60(); // _ZN6S113C73v60Ev
  virtual void  v61(); // _ZN6S113C73v61Ev
  virtual void  v62(); // _ZN6S113C73v62Ev
  virtual void  v63(); // _ZN6S113C73v63Ev
  virtual void  v64(); // _ZN6S113C73v64Ev
  virtual void  v65(); // _ZN6S113C73v65Ev
  virtual void  v66(); // _ZN6S113C73v66Ev
  virtual void  v67(); // _ZN6S113C73v67Ev
  virtual void  v68(); // _ZN6S113C73v68Ev
  virtual void  v69(); // _ZN6S113C73v69Ev
  virtual void  v70(); // _ZN6S113C73v70Ev
  S113C7(); // tgen
};
//SIG(-1 S113C7) 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]}


 S113C7 ::~S113C7(){ note_dtor("S113C7", this);}
void  S113C7 ::v7(){vfunc_called(this, "_ZN6S113C72v7Ev");}
void  S113C7 ::v8(){vfunc_called(this, "_ZN6S113C72v8Ev");}
void  S113C7 ::v9(){vfunc_called(this, "_ZN6S113C72v9Ev");}
void  S113C7 ::v10(){vfunc_called(this, "_ZN6S113C73v10Ev");}
void  S113C7 ::v11(){vfunc_called(this, "_ZN6S113C73v11Ev");}
void  S113C7 ::v12(){vfunc_called(this, "_ZN6S113C73v12Ev");}
void  S113C7 ::v13(){vfunc_called(this, "_ZN6S113C73v13Ev");}
void  S113C7 ::v14(){vfunc_called(this, "_ZN6S113C73v14Ev");}
void  S113C7 ::v15(){vfunc_called(this, "_ZN6S113C73v15Ev");}
void  S113C7 ::v16(){vfunc_called(this, "_ZN6S113C73v16Ev");}
void  S113C7 ::v17(){vfunc_called(this, "_ZN6S113C73v17Ev");}
void  S113C7 ::v18(){vfunc_called(this, "_ZN6S113C73v18Ev");}
void  S113C7 ::v19(){vfunc_called(this, "_ZN6S113C73v19Ev");}
void  S113C7 ::v20(){vfunc_called(this, "_ZN6S113C73v20Ev");}
void  S113C7 ::v21(){vfunc_called(this, "_ZN6S113C73v21Ev");}
void  S113C7 ::v22(){vfunc_called(this, "_ZN6S113C73v22Ev");}
void  S113C7 ::v23(){vfunc_called(this, "_ZN6S113C73v23Ev");}
void  S113C7 ::v24(){vfunc_called(this, "_ZN6S113C73v24Ev");}
void  S113C7 ::v25(){vfunc_called(this, "_ZN6S113C73v25Ev");}
void  S113C7 ::v26(){vfunc_called(this, "_ZN6S113C73v26Ev");}
void  S113C7 ::v27(){vfunc_called(this, "_ZN6S113C73v27Ev");}
void  S113C7 ::v28(){vfunc_called(this, "_ZN6S113C73v28Ev");}
void  S113C7 ::v29(){vfunc_called(this, "_ZN6S113C73v29Ev");}
void  S113C7 ::v30(){vfunc_called(this, "_ZN6S113C73v30Ev");}
void  S113C7 ::v31(){vfunc_called(this, "_ZN6S113C73v31Ev");}
void  S113C7 ::v32(){vfunc_called(this, "_ZN6S113C73v32Ev");}
void  S113C7 ::v33(){vfunc_called(this, "_ZN6S113C73v33Ev");}
void  S113C7 ::v34(){vfunc_called(this, "_ZN6S113C73v34Ev");}
void  S113C7 ::v35(){vfunc_called(this, "_ZN6S113C73v35Ev");}
void  S113C7 ::v36(){vfunc_called(this, "_ZN6S113C73v36Ev");}
void  S113C7 ::v37(){vfunc_called(this, "_ZN6S113C73v37Ev");}
void  S113C7 ::v38(){vfunc_called(this, "_ZN6S113C73v38Ev");}
void  S113C7 ::v39(){vfunc_called(this, "_ZN6S113C73v39Ev");}
void  S113C7 ::v40(){vfunc_called(this, "_ZN6S113C73v40Ev");}
void  S113C7 ::v41(){vfunc_called(this, "_ZN6S113C73v41Ev");}
void  S113C7 ::v42(){vfunc_called(this, "_ZN6S113C73v42Ev");}
void  S113C7 ::v43(){vfunc_called(this, "_ZN6S113C73v43Ev");}
void  S113C7 ::v44(){vfunc_called(this, "_ZN6S113C73v44Ev");}
void  S113C7 ::v45(){vfunc_called(this, "_ZN6S113C73v45Ev");}
void  S113C7 ::v46(){vfunc_called(this, "_ZN6S113C73v46Ev");}
void  S113C7 ::v47(){vfunc_called(this, "_ZN6S113C73v47Ev");}
void  S113C7 ::v48(){vfunc_called(this, "_ZN6S113C73v48Ev");}
void  S113C7 ::v49(){vfunc_called(this, "_ZN6S113C73v49Ev");}
void  S113C7 ::v50(){vfunc_called(this, "_ZN6S113C73v50Ev");}
void  S113C7 ::v51(){vfunc_called(this, "_ZN6S113C73v51Ev");}
void  S113C7 ::v52(){vfunc_called(this, "_ZN6S113C73v52Ev");}
void  S113C7 ::v53(){vfunc_called(this, "_ZN6S113C73v53Ev");}
void  S113C7 ::v54(){vfunc_called(this, "_ZN6S113C73v54Ev");}
void  S113C7 ::v55(){vfunc_called(this, "_ZN6S113C73v55Ev");}
void  S113C7 ::v56(){vfunc_called(this, "_ZN6S113C73v56Ev");}
void  S113C7 ::v57(){vfunc_called(this, "_ZN6S113C73v57Ev");}
void  S113C7 ::v58(){vfunc_called(this, "_ZN6S113C73v58Ev");}
void  S113C7 ::v59(){vfunc_called(this, "_ZN6S113C73v59Ev");}
void  S113C7 ::v60(){vfunc_called(this, "_ZN6S113C73v60Ev");}
void  S113C7 ::v61(){vfunc_called(this, "_ZN6S113C73v61Ev");}
void  S113C7 ::v62(){vfunc_called(this, "_ZN6S113C73v62Ev");}
void  S113C7 ::v63(){vfunc_called(this, "_ZN6S113C73v63Ev");}
void  S113C7 ::v64(){vfunc_called(this, "_ZN6S113C73v64Ev");}
void  S113C7 ::v65(){vfunc_called(this, "_ZN6S113C73v65Ev");}
void  S113C7 ::v66(){vfunc_called(this, "_ZN6S113C73v66Ev");}
void  S113C7 ::v67(){vfunc_called(this, "_ZN6S113C73v67Ev");}
void  S113C7 ::v68(){vfunc_called(this, "_ZN6S113C73v68Ev");}
void  S113C7 ::v69(){vfunc_called(this, "_ZN6S113C73v69Ev");}
void  S113C7 ::v70(){vfunc_called(this, "_ZN6S113C73v70Ev");}
S113C7 ::S113C7(){ note_ctor("S113C7", this);} // tgen

static void Test_S113C7()
{
  extern Class_Descriptor cd_S113C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S113C7, buf);
    S113C7 *dp, &lv = *(dp=new (buf) S113C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S113C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S113C7)");
    check_field_offset(lv, s113c7f0, ABISELECT(8,4), "S113C7.s113c7f0");
    check_field_offset(lv, s113c7f1, ABISELECT(16,8), "S113C7.s113c7f1");
    check_field_offset(lv, s113c7f2, ABISELECT(24,16), "S113C7.s113c7f2");
    check_field_offset(lv, s113c7f3, ABISELECT(56,32), "S113C7.s113c7f3");
    check_field_offset(lv, s113c7f4, ABISELECT(64,40), "S113C7.s113c7f4");
    check_field_offset(lv, s113c7f5, ABISELECT(72,44), "S113C7.s113c7f5");
    check_field_offset(lv, s113c7f6, ABISELECT(80,52), "S113C7.s113c7f6");
    test_class_info(&lv, &cd_S113C7);
    dp->~S113C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS113C7(Test_S113C7, "S113C7", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S113C7C1Ev();
extern void _ZN6S113C7D1Ev();
Name_Map name_map_S113C7[] = {
  NSPAIR(_ZN6S113C7C1Ev),
  NSPAIR(_ZN6S113C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S113C7[];
extern void _ZN6S113C7D1Ev();
extern void _ZN6S113C7D0Ev();
extern void _ZN6S113C72v7Ev();
extern void _ZN6S113C72v8Ev();
extern void _ZN6S113C72v9Ev();
extern void _ZN6S113C73v10Ev();
extern void _ZN6S113C73v11Ev();
extern void _ZN6S113C73v12Ev();
extern void _ZN6S113C73v13Ev();
extern void _ZN6S113C73v14Ev();
extern void _ZN6S113C73v15Ev();
extern void _ZN6S113C73v16Ev();
extern void _ZN6S113C73v17Ev();
extern void _ZN6S113C73v18Ev();
extern void _ZN6S113C73v19Ev();
extern void _ZN6S113C73v20Ev();
extern void _ZN6S113C73v21Ev();
extern void _ZN6S113C73v22Ev();
extern void _ZN6S113C73v23Ev();
extern void _ZN6S113C73v24Ev();
extern void _ZN6S113C73v25Ev();
extern void _ZN6S113C73v26Ev();
extern void _ZN6S113C73v27Ev();
extern void _ZN6S113C73v28Ev();
extern void _ZN6S113C73v29Ev();
extern void _ZN6S113C73v30Ev();
extern void _ZN6S113C73v31Ev();
extern void _ZN6S113C73v32Ev();
extern void _ZN6S113C73v33Ev();
extern void _ZN6S113C73v34Ev();
extern void _ZN6S113C73v35Ev();
extern void _ZN6S113C73v36Ev();
extern void _ZN6S113C73v37Ev();
extern void _ZN6S113C73v38Ev();
extern void _ZN6S113C73v39Ev();
extern void _ZN6S113C73v40Ev();
extern void _ZN6S113C73v41Ev();
extern void _ZN6S113C73v42Ev();
extern void _ZN6S113C73v43Ev();
extern void _ZN6S113C73v44Ev();
extern void _ZN6S113C73v45Ev();
extern void _ZN6S113C73v46Ev();
extern void _ZN6S113C73v47Ev();
extern void _ZN6S113C73v48Ev();
extern void _ZN6S113C73v49Ev();
extern void _ZN6S113C73v50Ev();
extern void _ZN6S113C73v51Ev();
extern void _ZN6S113C73v52Ev();
extern void _ZN6S113C73v53Ev();
extern void _ZN6S113C73v54Ev();
extern void _ZN6S113C73v55Ev();
extern void _ZN6S113C73v56Ev();
extern void _ZN6S113C73v57Ev();
extern void _ZN6S113C73v58Ev();
extern void _ZN6S113C73v59Ev();
extern void _ZN6S113C73v60Ev();
extern void _ZN6S113C73v61Ev();
extern void _ZN6S113C73v62Ev();
extern void _ZN6S113C73v63Ev();
extern void _ZN6S113C73v64Ev();
extern void _ZN6S113C73v65Ev();
extern void _ZN6S113C73v66Ev();
extern void _ZN6S113C73v67Ev();
extern void _ZN6S113C73v68Ev();
extern void _ZN6S113C73v69Ev();
extern void _ZN6S113C73v70Ev();
static  VTBL_ENTRY vtc_S113C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S113C7[0]),
  (VTBL_ENTRY)&_ZN6S113C7D1Ev,
  (VTBL_ENTRY)&_ZN6S113C7D0Ev,
  (VTBL_ENTRY)&_ZN6S113C72v7Ev,
  (VTBL_ENTRY)&_ZN6S113C72v8Ev,
  (VTBL_ENTRY)&_ZN6S113C72v9Ev,
  (VTBL_ENTRY)&_ZN6S113C73v10Ev,
  (VTBL_ENTRY)&_ZN6S113C73v11Ev,
  (VTBL_ENTRY)&_ZN6S113C73v12Ev,
  (VTBL_ENTRY)&_ZN6S113C73v13Ev,
  (VTBL_ENTRY)&_ZN6S113C73v14Ev,
  (VTBL_ENTRY)&_ZN6S113C73v15Ev,
  (VTBL_ENTRY)&_ZN6S113C73v16Ev,
  (VTBL_ENTRY)&_ZN6S113C73v17Ev,
  (VTBL_ENTRY)&_ZN6S113C73v18Ev,
  (VTBL_ENTRY)&_ZN6S113C73v19Ev,
  (VTBL_ENTRY)&_ZN6S113C73v20Ev,
  (VTBL_ENTRY)&_ZN6S113C73v21Ev,
  (VTBL_ENTRY)&_ZN6S113C73v22Ev,
  (VTBL_ENTRY)&_ZN6S113C73v23Ev,
  (VTBL_ENTRY)&_ZN6S113C73v24Ev,
  (VTBL_ENTRY)&_ZN6S113C73v25Ev,
  (VTBL_ENTRY)&_ZN6S113C73v26Ev,
  (VTBL_ENTRY)&_ZN6S113C73v27Ev,
  (VTBL_ENTRY)&_ZN6S113C73v28Ev,
  (VTBL_ENTRY)&_ZN6S113C73v29Ev,
  (VTBL_ENTRY)&_ZN6S113C73v30Ev,
  (VTBL_ENTRY)&_ZN6S113C73v31Ev,
  (VTBL_ENTRY)&_ZN6S113C73v32Ev,
  (VTBL_ENTRY)&_ZN6S113C73v33Ev,
  (VTBL_ENTRY)&_ZN6S113C73v34Ev,
  (VTBL_ENTRY)&_ZN6S113C73v35Ev,
  (VTBL_ENTRY)&_ZN6S113C73v36Ev,
  (VTBL_ENTRY)&_ZN6S113C73v37Ev,
  (VTBL_ENTRY)&_ZN6S113C73v38Ev,
  (VTBL_ENTRY)&_ZN6S113C73v39Ev,
  (VTBL_ENTRY)&_ZN6S113C73v40Ev,
  (VTBL_ENTRY)&_ZN6S113C73v41Ev,
  (VTBL_ENTRY)&_ZN6S113C73v42Ev,
  (VTBL_ENTRY)&_ZN6S113C73v43Ev,
  (VTBL_ENTRY)&_ZN6S113C73v44Ev,
  (VTBL_ENTRY)&_ZN6S113C73v45Ev,
  (VTBL_ENTRY)&_ZN6S113C73v46Ev,
  (VTBL_ENTRY)&_ZN6S113C73v47Ev,
  (VTBL_ENTRY)&_ZN6S113C73v48Ev,
  (VTBL_ENTRY)&_ZN6S113C73v49Ev,
  (VTBL_ENTRY)&_ZN6S113C73v50Ev,
  (VTBL_ENTRY)&_ZN6S113C73v51Ev,
  (VTBL_ENTRY)&_ZN6S113C73v52Ev,
  (VTBL_ENTRY)&_ZN6S113C73v53Ev,
  (VTBL_ENTRY)&_ZN6S113C73v54Ev,
  (VTBL_ENTRY)&_ZN6S113C73v55Ev,
  (VTBL_ENTRY)&_ZN6S113C73v56Ev,
  (VTBL_ENTRY)&_ZN6S113C73v57Ev,
  (VTBL_ENTRY)&_ZN6S113C73v58Ev,
  (VTBL_ENTRY)&_ZN6S113C73v59Ev,
  (VTBL_ENTRY)&_ZN6S113C73v60Ev,
  (VTBL_ENTRY)&_ZN6S113C73v61Ev,
  (VTBL_ENTRY)&_ZN6S113C73v62Ev,
  (VTBL_ENTRY)&_ZN6S113C73v63Ev,
  (VTBL_ENTRY)&_ZN6S113C73v64Ev,
  (VTBL_ENTRY)&_ZN6S113C73v65Ev,
  (VTBL_ENTRY)&_ZN6S113C73v66Ev,
  (VTBL_ENTRY)&_ZN6S113C73v67Ev,
  (VTBL_ENTRY)&_ZN6S113C73v68Ev,
  (VTBL_ENTRY)&_ZN6S113C73v69Ev,
  (VTBL_ENTRY)&_ZN6S113C73v70Ev,
};
extern VTBL_ENTRY _ZTI6S113C7[];
extern  VTBL_ENTRY _ZTV6S113C7[];
Class_Descriptor cd_S113C7 = {  "S113C7", // class name
  0,0,//no base classes
  &(vtc_S113C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S113C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S113C7),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  S113C6  : S113C7 {
  int s113c6f0[2];
  void *s113c6f1;
  int s113c6f2[2];
  ::S287C8_nt s113c6f3;
  ::S287C8_nt s113c6f4;
  ::S2121C38 s113c6f5;
  ::S287C8_nt s113c6f6;
  unsigned int s113c6f7:1;
  unsigned int s113c6f8:1;
  unsigned int s113c6f9:1;
  unsigned int s113c6f10:1;
  unsigned int s113c6f11:1;
  int s113c6f12[2];
  virtual  ~S113C6(); // _ZN6S113C6D1Ev
  virtual void  v71(); // _ZN6S113C63v71Ev
  virtual void  v72(); // _ZN6S113C63v72Ev
  virtual void  v73(); // _ZN6S113C63v73Ev
  virtual void  v74(); // _ZN6S113C63v74Ev
  virtual void  v75(); // _ZN6S113C63v75Ev
  virtual void  v76(); // _ZN6S113C63v76Ev
  virtual void  v77(); // _ZN6S113C63v77Ev
  virtual void  v78(); // _ZN6S113C63v78Ev
  virtual void  v79(); // _ZN6S113C63v79Ev
  virtual void  v80(); // _ZN6S113C63v80Ev
  virtual void  v81(); // _ZN6S113C63v81Ev
  virtual void  v82(); // _ZN6S113C63v82Ev
  virtual void  v83(); // _ZN6S113C63v83Ev
  virtual void  v84(); // _ZN6S113C63v84Ev
  virtual void  v85(); // _ZN6S113C63v85Ev
  virtual void  v86(); // _ZN6S113C63v86Ev
  virtual void  v87(); // _ZN6S113C63v87Ev
  virtual void  v88(); // _ZN6S113C63v88Ev
  virtual void  v89(); // _ZN6S113C63v89Ev
  virtual void  v90(); // _ZN6S113C63v90Ev
  virtual void  v91(); // _ZN6S113C63v91Ev
  virtual void  v92(); // _ZN6S113C63v92Ev
  S113C6(); // tgen
};
//SIG(-1 S113C6) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S113C6 ::~S113C6(){ note_dtor("S113C6", this);}
void  S113C6 ::v71(){vfunc_called(this, "_ZN6S113C63v71Ev");}
void  S113C6 ::v72(){vfunc_called(this, "_ZN6S113C63v72Ev");}
void  S113C6 ::v73(){vfunc_called(this, "_ZN6S113C63v73Ev");}
void  S113C6 ::v74(){vfunc_called(this, "_ZN6S113C63v74Ev");}
void  S113C6 ::v75(){vfunc_called(this, "_ZN6S113C63v75Ev");}
void  S113C6 ::v76(){vfunc_called(this, "_ZN6S113C63v76Ev");}
void  S113C6 ::v77(){vfunc_called(this, "_ZN6S113C63v77Ev");}
void  S113C6 ::v78(){vfunc_called(this, "_ZN6S113C63v78Ev");}
void  S113C6 ::v79(){vfunc_called(this, "_ZN6S113C63v79Ev");}
void  S113C6 ::v80(){vfunc_called(this, "_ZN6S113C63v80Ev");}
void  S113C6 ::v81(){vfunc_called(this, "_ZN6S113C63v81Ev");}
void  S113C6 ::v82(){vfunc_called(this, "_ZN6S113C63v82Ev");}
void  S113C6 ::v83(){vfunc_called(this, "_ZN6S113C63v83Ev");}
void  S113C6 ::v84(){vfunc_called(this, "_ZN6S113C63v84Ev");}
void  S113C6 ::v85(){vfunc_called(this, "_ZN6S113C63v85Ev");}
void  S113C6 ::v86(){vfunc_called(this, "_ZN6S113C63v86Ev");}
void  S113C6 ::v87(){vfunc_called(this, "_ZN6S113C63v87Ev");}
void  S113C6 ::v88(){vfunc_called(this, "_ZN6S113C63v88Ev");}
void  S113C6 ::v89(){vfunc_called(this, "_ZN6S113C63v89Ev");}
void  S113C6 ::v90(){vfunc_called(this, "_ZN6S113C63v90Ev");}
void  S113C6 ::v91(){vfunc_called(this, "_ZN6S113C63v91Ev");}
void  S113C6 ::v92(){vfunc_called(this, "_ZN6S113C63v92Ev");}
S113C6 ::S113C6(){ note_ctor("S113C6", this);} // tgen

static void Test_S113C6()
{
  extern Class_Descriptor cd_S113C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S113C6, buf);
    S113C6 *dp, &lv = *(dp=new (buf) S113C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S113C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S113C6)");
    check_base_class_offset(lv, (S113C7*), 0, "S113C6");
    check_field_offset(lv, s113c6f0, ABISELECT(96,60), "S113C6.s113c6f0");
    check_field_offset(lv, s113c6f1, ABISELECT(104,68), "S113C6.s113c6f1");
    check_field_offset(lv, s113c6f2, ABISELECT(112,72), "S113C6.s113c6f2");
    check_field_offset(lv, s113c6f3, ABISELECT(120,80), "S113C6.s113c6f3");
    check_field_offset(lv, s113c6f4, ABISELECT(136,92), "S113C6.s113c6f4");
    check_field_offset(lv, s113c6f5, ABISELECT(152,104), "S113C6.s113c6f5");
    check_field_offset(lv, s113c6f6, ABISELECT(160,108), "S113C6.s113c6f6");
    set_bf_and_test(lv, s113c6f7, ABISELECT(176,120), 0, 1, 1, "S113C6");
    set_bf_and_test(lv, s113c6f8, ABISELECT(176,120), 1, 1, 1, "S113C6");
    set_bf_and_test(lv, s113c6f9, ABISELECT(176,120), 2, 1, 1, "S113C6");
    set_bf_and_test(lv, s113c6f10, ABISELECT(176,120), 3, 1, 1, "S113C6");
    set_bf_and_test(lv, s113c6f11, ABISELECT(176,120), 4, 1, 1, "S113C6");
    check_field_offset(lv, s113c6f12, ABISELECT(180,124), "S113C6.s113c6f12");
    test_class_info(&lv, &cd_S113C6);
    dp->~S113C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS113C6(Test_S113C6, "S113C6", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN6S113C6C1Ev();
extern void _ZN6S113C6D1Ev();
Name_Map name_map_S113C6[] = {
  NSPAIR(_ZN6S113C6C1Ev),
  NSPAIR(_ZN6S113C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S113C7;
extern VTBL_ENTRY _ZTI6S113C7[];
extern  VTBL_ENTRY _ZTV6S113C7[];
static Base_Class bases_S113C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S113C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI6S113C6[];
extern void _ZN6S113C6D1Ev();
extern void _ZN6S113C6D0Ev();
extern void _ZN6S113C72v7Ev();
extern void _ZN6S113C72v8Ev();
extern void _ZN6S113C72v9Ev();
extern void _ZN6S113C73v10Ev();
extern void _ZN6S113C73v11Ev();
extern void _ZN6S113C73v12Ev();
extern void _ZN6S113C73v13Ev();
extern void _ZN6S113C73v14Ev();
extern void _ZN6S113C73v15Ev();
extern void _ZN6S113C73v16Ev();
extern void _ZN6S113C73v17Ev();
extern void _ZN6S113C73v18Ev();
extern void _ZN6S113C73v19Ev();
extern void _ZN6S113C73v20Ev();
extern void _ZN6S113C73v21Ev();
extern void _ZN6S113C73v22Ev();
extern void _ZN6S113C73v23Ev();
extern void _ZN6S113C73v24Ev();
extern void _ZN6S113C73v25Ev();
extern void _ZN6S113C73v26Ev();
extern void _ZN6S113C73v27Ev();
extern void _ZN6S113C73v28Ev();
extern void _ZN6S113C73v29Ev();
extern void _ZN6S113C73v30Ev();
extern void _ZN6S113C73v31Ev();
extern void _ZN6S113C73v32Ev();
extern void _ZN6S113C73v33Ev();
extern void _ZN6S113C73v34Ev();
extern void _ZN6S113C73v35Ev();
extern void _ZN6S113C73v36Ev();
extern void _ZN6S113C73v37Ev();
extern void _ZN6S113C73v38Ev();
extern void _ZN6S113C73v39Ev();
extern void _ZN6S113C73v40Ev();
extern void _ZN6S113C73v41Ev();
extern void _ZN6S113C73v42Ev();
extern void _ZN6S113C73v43Ev();
extern void _ZN6S113C73v44Ev();
extern void _ZN6S113C73v45Ev();
extern void _ZN6S113C73v46Ev();
extern void _ZN6S113C73v47Ev();
extern void _ZN6S113C73v48Ev();
extern void _ZN6S113C73v49Ev();
extern void _ZN6S113C73v50Ev();
extern void _ZN6S113C73v51Ev();
extern void _ZN6S113C73v52Ev();
extern void _ZN6S113C73v53Ev();
extern void _ZN6S113C73v54Ev();
extern void _ZN6S113C73v55Ev();
extern void _ZN6S113C73v56Ev();
extern void _ZN6S113C73v57Ev();
extern void _ZN6S113C73v58Ev();
extern void _ZN6S113C73v59Ev();
extern void _ZN6S113C73v60Ev();
extern void _ZN6S113C73v61Ev();
extern void _ZN6S113C73v62Ev();
extern void _ZN6S113C73v63Ev();
extern void _ZN6S113C73v64Ev();
extern void _ZN6S113C73v65Ev();
extern void _ZN6S113C73v66Ev();
extern void _ZN6S113C73v67Ev();
extern void _ZN6S113C73v68Ev();
extern void _ZN6S113C73v69Ev();
extern void _ZN6S113C73v70Ev();
extern void _ZN6S113C63v71Ev();
extern void _ZN6S113C63v72Ev();
extern void _ZN6S113C63v73Ev();
extern void _ZN6S113C63v74Ev();
extern void _ZN6S113C63v75Ev();
extern void _ZN6S113C63v76Ev();
extern void _ZN6S113C63v77Ev();
extern void _ZN6S113C63v78Ev();
extern void _ZN6S113C63v79Ev();
extern void _ZN6S113C63v80Ev();
extern void _ZN6S113C63v81Ev();
extern void _ZN6S113C63v82Ev();
extern void _ZN6S113C63v83Ev();
extern void _ZN6S113C63v84Ev();
extern void _ZN6S113C63v85Ev();
extern void _ZN6S113C63v86Ev();
extern void _ZN6S113C63v87Ev();
extern void _ZN6S113C63v88Ev();
extern void _ZN6S113C63v89Ev();
extern void _ZN6S113C63v90Ev();
extern void _ZN6S113C63v91Ev();
extern void _ZN6S113C63v92Ev();
static  VTBL_ENTRY vtc_S113C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S113C6[0]),
  (VTBL_ENTRY)&_ZN6S113C6D1Ev,
  (VTBL_ENTRY)&_ZN6S113C6D0Ev,
  (VTBL_ENTRY)&_ZN6S113C72v7Ev,
  (VTBL_ENTRY)&_ZN6S113C72v8Ev,
  (VTBL_ENTRY)&_ZN6S113C72v9Ev,
  (VTBL_ENTRY)&_ZN6S113C73v10Ev,
  (VTBL_ENTRY)&_ZN6S113C73v11Ev,
  (VTBL_ENTRY)&_ZN6S113C73v12Ev,
  (VTBL_ENTRY)&_ZN6S113C73v13Ev,
  (VTBL_ENTRY)&_ZN6S113C73v14Ev,
  (VTBL_ENTRY)&_ZN6S113C73v15Ev,
  (VTBL_ENTRY)&_ZN6S113C73v16Ev,
  (VTBL_ENTRY)&_ZN6S113C73v17Ev,
  (VTBL_ENTRY)&_ZN6S113C73v18Ev,
  (VTBL_ENTRY)&_ZN6S113C73v19Ev,
  (VTBL_ENTRY)&_ZN6S113C73v20Ev,
  (VTBL_ENTRY)&_ZN6S113C73v21Ev,
  (VTBL_ENTRY)&_ZN6S113C73v22Ev,
  (VTBL_ENTRY)&_ZN6S113C73v23Ev,
  (VTBL_ENTRY)&_ZN6S113C73v24Ev,
  (VTBL_ENTRY)&_ZN6S113C73v25Ev,
  (VTBL_ENTRY)&_ZN6S113C73v26Ev,
  (VTBL_ENTRY)&_ZN6S113C73v27Ev,
  (VTBL_ENTRY)&_ZN6S113C73v28Ev,
  (VTBL_ENTRY)&_ZN6S113C73v29Ev,
  (VTBL_ENTRY)&_ZN6S113C73v30Ev,
  (VTBL_ENTRY)&_ZN6S113C73v31Ev,
  (VTBL_ENTRY)&_ZN6S113C73v32Ev,
  (VTBL_ENTRY)&_ZN6S113C73v33Ev,
  (VTBL_ENTRY)&_ZN6S113C73v34Ev,
  (VTBL_ENTRY)&_ZN6S113C73v35Ev,
  (VTBL_ENTRY)&_ZN6S113C73v36Ev,
  (VTBL_ENTRY)&_ZN6S113C73v37Ev,
  (VTBL_ENTRY)&_ZN6S113C73v38Ev,
  (VTBL_ENTRY)&_ZN6S113C73v39Ev,
  (VTBL_ENTRY)&_ZN6S113C73v40Ev,
  (VTBL_ENTRY)&_ZN6S113C73v41Ev,
  (VTBL_ENTRY)&_ZN6S113C73v42Ev,
  (VTBL_ENTRY)&_ZN6S113C73v43Ev,
  (VTBL_ENTRY)&_ZN6S113C73v44Ev,
  (VTBL_ENTRY)&_ZN6S113C73v45Ev,
  (VTBL_ENTRY)&_ZN6S113C73v46Ev,
  (VTBL_ENTRY)&_ZN6S113C73v47Ev,
  (VTBL_ENTRY)&_ZN6S113C73v48Ev,
  (VTBL_ENTRY)&_ZN6S113C73v49Ev,
  (VTBL_ENTRY)&_ZN6S113C73v50Ev,
  (VTBL_ENTRY)&_ZN6S113C73v51Ev,
  (VTBL_ENTRY)&_ZN6S113C73v52Ev,
  (VTBL_ENTRY)&_ZN6S113C73v53Ev,
  (VTBL_ENTRY)&_ZN6S113C73v54Ev,
  (VTBL_ENTRY)&_ZN6S113C73v55Ev,
  (VTBL_ENTRY)&_ZN6S113C73v56Ev,
  (VTBL_ENTRY)&_ZN6S113C73v57Ev,
  (VTBL_ENTRY)&_ZN6S113C73v58Ev,
  (VTBL_ENTRY)&_ZN6S113C73v59Ev,
  (VTBL_ENTRY)&_ZN6S113C73v60Ev,
  (VTBL_ENTRY)&_ZN6S113C73v61Ev,
  (VTBL_ENTRY)&_ZN6S113C73v62Ev,
  (VTBL_ENTRY)&_ZN6S113C73v63Ev,
  (VTBL_ENTRY)&_ZN6S113C73v64Ev,
  (VTBL_ENTRY)&_ZN6S113C73v65Ev,
  (VTBL_ENTRY)&_ZN6S113C73v66Ev,
  (VTBL_ENTRY)&_ZN6S113C73v67Ev,
  (VTBL_ENTRY)&_ZN6S113C73v68Ev,
  (VTBL_ENTRY)&_ZN6S113C73v69Ev,
  (VTBL_ENTRY)&_ZN6S113C73v70Ev,
  (VTBL_ENTRY)&_ZN6S113C63v71Ev,
  (VTBL_ENTRY)&_ZN6S113C63v72Ev,
  (VTBL_ENTRY)&_ZN6S113C63v73Ev,
  (VTBL_ENTRY)&_ZN6S113C63v74Ev,
  (VTBL_ENTRY)&_ZN6S113C63v75Ev,
  (VTBL_ENTRY)&_ZN6S113C63v76Ev,
  (VTBL_ENTRY)&_ZN6S113C63v77Ev,
  (VTBL_ENTRY)&_ZN6S113C63v78Ev,
  (VTBL_ENTRY)&_ZN6S113C63v79Ev,
  (VTBL_ENTRY)&_ZN6S113C63v80Ev,
  (VTBL_ENTRY)&_ZN6S113C63v81Ev,
  (VTBL_ENTRY)&_ZN6S113C63v82Ev,
  (VTBL_ENTRY)&_ZN6S113C63v83Ev,
  (VTBL_ENTRY)&_ZN6S113C63v84Ev,
  (VTBL_ENTRY)&_ZN6S113C63v85Ev,
  (VTBL_ENTRY)&_ZN6S113C63v86Ev,
  (VTBL_ENTRY)&_ZN6S113C63v87Ev,
  (VTBL_ENTRY)&_ZN6S113C63v88Ev,
  (VTBL_ENTRY)&_ZN6S113C63v89Ev,
  (VTBL_ENTRY)&_ZN6S113C63v90Ev,
  (VTBL_ENTRY)&_ZN6S113C63v91Ev,
  (VTBL_ENTRY)&_ZN6S113C63v92Ev,
};
extern VTBL_ENTRY _ZTI6S113C6[];
extern  VTBL_ENTRY _ZTV6S113C6[];
Class_Descriptor cd_S113C6 = {  "S113C6", // class name
  bases_S113C6, 1,
  &(vtc_S113C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI6S113C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S113C6),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S113C5  : S113C6 {
  unsigned int s113c5f0:1;
  unsigned int s113c5f1:1;
  unsigned int s113c5f2:1;
  ::S3350C17 s113c5f3;
  ::S3350C11 s113c5f4;
  ::S3350C5_nt s113c5f5;
  ::S287C27 s113c5f6;
  int s113c5f7[3];
  virtual  ~S113C5(); // _ZN6S113C5D1Ev
  virtual void  v93(); // _ZN6S113C53v93Ev
  virtual void  v94(); // _ZN6S113C53v94Ev
  virtual void  v95(); // _ZN6S113C53v95Ev
  virtual void  v96(); // _ZN6S113C53v96Ev
  virtual void  v97(); // _ZN6S113C53v97Ev
  virtual void  v98(); // _ZN6S113C53v98Ev
  virtual void  v99(); // _ZN6S113C53v99Ev
  virtual void  v100(); // _ZN6S113C54v100Ev
  virtual void  v101(); // _ZN6S113C54v101Ev
  virtual void  v102(); // _ZN6S113C54v102Ev
  virtual void  v103(); // _ZN6S113C54v103Ev
  virtual void  v104(); // _ZN6S113C54v104Ev
  virtual void  v105(); // _ZN6S113C54v105Ev
  virtual void  v106(); // _ZN6S113C54v106Ev
  virtual void  v107(); // _ZN6S113C54v107Ev
  virtual void  v108(); // _ZN6S113C54v108Ev
  virtual void  v109(); // _ZN6S113C54v109Ev
  virtual void  v110(); // _ZN6S113C54v110Ev
  virtual void  v111(); // _ZN6S113C54v111Ev
  virtual void  v112(); // _ZN6S113C54v112Ev
  S113C5(); // tgen
};
//SIG(-1 S113C5) C1{ BC2{ BC3{ vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 FC10{ BC11{ BC8}} FC12{ BC13{ BC8}} FC14{ BC15{ BC8}} FC16{ BC17{ BC8}} Fi[3]}


 S113C5 ::~S113C5(){ note_dtor("S113C5", this);}
void  S113C5 ::v93(){vfunc_called(this, "_ZN6S113C53v93Ev");}
void  S113C5 ::v94(){vfunc_called(this, "_ZN6S113C53v94Ev");}
void  S113C5 ::v95(){vfunc_called(this, "_ZN6S113C53v95Ev");}
void  S113C5 ::v96(){vfunc_called(this, "_ZN6S113C53v96Ev");}
void  S113C5 ::v97(){vfunc_called(this, "_ZN6S113C53v97Ev");}
void  S113C5 ::v98(){vfunc_called(this, "_ZN6S113C53v98Ev");}
void  S113C5 ::v99(){vfunc_called(this, "_ZN6S113C53v99Ev");}
void  S113C5 ::v100(){vfunc_called(this, "_ZN6S113C54v100Ev");}
void  S113C5 ::v101(){vfunc_called(this, "_ZN6S113C54v101Ev");}
void  S113C5 ::v102(){vfunc_called(this, "_ZN6S113C54v102Ev");}
void  S113C5 ::v103(){vfunc_called(this, "_ZN6S113C54v103Ev");}
void  S113C5 ::v104(){vfunc_called(this, "_ZN6S113C54v104Ev");}
void  S113C5 ::v105(){vfunc_called(this, "_ZN6S113C54v105Ev");}
void  S113C5 ::v106(){vfunc_called(this, "_ZN6S113C54v106Ev");}
void  S113C5 ::v107(){vfunc_called(this, "_ZN6S113C54v107Ev");}
void  S113C5 ::v108(){vfunc_called(this, "_ZN6S113C54v108Ev");}
void  S113C5 ::v109(){vfunc_called(this, "_ZN6S113C54v109Ev");}
void  S113C5 ::v110(){vfunc_called(this, "_ZN6S113C54v110Ev");}
void  S113C5 ::v111(){vfunc_called(this, "_ZN6S113C54v111Ev");}
void  S113C5 ::v112(){vfunc_called(this, "_ZN6S113C54v112Ev");}
S113C5 ::S113C5(){ note_ctor("S113C5", this);} // tgen

static void Test_S113C5()
{
  extern Class_Descriptor cd_S113C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S113C5, buf);
    S113C5 *dp, &lv = *(dp=new (buf) S113C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S113C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S113C5)");
    check_base_class_offset(lv, (S113C7*)(S113C6*), 0, "S113C5");
    check_base_class_offset(lv, (S113C6*), 0, "S113C5");
    set_bf_and_test(lv, s113c5f0, ABISELECT(188,132), 0, 1, 1, "S113C5");
    set_bf_and_test(lv, s113c5f1, ABISELECT(188,132), 1, 1, 1, "S113C5");
    set_bf_and_test(lv, s113c5f2, ABISELECT(188,132), 2, 1, 1, "S113C5");
    check_field_offset(lv, s113c5f3, ABISELECT(192,136), "S113C5.s113c5f3");
    check_field_offset(lv, s113c5f4, ABISELECT(208,148), "S113C5.s113c5f4");
    check_field_offset(lv, s113c5f5, ABISELECT(224,160), "S113C5.s113c5f5");
    check_field_offset(lv, s113c5f6, ABISELECT(240,172), "S113C5.s113c5f6");
    check_field_offset(lv, s113c5f7, ABISELECT(256,184), "S113C5.s113c5f7");
    test_class_info(&lv, &cd_S113C5);
    dp->~S113C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS113C5(Test_S113C5, "S113C5", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN6S113C5C1Ev();
extern void _ZN6S113C5D1Ev();
Name_Map name_map_S113C5[] = {
  NSPAIR(_ZN6S113C5C1Ev),
  NSPAIR(_ZN6S113C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S113C7;
extern VTBL_ENTRY _ZTI6S113C7[];
extern  VTBL_ENTRY _ZTV6S113C7[];
extern Class_Descriptor cd_S113C6;
extern VTBL_ENTRY _ZTI6S113C6[];
extern  VTBL_ENTRY _ZTV6S113C6[];
static Base_Class bases_S113C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S113C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S113C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S113C5[];
extern void _ZN6S113C5D1Ev();
extern void _ZN6S113C5D0Ev();
extern void _ZN6S113C72v7Ev();
extern void _ZN6S113C72v8Ev();
extern void _ZN6S113C72v9Ev();
extern void _ZN6S113C73v10Ev();
extern void _ZN6S113C73v11Ev();
extern void _ZN6S113C73v12Ev();
extern void _ZN6S113C73v13Ev();
extern void _ZN6S113C73v14Ev();
extern void _ZN6S113C73v15Ev();
extern void _ZN6S113C73v16Ev();
extern void _ZN6S113C73v17Ev();
extern void _ZN6S113C73v18Ev();
extern void _ZN6S113C73v19Ev();
extern void _ZN6S113C73v20Ev();
extern void _ZN6S113C73v21Ev();
extern void _ZN6S113C73v22Ev();
extern void _ZN6S113C73v23Ev();
extern void _ZN6S113C73v24Ev();
extern void _ZN6S113C73v25Ev();
extern void _ZN6S113C73v26Ev();
extern void _ZN6S113C73v27Ev();
extern void _ZN6S113C73v28Ev();
extern void _ZN6S113C73v29Ev();
extern void _ZN6S113C73v30Ev();
extern void _ZN6S113C73v31Ev();
extern void _ZN6S113C73v32Ev();
extern void _ZN6S113C73v33Ev();
extern void _ZN6S113C73v34Ev();
extern void _ZN6S113C73v35Ev();
extern void _ZN6S113C73v36Ev();
extern void _ZN6S113C73v37Ev();
extern void _ZN6S113C73v38Ev();
extern void _ZN6S113C73v39Ev();
extern void _ZN6S113C73v40Ev();
extern void _ZN6S113C73v41Ev();
extern void _ZN6S113C73v42Ev();
extern void _ZN6S113C73v43Ev();
extern void _ZN6S113C73v44Ev();
extern void _ZN6S113C73v45Ev();
extern void _ZN6S113C73v46Ev();
extern void _ZN6S113C73v47Ev();
extern void _ZN6S113C73v48Ev();
extern void _ZN6S113C73v49Ev();
extern void _ZN6S113C73v50Ev();
extern void _ZN6S113C73v51Ev();
extern void _ZN6S113C73v52Ev();
extern void _ZN6S113C73v53Ev();
extern void _ZN6S113C73v54Ev();
extern void _ZN6S113C73v55Ev();
extern void _ZN6S113C73v56Ev();
extern void _ZN6S113C73v57Ev();
extern void _ZN6S113C73v58Ev();
extern void _ZN6S113C73v59Ev();
extern void _ZN6S113C73v60Ev();
extern void _ZN6S113C73v61Ev();
extern void _ZN6S113C73v62Ev();
extern void _ZN6S113C73v63Ev();
extern void _ZN6S113C73v64Ev();
extern void _ZN6S113C73v65Ev();
extern void _ZN6S113C73v66Ev();
extern void _ZN6S113C73v67Ev();
extern void _ZN6S113C73v68Ev();
extern void _ZN6S113C73v69Ev();
extern void _ZN6S113C73v70Ev();
extern void _ZN6S113C63v71Ev();
extern void _ZN6S113C63v72Ev();
extern void _ZN6S113C63v73Ev();
extern void _ZN6S113C63v74Ev();
extern void _ZN6S113C63v75Ev();
extern void _ZN6S113C63v76Ev();
extern void _ZN6S113C63v77Ev();
extern void _ZN6S113C63v78Ev();
extern void _ZN6S113C63v79Ev();
extern void _ZN6S113C63v80Ev();
extern void _ZN6S113C63v81Ev();
extern void _ZN6S113C63v82Ev();
extern void _ZN6S113C63v83Ev();
extern void _ZN6S113C63v84Ev();
extern void _ZN6S113C63v85Ev();
extern void _ZN6S113C63v86Ev();
extern void _ZN6S113C63v87Ev();
extern void _ZN6S113C63v88Ev();
extern void _ZN6S113C63v89Ev();
extern void _ZN6S113C63v90Ev();
extern void _ZN6S113C63v91Ev();
extern void _ZN6S113C63v92Ev();
extern void _ZN6S113C53v93Ev();
extern void _ZN6S113C53v94Ev();
extern void _ZN6S113C53v95Ev();
extern void _ZN6S113C53v96Ev();
extern void _ZN6S113C53v97Ev();
extern void _ZN6S113C53v98Ev();
extern void _ZN6S113C53v99Ev();
extern void _ZN6S113C54v100Ev();
extern void _ZN6S113C54v101Ev();
extern void _ZN6S113C54v102Ev();
extern void _ZN6S113C54v103Ev();
extern void _ZN6S113C54v104Ev();
extern void _ZN6S113C54v105Ev();
extern void _ZN6S113C54v106Ev();
extern void _ZN6S113C54v107Ev();
extern void _ZN6S113C54v108Ev();
extern void _ZN6S113C54v109Ev();
extern void _ZN6S113C54v110Ev();
extern void _ZN6S113C54v111Ev();
extern void _ZN6S113C54v112Ev();
static  VTBL_ENTRY vtc_S113C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S113C5[0]),
  (VTBL_ENTRY)&_ZN6S113C5D1Ev,
  (VTBL_ENTRY)&_ZN6S113C5D0Ev,
  (VTBL_ENTRY)&_ZN6S113C72v7Ev,
  (VTBL_ENTRY)&_ZN6S113C72v8Ev,
  (VTBL_ENTRY)&_ZN6S113C72v9Ev,
  (VTBL_ENTRY)&_ZN6S113C73v10Ev,
  (VTBL_ENTRY)&_ZN6S113C73v11Ev,
  (VTBL_ENTRY)&_ZN6S113C73v12Ev,
  (VTBL_ENTRY)&_ZN6S113C73v13Ev,
  (VTBL_ENTRY)&_ZN6S113C73v14Ev,
  (VTBL_ENTRY)&_ZN6S113C73v15Ev,
  (VTBL_ENTRY)&_ZN6S113C73v16Ev,
  (VTBL_ENTRY)&_ZN6S113C73v17Ev,
  (VTBL_ENTRY)&_ZN6S113C73v18Ev,
  (VTBL_ENTRY)&_ZN6S113C73v19Ev,
  (VTBL_ENTRY)&_ZN6S113C73v20Ev,
  (VTBL_ENTRY)&_ZN6S113C73v21Ev,
  (VTBL_ENTRY)&_ZN6S113C73v22Ev,
  (VTBL_ENTRY)&_ZN6S113C73v23Ev,
  (VTBL_ENTRY)&_ZN6S113C73v24Ev,
  (VTBL_ENTRY)&_ZN6S113C73v25Ev,
  (VTBL_ENTRY)&_ZN6S113C73v26Ev,
  (VTBL_ENTRY)&_ZN6S113C73v27Ev,
  (VTBL_ENTRY)&_ZN6S113C73v28Ev,
  (VTBL_ENTRY)&_ZN6S113C73v29Ev,
  (VTBL_ENTRY)&_ZN6S113C73v30Ev,
  (VTBL_ENTRY)&_ZN6S113C73v31Ev,
  (VTBL_ENTRY)&_ZN6S113C73v32Ev,
  (VTBL_ENTRY)&_ZN6S113C73v33Ev,
  (VTBL_ENTRY)&_ZN6S113C73v34Ev,
  (VTBL_ENTRY)&_ZN6S113C73v35Ev,
  (VTBL_ENTRY)&_ZN6S113C73v36Ev,
  (VTBL_ENTRY)&_ZN6S113C73v37Ev,
  (VTBL_ENTRY)&_ZN6S113C73v38Ev,
  (VTBL_ENTRY)&_ZN6S113C73v39Ev,
  (VTBL_ENTRY)&_ZN6S113C73v40Ev,
  (VTBL_ENTRY)&_ZN6S113C73v41Ev,
  (VTBL_ENTRY)&_ZN6S113C73v42Ev,
  (VTBL_ENTRY)&_ZN6S113C73v43Ev,
  (VTBL_ENTRY)&_ZN6S113C73v44Ev,
  (VTBL_ENTRY)&_ZN6S113C73v45Ev,
  (VTBL_ENTRY)&_ZN6S113C73v46Ev,
  (VTBL_ENTRY)&_ZN6S113C73v47Ev,
  (VTBL_ENTRY)&_ZN6S113C73v48Ev,
  (VTBL_ENTRY)&_ZN6S113C73v49Ev,
  (VTBL_ENTRY)&_ZN6S113C73v50Ev,
  (VTBL_ENTRY)&_ZN6S113C73v51Ev,
  (VTBL_ENTRY)&_ZN6S113C73v52Ev,
  (VTBL_ENTRY)&_ZN6S113C73v53Ev,
  (VTBL_ENTRY)&_ZN6S113C73v54Ev,
  (VTBL_ENTRY)&_ZN6S113C73v55Ev,
  (VTBL_ENTRY)&_ZN6S113C73v56Ev,
  (VTBL_ENTRY)&_ZN6S113C73v57Ev,
  (VTBL_ENTRY)&_ZN6S113C73v58Ev,
  (VTBL_ENTRY)&_ZN6S113C73v59Ev,
  (VTBL_ENTRY)&_ZN6S113C73v60Ev,
  (VTBL_ENTRY)&_ZN6S113C73v61Ev,
  (VTBL_ENTRY)&_ZN6S113C73v62Ev,
  (VTBL_ENTRY)&_ZN6S113C73v63Ev,
  (VTBL_ENTRY)&_ZN6S113C73v64Ev,
  (VTBL_ENTRY)&_ZN6S113C73v65Ev,
  (VTBL_ENTRY)&_ZN6S113C73v66Ev,
  (VTBL_ENTRY)&_ZN6S113C73v67Ev,
  (VTBL_ENTRY)&_ZN6S113C73v68Ev,
  (VTBL_ENTRY)&_ZN6S113C73v69Ev,
  (VTBL_ENTRY)&_ZN6S113C73v70Ev,
  (VTBL_ENTRY)&_ZN6S113C63v71Ev,
  (VTBL_ENTRY)&_ZN6S113C63v72Ev,
  (VTBL_ENTRY)&_ZN6S113C63v73Ev,
  (VTBL_ENTRY)&_ZN6S113C63v74Ev,
  (VTBL_ENTRY)&_ZN6S113C63v75Ev,
  (VTBL_ENTRY)&_ZN6S113C63v76Ev,
  (VTBL_ENTRY)&_ZN6S113C63v77Ev,
  (VTBL_ENTRY)&_ZN6S113C63v78Ev,
  (VTBL_ENTRY)&_ZN6S113C63v79Ev,
  (VTBL_ENTRY)&_ZN6S113C63v80Ev,
  (VTBL_ENTRY)&_ZN6S113C63v81Ev,
  (VTBL_ENTRY)&_ZN6S113C63v82Ev,
  (VTBL_ENTRY)&_ZN6S113C63v83Ev,
  (VTBL_ENTRY)&_ZN6S113C63v84Ev,
  (VTBL_ENTRY)&_ZN6S113C63v85Ev,
  (VTBL_ENTRY)&_ZN6S113C63v86Ev,
  (VTBL_ENTRY)&_ZN6S113C63v87Ev,
  (VTBL_ENTRY)&_ZN6S113C63v88Ev,
  (VTBL_ENTRY)&_ZN6S113C63v89Ev,
  (VTBL_ENTRY)&_ZN6S113C63v90Ev,
  (VTBL_ENTRY)&_ZN6S113C63v91Ev,
  (VTBL_ENTRY)&_ZN6S113C63v92Ev,
  (VTBL_ENTRY)&_ZN6S113C53v93Ev,
  (VTBL_ENTRY)&_ZN6S113C53v94Ev,
  (VTBL_ENTRY)&_ZN6S113C53v95Ev,
  (VTBL_ENTRY)&_ZN6S113C53v96Ev,
  (VTBL_ENTRY)&_ZN6S113C53v97Ev,
  (VTBL_ENTRY)&_ZN6S113C53v98Ev,
  (VTBL_ENTRY)&_ZN6S113C53v99Ev,
  (VTBL_ENTRY)&_ZN6S113C54v100Ev,
  (VTBL_ENTRY)&_ZN6S113C54v101Ev,
  (VTBL_ENTRY)&_ZN6S113C54v102Ev,
  (VTBL_ENTRY)&_ZN6S113C54v103Ev,
  (VTBL_ENTRY)&_ZN6S113C54v104Ev,
  (VTBL_ENTRY)&_ZN6S113C54v105Ev,
  (VTBL_ENTRY)&_ZN6S113C54v106Ev,
  (VTBL_ENTRY)&_ZN6S113C54v107Ev,
  (VTBL_ENTRY)&_ZN6S113C54v108Ev,
  (VTBL_ENTRY)&_ZN6S113C54v109Ev,
  (VTBL_ENTRY)&_ZN6S113C54v110Ev,
  (VTBL_ENTRY)&_ZN6S113C54v111Ev,
  (VTBL_ENTRY)&_ZN6S113C54v112Ev,
};
extern VTBL_ENTRY _ZTI6S113C5[];
extern  VTBL_ENTRY _ZTV6S113C5[];
Class_Descriptor cd_S113C5 = {  "S113C5", // class name
  bases_S113C5, 2,
  &(vtc_S113C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI6S113C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S113C5),110, //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  S113C4  : S113C5 {
  ::S3350C4_nt s113c4f0;
  unsigned int s113c4f1:1;
  ::S287C23 s113c4f2;
  virtual  ~S113C4(); // _ZN6S113C4D1Ev
  virtual void  v113(); // _ZN6S113C44v113Ev
  virtual void  v114(); // _ZN6S113C44v114Ev
  virtual void  v115(); // _ZN6S113C44v115Ev
  virtual void  v116(); // _ZN6S113C44v116Ev
  S113C4(); // tgen
};
//SIG(-1 S113C4) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 Fi:1 Fi:1 Fi:1 FC11{ BC12{ BC9}} FC13{ BC14{ BC9}} FC15{ BC16{ BC9}} FC17{ BC18{ BC9}} Fi[3]} vd v1 v2 v3 v4 FC5 Fi:1 FC19{ BC20{ BC9}}}


 S113C4 ::~S113C4(){ note_dtor("S113C4", this);}
void  S113C4 ::v113(){vfunc_called(this, "_ZN6S113C44v113Ev");}
void  S113C4 ::v114(){vfunc_called(this, "_ZN6S113C44v114Ev");}
void  S113C4 ::v115(){vfunc_called(this, "_ZN6S113C44v115Ev");}
void  S113C4 ::v116(){vfunc_called(this, "_ZN6S113C44v116Ev");}
S113C4 ::S113C4(){ note_ctor("S113C4", this);} // tgen

static void Test_S113C4()
{
  extern Class_Descriptor cd_S113C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,56)];
    init_test(&cd_S113C4, buf);
    S113C4 *dp, &lv = *(dp=new (buf) S113C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,220), "sizeof(S113C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S113C4)");
    check_base_class_offset(lv, (S113C7*)(S113C6*)(S113C5*), 0, "S113C4");
    check_base_class_offset(lv, (S113C6*)(S113C5*), 0, "S113C4");
    check_base_class_offset(lv, (S113C5*), 0, "S113C4");
    check_field_offset(lv, s113c4f0, ABISELECT(268,196), "S113C4.s113c4f0");
    set_bf_and_test(lv, s113c4f1, ABISELECT(276,204), 0, 1, 1, "S113C4");
    check_field_offset(lv, s113c4f2, ABISELECT(280,208), "S113C4.s113c4f2");
    test_class_info(&lv, &cd_S113C4);
    dp->~S113C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS113C4(Test_S113C4, "S113C4", ABISELECT(296,220));

#else // __cplusplus

extern void _ZN6S113C4C1Ev();
extern void _ZN6S113C4D1Ev();
Name_Map name_map_S113C4[] = {
  NSPAIR(_ZN6S113C4C1Ev),
  NSPAIR(_ZN6S113C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S113C7;
extern VTBL_ENTRY _ZTI6S113C7[];
extern  VTBL_ENTRY _ZTV6S113C7[];
extern Class_Descriptor cd_S113C6;
extern VTBL_ENTRY _ZTI6S113C6[];
extern  VTBL_ENTRY _ZTV6S113C6[];
extern Class_Descriptor cd_S113C5;
extern VTBL_ENTRY _ZTI6S113C5[];
extern  VTBL_ENTRY _ZTV6S113C5[];
static Base_Class bases_S113C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S113C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S113C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S113C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S113C4[];
extern void _ZN6S113C4D1Ev();
extern void _ZN6S113C4D0Ev();
extern void _ZN6S113C72v7Ev();
extern void _ZN6S113C72v8Ev();
extern void _ZN6S113C72v9Ev();
extern void _ZN6S113C73v10Ev();
extern void _ZN6S113C73v11Ev();
extern void _ZN6S113C73v12Ev();
extern void _ZN6S113C73v13Ev();
extern void _ZN6S113C73v14Ev();
extern void _ZN6S113C73v15Ev();
extern void _ZN6S113C73v16Ev();
extern void _ZN6S113C73v17Ev();
extern void _ZN6S113C73v18Ev();
extern void _ZN6S113C73v19Ev();
extern void _ZN6S113C73v20Ev();
extern void _ZN6S113C73v21Ev();
extern void _ZN6S113C73v22Ev();
extern void _ZN6S113C73v23Ev();
extern void _ZN6S113C73v24Ev();
extern void _ZN6S113C73v25Ev();
extern void _ZN6S113C73v26Ev();
extern void _ZN6S113C73v27Ev();
extern void _ZN6S113C73v28Ev();
extern void _ZN6S113C73v29Ev();
extern void _ZN6S113C73v30Ev();
extern void _ZN6S113C73v31Ev();
extern void _ZN6S113C73v32Ev();
extern void _ZN6S113C73v33Ev();
extern void _ZN6S113C73v34Ev();
extern void _ZN6S113C73v35Ev();
extern void _ZN6S113C73v36Ev();
extern void _ZN6S113C73v37Ev();
extern void _ZN6S113C73v38Ev();
extern void _ZN6S113C73v39Ev();
extern void _ZN6S113C73v40Ev();
extern void _ZN6S113C73v41Ev();
extern void _ZN6S113C73v42Ev();
extern void _ZN6S113C73v43Ev();
extern void _ZN6S113C73v44Ev();
extern void _ZN6S113C73v45Ev();
extern void _ZN6S113C73v46Ev();
extern void _ZN6S113C73v47Ev();
extern void _ZN6S113C73v48Ev();
extern void _ZN6S113C73v49Ev();
extern void _ZN6S113C73v50Ev();
extern void _ZN6S113C73v51Ev();
extern void _ZN6S113C73v52Ev();
extern void _ZN6S113C73v53Ev();
extern void _ZN6S113C73v54Ev();
extern void _ZN6S113C73v55Ev();
extern void _ZN6S113C73v56Ev();
extern void _ZN6S113C73v57Ev();
extern void _ZN6S113C73v58Ev();
extern void _ZN6S113C73v59Ev();
extern void _ZN6S113C73v60Ev();
extern void _ZN6S113C73v61Ev();
extern void _ZN6S113C73v62Ev();
extern void _ZN6S113C73v63Ev();
extern void _ZN6S113C73v64Ev();
extern void _ZN6S113C73v65Ev();
extern void _ZN6S113C73v66Ev();
extern void _ZN6S113C73v67Ev();
extern void _ZN6S113C73v68Ev();
extern void _ZN6S113C73v69Ev();
extern void _ZN6S113C73v70Ev();
extern void _ZN6S113C63v71Ev();
extern void _ZN6S113C63v72Ev();
extern void _ZN6S113C63v73Ev();
extern void _ZN6S113C63v74Ev();
extern void _ZN6S113C63v75Ev();
extern void _ZN6S113C63v76Ev();
extern void _ZN6S113C63v77Ev();
extern void _ZN6S113C63v78Ev();
extern void _ZN6S113C63v79Ev();
extern void _ZN6S113C63v80Ev();
extern void _ZN6S113C63v81Ev();
extern void _ZN6S113C63v82Ev();
extern void _ZN6S113C63v83Ev();
extern void _ZN6S113C63v84Ev();
extern void _ZN6S113C63v85Ev();
extern void _ZN6S113C63v86Ev();
extern void _ZN6S113C63v87Ev();
extern void _ZN6S113C63v88Ev();
extern void _ZN6S113C63v89Ev();
extern void _ZN6S113C63v90Ev();
extern void _ZN6S113C63v91Ev();
extern void _ZN6S113C63v92Ev();
extern void _ZN6S113C53v93Ev();
extern void _ZN6S113C53v94Ev();
extern void _ZN6S113C53v95Ev();
extern void _ZN6S113C53v96Ev();
extern void _ZN6S113C53v97Ev();
extern void _ZN6S113C53v98Ev();
extern void _ZN6S113C53v99Ev();
extern void _ZN6S113C54v100Ev();
extern void _ZN6S113C54v101Ev();
extern void _ZN6S113C54v102Ev();
extern void _ZN6S113C54v103Ev();
extern void _ZN6S113C54v104Ev();
extern void _ZN6S113C54v105Ev();
extern void _ZN6S113C54v106Ev();
extern void _ZN6S113C54v107Ev();
extern void _ZN6S113C54v108Ev();
extern void _ZN6S113C54v109Ev();
extern void _ZN6S113C54v110Ev();
extern void _ZN6S113C54v111Ev();
extern void _ZN6S113C54v112Ev();
extern void _ZN6S113C44v113Ev();
extern void _ZN6S113C44v114Ev();
extern void _ZN6S113C44v115Ev();
extern void _ZN6S113C44v116Ev();
static  VTBL_ENTRY vtc_S113C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S113C4[0]),
  (VTBL_ENTRY)&_ZN6S113C4D1Ev,
  (VTBL_ENTRY)&_ZN6S113C4D0Ev,
  (VTBL_ENTRY)&_ZN6S113C72v7Ev,
  (VTBL_ENTRY)&_ZN6S113C72v8Ev,
  (VTBL_ENTRY)&_ZN6S113C72v9Ev,
  (VTBL_ENTRY)&_ZN6S113C73v10Ev,
  (VTBL_ENTRY)&_ZN6S113C73v11Ev,
  (VTBL_ENTRY)&_ZN6S113C73v12Ev,
  (VTBL_ENTRY)&_ZN6S113C73v13Ev,
  (VTBL_ENTRY)&_ZN6S113C73v14Ev,
  (VTBL_ENTRY)&_ZN6S113C73v15Ev,
  (VTBL_ENTRY)&_ZN6S113C73v16Ev,
  (VTBL_ENTRY)&_ZN6S113C73v17Ev,
  (VTBL_ENTRY)&_ZN6S113C73v18Ev,
  (VTBL_ENTRY)&_ZN6S113C73v19Ev,
  (VTBL_ENTRY)&_ZN6S113C73v20Ev,
  (VTBL_ENTRY)&_ZN6S113C73v21Ev,
  (VTBL_ENTRY)&_ZN6S113C73v22Ev,
  (VTBL_ENTRY)&_ZN6S113C73v23Ev,
  (VTBL_ENTRY)&_ZN6S113C73v24Ev,
  (VTBL_ENTRY)&_ZN6S113C73v25Ev,
  (VTBL_ENTRY)&_ZN6S113C73v26Ev,
  (VTBL_ENTRY)&_ZN6S113C73v27Ev,
  (VTBL_ENTRY)&_ZN6S113C73v28Ev,
  (VTBL_ENTRY)&_ZN6S113C73v29Ev,
  (VTBL_ENTRY)&_ZN6S113C73v30Ev,
  (VTBL_ENTRY)&_ZN6S113C73v31Ev,
  (VTBL_ENTRY)&_ZN6S113C73v32Ev,
  (VTBL_ENTRY)&_ZN6S113C73v33Ev,
  (VTBL_ENTRY)&_ZN6S113C73v34Ev,
  (VTBL_ENTRY)&_ZN6S113C73v35Ev,
  (VTBL_ENTRY)&_ZN6S113C73v36Ev,
  (VTBL_ENTRY)&_ZN6S113C73v37Ev,
  (VTBL_ENTRY)&_ZN6S113C73v38Ev,
  (VTBL_ENTRY)&_ZN6S113C73v39Ev,
  (VTBL_ENTRY)&_ZN6S113C73v40Ev,
  (VTBL_ENTRY)&_ZN6S113C73v41Ev,
  (VTBL_ENTRY)&_ZN6S113C73v42Ev,
  (VTBL_ENTRY)&_ZN6S113C73v43Ev,
  (VTBL_ENTRY)&_ZN6S113C73v44Ev,
  (VTBL_ENTRY)&_ZN6S113C73v45Ev,
  (VTBL_ENTRY)&_ZN6S113C73v46Ev,
  (VTBL_ENTRY)&_ZN6S113C73v47Ev,
  (VTBL_ENTRY)&_ZN6S113C73v48Ev,
  (VTBL_ENTRY)&_ZN6S113C73v49Ev,
  (VTBL_ENTRY)&_ZN6S113C73v50Ev,
  (VTBL_ENTRY)&_ZN6S113C73v51Ev,
  (VTBL_ENTRY)&_ZN6S113C73v52Ev,
  (VTBL_ENTRY)&_ZN6S113C73v53Ev,
  (VTBL_ENTRY)&_ZN6S113C73v54Ev,
  (VTBL_ENTRY)&_ZN6S113C73v55Ev,
  (VTBL_ENTRY)&_ZN6S113C73v56Ev,
  (VTBL_ENTRY)&_ZN6S113C73v57Ev,
  (VTBL_ENTRY)&_ZN6S113C73v58Ev,
  (VTBL_ENTRY)&_ZN6S113C73v59Ev,
  (VTBL_ENTRY)&_ZN6S113C73v60Ev,
  (VTBL_ENTRY)&_ZN6S113C73v61Ev,
  (VTBL_ENTRY)&_ZN6S113C73v62Ev,
  (VTBL_ENTRY)&_ZN6S113C73v63Ev,
  (VTBL_ENTRY)&_ZN6S113C73v64Ev,
  (VTBL_ENTRY)&_ZN6S113C73v65Ev,
  (VTBL_ENTRY)&_ZN6S113C73v66Ev,
  (VTBL_ENTRY)&_ZN6S113C73v67Ev,
  (VTBL_ENTRY)&_ZN6S113C73v68Ev,
  (VTBL_ENTRY)&_ZN6S113C73v69Ev,
  (VTBL_ENTRY)&_ZN6S113C73v70Ev,
  (VTBL_ENTRY)&_ZN6S113C63v71Ev,
  (VTBL_ENTRY)&_ZN6S113C63v72Ev,
  (VTBL_ENTRY)&_ZN6S113C63v73Ev,
  (VTBL_ENTRY)&_ZN6S113C63v74Ev,
  (VTBL_ENTRY)&_ZN6S113C63v75Ev,
  (VTBL_ENTRY)&_ZN6S113C63v76Ev,
  (VTBL_ENTRY)&_ZN6S113C63v77Ev,
  (VTBL_ENTRY)&_ZN6S113C63v78Ev,
  (VTBL_ENTRY)&_ZN6S113C63v79Ev,
  (VTBL_ENTRY)&_ZN6S113C63v80Ev,
  (VTBL_ENTRY)&_ZN6S113C63v81Ev,
  (VTBL_ENTRY)&_ZN6S113C63v82Ev,
  (VTBL_ENTRY)&_ZN6S113C63v83Ev,
  (VTBL_ENTRY)&_ZN6S113C63v84Ev,
  (VTBL_ENTRY)&_ZN6S113C63v85Ev,
  (VTBL_ENTRY)&_ZN6S113C63v86Ev,
  (VTBL_ENTRY)&_ZN6S113C63v87Ev,
  (VTBL_ENTRY)&_ZN6S113C63v88Ev,
  (VTBL_ENTRY)&_ZN6S113C63v89Ev,
  (VTBL_ENTRY)&_ZN6S113C63v90Ev,
  (VTBL_ENTRY)&_ZN6S113C63v91Ev,
  (VTBL_ENTRY)&_ZN6S113C63v92Ev,
  (VTBL_ENTRY)&_ZN6S113C53v93Ev,
  (VTBL_ENTRY)&_ZN6S113C53v94Ev,
  (VTBL_ENTRY)&_ZN6S113C53v95Ev,
  (VTBL_ENTRY)&_ZN6S113C53v96Ev,
  (VTBL_ENTRY)&_ZN6S113C53v97Ev,
  (VTBL_ENTRY)&_ZN6S113C53v98Ev,
  (VTBL_ENTRY)&_ZN6S113C53v99Ev,
  (VTBL_ENTRY)&_ZN6S113C54v100Ev,
  (VTBL_ENTRY)&_ZN6S113C54v101Ev,
  (VTBL_ENTRY)&_ZN6S113C54v102Ev,
  (VTBL_ENTRY)&_ZN6S113C54v103Ev,
  (VTBL_ENTRY)&_ZN6S113C54v104Ev,
  (VTBL_ENTRY)&_ZN6S113C54v105Ev,
  (VTBL_ENTRY)&_ZN6S113C54v106Ev,
  (VTBL_ENTRY)&_ZN6S113C54v107Ev,
  (VTBL_ENTRY)&_ZN6S113C54v108Ev,
  (VTBL_ENTRY)&_ZN6S113C54v109Ev,
  (VTBL_ENTRY)&_ZN6S113C54v110Ev,
  (VTBL_ENTRY)&_ZN6S113C54v111Ev,
  (VTBL_ENTRY)&_ZN6S113C54v112Ev,
  (VTBL_ENTRY)&_ZN6S113C44v113Ev,
  (VTBL_ENTRY)&_ZN6S113C44v114Ev,
  (VTBL_ENTRY)&_ZN6S113C44v115Ev,
  (VTBL_ENTRY)&_ZN6S113C44v116Ev,
};
extern VTBL_ENTRY _ZTI6S113C4[];
extern  VTBL_ENTRY _ZTV6S113C4[];
Class_Descriptor cd_S113C4 = {  "S113C4", // class name
  bases_S113C4, 3,
  &(vtc_S113C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,220), // object size
  NSPAIRA(_ZTI6S113C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S113C4),114, //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  S113C3  : S113C4 {
  ::S287C19 s113c3f0;
  unsigned int s113c3f1:1;
  virtual  ~S113C3(); // _ZN6S113C3D1Ev
  virtual void  v117(); // _ZN6S113C34v117Ev
  virtual void  v118(); // _ZN6S113C34v118Ev
  virtual void  v119(); // _ZN6S113C34v119Ev
  virtual void  v120(); // _ZN6S113C34v120Ev
  virtual void  v121(); // _ZN6S113C34v121Ev
  virtual void  v122(); // _ZN6S113C34v122Ev
  virtual void  v123(); // _ZN6S113C34v123Ev
  S113C3(); // tgen
};
//SIG(-1 S113C3) C1{ BC2{ BC3{ BC4{ BC5{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 Fi[2] Fp Fi[2] FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} FC7 FC11{ m} FC7 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 Fi:1 Fi:1 Fi:1 FC12{ BC13{ BC10}} FC14{ BC15{ BC10}} FC16{ BC17{ BC10}} FC18{ BC19{ BC10}} Fi[3]} vd v114 v115 v116 v117 FC6 Fi:1 FC20{ BC21{ BC10}}} vd v1 v2 v3 v4 v5 v6 v7 FC22{ BC23{ BC10}} Fi:1}


 S113C3 ::~S113C3(){ note_dtor("S113C3", this);}
void  S113C3 ::v117(){vfunc_called(this, "_ZN6S113C34v117Ev");}
void  S113C3 ::v118(){vfunc_called(this, "_ZN6S113C34v118Ev");}
void  S113C3 ::v119(){vfunc_called(this, "_ZN6S113C34v119Ev");}
void  S113C3 ::v120(){vfunc_called(this, "_ZN6S113C34v120Ev");}
void  S113C3 ::v121(){vfunc_called(this, "_ZN6S113C34v121Ev");}
void  S113C3 ::v122(){vfunc_called(this, "_ZN6S113C34v122Ev");}
void  S113C3 ::v123(){vfunc_called(this, "_ZN6S113C34v123Ev");}
S113C3 ::S113C3(){ note_ctor("S113C3", this);} // tgen

static void Test_S113C3()
{
  extern Class_Descriptor cd_S113C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(41,60)];
    init_test(&cd_S113C3, buf);
    S113C3 *dp, &lv = *(dp=new (buf) S113C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,236), "sizeof(S113C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S113C3)");
    check_base_class_offset(lv, (S113C7*)(S113C6*)(S113C5*)(S113C4*), 0, "S113C3");
    check_base_class_offset(lv, (S113C6*)(S113C5*)(S113C4*), 0, "S113C3");
    check_base_class_offset(lv, (S113C5*)(S113C4*), 0, "S113C3");
    check_base_class_offset(lv, (S113C4*), 0, "S113C3");
    check_field_offset(lv, s113c3f0, ABISELECT(296,220), "S113C3.s113c3f0");
    set_bf_and_test(lv, s113c3f1, ABISELECT(312,232), 0, 1, 1, "S113C3");
    test_class_info(&lv, &cd_S113C3);
    dp->~S113C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS113C3(Test_S113C3, "S113C3", ABISELECT(320,236));

#else // __cplusplus

extern void _ZN6S113C3C1Ev();
extern void _ZN6S113C3D1Ev();
Name_Map name_map_S113C3[] = {
  NSPAIR(_ZN6S113C3C1Ev),
  NSPAIR(_ZN6S113C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S113C7;
extern VTBL_ENTRY _ZTI6S113C7[];
extern  VTBL_ENTRY _ZTV6S113C7[];
extern Class_Descriptor cd_S113C6;
extern VTBL_ENTRY _ZTI6S113C6[];
extern  VTBL_ENTRY _ZTV6S113C6[];
extern Class_Descriptor cd_S113C5;
extern VTBL_ENTRY _ZTI6S113C5[];
extern  VTBL_ENTRY _ZTV6S113C5[];
extern Class_Descriptor cd_S113C4;
extern VTBL_ENTRY _ZTI6S113C4[];
extern  VTBL_ENTRY _ZTV6S113C4[];
static Base_Class bases_S113C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S113C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S113C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S113C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S113C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S113C3[];
extern void _ZN6S113C3D1Ev();
extern void _ZN6S113C3D0Ev();
extern void _ZN6S113C72v7Ev();
extern void _ZN6S113C72v8Ev();
extern void _ZN6S113C72v9Ev();
extern void _ZN6S113C73v10Ev();
extern void _ZN6S113C73v11Ev();
extern void _ZN6S113C73v12Ev();
extern void _ZN6S113C73v13Ev();
extern void _ZN6S113C73v14Ev();
extern void _ZN6S113C73v15Ev();
extern void _ZN6S113C73v16Ev();
extern void _ZN6S113C73v17Ev();
extern void _ZN6S113C73v18Ev();
extern void _ZN6S113C73v19Ev();
extern void _ZN6S113C73v20Ev();
extern void _ZN6S113C73v21Ev();
extern void _ZN6S113C73v22Ev();
extern void _ZN6S113C73v23Ev();
extern void _ZN6S113C73v24Ev();
extern void _ZN6S113C73v25Ev();
extern void _ZN6S113C73v26Ev();
extern void _ZN6S113C73v27Ev();
extern void _ZN6S113C73v28Ev();
extern void _ZN6S113C73v29Ev();
extern void _ZN6S113C73v30Ev();
extern void _ZN6S113C73v31Ev();
extern void _ZN6S113C73v32Ev();
extern void _ZN6S113C73v33Ev();
extern void _ZN6S113C73v34Ev();
extern void _ZN6S113C73v35Ev();
extern void _ZN6S113C73v36Ev();
extern void _ZN6S113C73v37Ev();
extern void _ZN6S113C73v38Ev();
extern void _ZN6S113C73v39Ev();
extern void _ZN6S113C73v40Ev();
extern void _ZN6S113C73v41Ev();
extern void _ZN6S113C73v42Ev();
extern void _ZN6S113C73v43Ev();
extern void _ZN6S113C73v44Ev();
extern void _ZN6S113C73v45Ev();
extern void _ZN6S113C73v46Ev();
extern void _ZN6S113C73v47Ev();
extern void _ZN6S113C73v48Ev();
extern void _ZN6S113C73v49Ev();
extern void _ZN6S113C73v50Ev();
extern void _ZN6S113C73v51Ev();
extern void _ZN6S113C73v52Ev();
extern void _ZN6S113C73v53Ev();
extern void _ZN6S113C73v54Ev();
extern void _ZN6S113C73v55Ev();
extern void _ZN6S113C73v56Ev();
extern void _ZN6S113C73v57Ev();
extern void _ZN6S113C73v58Ev();
extern void _ZN6S113C73v59Ev();
extern void _ZN6S113C73v60Ev();
extern void _ZN6S113C73v61Ev();
extern void _ZN6S113C73v62Ev();
extern void _ZN6S113C73v63Ev();
extern void _ZN6S113C73v64Ev();
extern void _ZN6S113C73v65Ev();
extern void _ZN6S113C73v66Ev();
extern void _ZN6S113C73v67Ev();
extern void _ZN6S113C73v68Ev();
extern void _ZN6S113C73v69Ev();
extern void _ZN6S113C73v70Ev();
extern void _ZN6S113C63v71Ev();
extern void _ZN6S113C63v72Ev();
extern void _ZN6S113C63v73Ev();
extern void _ZN6S113C63v74Ev();
extern void _ZN6S113C63v75Ev();
extern void _ZN6S113C63v76Ev();
extern void _ZN6S113C63v77Ev();
extern void _ZN6S113C63v78Ev();
extern void _ZN6S113C63v79Ev();
extern void _ZN6S113C63v80Ev();
extern void _ZN6S113C63v81Ev();
extern void _ZN6S113C63v82Ev();
extern void _ZN6S113C63v83Ev();
extern void _ZN6S113C63v84Ev();
extern void _ZN6S113C63v85Ev();
extern void _ZN6S113C63v86Ev();
extern void _ZN6S113C63v87Ev();
extern void _ZN6S113C63v88Ev();
extern void _ZN6S113C63v89Ev();
extern void _ZN6S113C63v90Ev();
extern void _ZN6S113C63v91Ev();
extern void _ZN6S113C63v92Ev();
extern void _ZN6S113C53v93Ev();
extern void _ZN6S113C53v94Ev();
extern void _ZN6S113C53v95Ev();
extern void _ZN6S113C53v96Ev();
extern void _ZN6S113C53v97Ev();
extern void _ZN6S113C53v98Ev();
extern void _ZN6S113C53v99Ev();
extern void _ZN6S113C54v100Ev();
extern void _ZN6S113C54v101Ev();
extern void _ZN6S113C54v102Ev();
extern void _ZN6S113C54v103Ev();
extern void _ZN6S113C54v104Ev();
extern void _ZN6S113C54v105Ev();
extern void _ZN6S113C54v106Ev();
extern void _ZN6S113C54v107Ev();
extern void _ZN6S113C54v108Ev();
extern void _ZN6S113C54v109Ev();
extern void _ZN6S113C54v110Ev();
extern void _ZN6S113C54v111Ev();
extern void _ZN6S113C54v112Ev();
extern void _ZN6S113C44v113Ev();
extern void _ZN6S113C44v114Ev();
extern void _ZN6S113C44v115Ev();
extern void _ZN6S113C44v116Ev();
extern void _ZN6S113C34v117Ev();
extern void _ZN6S113C34v118Ev();
extern void _ZN6S113C34v119Ev();
extern void _ZN6S113C34v120Ev();
extern void _ZN6S113C34v121Ev();
extern void _ZN6S113C34v122Ev();
extern void _ZN6S113C34v123Ev();
static  VTBL_ENTRY vtc_S113C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S113C3[0]),
  (VTBL_ENTRY)&_ZN6S113C3D1Ev,
  (VTBL_ENTRY)&_ZN6S113C3D0Ev,
  (VTBL_ENTRY)&_ZN6S113C72v7Ev,
  (VTBL_ENTRY)&_ZN6S113C72v8Ev,
  (VTBL_ENTRY)&_ZN6S113C72v9Ev,
  (VTBL_ENTRY)&_ZN6S113C73v10Ev,
  (VTBL_ENTRY)&_ZN6S113C73v11Ev,
  (VTBL_ENTRY)&_ZN6S113C73v12Ev,
  (VTBL_ENTRY)&_ZN6S113C73v13Ev,
  (VTBL_ENTRY)&_ZN6S113C73v14Ev,
  (VTBL_ENTRY)&_ZN6S113C73v15Ev,
  (VTBL_ENTRY)&_ZN6S113C73v16Ev,
  (VTBL_ENTRY)&_ZN6S113C73v17Ev,
  (VTBL_ENTRY)&_ZN6S113C73v18Ev,
  (VTBL_ENTRY)&_ZN6S113C73v19Ev,
  (VTBL_ENTRY)&_ZN6S113C73v20Ev,
  (VTBL_ENTRY)&_ZN6S113C73v21Ev,
  (VTBL_ENTRY)&_ZN6S113C73v22Ev,
  (VTBL_ENTRY)&_ZN6S113C73v23Ev,
  (VTBL_ENTRY)&_ZN6S113C73v24Ev,
  (VTBL_ENTRY)&_ZN6S113C73v25Ev,
  (VTBL_ENTRY)&_ZN6S113C73v26Ev,
  (VTBL_ENTRY)&_ZN6S113C73v27Ev,
  (VTBL_ENTRY)&_ZN6S113C73v28Ev,
  (VTBL_ENTRY)&_ZN6S113C73v29Ev,
  (VTBL_ENTRY)&_ZN6S113C73v30Ev,
  (VTBL_ENTRY)&_ZN6S113C73v31Ev,
  (VTBL_ENTRY)&_ZN6S113C73v32Ev,
  (VTBL_ENTRY)&_ZN6S113C73v33Ev,
  (VTBL_ENTRY)&_ZN6S113C73v34Ev,
  (VTBL_ENTRY)&_ZN6S113C73v35Ev,
  (VTBL_ENTRY)&_ZN6S113C73v36Ev,
  (VTBL_ENTRY)&_ZN6S113C73v37Ev,
  (VTBL_ENTRY)&_ZN6S113C73v38Ev,
  (VTBL_ENTRY)&_ZN6S113C73v39Ev,
  (VTBL_ENTRY)&_ZN6S113C73v40Ev,
  (VTBL_ENTRY)&_ZN6S113C73v41Ev,
  (VTBL_ENTRY)&_ZN6S113C73v42Ev,
  (VTBL_ENTRY)&_ZN6S113C73v43Ev,
  (VTBL_ENTRY)&_ZN6S113C73v44Ev,
  (VTBL_ENTRY)&_ZN6S113C73v45Ev,
  (VTBL_ENTRY)&_ZN6S113C73v46Ev,
  (VTBL_ENTRY)&_ZN6S113C73v47Ev,
  (VTBL_ENTRY)&_ZN6S113C73v48Ev,
  (VTBL_ENTRY)&_ZN6S113C73v49Ev,
  (VTBL_ENTRY)&_ZN6S113C73v50Ev,
  (VTBL_ENTRY)&_ZN6S113C73v51Ev,
  (VTBL_ENTRY)&_ZN6S113C73v52Ev,
  (VTBL_ENTRY)&_ZN6S113C73v53Ev,
  (VTBL_ENTRY)&_ZN6S113C73v54Ev,
  (VTBL_ENTRY)&_ZN6S113C73v55Ev,
  (VTBL_ENTRY)&_ZN6S113C73v56Ev,
  (VTBL_ENTRY)&_ZN6S113C73v57Ev,
  (VTBL_ENTRY)&_ZN6S113C73v58Ev,
  (VTBL_ENTRY)&_ZN6S113C73v59Ev,
  (VTBL_ENTRY)&_ZN6S113C73v60Ev,
  (VTBL_ENTRY)&_ZN6S113C73v61Ev,
  (VTBL_ENTRY)&_ZN6S113C73v62Ev,
  (VTBL_ENTRY)&_ZN6S113C73v63Ev,
  (VTBL_ENTRY)&_ZN6S113C73v64Ev,
  (VTBL_ENTRY)&_ZN6S113C73v65Ev,
  (VTBL_ENTRY)&_ZN6S113C73v66Ev,
  (VTBL_ENTRY)&_ZN6S113C73v67Ev,
  (VTBL_ENTRY)&_ZN6S113C73v68Ev,
  (VTBL_ENTRY)&_ZN6S113C73v69Ev,
  (VTBL_ENTRY)&_ZN6S113C73v70Ev,
  (VTBL_ENTRY)&_ZN6S113C63v71Ev,
  (VTBL_ENTRY)&_ZN6S113C63v72Ev,
  (VTBL_ENTRY)&_ZN6S113C63v73Ev,
  (VTBL_ENTRY)&_ZN6S113C63v74Ev,
  (VTBL_ENTRY)&_ZN6S113C63v75Ev,
  (VTBL_ENTRY)&_ZN6S113C63v76Ev,
  (VTBL_ENTRY)&_ZN6S113C63v77Ev,
  (VTBL_ENTRY)&_ZN6S113C63v78Ev,
  (VTBL_ENTRY)&_ZN6S113C63v79Ev,
  (VTBL_ENTRY)&_ZN6S113C63v80Ev,
  (VTBL_ENTRY)&_ZN6S113C63v81Ev,
  (VTBL_ENTRY)&_ZN6S113C63v82Ev,
  (VTBL_ENTRY)&_ZN6S113C63v83Ev,
  (VTBL_ENTRY)&_ZN6S113C63v84Ev,
  (VTBL_ENTRY)&_ZN6S113C63v85Ev,
  (VTBL_ENTRY)&_ZN6S113C63v86Ev,
  (VTBL_ENTRY)&_ZN6S113C63v87Ev,
  (VTBL_ENTRY)&_ZN6S113C63v88Ev,
  (VTBL_ENTRY)&_ZN6S113C63v89Ev,
  (VTBL_ENTRY)&_ZN6S113C63v90Ev,
  (VTBL_ENTRY)&_ZN6S113C63v91Ev,
  (VTBL_ENTRY)&_ZN6S113C63v92Ev,
  (VTBL_ENTRY)&_ZN6S113C53v93Ev,
  (VTBL_ENTRY)&_ZN6S113C53v94Ev,
  (VTBL_ENTRY)&_ZN6S113C53v95Ev,
  (VTBL_ENTRY)&_ZN6S113C53v96Ev,
  (VTBL_ENTRY)&_ZN6S113C53v97Ev,
  (VTBL_ENTRY)&_ZN6S113C53v98Ev,
  (VTBL_ENTRY)&_ZN6S113C53v99Ev,
  (VTBL_ENTRY)&_ZN6S113C54v100Ev,
  (VTBL_ENTRY)&_ZN6S113C54v101Ev,
  (VTBL_ENTRY)&_ZN6S113C54v102Ev,
  (VTBL_ENTRY)&_ZN6S113C54v103Ev,
  (VTBL_ENTRY)&_ZN6S113C54v104Ev,
  (VTBL_ENTRY)&_ZN6S113C54v105Ev,
  (VTBL_ENTRY)&_ZN6S113C54v106Ev,
  (VTBL_ENTRY)&_ZN6S113C54v107Ev,
  (VTBL_ENTRY)&_ZN6S113C54v108Ev,
  (VTBL_ENTRY)&_ZN6S113C54v109Ev,
  (VTBL_ENTRY)&_ZN6S113C54v110Ev,
  (VTBL_ENTRY)&_ZN6S113C54v111Ev,
  (VTBL_ENTRY)&_ZN6S113C54v112Ev,
  (VTBL_ENTRY)&_ZN6S113C44v113Ev,
  (VTBL_ENTRY)&_ZN6S113C44v114Ev,
  (VTBL_ENTRY)&_ZN6S113C44v115Ev,
  (VTBL_ENTRY)&_ZN6S113C44v116Ev,
  (VTBL_ENTRY)&_ZN6S113C34v117Ev,
  (VTBL_ENTRY)&_ZN6S113C34v118Ev,
  (VTBL_ENTRY)&_ZN6S113C34v119Ev,
  (VTBL_ENTRY)&_ZN6S113C34v120Ev,
  (VTBL_ENTRY)&_ZN6S113C34v121Ev,
  (VTBL_ENTRY)&_ZN6S113C34v122Ev,
  (VTBL_ENTRY)&_ZN6S113C34v123Ev,
};
extern VTBL_ENTRY _ZTI6S113C3[];
extern  VTBL_ENTRY _ZTV6S113C3[];
Class_Descriptor cd_S113C3 = {  "S113C3", // class name
  bases_S113C3, 4,
  &(vtc_S113C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(320,236), // object size
  NSPAIRA(_ZTI6S113C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S113C3),121, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S113C27_nt  {
  ::S3350C18 s113c27f0;
  void *s113c27f1;
  int s113c27f2;
  void  mf113c27(); // _ZN10S113C27_nt8mf113c27Ev
};
//SIG(-1 S113C27_nt) C1{ m FC2{ BC3{ m Fp Fi[2]}} Fp Fi}


void  S113C27_nt ::mf113c27(){}

//skip512 S113C27_nt

#else // __cplusplus

Class_Descriptor cd_S113C27_nt = {  "S113C27_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(32,20), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S113C26_nt  : S113C27_nt {
};
//SIG(-1 S113C26_nt) C1{ BC2{ m FC3{ BC4{ m Fp Fi[2]}} Fp Fi}}



//skip512 S113C26_nt

#else // __cplusplus

extern Class_Descriptor cd_S113C27_nt;
static Base_Class bases_S113C26_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S113C27_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  S113C32  : S3350C7_nt {
};
//SIG(-1 S113C32) C1{ BC2{ m Fp Fi[2]}}



static void Test_S113C32()
{
  extern Class_Descriptor cd_S113C32;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S113C32, buf);
    S113C32 &lv = *(new (buf) S113C32());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S113C32)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S113C32)");
    check_base_class_offset(lv, (S3350C7_nt*), 0, "S113C32");
    test_class_info(&lv, &cd_S113C32);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS113C32(Test_S113C32, "S113C32", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3350C7_nt;
static Base_Class bases_S113C32[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3350C7_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_S113C32 = {  "S113C32", // class name
  bases_S113C32, 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  S113C31  : S113C32 {
};
//SIG(-1 S113C31) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S113C31()
{
  extern Class_Descriptor cd_S113C31;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S113C31, buf);
    S113C31 &lv = *(new (buf) S113C31());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S113C31)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S113C31)");
    check_base_class_offset(lv, (S3350C7_nt*)(S113C32*), 0, "S113C31");
    check_base_class_offset(lv, (S113C32*), 0, "S113C31");
    test_class_info(&lv, &cd_S113C31);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS113C31(Test_S113C31, "S113C31", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3350C7_nt;
extern Class_Descriptor cd_S113C32;
static Base_Class bases_S113C31[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3350C7_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_S113C32,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S113C31 = {  "S113C31", // class name
  bases_S113C31, 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  S113C2  : S113C3 {
  ::S113C26_nt s113c2f0;
  int s113c2f1[3];
  unsigned int s113c2f2:1;
  unsigned int s113c2f3:1;
  unsigned int s113c2f4:1;
  unsigned int s113c2f5:1;
  unsigned int s113c2f6:1;
  unsigned int s113c2f7:1;
  unsigned int s113c2f8:1;
  unsigned int s113c2f9:1;
  unsigned int s113c2f10:1;
  unsigned int s113c2f11:1;
  unsigned int s113c2f12:1;
  unsigned int s113c2f13:1;
  unsigned int s113c2f14:1;
  ::S287C9 s113c2f15;
  void *s113c2f16;
  ::S113C31 s113c2f17;
  void *s113c2f18[2];
  virtual  ~S113C2(); // _ZN6S113C2D1Ev
  virtual void  v124(); // _ZN6S113C24v124Ev
  virtual void  v125(); // _ZN6S113C24v125Ev
  virtual void  v126(); // _ZN6S113C24v126Ev
  virtual void  v127(); // _ZN6S113C24v127Ev
  virtual void  v128(); // _ZN6S113C24v128Ev
  virtual void  v129(); // _ZN6S113C24v129Ev
  virtual void  v130(); // _ZN6S113C24v130Ev
  virtual void  v131(); // _ZN6S113C24v131Ev
  virtual void  v132(); // _ZN6S113C24v132Ev
  virtual void  v133(); // _ZN6S113C24v133Ev
  S113C2(); // tgen
};
//SIG(-1 S113C2) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ 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 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 Fi FL Fp[4] Fi[2] Fp FC7{ m Fi[2]} Fp[2]} vd v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 Fi[2] Fp Fi[2] FC8{ BC9{ BC10{ BC11{ m Fp Fi[2]}}}} FC8 FC12{ m} FC8 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 Fi:1 Fi:1 Fi:1 FC13{ BC14{ BC11}} FC15{ BC16{ BC11}} FC17{ BC18{ BC11}} FC19{ BC20{ BC11}} Fi[3]} vd v117 v118 v119 v120 FC7 Fi:1 FC21{ BC22{ BC11}}} vd v121 v122 v123 v124 v125 v126 v127 FC23{ BC24{ BC11}} Fi:1} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 FC25{ BC26{ m FC14 Fp Fi}} Fi[3] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC9 Fp FC27{ BC28{ BC11}} Fp[2]}


 S113C2 ::~S113C2(){ note_dtor("S113C2", this);}
void  S113C2 ::v124(){vfunc_called(this, "_ZN6S113C24v124Ev");}
void  S113C2 ::v125(){vfunc_called(this, "_ZN6S113C24v125Ev");}
void  S113C2 ::v126(){vfunc_called(this, "_ZN6S113C24v126Ev");}
void  S113C2 ::v127(){vfunc_called(this, "_ZN6S113C24v127Ev");}
void  S113C2 ::v128(){vfunc_called(this, "_ZN6S113C24v128Ev");}
void  S113C2 ::v129(){vfunc_called(this, "_ZN6S113C24v129Ev");}
void  S113C2 ::v130(){vfunc_called(this, "_ZN6S113C24v130Ev");}
void  S113C2 ::v131(){vfunc_called(this, "_ZN6S113C24v131Ev");}
void  S113C2 ::v132(){vfunc_called(this, "_ZN6S113C24v132Ev");}
void  S113C2 ::v133(){vfunc_called(this, "_ZN6S113C24v133Ev");}
S113C2 ::S113C2(){ note_ctor("S113C2", this);} // tgen

static void Test_S113C2()
{
  extern Class_Descriptor cd_S113C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(54,78)];
    init_test(&cd_S113C2, buf);
    S113C2 *dp, &lv = *(dp=new (buf) S113C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(424,308), "sizeof(S113C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S113C2)");
    check_base_class_offset(lv, (S113C7*)(S113C6*)(S113C5*)(S113C4*)(S113C3*), 0, "S113C2");
    check_base_class_offset(lv, (S113C6*)(S113C5*)(S113C4*)(S113C3*), 0, "S113C2");
    check_base_class_offset(lv, (S113C5*)(S113C4*)(S113C3*), 0, "S113C2");
    check_base_class_offset(lv, (S113C4*)(S113C3*), 0, "S113C2");
    check_base_class_offset(lv, (S113C3*), 0, "S113C2");
    check_field_offset(lv, s113c2f0, ABISELECT(320,236), "S113C2.s113c2f0");
    check_field_offset(lv, s113c2f1, ABISELECT(352,256), "S113C2.s113c2f1");
    set_bf_and_test(lv, s113c2f2, ABISELECT(364,268), 0, 1, 1, "S113C2");
    set_bf_and_test(lv, s113c2f3, ABISELECT(364,268), 1, 1, 1, "S113C2");
    set_bf_and_test(lv, s113c2f4, ABISELECT(364,268), 2, 1, 1, "S113C2");
    set_bf_and_test(lv, s113c2f5, ABISELECT(364,268), 3, 1, 1, "S113C2");
    set_bf_and_test(lv, s113c2f6, ABISELECT(364,268), 4, 1, 1, "S113C2");
    set_bf_and_test(lv, s113c2f7, ABISELECT(364,268), 5, 1, 1, "S113C2");
    set_bf_and_test(lv, s113c2f8, ABISELECT(364,268), 6, 1, 1, "S113C2");
    set_bf_and_test(lv, s113c2f9, ABISELECT(364,268), 7, 1, 1, "S113C2");
    set_bf_and_test(lv, s113c2f10, ABISELECT(365,269), 0, 1, 1, "S113C2");
    set_bf_and_test(lv, s113c2f11, ABISELECT(365,269), 1, 1, 1, "S113C2");
    set_bf_and_test(lv, s113c2f12, ABISELECT(365,269), 2, 1, 1, "S113C2");
    set_bf_and_test(lv, s113c2f13, ABISELECT(365,269), 3, 1, 1, "S113C2");
    set_bf_and_test(lv, s113c2f14, ABISELECT(365,269), 4, 1, 1, "S113C2");
    check_field_offset(lv, s113c2f15, ABISELECT(368,272), "S113C2.s113c2f15");
    check_field_offset(lv, s113c2f16, ABISELECT(384,284), "S113C2.s113c2f16");
    check_field_offset(lv, s113c2f17, ABISELECT(392,288), "S113C2.s113c2f17");
    check_field_offset(lv, s113c2f18, ABISELECT(408,300), "S113C2.s113c2f18");
    test_class_info(&lv, &cd_S113C2);
    dp->~S113C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS113C2(Test_S113C2, "S113C2", ABISELECT(424,308));

#else // __cplusplus

extern void _ZN6S113C2C1Ev();
extern void _ZN6S113C2D1Ev();
Name_Map name_map_S113C2[] = {
  NSPAIR(_ZN6S113C2C1Ev),
  NSPAIR(_ZN6S113C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S113C7;
extern VTBL_ENTRY _ZTI6S113C7[];
extern  VTBL_ENTRY _ZTV6S113C7[];
extern Class_Descriptor cd_S113C6;
extern VTBL_ENTRY _ZTI6S113C6[];
extern  VTBL_ENTRY _ZTV6S113C6[];
extern Class_Descriptor cd_S113C5;
extern VTBL_ENTRY _ZTI6S113C5[];
extern  VTBL_ENTRY _ZTV6S113C5[];
extern Class_Descriptor cd_S113C4;
extern VTBL_ENTRY _ZTI6S113C4[];
extern  VTBL_ENTRY _ZTV6S113C4[];
extern Class_Descriptor cd_S113C3;
extern VTBL_ENTRY _ZTI6S113C3[];
extern  VTBL_ENTRY _ZTV6S113C3[];
static Base_Class bases_S113C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S113C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S113C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S113C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S113C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S113C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S113C2[];
extern void _ZN6S113C2D1Ev();
extern void _ZN6S113C2D0Ev();
extern void _ZN6S113C72v7Ev();
extern void _ZN6S113C72v8Ev();
extern void _ZN6S113C72v9Ev();
extern void _ZN6S113C73v10Ev();
extern void _ZN6S113C73v11Ev();
extern void _ZN6S113C73v12Ev();
extern void _ZN6S113C73v13Ev();
extern void _ZN6S113C73v14Ev();
extern void _ZN6S113C73v15Ev();
extern void _ZN6S113C73v16Ev();
extern void _ZN6S113C73v17Ev();
extern void _ZN6S113C73v18Ev();
extern void _ZN6S113C73v19Ev();
extern void _ZN6S113C73v20Ev();
extern void _ZN6S113C73v21Ev();
extern void _ZN6S113C73v22Ev();
extern void _ZN6S113C73v23Ev();
extern void _ZN6S113C73v24Ev();
extern void _ZN6S113C73v25Ev();
extern void _ZN6S113C73v26Ev();
extern void _ZN6S113C73v27Ev();
extern void _ZN6S113C73v28Ev();
extern void _ZN6S113C73v29Ev();
extern void _ZN6S113C73v30Ev();
extern void _ZN6S113C73v31Ev();
extern void _ZN6S113C73v32Ev();
extern void _ZN6S113C73v33Ev();
extern void _ZN6S113C73v34Ev();
extern void _ZN6S113C73v35Ev();
extern void _ZN6S113C73v36Ev();
extern void _ZN6S113C73v37Ev();
extern void _ZN6S113C73v38Ev();
extern void _ZN6S113C73v39Ev();
extern void _ZN6S113C73v40Ev();
extern void _ZN6S113C73v41Ev();
extern void _ZN6S113C73v42Ev();
extern void _ZN6S113C73v43Ev();
extern void _ZN6S113C73v44Ev();
extern void _ZN6S113C73v45Ev();
extern void _ZN6S113C73v46Ev();
extern void _ZN6S113C73v47Ev();
extern void _ZN6S113C73v48Ev();
extern void _ZN6S113C73v49Ev();
extern void _ZN6S113C73v50Ev();
extern void _ZN6S113C73v51Ev();
extern void _ZN6S113C73v52Ev();
extern void _ZN6S113C73v53Ev();
extern void _ZN6S113C73v54Ev();
extern void _ZN6S113C73v55Ev();
extern void _ZN6S113C73v56Ev();
extern void _ZN6S113C73v57Ev();
extern void _ZN6S113C73v58Ev();
extern void _ZN6S113C73v59Ev();
extern void _ZN6S113C73v60Ev();
extern void _ZN6S113C73v61Ev();
extern void _ZN6S113C73v62Ev();
extern void _ZN6S113C73v63Ev();
extern void _ZN6S113C73v64Ev();
extern void _ZN6S113C73v65Ev();
extern void _ZN6S113C73v66Ev();
extern void _ZN6S113C73v67Ev();
extern void _ZN6S113C73v68Ev();
extern void _ZN6S113C73v69Ev();
extern void _ZN6S113C73v70Ev();
extern void _ZN6S113C63v71Ev();
extern void _ZN6S113C63v72Ev();
extern void _ZN6S113C63v73Ev();
extern void _ZN6S113C63v74Ev();
extern void _ZN6S113C63v75Ev();
extern void _ZN6S113C63v76Ev();
extern void _ZN6S113C63v77Ev();
extern void _ZN6S113C63v78Ev();
extern void _ZN6S113C63v79Ev();
extern void _ZN6S113C63v80Ev();
extern void _ZN6S113C63v81Ev();
extern void _ZN6S113C63v82Ev();
extern void _ZN6S113C63v83Ev();
extern void _ZN6S113C63v84Ev();
extern void _ZN6S113C63v85Ev();
extern void _ZN6S113C63v86Ev();
extern void _ZN6S113C63v87Ev();
extern void _ZN6S113C63v88Ev();
extern void _ZN6S113C63v89Ev();
extern void _ZN6S113C63v90Ev();
extern void _ZN6S113C63v91Ev();
extern void _ZN6S113C63v92Ev();
extern void _ZN6S113C53v93Ev();
extern void _ZN6S113C53v94Ev();
extern void _ZN6S113C53v95Ev();
extern void _ZN6S113C53v96Ev();
extern void _ZN6S113C53v97Ev();
extern void _ZN6S113C53v98Ev();
extern void _ZN6S113C53v99Ev();
extern void _ZN6S113C54v100Ev();
extern void _ZN6S113C54v101Ev();
extern void _ZN6S113C54v102Ev();
extern void _ZN6S113C54v103Ev();
extern void _ZN6S113C54v104Ev();
extern void _ZN6S113C54v105Ev();
extern void _ZN6S113C54v106Ev();
extern void _ZN6S113C54v107Ev();
extern void _ZN6S113C54v108Ev();
extern void _ZN6S113C54v109Ev();
extern void _ZN6S113C54v110Ev();
extern void _ZN6S113C54v111Ev();
extern void _ZN6S113C54v112Ev();
extern void _ZN6S113C44v113Ev();
extern void _ZN6S113C44v114Ev();
extern void _ZN6S113C44v115Ev();
extern void _ZN6S113C44v116Ev();
extern void _ZN6S113C34v117Ev();
extern void _ZN6S113C34v118Ev();
extern void _ZN6S113C34v119Ev();
extern void _ZN6S113C34v120Ev();
extern void _ZN6S113C34v121Ev();
extern void _ZN6S113C34v122Ev();
extern void _ZN6S113C34v123Ev();
extern void _ZN6S113C24v124Ev();
extern void _ZN6S113C24v125Ev();
extern void _ZN6S113C24v126Ev();
extern void _ZN6S113C24v127Ev();
extern void _ZN6S113C24v128Ev();
extern void _ZN6S113C24v129Ev();
extern void _ZN6S113C24v130Ev();
extern void _ZN6S113C24v131Ev();
extern void _ZN6S113C24v132Ev();
extern void _ZN6S113C24v133Ev();
static  VTBL_ENTRY vtc_S113C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S113C2[0]),
  (VTBL_ENTRY)&_ZN6S113C2D1Ev,
  (VTBL_ENTRY)&_ZN6S113C2D0Ev,
  (VTBL_ENTRY)&_ZN6S113C72v7Ev,
  (VTBL_ENTRY)&_ZN6S113C72v8Ev,
  (VTBL_ENTRY)&_ZN6S113C72v9Ev,
  (VTBL_ENTRY)&_ZN6S113C73v10Ev,
  (VTBL_ENTRY)&_ZN6S113C73v11Ev,
  (VTBL_ENTRY)&_ZN6S113C73v12Ev,
  (VTBL_ENTRY)&_ZN6S113C73v13Ev,
  (VTBL_ENTRY)&_ZN6S113C73v14Ev,
  (VTBL_ENTRY)&_ZN6S113C73v15Ev,
  (VTBL_ENTRY)&_ZN6S113C73v16Ev,
  (VTBL_ENTRY)&_ZN6S113C73v17Ev,
  (VTBL_ENTRY)&_ZN6S113C73v18Ev,
  (VTBL_ENTRY)&_ZN6S113C73v19Ev,
  (VTBL_ENTRY)&_ZN6S113C73v20Ev,
  (VTBL_ENTRY)&_ZN6S113C73v21Ev,
  (VTBL_ENTRY)&_ZN6S113C73v22Ev,
  (VTBL_ENTRY)&_ZN6S113C73v23Ev,
  (VTBL_ENTRY)&_ZN6S113C73v24Ev,
  (VTBL_ENTRY)&_ZN6S113C73v25Ev,
  (VTBL_ENTRY)&_ZN6S113C73v26Ev,
  (VTBL_ENTRY)&_ZN6S113C73v27Ev,
  (VTBL_ENTRY)&_ZN6S113C73v28Ev,
  (VTBL_ENTRY)&_ZN6S113C73v29Ev,
  (VTBL_ENTRY)&_ZN6S113C73v30Ev,
  (VTBL_ENTRY)&_ZN6S113C73v31Ev,
  (VTBL_ENTRY)&_ZN6S113C73v32Ev,
  (VTBL_ENTRY)&_ZN6S113C73v33Ev,
  (VTBL_ENTRY)&_ZN6S113C73v34Ev,
  (VTBL_ENTRY)&_ZN6S113C73v35Ev,
  (VTBL_ENTRY)&_ZN6S113C73v36Ev,
  (VTBL_ENTRY)&_ZN6S113C73v37Ev,
  (VTBL_ENTRY)&_ZN6S113C73v38Ev,
  (VTBL_ENTRY)&_ZN6S113C73v39Ev,
  (VTBL_ENTRY)&_ZN6S113C73v40Ev,
  (VTBL_ENTRY)&_ZN6S113C73v41Ev,
  (VTBL_ENTRY)&_ZN6S113C73v42Ev,
  (VTBL_ENTRY)&_ZN6S113C73v43Ev,
  (VTBL_ENTRY)&_ZN6S113C73v44Ev,
  (VTBL_ENTRY)&_ZN6S113C73v45Ev,
  (VTBL_ENTRY)&_ZN6S113C73v46Ev,
  (VTBL_ENTRY)&_ZN6S113C73v47Ev,
  (VTBL_ENTRY)&_ZN6S113C73v48Ev,
  (VTBL_ENTRY)&_ZN6S113C73v49Ev,
  (VTBL_ENTRY)&_ZN6S113C73v50Ev,
  (VTBL_ENTRY)&_ZN6S113C73v51Ev,
  (VTBL_ENTRY)&_ZN6S113C73v52Ev,
  (VTBL_ENTRY)&_ZN6S113C73v53Ev,
  (VTBL_ENTRY)&_ZN6S113C73v54Ev,
  (VTBL_ENTRY)&_ZN6S113C73v55Ev,
  (VTBL_ENTRY)&_ZN6S113C73v56Ev,
  (VTBL_ENTRY)&_ZN6S113C73v57Ev,
  (VTBL_ENTRY)&_ZN6S113C73v58Ev,
  (VTBL_ENTRY)&_ZN6S113C73v59Ev,
  (VTBL_ENTRY)&_ZN6S113C73v60Ev,
  (VTBL_ENTRY)&_ZN6S113C73v61Ev,
  (VTBL_ENTRY)&_ZN6S113C73v62Ev,
  (VTBL_ENTRY)&_ZN6S113C73v63Ev,
  (VTBL_ENTRY)&_ZN6S113C73v64Ev,
  (VTBL_ENTRY)&_ZN6S113C73v65Ev,
  (VTBL_ENTRY)&_ZN6S113C73v66Ev,
  (VTBL_ENTRY)&_ZN6S113C73v67Ev,
  (VTBL_ENTRY)&_ZN6S113C73v68Ev,
  (VTBL_ENTRY)&_ZN6S113C73v69Ev,
  (VTBL_ENTRY)&_ZN6S113C73v70Ev,
  (VTBL_ENTRY)&_ZN6S113C63v71Ev,
  (VTBL_ENTRY)&_ZN6S113C63v72Ev,
  (VTBL_ENTRY)&_ZN6S113C63v73Ev,
  (VTBL_ENTRY)&_ZN6S113C63v74Ev,
  (VTBL_ENTRY)&_ZN6S113C63v75Ev,
  (VTBL_ENTRY)&_ZN6S113C63v76Ev,
  (VTBL_ENTRY)&_ZN6S113C63v77Ev,
  (VTBL_ENTRY)&_ZN6S113C63v78Ev,
  (VTBL_ENTRY)&_ZN6S113C63v79Ev,
  (VTBL_ENTRY)&_ZN6S113C63v80Ev,
  (VTBL_ENTRY)&_ZN6S113C63v81Ev,
  (VTBL_ENTRY)&_ZN6S113C63v82Ev,
  (VTBL_ENTRY)&_ZN6S113C63v83Ev,
  (VTBL_ENTRY)&_ZN6S113C63v84Ev,
  (VTBL_ENTRY)&_ZN6S113C63v85Ev,
  (VTBL_ENTRY)&_ZN6S113C63v86Ev,
  (VTBL_ENTRY)&_ZN6S113C63v87Ev,
  (VTBL_ENTRY)&_ZN6S113C63v88Ev,
  (VTBL_ENTRY)&_ZN6S113C63v89Ev,
  (VTBL_ENTRY)&_ZN6S113C63v90Ev,
  (VTBL_ENTRY)&_ZN6S113C63v91Ev,
  (VTBL_ENTRY)&_ZN6S113C63v92Ev,
  (VTBL_ENTRY)&_ZN6S113C53v93Ev,
  (VTBL_ENTRY)&_ZN6S113C53v94Ev,
  (VTBL_ENTRY)&_ZN6S113C53v95Ev,
  (VTBL_ENTRY)&_ZN6S113C53v96Ev,
  (VTBL_ENTRY)&_ZN6S113C53v97Ev,
  (VTBL_ENTRY)&_ZN6S113C53v98Ev,
  (VTBL_ENTRY)&_ZN6S113C53v99Ev,
  (VTBL_ENTRY)&_ZN6S113C54v100Ev,
  (VTBL_ENTRY)&_ZN6S113C54v101Ev,
  (VTBL_ENTRY)&_ZN6S113C54v102Ev,
  (VTBL_ENTRY)&_ZN6S113C54v103Ev,
  (VTBL_ENTRY)&_ZN6S113C54v104Ev,
  (VTBL_ENTRY)&_ZN6S113C54v105Ev,
  (VTBL_ENTRY)&_ZN6S113C54v106Ev,
  (VTBL_ENTRY)&_ZN6S113C54v107Ev,
  (VTBL_ENTRY)&_ZN6S113C54v108Ev,
  (VTBL_ENTRY)&_ZN6S113C54v109Ev,
  (VTBL_ENTRY)&_ZN6S113C54v110Ev,
  (VTBL_ENTRY)&_ZN6S113C54v111Ev,
  (VTBL_ENTRY)&_ZN6S113C54v112Ev,
  (VTBL_ENTRY)&_ZN6S113C44v113Ev,
  (VTBL_ENTRY)&_ZN6S113C44v114Ev,
  (VTBL_ENTRY)&_ZN6S113C44v115Ev,
  (VTBL_ENTRY)&_ZN6S113C44v116Ev,
  (VTBL_ENTRY)&_ZN6S113C34v117Ev,
  (VTBL_ENTRY)&_ZN6S113C34v118Ev,
  (VTBL_ENTRY)&_ZN6S113C34v119Ev,
  (VTBL_ENTRY)&_ZN6S113C34v120Ev,
  (VTBL_ENTRY)&_ZN6S113C34v121Ev,
  (VTBL_ENTRY)&_ZN6S113C34v122Ev,
  (VTBL_ENTRY)&_ZN6S113C34v123Ev,
  (VTBL_ENTRY)&_ZN6S113C24v124Ev,
  (VTBL_ENTRY)&_ZN6S113C24v125Ev,
  (VTBL_ENTRY)&_ZN6S113C24v126Ev,
  (VTBL_ENTRY)&_ZN6S113C24v127Ev,
  (VTBL_ENTRY)&_ZN6S113C24v128Ev,
  (VTBL_ENTRY)&_ZN6S113C24v129Ev,
  (VTBL_ENTRY)&_ZN6S113C24v130Ev,
  (VTBL_ENTRY)&_ZN6S113C24v131Ev,
  (VTBL_ENTRY)&_ZN6S113C24v132Ev,
  (VTBL_ENTRY)&_ZN6S113C24v133Ev,
};
extern VTBL_ENTRY _ZTI6S113C2[];
extern  VTBL_ENTRY _ZTV6S113C2[];
Class_Descriptor cd_S113C2 = {  "S113C2", // class name
  bases_S113C2, 5,
  &(vtc_S113C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(424,308), // object size
  NSPAIRA(_ZTI6S113C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S113C2),131, //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  S113C1  : S113C2 {
  virtual  ~S113C1(); // _ZN6S113C1D1Ev
  virtual void  v1(); // _ZN6S113C12v1Ev
  virtual void  v2(); // _ZN6S113C12v2Ev
  virtual void  v3(); // _ZN6S113C12v3Ev
  virtual void  v4(); // _ZN6S113C12v4Ev
  virtual void  v5(); // _ZN6S113C12v5Ev
  virtual void  v6(); // _ZN6S113C12v6Ev
  S113C1(); // tgen
};
//SIG(1 S113C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ 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 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 Fi FL Fp[4] Fi[2] Fp FC8{ m Fi[2]} Fp[2]} vd v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 Fi[2] Fp Fi[2] FC9{ BC10{ BC11{ BC12{ m Fp Fi[2]}}}} FC9 FC13{ m} FC9 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 Fi:1 Fi:1 Fi:1 FC14{ BC15{ BC12}} FC16{ BC17{ BC12}} FC18{ BC19{ BC12}} FC20{ BC21{ BC12}} Fi[3]} vd v113 v114 v115 v116 FC8 Fi:1 FC22{ BC23{ BC12}}} vd v117 v118 v119 v120 v121 v122 v123 FC24{ BC25{ BC12}} Fi:1} vd v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 FC26{ BC27{ m FC15 Fp Fi}} Fi[3] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC10 Fp FC28{ BC29{ BC12}} Fp[2]} vd v1 v2 v3 v4 v5 v6}


 S113C1 ::~S113C1(){ note_dtor("S113C1", this);}
void  S113C1 ::v1(){vfunc_called(this, "_ZN6S113C12v1Ev");}
void  S113C1 ::v2(){vfunc_called(this, "_ZN6S113C12v2Ev");}
void  S113C1 ::v3(){vfunc_called(this, "_ZN6S113C12v3Ev");}
void  S113C1 ::v4(){vfunc_called(this, "_ZN6S113C12v4Ev");}
void  S113C1 ::v5(){vfunc_called(this, "_ZN6S113C12v5Ev");}
void  S113C1 ::v6(){vfunc_called(this, "_ZN6S113C12v6Ev");}
S113C1 ::S113C1(){ note_ctor("S113C1", this);} // tgen

static void Test_S113C1()
{
  extern Class_Descriptor cd_S113C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(54,78)];
    init_test(&cd_S113C1, buf);
    S113C1 *dp, &lv = *(dp=new (buf) S113C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(424,308), "sizeof(S113C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S113C1)");
    check_base_class_offset(lv, (S113C7*)(S113C6*)(S113C5*)(S113C4*)(S113C3*)(S113C2*), 0, "S113C1");
    check_base_class_offset(lv, (S113C6*)(S113C5*)(S113C4*)(S113C3*)(S113C2*), 0, "S113C1");
    check_base_class_offset(lv, (S113C5*)(S113C4*)(S113C3*)(S113C2*), 0, "S113C1");
    check_base_class_offset(lv, (S113C4*)(S113C3*)(S113C2*), 0, "S113C1");
    check_base_class_offset(lv, (S113C3*)(S113C2*), 0, "S113C1");
    check_base_class_offset(lv, (S113C2*), 0, "S113C1");
    test_class_info(&lv, &cd_S113C1);
    dp->~S113C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS113C1(Test_S113C1, "S113C1", ABISELECT(424,308));

#else // __cplusplus

extern void _ZN6S113C1C1Ev();
extern void _ZN6S113C1D1Ev();
Name_Map name_map_S113C1[] = {
  NSPAIR(_ZN6S113C1C1Ev),
  NSPAIR(_ZN6S113C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S113C7;
extern VTBL_ENTRY _ZTI6S113C7[];
extern  VTBL_ENTRY _ZTV6S113C7[];
extern Class_Descriptor cd_S113C6;
extern VTBL_ENTRY _ZTI6S113C6[];
extern  VTBL_ENTRY _ZTV6S113C6[];
extern Class_Descriptor cd_S113C5;
extern VTBL_ENTRY _ZTI6S113C5[];
extern  VTBL_ENTRY _ZTV6S113C5[];
extern Class_Descriptor cd_S113C4;
extern VTBL_ENTRY _ZTI6S113C4[];
extern  VTBL_ENTRY _ZTV6S113C4[];
extern Class_Descriptor cd_S113C3;
extern VTBL_ENTRY _ZTI6S113C3[];
extern  VTBL_ENTRY _ZTV6S113C3[];
extern Class_Descriptor cd_S113C2;
extern VTBL_ENTRY _ZTI6S113C2[];
extern  VTBL_ENTRY _ZTV6S113C2[];
static Base_Class bases_S113C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S113C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S113C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S113C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S113C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S113C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S113C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S113C1[];
extern void _ZN6S113C1D1Ev();
extern void _ZN6S113C1D0Ev();
extern void _ZN6S113C72v7Ev();
extern void _ZN6S113C72v8Ev();
extern void _ZN6S113C72v9Ev();
extern void _ZN6S113C73v10Ev();
extern void _ZN6S113C73v11Ev();
extern void _ZN6S113C73v12Ev();
extern void _ZN6S113C73v13Ev();
extern void _ZN6S113C73v14Ev();
extern void _ZN6S113C73v15Ev();
extern void _ZN6S113C73v16Ev();
extern void _ZN6S113C73v17Ev();
extern void _ZN6S113C73v18Ev();
extern void _ZN6S113C73v19Ev();
extern void _ZN6S113C73v20Ev();
extern void _ZN6S113C73v21Ev();
extern void _ZN6S113C73v22Ev();
extern void _ZN6S113C73v23Ev();
extern void _ZN6S113C73v24Ev();
extern void _ZN6S113C73v25Ev();
extern void _ZN6S113C73v26Ev();
extern void _ZN6S113C73v27Ev();
extern void _ZN6S113C73v28Ev();
extern void _ZN6S113C73v29Ev();
extern void _ZN6S113C73v30Ev();
extern void _ZN6S113C73v31Ev();
extern void _ZN6S113C73v32Ev();
extern void _ZN6S113C73v33Ev();
extern void _ZN6S113C73v34Ev();
extern void _ZN6S113C73v35Ev();
extern void _ZN6S113C73v36Ev();
extern void _ZN6S113C73v37Ev();
extern void _ZN6S113C73v38Ev();
extern void _ZN6S113C73v39Ev();
extern void _ZN6S113C73v40Ev();
extern void _ZN6S113C73v41Ev();
extern void _ZN6S113C73v42Ev();
extern void _ZN6S113C73v43Ev();
extern void _ZN6S113C73v44Ev();
extern void _ZN6S113C73v45Ev();
extern void _ZN6S113C73v46Ev();
extern void _ZN6S113C73v47Ev();
extern void _ZN6S113C73v48Ev();
extern void _ZN6S113C73v49Ev();
extern void _ZN6S113C73v50Ev();
extern void _ZN6S113C73v51Ev();
extern void _ZN6S113C73v52Ev();
extern void _ZN6S113C73v53Ev();
extern void _ZN6S113C73v54Ev();
extern void _ZN6S113C73v55Ev();
extern void _ZN6S113C73v56Ev();
extern void _ZN6S113C73v57Ev();
extern void _ZN6S113C73v58Ev();
extern void _ZN6S113C73v59Ev();
extern void _ZN6S113C73v60Ev();
extern void _ZN6S113C73v61Ev();
extern void _ZN6S113C73v62Ev();
extern void _ZN6S113C73v63Ev();
extern void _ZN6S113C73v64Ev();
extern void _ZN6S113C73v65Ev();
extern void _ZN6S113C73v66Ev();
extern void _ZN6S113C73v67Ev();
extern void _ZN6S113C73v68Ev();
extern void _ZN6S113C73v69Ev();
extern void _ZN6S113C73v70Ev();
extern void _ZN6S113C63v71Ev();
extern void _ZN6S113C63v72Ev();
extern void _ZN6S113C63v73Ev();
extern void _ZN6S113C63v74Ev();
extern void _ZN6S113C63v75Ev();
extern void _ZN6S113C63v76Ev();
extern void _ZN6S113C63v77Ev();
extern void _ZN6S113C63v78Ev();
extern void _ZN6S113C63v79Ev();
extern void _ZN6S113C63v80Ev();
extern void _ZN6S113C63v81Ev();
extern void _ZN6S113C63v82Ev();
extern void _ZN6S113C63v83Ev();
extern void _ZN6S113C63v84Ev();
extern void _ZN6S113C63v85Ev();
extern void _ZN6S113C63v86Ev();
extern void _ZN6S113C63v87Ev();
extern void _ZN6S113C63v88Ev();
extern void _ZN6S113C63v89Ev();
extern void _ZN6S113C63v90Ev();
extern void _ZN6S113C63v91Ev();
extern void _ZN6S113C63v92Ev();
extern void _ZN6S113C53v93Ev();
extern void _ZN6S113C53v94Ev();
extern void _ZN6S113C53v95Ev();
extern void _ZN6S113C53v96Ev();
extern void _ZN6S113C53v97Ev();
extern void _ZN6S113C53v98Ev();
extern void _ZN6S113C53v99Ev();
extern void _ZN6S113C54v100Ev();
extern void _ZN6S113C54v101Ev();
extern void _ZN6S113C54v102Ev();
extern void _ZN6S113C54v103Ev();
extern void _ZN6S113C54v104Ev();
extern void _ZN6S113C54v105Ev();
extern void _ZN6S113C54v106Ev();
extern void _ZN6S113C54v107Ev();
extern void _ZN6S113C54v108Ev();
extern void _ZN6S113C54v109Ev();
extern void _ZN6S113C54v110Ev();
extern void _ZN6S113C54v111Ev();
extern void _ZN6S113C54v112Ev();
extern void _ZN6S113C44v113Ev();
extern void _ZN6S113C44v114Ev();
extern void _ZN6S113C44v115Ev();
extern void _ZN6S113C44v116Ev();
extern void _ZN6S113C34v117Ev();
extern void _ZN6S113C34v118Ev();
extern void _ZN6S113C34v119Ev();
extern void _ZN6S113C34v120Ev();
extern void _ZN6S113C34v121Ev();
extern void _ZN6S113C34v122Ev();
extern void _ZN6S113C34v123Ev();
extern void _ZN6S113C24v124Ev();
extern void _ZN6S113C24v125Ev();
extern void _ZN6S113C24v126Ev();
extern void _ZN6S113C24v127Ev();
extern void _ZN6S113C24v128Ev();
extern void _ZN6S113C24v129Ev();
extern void _ZN6S113C24v130Ev();
extern void _ZN6S113C24v131Ev();
extern void _ZN6S113C24v132Ev();
extern void _ZN6S113C24v133Ev();
extern void _ZN6S113C12v1Ev();
extern void _ZN6S113C12v2Ev();
extern void _ZN6S113C12v3Ev();
extern void _ZN6S113C12v4Ev();
extern void _ZN6S113C12v5Ev();
extern void _ZN6S113C12v6Ev();
static  VTBL_ENTRY vtc_S113C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S113C1[0]),
  (VTBL_ENTRY)&_ZN6S113C1D1Ev,
  (VTBL_ENTRY)&_ZN6S113C1D0Ev,
  (VTBL_ENTRY)&_ZN6S113C72v7Ev,
  (VTBL_ENTRY)&_ZN6S113C72v8Ev,
  (VTBL_ENTRY)&_ZN6S113C72v9Ev,
  (VTBL_ENTRY)&_ZN6S113C73v10Ev,
  (VTBL_ENTRY)&_ZN6S113C73v11Ev,
  (VTBL_ENTRY)&_ZN6S113C73v12Ev,
  (VTBL_ENTRY)&_ZN6S113C73v13Ev,
  (VTBL_ENTRY)&_ZN6S113C73v14Ev,
  (VTBL_ENTRY)&_ZN6S113C73v15Ev,
  (VTBL_ENTRY)&_ZN6S113C73v16Ev,
  (VTBL_ENTRY)&_ZN6S113C73v17Ev,
  (VTBL_ENTRY)&_ZN6S113C73v18Ev,
  (VTBL_ENTRY)&_ZN6S113C73v19Ev,
  (VTBL_ENTRY)&_ZN6S113C73v20Ev,
  (VTBL_ENTRY)&_ZN6S113C73v21Ev,
  (VTBL_ENTRY)&_ZN6S113C73v22Ev,
  (VTBL_ENTRY)&_ZN6S113C73v23Ev,
  (VTBL_ENTRY)&_ZN6S113C73v24Ev,
  (VTBL_ENTRY)&_ZN6S113C73v25Ev,
  (VTBL_ENTRY)&_ZN6S113C73v26Ev,
  (VTBL_ENTRY)&_ZN6S113C73v27Ev,
  (VTBL_ENTRY)&_ZN6S113C73v28Ev,
  (VTBL_ENTRY)&_ZN6S113C73v29Ev,
  (VTBL_ENTRY)&_ZN6S113C73v30Ev,
  (VTBL_ENTRY)&_ZN6S113C73v31Ev,
  (VTBL_ENTRY)&_ZN6S113C73v32Ev,
  (VTBL_ENTRY)&_ZN6S113C73v33Ev,
  (VTBL_ENTRY)&_ZN6S113C73v34Ev,
  (VTBL_ENTRY)&_ZN6S113C73v35Ev,
  (VTBL_ENTRY)&_ZN6S113C73v36Ev,
  (VTBL_ENTRY)&_ZN6S113C73v37Ev,
  (VTBL_ENTRY)&_ZN6S113C73v38Ev,
  (VTBL_ENTRY)&_ZN6S113C73v39Ev,
  (VTBL_ENTRY)&_ZN6S113C73v40Ev,
  (VTBL_ENTRY)&_ZN6S113C73v41Ev,
  (VTBL_ENTRY)&_ZN6S113C73v42Ev,
  (VTBL_ENTRY)&_ZN6S113C73v43Ev,
  (VTBL_ENTRY)&_ZN6S113C73v44Ev,
  (VTBL_ENTRY)&_ZN6S113C73v45Ev,
  (VTBL_ENTRY)&_ZN6S113C73v46Ev,
  (VTBL_ENTRY)&_ZN6S113C73v47Ev,
  (VTBL_ENTRY)&_ZN6S113C73v48Ev,
  (VTBL_ENTRY)&_ZN6S113C73v49Ev,
  (VTBL_ENTRY)&_ZN6S113C73v50Ev,
  (VTBL_ENTRY)&_ZN6S113C73v51Ev,
  (VTBL_ENTRY)&_ZN6S113C73v52Ev,
  (VTBL_ENTRY)&_ZN6S113C73v53Ev,
  (VTBL_ENTRY)&_ZN6S113C73v54Ev,
  (VTBL_ENTRY)&_ZN6S113C73v55Ev,
  (VTBL_ENTRY)&_ZN6S113C73v56Ev,
  (VTBL_ENTRY)&_ZN6S113C73v57Ev,
  (VTBL_ENTRY)&_ZN6S113C73v58Ev,
  (VTBL_ENTRY)&_ZN6S113C73v59Ev,
  (VTBL_ENTRY)&_ZN6S113C73v60Ev,
  (VTBL_ENTRY)&_ZN6S113C73v61Ev,
  (VTBL_ENTRY)&_ZN6S113C73v62Ev,
  (VTBL_ENTRY)&_ZN6S113C73v63Ev,
  (VTBL_ENTRY)&_ZN6S113C73v64Ev,
  (VTBL_ENTRY)&_ZN6S113C73v65Ev,
  (VTBL_ENTRY)&_ZN6S113C73v66Ev,
  (VTBL_ENTRY)&_ZN6S113C73v67Ev,
  (VTBL_ENTRY)&_ZN6S113C73v68Ev,
  (VTBL_ENTRY)&_ZN6S113C73v69Ev,
  (VTBL_ENTRY)&_ZN6S113C73v70Ev,
  (VTBL_ENTRY)&_ZN6S113C63v71Ev,
  (VTBL_ENTRY)&_ZN6S113C63v72Ev,
  (VTBL_ENTRY)&_ZN6S113C63v73Ev,
  (VTBL_ENTRY)&_ZN6S113C63v74Ev,
  (VTBL_ENTRY)&_ZN6S113C63v75Ev,
  (VTBL_ENTRY)&_ZN6S113C63v76Ev,
  (VTBL_ENTRY)&_ZN6S113C63v77Ev,
  (VTBL_ENTRY)&_ZN6S113C63v78Ev,
  (VTBL_ENTRY)&_ZN6S113C63v79Ev,
  (VTBL_ENTRY)&_ZN6S113C63v80Ev,
  (VTBL_ENTRY)&_ZN6S113C63v81Ev,
  (VTBL_ENTRY)&_ZN6S113C63v82Ev,
  (VTBL_ENTRY)&_ZN6S113C63v83Ev,
  (VTBL_ENTRY)&_ZN6S113C63v84Ev,
  (VTBL_ENTRY)&_ZN6S113C63v85Ev,
  (VTBL_ENTRY)&_ZN6S113C63v86Ev,
  (VTBL_ENTRY)&_ZN6S113C63v87Ev,
  (VTBL_ENTRY)&_ZN6S113C63v88Ev,
  (VTBL_ENTRY)&_ZN6S113C63v89Ev,
  (VTBL_ENTRY)&_ZN6S113C63v90Ev,
  (VTBL_ENTRY)&_ZN6S113C63v91Ev,
  (VTBL_ENTRY)&_ZN6S113C63v92Ev,
  (VTBL_ENTRY)&_ZN6S113C53v93Ev,
  (VTBL_ENTRY)&_ZN6S113C53v94Ev,
  (VTBL_ENTRY)&_ZN6S113C53v95Ev,
  (VTBL_ENTRY)&_ZN6S113C53v96Ev,
  (VTBL_ENTRY)&_ZN6S113C53v97Ev,
  (VTBL_ENTRY)&_ZN6S113C53v98Ev,
  (VTBL_ENTRY)&_ZN6S113C53v99Ev,
  (VTBL_ENTRY)&_ZN6S113C54v100Ev,
  (VTBL_ENTRY)&_ZN6S113C54v101Ev,
  (VTBL_ENTRY)&_ZN6S113C54v102Ev,
  (VTBL_ENTRY)&_ZN6S113C54v103Ev,
  (VTBL_ENTRY)&_ZN6S113C54v104Ev,
  (VTBL_ENTRY)&_ZN6S113C54v105Ev,
  (VTBL_ENTRY)&_ZN6S113C54v106Ev,
  (VTBL_ENTRY)&_ZN6S113C54v107Ev,
  (VTBL_ENTRY)&_ZN6S113C54v108Ev,
  (VTBL_ENTRY)&_ZN6S113C54v109Ev,
  (VTBL_ENTRY)&_ZN6S113C54v110Ev,
  (VTBL_ENTRY)&_ZN6S113C54v111Ev,
  (VTBL_ENTRY)&_ZN6S113C54v112Ev,
  (VTBL_ENTRY)&_ZN6S113C44v113Ev,
  (VTBL_ENTRY)&_ZN6S113C44v114Ev,
  (VTBL_ENTRY)&_ZN6S113C44v115Ev,
  (VTBL_ENTRY)&_ZN6S113C44v116Ev,
  (VTBL_ENTRY)&_ZN6S113C34v117Ev,
  (VTBL_ENTRY)&_ZN6S113C34v118Ev,
  (VTBL_ENTRY)&_ZN6S113C34v119Ev,
  (VTBL_ENTRY)&_ZN6S113C34v120Ev,
  (VTBL_ENTRY)&_ZN6S113C34v121Ev,
  (VTBL_ENTRY)&_ZN6S113C34v122Ev,
  (VTBL_ENTRY)&_ZN6S113C34v123Ev,
  (VTBL_ENTRY)&_ZN6S113C24v124Ev,
  (VTBL_ENTRY)&_ZN6S113C24v125Ev,
  (VTBL_ENTRY)&_ZN6S113C24v126Ev,
  (VTBL_ENTRY)&_ZN6S113C24v127Ev,
  (VTBL_ENTRY)&_ZN6S113C24v128Ev,
  (VTBL_ENTRY)&_ZN6S113C24v129Ev,
  (VTBL_ENTRY)&_ZN6S113C24v130Ev,
  (VTBL_ENTRY)&_ZN6S113C24v131Ev,
  (VTBL_ENTRY)&_ZN6S113C24v132Ev,
  (VTBL_ENTRY)&_ZN6S113C24v133Ev,
  (VTBL_ENTRY)&_ZN6S113C12v1Ev,
  (VTBL_ENTRY)&_ZN6S113C12v2Ev,
  (VTBL_ENTRY)&_ZN6S113C12v3Ev,
  (VTBL_ENTRY)&_ZN6S113C12v4Ev,
  (VTBL_ENTRY)&_ZN6S113C12v5Ev,
  (VTBL_ENTRY)&_ZN6S113C12v6Ev,
};
extern VTBL_ENTRY _ZTI6S113C1[];
extern  VTBL_ENTRY _ZTV6S113C1[];
Class_Descriptor cd_S113C1 = {  "S113C1", // class name
  bases_S113C1, 6,
  &(vtc_S113C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(424,308), // object size
  NSPAIRA(_ZTI6S113C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S113C1),137, //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  S266C6  {
  int s266c6f0;
  __tsi64 s266c6f1;
  void *s266c6f2[4];
  int s266c6f3[2];
  void *s266c6f4;
  ::S3350C4_nt s266c6f5;
  void *s266c6f6[2];
  virtual  ~S266C6(); // _ZN6S266C6D1Ev
  virtual void  v6(); // _ZN6S266C62v6Ev
  virtual void  v7(); // _ZN6S266C62v7Ev
  virtual void  v8(); // _ZN6S266C62v8Ev
  virtual void  v9(); // _ZN6S266C62v9Ev
  virtual void  v10(); // _ZN6S266C63v10Ev
  virtual void  v11(); // _ZN6S266C63v11Ev
  virtual void  v12(); // _ZN6S266C63v12Ev
  virtual void  v13(); // _ZN6S266C63v13Ev
  virtual void  v14(); // _ZN6S266C63v14Ev
  virtual void  v15(); // _ZN6S266C63v15Ev
  virtual void  v16(); // _ZN6S266C63v16Ev
  virtual void  v17(); // _ZN6S266C63v17Ev
  virtual void  v18(); // _ZN6S266C63v18Ev
  virtual void  v19(); // _ZN6S266C63v19Ev
  virtual void  v20(); // _ZN6S266C63v20Ev
  virtual void  v21(); // _ZN6S266C63v21Ev
  virtual void  v22(); // _ZN6S266C63v22Ev
  virtual void  v23(); // _ZN6S266C63v23Ev
  virtual void  v24(); // _ZN6S266C63v24Ev
  virtual void  v25(); // _ZN6S266C63v25Ev
  virtual void  v26(); // _ZN6S266C63v26Ev
  virtual void  v27(); // _ZN6S266C63v27Ev
  virtual void  v28(); // _ZN6S266C63v28Ev
  virtual void  v29(); // _ZN6S266C63v29Ev
  virtual void  v30(); // _ZN6S266C63v30Ev
  virtual void  v31(); // _ZN6S266C63v31Ev
  virtual void  v32(); // _ZN6S266C63v32Ev
  virtual void  v33(); // _ZN6S266C63v33Ev
  virtual void  v34(); // _ZN6S266C63v34Ev
  virtual void  v35(); // _ZN6S266C63v35Ev
  virtual void  v36(); // _ZN6S266C63v36Ev
  virtual void  v37(); // _ZN6S266C63v37Ev
  virtual void  v38(); // _ZN6S266C63v38Ev
  virtual void  v39(); // _ZN6S266C63v39Ev
  virtual void  v40(); // _ZN6S266C63v40Ev
  virtual void  v41(); // _ZN6S266C63v41Ev
  virtual void  v42(); // _ZN6S266C63v42Ev
  virtual void  v43(); // _ZN6S266C63v43Ev
  virtual void  v44(); // _ZN6S266C63v44Ev
  virtual void  v45(); // _ZN6S266C63v45Ev
  virtual void  v46(); // _ZN6S266C63v46Ev
  virtual void  v47(); // _ZN6S266C63v47Ev
  virtual void  v48(); // _ZN6S266C63v48Ev
  virtual void  v49(); // _ZN6S266C63v49Ev
  virtual void  v50(); // _ZN6S266C63v50Ev
  virtual void  v51(); // _ZN6S266C63v51Ev
  virtual void  v52(); // _ZN6S266C63v52Ev
  virtual void  v53(); // _ZN6S266C63v53Ev
  virtual void  v54(); // _ZN6S266C63v54Ev
  virtual void  v55(); // _ZN6S266C63v55Ev
  virtual void  v56(); // _ZN6S266C63v56Ev
  virtual void  v57(); // _ZN6S266C63v57Ev
  virtual void  v58(); // _ZN6S266C63v58Ev
  virtual void  v59(); // _ZN6S266C63v59Ev
  virtual void  v60(); // _ZN6S266C63v60Ev
  virtual void  v61(); // _ZN6S266C63v61Ev
  virtual void  v62(); // _ZN6S266C63v62Ev
  virtual void  v63(); // _ZN6S266C63v63Ev
  virtual void  v64(); // _ZN6S266C63v64Ev
  virtual void  v65(); // _ZN6S266C63v65Ev
  virtual void  v66(); // _ZN6S266C63v66Ev
  virtual void  v67(); // _ZN6S266C63v67Ev
  virtual void  v68(); // _ZN6S266C63v68Ev
  virtual void  v69(); // _ZN6S266C63v69Ev
  S266C6(); // tgen
};
//SIG(-1 S266C6) 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]}


 S266C6 ::~S266C6(){ note_dtor("S266C6", this);}
void  S266C6 ::v6(){vfunc_called(this, "_ZN6S266C62v6Ev");}
void  S266C6 ::v7(){vfunc_called(this, "_ZN6S266C62v7Ev");}
void  S266C6 ::v8(){vfunc_called(this, "_ZN6S266C62v8Ev");}
void  S266C6 ::v9(){vfunc_called(this, "_ZN6S266C62v9Ev");}
void  S266C6 ::v10(){vfunc_called(this, "_ZN6S266C63v10Ev");}
void  S266C6 ::v11(){vfunc_called(this, "_ZN6S266C63v11Ev");}
void  S266C6 ::v12(){vfunc_called(this, "_ZN6S266C63v12Ev");}
void  S266C6 ::v13(){vfunc_called(this, "_ZN6S266C63v13Ev");}
void  S266C6 ::v14(){vfunc_called(this, "_ZN6S266C63v14Ev");}
void  S266C6 ::v15(){vfunc_called(this, "_ZN6S266C63v15Ev");}
void  S266C6 ::v16(){vfunc_called(this, "_ZN6S266C63v16Ev");}
void  S266C6 ::v17(){vfunc_called(this, "_ZN6S266C63v17Ev");}
void  S266C6 ::v18(){vfunc_called(this, "_ZN6S266C63v18Ev");}
void  S266C6 ::v19(){vfunc_called(this, "_ZN6S266C63v19Ev");}
void  S266C6 ::v20(){vfunc_called(this, "_ZN6S266C63v20Ev");}
void  S266C6 ::v21(){vfunc_called(this, "_ZN6S266C63v21Ev");}
void  S266C6 ::v22(){vfunc_called(this, "_ZN6S266C63v22Ev");}
void  S266C6 ::v23(){vfunc_called(this, "_ZN6S266C63v23Ev");}
void  S266C6 ::v24(){vfunc_called(this, "_ZN6S266C63v24Ev");}
void  S266C6 ::v25(){vfunc_called(this, "_ZN6S266C63v25Ev");}
void  S266C6 ::v26(){vfunc_called(this, "_ZN6S266C63v26Ev");}
void  S266C6 ::v27(){vfunc_called(this, "_ZN6S266C63v27Ev");}
void  S266C6 ::v28(){vfunc_called(this, "_ZN6S266C63v28Ev");}
void  S266C6 ::v29(){vfunc_called(this, "_ZN6S266C63v29Ev");}
void  S266C6 ::v30(){vfunc_called(this, "_ZN6S266C63v30Ev");}
void  S266C6 ::v31(){vfunc_called(this, "_ZN6S266C63v31Ev");}
void  S266C6 ::v32(){vfunc_called(this, "_ZN6S266C63v32Ev");}
void  S266C6 ::v33(){vfunc_called(this, "_ZN6S266C63v33Ev");}
void  S266C6 ::v34(){vfunc_called(this, "_ZN6S266C63v34Ev");}
void  S266C6 ::v35(){vfunc_called(this, "_ZN6S266C63v35Ev");}
void  S266C6 ::v36(){vfunc_called(this, "_ZN6S266C63v36Ev");}
void  S266C6 ::v37(){vfunc_called(this, "_ZN6S266C63v37Ev");}
void  S266C6 ::v38(){vfunc_called(this, "_ZN6S266C63v38Ev");}
void  S266C6 ::v39(){vfunc_called(this, "_ZN6S266C63v39Ev");}
void  S266C6 ::v40(){vfunc_called(this, "_ZN6S266C63v40Ev");}
void  S266C6 ::v41(){vfunc_called(this, "_ZN6S266C63v41Ev");}
void  S266C6 ::v42(){vfunc_called(this, "_ZN6S266C63v42Ev");}
void  S266C6 ::v43(){vfunc_called(this, "_ZN6S266C63v43Ev");}
void  S266C6 ::v44(){vfunc_called(this, "_ZN6S266C63v44Ev");}
void  S266C6 ::v45(){vfunc_called(this, "_ZN6S266C63v45Ev");}
void  S266C6 ::v46(){vfunc_called(this, "_ZN6S266C63v46Ev");}
void  S266C6 ::v47(){vfunc_called(this, "_ZN6S266C63v47Ev");}
void  S266C6 ::v48(){vfunc_called(this, "_ZN6S266C63v48Ev");}
void  S266C6 ::v49(){vfunc_called(this, "_ZN6S266C63v49Ev");}
void  S266C6 ::v50(){vfunc_called(this, "_ZN6S266C63v50Ev");}
void  S266C6 ::v51(){vfunc_called(this, "_ZN6S266C63v51Ev");}
void  S266C6 ::v52(){vfunc_called(this, "_ZN6S266C63v52Ev");}
void  S266C6 ::v53(){vfunc_called(this, "_ZN6S266C63v53Ev");}
void  S266C6 ::v54(){vfunc_called(this, "_ZN6S266C63v54Ev");}
void  S266C6 ::v55(){vfunc_called(this, "_ZN6S266C63v55Ev");}
void  S266C6 ::v56(){vfunc_called(this, "_ZN6S266C63v56Ev");}
void  S266C6 ::v57(){vfunc_called(this, "_ZN6S266C63v57Ev");}
void  S266C6 ::v58(){vfunc_called(this, "_ZN6S266C63v58Ev");}
void  S266C6 ::v59(){vfunc_called(this, "_ZN6S266C63v59Ev");}
void  S266C6 ::v60(){vfunc_called(this, "_ZN6S266C63v60Ev");}
void  S266C6 ::v61(){vfunc_called(this, "_ZN6S266C63v61Ev");}
void  S266C6 ::v62(){vfunc_called(this, "_ZN6S266C63v62Ev");}
void  S266C6 ::v63(){vfunc_called(this, "_ZN6S266C63v63Ev");}
void  S266C6 ::v64(){vfunc_called(this, "_ZN6S266C63v64Ev");}
void  S266C6 ::v65(){vfunc_called(this, "_ZN6S266C63v65Ev");}
void  S266C6 ::v66(){vfunc_called(this, "_ZN6S266C63v66Ev");}
void  S266C6 ::v67(){vfunc_called(this, "_ZN6S266C63v67Ev");}
void  S266C6 ::v68(){vfunc_called(this, "_ZN6S266C63v68Ev");}
void  S266C6 ::v69(){vfunc_called(this, "_ZN6S266C63v69Ev");}
S266C6 ::S266C6(){ note_ctor("S266C6", this);} // tgen

static void Test_S266C6()
{
  extern Class_Descriptor cd_S266C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S266C6, buf);
    S266C6 *dp, &lv = *(dp=new (buf) S266C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S266C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S266C6)");
    check_field_offset(lv, s266c6f0, ABISELECT(8,4), "S266C6.s266c6f0");
    check_field_offset(lv, s266c6f1, ABISELECT(16,8), "S266C6.s266c6f1");
    check_field_offset(lv, s266c6f2, ABISELECT(24,16), "S266C6.s266c6f2");
    check_field_offset(lv, s266c6f3, ABISELECT(56,32), "S266C6.s266c6f3");
    check_field_offset(lv, s266c6f4, ABISELECT(64,40), "S266C6.s266c6f4");
    check_field_offset(lv, s266c6f5, ABISELECT(72,44), "S266C6.s266c6f5");
    check_field_offset(lv, s266c6f6, ABISELECT(80,52), "S266C6.s266c6f6");
    test_class_info(&lv, &cd_S266C6);
    dp->~S266C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS266C6(Test_S266C6, "S266C6", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S266C6C1Ev();
extern void _ZN6S266C6D1Ev();
Name_Map name_map_S266C6[] = {
  NSPAIR(_ZN6S266C6C1Ev),
  NSPAIR(_ZN6S266C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S266C6[];
extern void _ZN6S266C6D1Ev();
extern void _ZN6S266C6D0Ev();
extern void _ZN6S266C62v6Ev();
extern void _ZN6S266C62v7Ev();
extern void _ZN6S266C62v8Ev();
extern void _ZN6S266C62v9Ev();
extern void _ZN6S266C63v10Ev();
extern void _ZN6S266C63v11Ev();
extern void _ZN6S266C63v12Ev();
extern void _ZN6S266C63v13Ev();
extern void _ZN6S266C63v14Ev();
extern void _ZN6S266C63v15Ev();
extern void _ZN6S266C63v16Ev();
extern void _ZN6S266C63v17Ev();
extern void _ZN6S266C63v18Ev();
extern void _ZN6S266C63v19Ev();
extern void _ZN6S266C63v20Ev();
extern void _ZN6S266C63v21Ev();
extern void _ZN6S266C63v22Ev();
extern void _ZN6S266C63v23Ev();
extern void _ZN6S266C63v24Ev();
extern void _ZN6S266C63v25Ev();
extern void _ZN6S266C63v26Ev();
extern void _ZN6S266C63v27Ev();
extern void _ZN6S266C63v28Ev();
extern void _ZN6S266C63v29Ev();
extern void _ZN6S266C63v30Ev();
extern void _ZN6S266C63v31Ev();
extern void _ZN6S266C63v32Ev();
extern void _ZN6S266C63v33Ev();
extern void _ZN6S266C63v34Ev();
extern void _ZN6S266C63v35Ev();
extern void _ZN6S266C63v36Ev();
extern void _ZN6S266C63v37Ev();
extern void _ZN6S266C63v38Ev();
extern void _ZN6S266C63v39Ev();
extern void _ZN6S266C63v40Ev();
extern void _ZN6S266C63v41Ev();
extern void _ZN6S266C63v42Ev();
extern void _ZN6S266C63v43Ev();
extern void _ZN6S266C63v44Ev();
extern void _ZN6S266C63v45Ev();
extern void _ZN6S266C63v46Ev();
extern void _ZN6S266C63v47Ev();
extern void _ZN6S266C63v48Ev();
extern void _ZN6S266C63v49Ev();
extern void _ZN6S266C63v50Ev();
extern void _ZN6S266C63v51Ev();
extern void _ZN6S266C63v52Ev();
extern void _ZN6S266C63v53Ev();
extern void _ZN6S266C63v54Ev();
extern void _ZN6S266C63v55Ev();
extern void _ZN6S266C63v56Ev();
extern void _ZN6S266C63v57Ev();
extern void _ZN6S266C63v58Ev();
extern void _ZN6S266C63v59Ev();
extern void _ZN6S266C63v60Ev();
extern void _ZN6S266C63v61Ev();
extern void _ZN6S266C63v62Ev();
extern void _ZN6S266C63v63Ev();
extern void _ZN6S266C63v64Ev();
extern void _ZN6S266C63v65Ev();
extern void _ZN6S266C63v66Ev();
extern void _ZN6S266C63v67Ev();
extern void _ZN6S266C63v68Ev();
extern void _ZN6S266C63v69Ev();
static  VTBL_ENTRY vtc_S266C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S266C6[0]),
  (VTBL_ENTRY)&_ZN6S266C6D1Ev,
  (VTBL_ENTRY)&_ZN6S266C6D0Ev,
  (VTBL_ENTRY)&_ZN6S266C62v6Ev,
  (VTBL_ENTRY)&_ZN6S266C62v7Ev,
  (VTBL_ENTRY)&_ZN6S266C62v8Ev,
  (VTBL_ENTRY)&_ZN6S266C62v9Ev,
  (VTBL_ENTRY)&_ZN6S266C63v10Ev,
  (VTBL_ENTRY)&_ZN6S266C63v11Ev,
  (VTBL_ENTRY)&_ZN6S266C63v12Ev,
  (VTBL_ENTRY)&_ZN6S266C63v13Ev,
  (VTBL_ENTRY)&_ZN6S266C63v14Ev,
  (VTBL_ENTRY)&_ZN6S266C63v15Ev,
  (VTBL_ENTRY)&_ZN6S266C63v16Ev,
  (VTBL_ENTRY)&_ZN6S266C63v17Ev,
  (VTBL_ENTRY)&_ZN6S266C63v18Ev,
  (VTBL_ENTRY)&_ZN6S266C63v19Ev,
  (VTBL_ENTRY)&_ZN6S266C63v20Ev,
  (VTBL_ENTRY)&_ZN6S266C63v21Ev,
  (VTBL_ENTRY)&_ZN6S266C63v22Ev,
  (VTBL_ENTRY)&_ZN6S266C63v23Ev,
  (VTBL_ENTRY)&_ZN6S266C63v24Ev,
  (VTBL_ENTRY)&_ZN6S266C63v25Ev,
  (VTBL_ENTRY)&_ZN6S266C63v26Ev,
  (VTBL_ENTRY)&_ZN6S266C63v27Ev,
  (VTBL_ENTRY)&_ZN6S266C63v28Ev,
  (VTBL_ENTRY)&_ZN6S266C63v29Ev,
  (VTBL_ENTRY)&_ZN6S266C63v30Ev,
  (VTBL_ENTRY)&_ZN6S266C63v31Ev,
  (VTBL_ENTRY)&_ZN6S266C63v32Ev,
  (VTBL_ENTRY)&_ZN6S266C63v33Ev,
  (VTBL_ENTRY)&_ZN6S266C63v34Ev,
  (VTBL_ENTRY)&_ZN6S266C63v35Ev,
  (VTBL_ENTRY)&_ZN6S266C63v36Ev,
  (VTBL_ENTRY)&_ZN6S266C63v37Ev,
  (VTBL_ENTRY)&_ZN6S266C63v38Ev,
  (VTBL_ENTRY)&_ZN6S266C63v39Ev,
  (VTBL_ENTRY)&_ZN6S266C63v40Ev,
  (VTBL_ENTRY)&_ZN6S266C63v41Ev,
  (VTBL_ENTRY)&_ZN6S266C63v42Ev,
  (VTBL_ENTRY)&_ZN6S266C63v43Ev,
  (VTBL_ENTRY)&_ZN6S266C63v44Ev,
  (VTBL_ENTRY)&_ZN6S266C63v45Ev,
  (VTBL_ENTRY)&_ZN6S266C63v46Ev,
  (VTBL_ENTRY)&_ZN6S266C63v47Ev,
  (VTBL_ENTRY)&_ZN6S266C63v48Ev,
  (VTBL_ENTRY)&_ZN6S266C63v49Ev,
  (VTBL_ENTRY)&_ZN6S266C63v50Ev,
  (VTBL_ENTRY)&_ZN6S266C63v51Ev,
  (VTBL_ENTRY)&_ZN6S266C63v52Ev,
  (VTBL_ENTRY)&_ZN6S266C63v53Ev,
  (VTBL_ENTRY)&_ZN6S266C63v54Ev,
  (VTBL_ENTRY)&_ZN6S266C63v55Ev,
  (VTBL_ENTRY)&_ZN6S266C63v56Ev,
  (VTBL_ENTRY)&_ZN6S266C63v57Ev,
  (VTBL_ENTRY)&_ZN6S266C63v58Ev,
  (VTBL_ENTRY)&_ZN6S266C63v59Ev,
  (VTBL_ENTRY)&_ZN6S266C63v60Ev,
  (VTBL_ENTRY)&_ZN6S266C63v61Ev,
  (VTBL_ENTRY)&_ZN6S266C63v62Ev,
  (VTBL_ENTRY)&_ZN6S266C63v63Ev,
  (VTBL_ENTRY)&_ZN6S266C63v64Ev,
  (VTBL_ENTRY)&_ZN6S266C63v65Ev,
  (VTBL_ENTRY)&_ZN6S266C63v66Ev,
  (VTBL_ENTRY)&_ZN6S266C63v67Ev,
  (VTBL_ENTRY)&_ZN6S266C63v68Ev,
  (VTBL_ENTRY)&_ZN6S266C63v69Ev,
};
extern VTBL_ENTRY _ZTI6S266C6[];
extern  VTBL_ENTRY _ZTV6S266C6[];
Class_Descriptor cd_S266C6 = {  "S266C6", // class name
  0,0,//no base classes
  &(vtc_S266C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S266C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S266C6),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  S266C5  : S266C6 {
  int s266c5f0[2];
  void *s266c5f1;
  int s266c5f2[2];
  ::S287C8_nt s266c5f3;
  ::S287C8_nt s266c5f4;
  ::S2121C38 s266c5f5;
  ::S287C8_nt s266c5f6;
  unsigned int s266c5f7:1;
  unsigned int s266c5f8:1;
  unsigned int s266c5f9:1;
  unsigned int s266c5f10:1;
  unsigned int s266c5f11:1;
  int s266c5f12[2];
  virtual  ~S266C5(); // _ZN6S266C5D1Ev
  virtual void  v70(); // _ZN6S266C53v70Ev
  virtual void  v71(); // _ZN6S266C53v71Ev
  virtual void  v72(); // _ZN6S266C53v72Ev
  virtual void  v73(); // _ZN6S266C53v73Ev
  virtual void  v74(); // _ZN6S266C53v74Ev
  virtual void  v75(); // _ZN6S266C53v75Ev
  virtual void  v76(); // _ZN6S266C53v76Ev
  virtual void  v77(); // _ZN6S266C53v77Ev
  virtual void  v78(); // _ZN6S266C53v78Ev
  virtual void  v79(); // _ZN6S266C53v79Ev
  virtual void  v80(); // _ZN6S266C53v80Ev
  virtual void  v81(); // _ZN6S266C53v81Ev
  virtual void  v82(); // _ZN6S266C53v82Ev
  virtual void  v83(); // _ZN6S266C53v83Ev
  virtual void  v84(); // _ZN6S266C53v84Ev
  virtual void  v85(); // _ZN6S266C53v85Ev
  virtual void  v86(); // _ZN6S266C53v86Ev
  virtual void  v87(); // _ZN6S266C53v87Ev
  virtual void  v88(); // _ZN6S266C53v88Ev
  virtual void  v89(); // _ZN6S266C53v89Ev
  virtual void  v90(); // _ZN6S266C53v90Ev
  virtual void  v91(); // _ZN6S266C53v91Ev
  S266C5(); // tgen
};
//SIG(-1 S266C5) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S266C5 ::~S266C5(){ note_dtor("S266C5", this);}
void  S266C5 ::v70(){vfunc_called(this, "_ZN6S266C53v70Ev");}
void  S266C5 ::v71(){vfunc_called(this, "_ZN6S266C53v71Ev");}
void  S266C5 ::v72(){vfunc_called(this, "_ZN6S266C53v72Ev");}
void  S266C5 ::v73(){vfunc_called(this, "_ZN6S266C53v73Ev");}
void  S266C5 ::v74(){vfunc_called(this, "_ZN6S266C53v74Ev");}
void  S266C5 ::v75(){vfunc_called(this, "_ZN6S266C53v75Ev");}
void  S266C5 ::v76(){vfunc_called(this, "_ZN6S266C53v76Ev");}
void  S266C5 ::v77(){vfunc_called(this, "_ZN6S266C53v77Ev");}
void  S266C5 ::v78(){vfunc_called(this, "_ZN6S266C53v78Ev");}
void  S266C5 ::v79(){vfunc_called(this, "_ZN6S266C53v79Ev");}
void  S266C5 ::v80(){vfunc_called(this, "_ZN6S266C53v80Ev");}
void  S266C5 ::v81(){vfunc_called(this, "_ZN6S266C53v81Ev");}
void  S266C5 ::v82(){vfunc_called(this, "_ZN6S266C53v82Ev");}
void  S266C5 ::v83(){vfunc_called(this, "_ZN6S266C53v83Ev");}
void  S266C5 ::v84(){vfunc_called(this, "_ZN6S266C53v84Ev");}
void  S266C5 ::v85(){vfunc_called(this, "_ZN6S266C53v85Ev");}
void  S266C5 ::v86(){vfunc_called(this, "_ZN6S266C53v86Ev");}
void  S266C5 ::v87(){vfunc_called(this, "_ZN6S266C53v87Ev");}
void  S266C5 ::v88(){vfunc_called(this, "_ZN6S266C53v88Ev");}
void  S266C5 ::v89(){vfunc_called(this, "_ZN6S266C53v89Ev");}
void  S266C5 ::v90(){vfunc_called(this, "_ZN6S266C53v90Ev");}
void  S266C5 ::v91(){vfunc_called(this, "_ZN6S266C53v91Ev");}
S266C5 ::S266C5(){ note_ctor("S266C5", this);} // tgen

static void Test_S266C5()
{
  extern Class_Descriptor cd_S266C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S266C5, buf);
    S266C5 *dp, &lv = *(dp=new (buf) S266C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S266C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S266C5)");
    check_base_class_offset(lv, (S266C6*), 0, "S266C5");
    check_field_offset(lv, s266c5f0, ABISELECT(96,60), "S266C5.s266c5f0");
    check_field_offset(lv, s266c5f1, ABISELECT(104,68), "S266C5.s266c5f1");
    check_field_offset(lv, s266c5f2, ABISELECT(112,72), "S266C5.s266c5f2");
    check_field_offset(lv, s266c5f3, ABISELECT(120,80), "S266C5.s266c5f3");
    check_field_offset(lv, s266c5f4, ABISELECT(136,92), "S266C5.s266c5f4");
    check_field_offset(lv, s266c5f5, ABISELECT(152,104), "S266C5.s266c5f5");
    check_field_offset(lv, s266c5f6, ABISELECT(160,108), "S266C5.s266c5f6");
    set_bf_and_test(lv, s266c5f7, ABISELECT(176,120), 0, 1, 1, "S266C5");
    set_bf_and_test(lv, s266c5f8, ABISELECT(176,120), 1, 1, 1, "S266C5");
    set_bf_and_test(lv, s266c5f9, ABISELECT(176,120), 2, 1, 1, "S266C5");
    set_bf_and_test(lv, s266c5f10, ABISELECT(176,120), 3, 1, 1, "S266C5");
    set_bf_and_test(lv, s266c5f11, ABISELECT(176,120), 4, 1, 1, "S266C5");
    check_field_offset(lv, s266c5f12, ABISELECT(180,124), "S266C5.s266c5f12");
    test_class_info(&lv, &cd_S266C5);
    dp->~S266C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS266C5(Test_S266C5, "S266C5", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN6S266C5C1Ev();
extern void _ZN6S266C5D1Ev();
Name_Map name_map_S266C5[] = {
  NSPAIR(_ZN6S266C5C1Ev),
  NSPAIR(_ZN6S266C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S266C6;
extern VTBL_ENTRY _ZTI6S266C6[];
extern  VTBL_ENTRY _ZTV6S266C6[];
static Base_Class bases_S266C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S266C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI6S266C5[];
extern void _ZN6S266C5D1Ev();
extern void _ZN6S266C5D0Ev();
extern void _ZN6S266C62v6Ev();
extern void _ZN6S266C62v7Ev();
extern void _ZN6S266C62v8Ev();
extern void _ZN6S266C62v9Ev();
extern void _ZN6S266C63v10Ev();
extern void _ZN6S266C63v11Ev();
extern void _ZN6S266C63v12Ev();
extern void _ZN6S266C63v13Ev();
extern void _ZN6S266C63v14Ev();
extern void _ZN6S266C63v15Ev();
extern void _ZN6S266C63v16Ev();
extern void _ZN6S266C63v17Ev();
extern void _ZN6S266C63v18Ev();
extern void _ZN6S266C63v19Ev();
extern void _ZN6S266C63v20Ev();
extern void _ZN6S266C63v21Ev();
extern void _ZN6S266C63v22Ev();
extern void _ZN6S266C63v23Ev();
extern void _ZN6S266C63v24Ev();
extern void _ZN6S266C63v25Ev();
extern void _ZN6S266C63v26Ev();
extern void _ZN6S266C63v27Ev();
extern void _ZN6S266C63v28Ev();
extern void _ZN6S266C63v29Ev();
extern void _ZN6S266C63v30Ev();
extern void _ZN6S266C63v31Ev();
extern void _ZN6S266C63v32Ev();
extern void _ZN6S266C63v33Ev();
extern void _ZN6S266C63v34Ev();
extern void _ZN6S266C63v35Ev();
extern void _ZN6S266C63v36Ev();
extern void _ZN6S266C63v37Ev();
extern void _ZN6S266C63v38Ev();
extern void _ZN6S266C63v39Ev();
extern void _ZN6S266C63v40Ev();
extern void _ZN6S266C63v41Ev();
extern void _ZN6S266C63v42Ev();
extern void _ZN6S266C63v43Ev();
extern void _ZN6S266C63v44Ev();
extern void _ZN6S266C63v45Ev();
extern void _ZN6S266C63v46Ev();
extern void _ZN6S266C63v47Ev();
extern void _ZN6S266C63v48Ev();
extern void _ZN6S266C63v49Ev();
extern void _ZN6S266C63v50Ev();
extern void _ZN6S266C63v51Ev();
extern void _ZN6S266C63v52Ev();
extern void _ZN6S266C63v53Ev();
extern void _ZN6S266C63v54Ev();
extern void _ZN6S266C63v55Ev();
extern void _ZN6S266C63v56Ev();
extern void _ZN6S266C63v57Ev();
extern void _ZN6S266C63v58Ev();
extern void _ZN6S266C63v59Ev();
extern void _ZN6S266C63v60Ev();
extern void _ZN6S266C63v61Ev();
extern void _ZN6S266C63v62Ev();
extern void _ZN6S266C63v63Ev();
extern void _ZN6S266C63v64Ev();
extern void _ZN6S266C63v65Ev();
extern void _ZN6S266C63v66Ev();
extern void _ZN6S266C63v67Ev();
extern void _ZN6S266C63v68Ev();
extern void _ZN6S266C63v69Ev();
extern void _ZN6S266C53v70Ev();
extern void _ZN6S266C53v71Ev();
extern void _ZN6S266C53v72Ev();
extern void _ZN6S266C53v73Ev();
extern void _ZN6S266C53v74Ev();
extern void _ZN6S266C53v75Ev();
extern void _ZN6S266C53v76Ev();
extern void _ZN6S266C53v77Ev();
extern void _ZN6S266C53v78Ev();
extern void _ZN6S266C53v79Ev();
extern void _ZN6S266C53v80Ev();
extern void _ZN6S266C53v81Ev();
extern void _ZN6S266C53v82Ev();
extern void _ZN6S266C53v83Ev();
extern void _ZN6S266C53v84Ev();
extern void _ZN6S266C53v85Ev();
extern void _ZN6S266C53v86Ev();
extern void _ZN6S266C53v87Ev();
extern void _ZN6S266C53v88Ev();
extern void _ZN6S266C53v89Ev();
extern void _ZN6S266C53v90Ev();
extern void _ZN6S266C53v91Ev();
static  VTBL_ENTRY vtc_S266C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S266C5[0]),
  (VTBL_ENTRY)&_ZN6S266C5D1Ev,
  (VTBL_ENTRY)&_ZN6S266C5D0Ev,
  (VTBL_ENTRY)&_ZN6S266C62v6Ev,
  (VTBL_ENTRY)&_ZN6S266C62v7Ev,
  (VTBL_ENTRY)&_ZN6S266C62v8Ev,
  (VTBL_ENTRY)&_ZN6S266C62v9Ev,
  (VTBL_ENTRY)&_ZN6S266C63v10Ev,
  (VTBL_ENTRY)&_ZN6S266C63v11Ev,
  (VTBL_ENTRY)&_ZN6S266C63v12Ev,
  (VTBL_ENTRY)&_ZN6S266C63v13Ev,
  (VTBL_ENTRY)&_ZN6S266C63v14Ev,
  (VTBL_ENTRY)&_ZN6S266C63v15Ev,
  (VTBL_ENTRY)&_ZN6S266C63v16Ev,
  (VTBL_ENTRY)&_ZN6S266C63v17Ev,
  (VTBL_ENTRY)&_ZN6S266C63v18Ev,
  (VTBL_ENTRY)&_ZN6S266C63v19Ev,
  (VTBL_ENTRY)&_ZN6S266C63v20Ev,
  (VTBL_ENTRY)&_ZN6S266C63v21Ev,
  (VTBL_ENTRY)&_ZN6S266C63v22Ev,
  (VTBL_ENTRY)&_ZN6S266C63v23Ev,
  (VTBL_ENTRY)&_ZN6S266C63v24Ev,
  (VTBL_ENTRY)&_ZN6S266C63v25Ev,
  (VTBL_ENTRY)&_ZN6S266C63v26Ev,
  (VTBL_ENTRY)&_ZN6S266C63v27Ev,
  (VTBL_ENTRY)&_ZN6S266C63v28Ev,
  (VTBL_ENTRY)&_ZN6S266C63v29Ev,
  (VTBL_ENTRY)&_ZN6S266C63v30Ev,
  (VTBL_ENTRY)&_ZN6S266C63v31Ev,
  (VTBL_ENTRY)&_ZN6S266C63v32Ev,
  (VTBL_ENTRY)&_ZN6S266C63v33Ev,
  (VTBL_ENTRY)&_ZN6S266C63v34Ev,
  (VTBL_ENTRY)&_ZN6S266C63v35Ev,
  (VTBL_ENTRY)&_ZN6S266C63v36Ev,
  (VTBL_ENTRY)&_ZN6S266C63v37Ev,
  (VTBL_ENTRY)&_ZN6S266C63v38Ev,
  (VTBL_ENTRY)&_ZN6S266C63v39Ev,
  (VTBL_ENTRY)&_ZN6S266C63v40Ev,
  (VTBL_ENTRY)&_ZN6S266C63v41Ev,
  (VTBL_ENTRY)&_ZN6S266C63v42Ev,
  (VTBL_ENTRY)&_ZN6S266C63v43Ev,
  (VTBL_ENTRY)&_ZN6S266C63v44Ev,
  (VTBL_ENTRY)&_ZN6S266C63v45Ev,
  (VTBL_ENTRY)&_ZN6S266C63v46Ev,
  (VTBL_ENTRY)&_ZN6S266C63v47Ev,
  (VTBL_ENTRY)&_ZN6S266C63v48Ev,
  (VTBL_ENTRY)&_ZN6S266C63v49Ev,
  (VTBL_ENTRY)&_ZN6S266C63v50Ev,
  (VTBL_ENTRY)&_ZN6S266C63v51Ev,
  (VTBL_ENTRY)&_ZN6S266C63v52Ev,
  (VTBL_ENTRY)&_ZN6S266C63v53Ev,
  (VTBL_ENTRY)&_ZN6S266C63v54Ev,
  (VTBL_ENTRY)&_ZN6S266C63v55Ev,
  (VTBL_ENTRY)&_ZN6S266C63v56Ev,
  (VTBL_ENTRY)&_ZN6S266C63v57Ev,
  (VTBL_ENTRY)&_ZN6S266C63v58Ev,
  (VTBL_ENTRY)&_ZN6S266C63v59Ev,
  (VTBL_ENTRY)&_ZN6S266C63v60Ev,
  (VTBL_ENTRY)&_ZN6S266C63v61Ev,
  (VTBL_ENTRY)&_ZN6S266C63v62Ev,
  (VTBL_ENTRY)&_ZN6S266C63v63Ev,
  (VTBL_ENTRY)&_ZN6S266C63v64Ev,
  (VTBL_ENTRY)&_ZN6S266C63v65Ev,
  (VTBL_ENTRY)&_ZN6S266C63v66Ev,
  (VTBL_ENTRY)&_ZN6S266C63v67Ev,
  (VTBL_ENTRY)&_ZN6S266C63v68Ev,
  (VTBL_ENTRY)&_ZN6S266C63v69Ev,
  (VTBL_ENTRY)&_ZN6S266C53v70Ev,
  (VTBL_ENTRY)&_ZN6S266C53v71Ev,
  (VTBL_ENTRY)&_ZN6S266C53v72Ev,
  (VTBL_ENTRY)&_ZN6S266C53v73Ev,
  (VTBL_ENTRY)&_ZN6S266C53v74Ev,
  (VTBL_ENTRY)&_ZN6S266C53v75Ev,
  (VTBL_ENTRY)&_ZN6S266C53v76Ev,
  (VTBL_ENTRY)&_ZN6S266C53v77Ev,
  (VTBL_ENTRY)&_ZN6S266C53v78Ev,
  (VTBL_ENTRY)&_ZN6S266C53v79Ev,
  (VTBL_ENTRY)&_ZN6S266C53v80Ev,
  (VTBL_ENTRY)&_ZN6S266C53v81Ev,
  (VTBL_ENTRY)&_ZN6S266C53v82Ev,
  (VTBL_ENTRY)&_ZN6S266C53v83Ev,
  (VTBL_ENTRY)&_ZN6S266C53v84Ev,
  (VTBL_ENTRY)&_ZN6S266C53v85Ev,
  (VTBL_ENTRY)&_ZN6S266C53v86Ev,
  (VTBL_ENTRY)&_ZN6S266C53v87Ev,
  (VTBL_ENTRY)&_ZN6S266C53v88Ev,
  (VTBL_ENTRY)&_ZN6S266C53v89Ev,
  (VTBL_ENTRY)&_ZN6S266C53v90Ev,
  (VTBL_ENTRY)&_ZN6S266C53v91Ev,
};
extern VTBL_ENTRY _ZTI6S266C5[];
extern  VTBL_ENTRY _ZTV6S266C5[];
Class_Descriptor cd_S266C5 = {  "S266C5", // class name
  bases_S266C5, 1,
  &(vtc_S266C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI6S266C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S266C5),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S266C4  : S266C5 {
  unsigned int s266c4f0:1;
  unsigned int s266c4f1:1;
  unsigned int s266c4f2:1;
  ::S3350C17 s266c4f3;
  ::S3350C11 s266c4f4;
  ::S3350C5_nt s266c4f5;
  ::S287C27 s266c4f6;
  int s266c4f7[3];
  virtual  ~S266C4(); // _ZN6S266C4D1Ev
  virtual void  v92(); // _ZN6S266C43v92Ev
  virtual void  v93(); // _ZN6S266C43v93Ev
  virtual void  v94(); // _ZN6S266C43v94Ev
  virtual void  v95(); // _ZN6S266C43v95Ev
  virtual void  v96(); // _ZN6S266C43v96Ev
  virtual void  v97(); // _ZN6S266C43v97Ev
  virtual void  v98(); // _ZN6S266C43v98Ev
  virtual void  v99(); // _ZN6S266C43v99Ev
  virtual void  v100(); // _ZN6S266C44v100Ev
  virtual void  v101(); // _ZN6S266C44v101Ev
  virtual void  v102(); // _ZN6S266C44v102Ev
  virtual void  v103(); // _ZN6S266C44v103Ev
  virtual void  v104(); // _ZN6S266C44v104Ev
  virtual void  v105(); // _ZN6S266C44v105Ev
  virtual void  v106(); // _ZN6S266C44v106Ev
  virtual void  v107(); // _ZN6S266C44v107Ev
  virtual void  v108(); // _ZN6S266C44v108Ev
  virtual void  v109(); // _ZN6S266C44v109Ev
  virtual void  v110(); // _ZN6S266C44v110Ev
  virtual void  v111(); // _ZN6S266C44v111Ev
  S266C4(); // tgen
};
//SIG(-1 S266C4) C1{ BC2{ BC3{ vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 FC10{ BC11{ BC8}} FC12{ BC13{ BC8}} FC14{ BC15{ BC8}} FC16{ BC17{ BC8}} Fi[3]}


 S266C4 ::~S266C4(){ note_dtor("S266C4", this);}
void  S266C4 ::v92(){vfunc_called(this, "_ZN6S266C43v92Ev");}
void  S266C4 ::v93(){vfunc_called(this, "_ZN6S266C43v93Ev");}
void  S266C4 ::v94(){vfunc_called(this, "_ZN6S266C43v94Ev");}
void  S266C4 ::v95(){vfunc_called(this, "_ZN6S266C43v95Ev");}
void  S266C4 ::v96(){vfunc_called(this, "_ZN6S266C43v96Ev");}
void  S266C4 ::v97(){vfunc_called(this, "_ZN6S266C43v97Ev");}
void  S266C4 ::v98(){vfunc_called(this, "_ZN6S266C43v98Ev");}
void  S266C4 ::v99(){vfunc_called(this, "_ZN6S266C43v99Ev");}
void  S266C4 ::v100(){vfunc_called(this, "_ZN6S266C44v100Ev");}
void  S266C4 ::v101(){vfunc_called(this, "_ZN6S266C44v101Ev");}
void  S266C4 ::v102(){vfunc_called(this, "_ZN6S266C44v102Ev");}
void  S266C4 ::v103(){vfunc_called(this, "_ZN6S266C44v103Ev");}
void  S266C4 ::v104(){vfunc_called(this, "_ZN6S266C44v104Ev");}
void  S266C4 ::v105(){vfunc_called(this, "_ZN6S266C44v105Ev");}
void  S266C4 ::v106(){vfunc_called(this, "_ZN6S266C44v106Ev");}
void  S266C4 ::v107(){vfunc_called(this, "_ZN6S266C44v107Ev");}
void  S266C4 ::v108(){vfunc_called(this, "_ZN6S266C44v108Ev");}
void  S266C4 ::v109(){vfunc_called(this, "_ZN6S266C44v109Ev");}
void  S266C4 ::v110(){vfunc_called(this, "_ZN6S266C44v110Ev");}
void  S266C4 ::v111(){vfunc_called(this, "_ZN6S266C44v111Ev");}
S266C4 ::S266C4(){ note_ctor("S266C4", this);} // tgen

static void Test_S266C4()
{
  extern Class_Descriptor cd_S266C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S266C4, buf);
    S266C4 *dp, &lv = *(dp=new (buf) S266C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S266C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S266C4)");
    check_base_class_offset(lv, (S266C6*)(S266C5*), 0, "S266C4");
    check_base_class_offset(lv, (S266C5*), 0, "S266C4");
    set_bf_and_test(lv, s266c4f0, ABISELECT(188,132), 0, 1, 1, "S266C4");
    set_bf_and_test(lv, s266c4f1, ABISELECT(188,132), 1, 1, 1, "S266C4");
    set_bf_and_test(lv, s266c4f2, ABISELECT(188,132), 2, 1, 1, "S266C4");
    check_field_offset(lv, s266c4f3, ABISELECT(192,136), "S266C4.s266c4f3");
    check_field_offset(lv, s266c4f4, ABISELECT(208,148), "S266C4.s266c4f4");
    check_field_offset(lv, s266c4f5, ABISELECT(224,160), "S266C4.s266c4f5");
    check_field_offset(lv, s266c4f6, ABISELECT(240,172), "S266C4.s266c4f6");
    check_field_offset(lv, s266c4f7, ABISELECT(256,184), "S266C4.s266c4f7");
    test_class_info(&lv, &cd_S266C4);
    dp->~S266C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS266C4(Test_S266C4, "S266C4", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN6S266C4C1Ev();
extern void _ZN6S266C4D1Ev();
Name_Map name_map_S266C4[] = {
  NSPAIR(_ZN6S266C4C1Ev),
  NSPAIR(_ZN6S266C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S266C6;
extern VTBL_ENTRY _ZTI6S266C6[];
extern  VTBL_ENTRY _ZTV6S266C6[];
extern Class_Descriptor cd_S266C5;
extern VTBL_ENTRY _ZTI6S266C5[];
extern  VTBL_ENTRY _ZTV6S266C5[];
static Base_Class bases_S266C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S266C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S266C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S266C4[];
extern void _ZN6S266C4D1Ev();
extern void _ZN6S266C4D0Ev();
extern void _ZN6S266C62v6Ev();
extern void _ZN6S266C62v7Ev();
extern void _ZN6S266C62v8Ev();
extern void _ZN6S266C62v9Ev();
extern void _ZN6S266C63v10Ev();
extern void _ZN6S266C63v11Ev();
extern void _ZN6S266C63v12Ev();
extern void _ZN6S266C63v13Ev();
extern void _ZN6S266C63v14Ev();
extern void _ZN6S266C63v15Ev();
extern void _ZN6S266C63v16Ev();
extern void _ZN6S266C63v17Ev();
extern void _ZN6S266C63v18Ev();
extern void _ZN6S266C63v19Ev();
extern void _ZN6S266C63v20Ev();
extern void _ZN6S266C63v21Ev();
extern void _ZN6S266C63v22Ev();
extern void _ZN6S266C63v23Ev();
extern void _ZN6S266C63v24Ev();
extern void _ZN6S266C63v25Ev();
extern void _ZN6S266C63v26Ev();
extern void _ZN6S266C63v27Ev();
extern void _ZN6S266C63v28Ev();
extern void _ZN6S266C63v29Ev();
extern void _ZN6S266C63v30Ev();
extern void _ZN6S266C63v31Ev();
extern void _ZN6S266C63v32Ev();
extern void _ZN6S266C63v33Ev();
extern void _ZN6S266C63v34Ev();
extern void _ZN6S266C63v35Ev();
extern void _ZN6S266C63v36Ev();
extern void _ZN6S266C63v37Ev();
extern void _ZN6S266C63v38Ev();
extern void _ZN6S266C63v39Ev();
extern void _ZN6S266C63v40Ev();
extern void _ZN6S266C63v41Ev();
extern void _ZN6S266C63v42Ev();
extern void _ZN6S266C63v43Ev();
extern void _ZN6S266C63v44Ev();
extern void _ZN6S266C63v45Ev();
extern void _ZN6S266C63v46Ev();
extern void _ZN6S266C63v47Ev();
extern void _ZN6S266C63v48Ev();
extern void _ZN6S266C63v49Ev();
extern void _ZN6S266C63v50Ev();
extern void _ZN6S266C63v51Ev();
extern void _ZN6S266C63v52Ev();
extern void _ZN6S266C63v53Ev();
extern void _ZN6S266C63v54Ev();
extern void _ZN6S266C63v55Ev();
extern void _ZN6S266C63v56Ev();
extern void _ZN6S266C63v57Ev();
extern void _ZN6S266C63v58Ev();
extern void _ZN6S266C63v59Ev();
extern void _ZN6S266C63v60Ev();
extern void _ZN6S266C63v61Ev();
extern void _ZN6S266C63v62Ev();
extern void _ZN6S266C63v63Ev();
extern void _ZN6S266C63v64Ev();
extern void _ZN6S266C63v65Ev();
extern void _ZN6S266C63v66Ev();
extern void _ZN6S266C63v67Ev();
extern void _ZN6S266C63v68Ev();
extern void _ZN6S266C63v69Ev();
extern void _ZN6S266C53v70Ev();
extern void _ZN6S266C53v71Ev();
extern void _ZN6S266C53v72Ev();
extern void _ZN6S266C53v73Ev();
extern void _ZN6S266C53v74Ev();
extern void _ZN6S266C53v75Ev();
extern void _ZN6S266C53v76Ev();
extern void _ZN6S266C53v77Ev();
extern void _ZN6S266C53v78Ev();
extern void _ZN6S266C53v79Ev();
extern void _ZN6S266C53v80Ev();
extern void _ZN6S266C53v81Ev();
extern void _ZN6S266C53v82Ev();
extern void _ZN6S266C53v83Ev();
extern void _ZN6S266C53v84Ev();
extern void _ZN6S266C53v85Ev();
extern void _ZN6S266C53v86Ev();
extern void _ZN6S266C53v87Ev();
extern void _ZN6S266C53v88Ev();
extern void _ZN6S266C53v89Ev();
extern void _ZN6S266C53v90Ev();
extern void _ZN6S266C53v91Ev();
extern void _ZN6S266C43v92Ev();
extern void _ZN6S266C43v93Ev();
extern void _ZN6S266C43v94Ev();
extern void _ZN6S266C43v95Ev();
extern void _ZN6S266C43v96Ev();
extern void _ZN6S266C43v97Ev();
extern void _ZN6S266C43v98Ev();
extern void _ZN6S266C43v99Ev();
extern void _ZN6S266C44v100Ev();
extern void _ZN6S266C44v101Ev();
extern void _ZN6S266C44v102Ev();
extern void _ZN6S266C44v103Ev();
extern void _ZN6S266C44v104Ev();
extern void _ZN6S266C44v105Ev();
extern void _ZN6S266C44v106Ev();
extern void _ZN6S266C44v107Ev();
extern void _ZN6S266C44v108Ev();
extern void _ZN6S266C44v109Ev();
extern void _ZN6S266C44v110Ev();
extern void _ZN6S266C44v111Ev();
static  VTBL_ENTRY vtc_S266C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S266C4[0]),
  (VTBL_ENTRY)&_ZN6S266C4D1Ev,
  (VTBL_ENTRY)&_ZN6S266C4D0Ev,
  (VTBL_ENTRY)&_ZN6S266C62v6Ev,
  (VTBL_ENTRY)&_ZN6S266C62v7Ev,
  (VTBL_ENTRY)&_ZN6S266C62v8Ev,
  (VTBL_ENTRY)&_ZN6S266C62v9Ev,
  (VTBL_ENTRY)&_ZN6S266C63v10Ev,
  (VTBL_ENTRY)&_ZN6S266C63v11Ev,
  (VTBL_ENTRY)&_ZN6S266C63v12Ev,
  (VTBL_ENTRY)&_ZN6S266C63v13Ev,
  (VTBL_ENTRY)&_ZN6S266C63v14Ev,
  (VTBL_ENTRY)&_ZN6S266C63v15Ev,
  (VTBL_ENTRY)&_ZN6S266C63v16Ev,
  (VTBL_ENTRY)&_ZN6S266C63v17Ev,
  (VTBL_ENTRY)&_ZN6S266C63v18Ev,
  (VTBL_ENTRY)&_ZN6S266C63v19Ev,
  (VTBL_ENTRY)&_ZN6S266C63v20Ev,
  (VTBL_ENTRY)&_ZN6S266C63v21Ev,
  (VTBL_ENTRY)&_ZN6S266C63v22Ev,
  (VTBL_ENTRY)&_ZN6S266C63v23Ev,
  (VTBL_ENTRY)&_ZN6S266C63v24Ev,
  (VTBL_ENTRY)&_ZN6S266C63v25Ev,
  (VTBL_ENTRY)&_ZN6S266C63v26Ev,
  (VTBL_ENTRY)&_ZN6S266C63v27Ev,
  (VTBL_ENTRY)&_ZN6S266C63v28Ev,
  (VTBL_ENTRY)&_ZN6S266C63v29Ev,
  (VTBL_ENTRY)&_ZN6S266C63v30Ev,
  (VTBL_ENTRY)&_ZN6S266C63v31Ev,
  (VTBL_ENTRY)&_ZN6S266C63v32Ev,
  (VTBL_ENTRY)&_ZN6S266C63v33Ev,
  (VTBL_ENTRY)&_ZN6S266C63v34Ev,
  (VTBL_ENTRY)&_ZN6S266C63v35Ev,
  (VTBL_ENTRY)&_ZN6S266C63v36Ev,
  (VTBL_ENTRY)&_ZN6S266C63v37Ev,
  (VTBL_ENTRY)&_ZN6S266C63v38Ev,
  (VTBL_ENTRY)&_ZN6S266C63v39Ev,
  (VTBL_ENTRY)&_ZN6S266C63v40Ev,
  (VTBL_ENTRY)&_ZN6S266C63v41Ev,
  (VTBL_ENTRY)&_ZN6S266C63v42Ev,
  (VTBL_ENTRY)&_ZN6S266C63v43Ev,
  (VTBL_ENTRY)&_ZN6S266C63v44Ev,
  (VTBL_ENTRY)&_ZN6S266C63v45Ev,
  (VTBL_ENTRY)&_ZN6S266C63v46Ev,
  (VTBL_ENTRY)&_ZN6S266C63v47Ev,
  (VTBL_ENTRY)&_ZN6S266C63v48Ev,
  (VTBL_ENTRY)&_ZN6S266C63v49Ev,
  (VTBL_ENTRY)&_ZN6S266C63v50Ev,
  (VTBL_ENTRY)&_ZN6S266C63v51Ev,
  (VTBL_ENTRY)&_ZN6S266C63v52Ev,
  (VTBL_ENTRY)&_ZN6S266C63v53Ev,
  (VTBL_ENTRY)&_ZN6S266C63v54Ev,
  (VTBL_ENTRY)&_ZN6S266C63v55Ev,
  (VTBL_ENTRY)&_ZN6S266C63v56Ev,
  (VTBL_ENTRY)&_ZN6S266C63v57Ev,
  (VTBL_ENTRY)&_ZN6S266C63v58Ev,
  (VTBL_ENTRY)&_ZN6S266C63v59Ev,
  (VTBL_ENTRY)&_ZN6S266C63v60Ev,
  (VTBL_ENTRY)&_ZN6S266C63v61Ev,
  (VTBL_ENTRY)&_ZN6S266C63v62Ev,
  (VTBL_ENTRY)&_ZN6S266C63v63Ev,
  (VTBL_ENTRY)&_ZN6S266C63v64Ev,
  (VTBL_ENTRY)&_ZN6S266C63v65Ev,
  (VTBL_ENTRY)&_ZN6S266C63v66Ev,
  (VTBL_ENTRY)&_ZN6S266C63v67Ev,
  (VTBL_ENTRY)&_ZN6S266C63v68Ev,
  (VTBL_ENTRY)&_ZN6S266C63v69Ev,
  (VTBL_ENTRY)&_ZN6S266C53v70Ev,
  (VTBL_ENTRY)&_ZN6S266C53v71Ev,
  (VTBL_ENTRY)&_ZN6S266C53v72Ev,
  (VTBL_ENTRY)&_ZN6S266C53v73Ev,
  (VTBL_ENTRY)&_ZN6S266C53v74Ev,
  (VTBL_ENTRY)&_ZN6S266C53v75Ev,
  (VTBL_ENTRY)&_ZN6S266C53v76Ev,
  (VTBL_ENTRY)&_ZN6S266C53v77Ev,
  (VTBL_ENTRY)&_ZN6S266C53v78Ev,
  (VTBL_ENTRY)&_ZN6S266C53v79Ev,
  (VTBL_ENTRY)&_ZN6S266C53v80Ev,
  (VTBL_ENTRY)&_ZN6S266C53v81Ev,
  (VTBL_ENTRY)&_ZN6S266C53v82Ev,
  (VTBL_ENTRY)&_ZN6S266C53v83Ev,
  (VTBL_ENTRY)&_ZN6S266C53v84Ev,
  (VTBL_ENTRY)&_ZN6S266C53v85Ev,
  (VTBL_ENTRY)&_ZN6S266C53v86Ev,
  (VTBL_ENTRY)&_ZN6S266C53v87Ev,
  (VTBL_ENTRY)&_ZN6S266C53v88Ev,
  (VTBL_ENTRY)&_ZN6S266C53v89Ev,
  (VTBL_ENTRY)&_ZN6S266C53v90Ev,
  (VTBL_ENTRY)&_ZN6S266C53v91Ev,
  (VTBL_ENTRY)&_ZN6S266C43v92Ev,
  (VTBL_ENTRY)&_ZN6S266C43v93Ev,
  (VTBL_ENTRY)&_ZN6S266C43v94Ev,
  (VTBL_ENTRY)&_ZN6S266C43v95Ev,
  (VTBL_ENTRY)&_ZN6S266C43v96Ev,
  (VTBL_ENTRY)&_ZN6S266C43v97Ev,
  (VTBL_ENTRY)&_ZN6S266C43v98Ev,
  (VTBL_ENTRY)&_ZN6S266C43v99Ev,
  (VTBL_ENTRY)&_ZN6S266C44v100Ev,
  (VTBL_ENTRY)&_ZN6S266C44v101Ev,
  (VTBL_ENTRY)&_ZN6S266C44v102Ev,
  (VTBL_ENTRY)&_ZN6S266C44v103Ev,
  (VTBL_ENTRY)&_ZN6S266C44v104Ev,
  (VTBL_ENTRY)&_ZN6S266C44v105Ev,
  (VTBL_ENTRY)&_ZN6S266C44v106Ev,
  (VTBL_ENTRY)&_ZN6S266C44v107Ev,
  (VTBL_ENTRY)&_ZN6S266C44v108Ev,
  (VTBL_ENTRY)&_ZN6S266C44v109Ev,
  (VTBL_ENTRY)&_ZN6S266C44v110Ev,
  (VTBL_ENTRY)&_ZN6S266C44v111Ev,
};
extern VTBL_ENTRY _ZTI6S266C4[];
extern  VTBL_ENTRY _ZTV6S266C4[];
Class_Descriptor cd_S266C4 = {  "S266C4", // class name
  bases_S266C4, 2,
  &(vtc_S266C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI6S266C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S266C4),110, //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  S266C3  : S266C4 {
  void *s266c3f0[2];
  int s266c3f1[4];
  unsigned int s266c3f2:1;
  unsigned int s266c3f3:1;
  unsigned int s266c3f4:1;
  char s266c3f5;
  int s266c3f6;
  unsigned int s266c3f7:1;
  ::S287C23 s266c3f8;
  virtual  ~S266C3(); // _ZN6S266C3D1Ev
  virtual void  v112(); // _ZN6S266C34v112Ev
  virtual void  v113(); // _ZN6S266C34v113Ev
  virtual void  v114(); // _ZN6S266C34v114Ev
  virtual void  v115(); // _ZN6S266C34v115Ev
  virtual void  v116(); // _ZN6S266C34v116Ev
  virtual void  v117(); // _ZN6S266C34v117Ev
  virtual void  v118(); // _ZN6S266C34v118Ev
  virtual void  v119(); // _ZN6S266C34v119Ev
  virtual void  v120(); // _ZN6S266C34v120Ev
  virtual void  v121(); // _ZN6S266C34v121Ev
  virtual void  v122(); // _ZN6S266C34v122Ev
  virtual void  v123(); // _ZN6S266C34v123Ev
  virtual void  v124(); // _ZN6S266C34v124Ev
  virtual void  v125(); // _ZN6S266C34v125Ev
  S266C3(); // tgen
};
//SIG(-1 S266C3) C1{ BC2{ BC3{ BC4{ 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 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 Fi:1 Fi:1 Fi:1 FC11{ BC12{ BC9}} FC13{ BC14{ BC9}} FC15{ BC16{ BC9}} FC17{ BC18{ BC9}} Fi[3]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC19{ BC20{ BC9}}}


 S266C3 ::~S266C3(){ note_dtor("S266C3", this);}
void  S266C3 ::v112(){vfunc_called(this, "_ZN6S266C34v112Ev");}
void  S266C3 ::v113(){vfunc_called(this, "_ZN6S266C34v113Ev");}
void  S266C3 ::v114(){vfunc_called(this, "_ZN6S266C34v114Ev");}
void  S266C3 ::v115(){vfunc_called(this, "_ZN6S266C34v115Ev");}
void  S266C3 ::v116(){vfunc_called(this, "_ZN6S266C34v116Ev");}
void  S266C3 ::v117(){vfunc_called(this, "_ZN6S266C34v117Ev");}
void  S266C3 ::v118(){vfunc_called(this, "_ZN6S266C34v118Ev");}
void  S266C3 ::v119(){vfunc_called(this, "_ZN6S266C34v119Ev");}
void  S266C3 ::v120(){vfunc_called(this, "_ZN6S266C34v120Ev");}
void  S266C3 ::v121(){vfunc_called(this, "_ZN6S266C34v121Ev");}
void  S266C3 ::v122(){vfunc_called(this, "_ZN6S266C34v122Ev");}
void  S266C3 ::v123(){vfunc_called(this, "_ZN6S266C34v123Ev");}
void  S266C3 ::v124(){vfunc_called(this, "_ZN6S266C34v124Ev");}
void  S266C3 ::v125(){vfunc_called(this, "_ZN6S266C34v125Ev");}
S266C3 ::S266C3(){ note_ctor("S266C3", this);} // tgen

static void Test_S266C3()
{
  extern Class_Descriptor cd_S266C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(43,62)];
    init_test(&cd_S266C3, buf);
    S266C3 *dp, &lv = *(dp=new (buf) S266C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,244), "sizeof(S266C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S266C3)");
    check_base_class_offset(lv, (S266C6*)(S266C5*)(S266C4*), 0, "S266C3");
    check_base_class_offset(lv, (S266C5*)(S266C4*), 0, "S266C3");
    check_base_class_offset(lv, (S266C4*), 0, "S266C3");
    check_field_offset(lv, s266c3f0, ABISELECT(272,196), "S266C3.s266c3f0");
    check_field_offset(lv, s266c3f1, ABISELECT(288,204), "S266C3.s266c3f1");
    set_bf_and_test(lv, s266c3f2, ABISELECT(304,220), 0, 1, 1, "S266C3");
    set_bf_and_test(lv, s266c3f3, ABISELECT(304,220), 1, 1, 1, "S266C3");
    set_bf_and_test(lv, s266c3f4, ABISELECT(304,220), 2, 1, 1, "S266C3");
    check_field_offset(lv, s266c3f5, ABISELECT(305,221), "S266C3.s266c3f5");
    check_field_offset(lv, s266c3f6, ABISELECT(308,224), "S266C3.s266c3f6");
    set_bf_and_test(lv, s266c3f7, ABISELECT(312,228), 0, 1, 1, "S266C3");
    check_field_offset(lv, s266c3f8, ABISELECT(320,232), "S266C3.s266c3f8");
    test_class_info(&lv, &cd_S266C3);
    dp->~S266C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS266C3(Test_S266C3, "S266C3", ABISELECT(336,244));

#else // __cplusplus

extern void _ZN6S266C3C1Ev();
extern void _ZN6S266C3D1Ev();
Name_Map name_map_S266C3[] = {
  NSPAIR(_ZN6S266C3C1Ev),
  NSPAIR(_ZN6S266C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S266C6;
extern VTBL_ENTRY _ZTI6S266C6[];
extern  VTBL_ENTRY _ZTV6S266C6[];
extern Class_Descriptor cd_S266C5;
extern VTBL_ENTRY _ZTI6S266C5[];
extern  VTBL_ENTRY _ZTV6S266C5[];
extern Class_Descriptor cd_S266C4;
extern VTBL_ENTRY _ZTI6S266C4[];
extern  VTBL_ENTRY _ZTV6S266C4[];
static Base_Class bases_S266C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S266C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S266C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S266C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S266C3[];
extern void _ZN6S266C3D1Ev();
extern void _ZN6S266C3D0Ev();
extern void _ZN6S266C62v6Ev();
extern void _ZN6S266C62v7Ev();
extern void _ZN6S266C62v8Ev();
extern void _ZN6S266C62v9Ev();
extern void _ZN6S266C63v10Ev();
extern void _ZN6S266C63v11Ev();
extern void _ZN6S266C63v12Ev();
extern void _ZN6S266C63v13Ev();
extern void _ZN6S266C63v14Ev();
extern void _ZN6S266C63v15Ev();
extern void _ZN6S266C63v16Ev();
extern void _ZN6S266C63v17Ev();
extern void _ZN6S266C63v18Ev();
extern void _ZN6S266C63v19Ev();
extern void _ZN6S266C63v20Ev();
extern void _ZN6S266C63v21Ev();
extern void _ZN6S266C63v22Ev();
extern void _ZN6S266C63v23Ev();
extern void _ZN6S266C63v24Ev();
extern void _ZN6S266C63v25Ev();
extern void _ZN6S266C63v26Ev();
extern void _ZN6S266C63v27Ev();
extern void _ZN6S266C63v28Ev();
extern void _ZN6S266C63v29Ev();
extern void _ZN6S266C63v30Ev();
extern void _ZN6S266C63v31Ev();
extern void _ZN6S266C63v32Ev();
extern void _ZN6S266C63v33Ev();
extern void _ZN6S266C63v34Ev();
extern void _ZN6S266C63v35Ev();
extern void _ZN6S266C63v36Ev();
extern void _ZN6S266C63v37Ev();
extern void _ZN6S266C63v38Ev();
extern void _ZN6S266C63v39Ev();
extern void _ZN6S266C63v40Ev();
extern void _ZN6S266C63v41Ev();
extern void _ZN6S266C63v42Ev();
extern void _ZN6S266C63v43Ev();
extern void _ZN6S266C63v44Ev();
extern void _ZN6S266C63v45Ev();
extern void _ZN6S266C63v46Ev();
extern void _ZN6S266C63v47Ev();
extern void _ZN6S266C63v48Ev();
extern void _ZN6S266C63v49Ev();
extern void _ZN6S266C63v50Ev();
extern void _ZN6S266C63v51Ev();
extern void _ZN6S266C63v52Ev();
extern void _ZN6S266C63v53Ev();
extern void _ZN6S266C63v54Ev();
extern void _ZN6S266C63v55Ev();
extern void _ZN6S266C63v56Ev();
extern void _ZN6S266C63v57Ev();
extern void _ZN6S266C63v58Ev();
extern void _ZN6S266C63v59Ev();
extern void _ZN6S266C63v60Ev();
extern void _ZN6S266C63v61Ev();
extern void _ZN6S266C63v62Ev();
extern void _ZN6S266C63v63Ev();
extern void _ZN6S266C63v64Ev();
extern void _ZN6S266C63v65Ev();
extern void _ZN6S266C63v66Ev();
extern void _ZN6S266C63v67Ev();
extern void _ZN6S266C63v68Ev();
extern void _ZN6S266C63v69Ev();
extern void _ZN6S266C53v70Ev();
extern void _ZN6S266C53v71Ev();
extern void _ZN6S266C53v72Ev();
extern void _ZN6S266C53v73Ev();
extern void _ZN6S266C53v74Ev();
extern void _ZN6S266C53v75Ev();
extern void _ZN6S266C53v76Ev();
extern void _ZN6S266C53v77Ev();
extern void _ZN6S266C53v78Ev();
extern void _ZN6S266C53v79Ev();
extern void _ZN6S266C53v80Ev();
extern void _ZN6S266C53v81Ev();
extern void _ZN6S266C53v82Ev();
extern void _ZN6S266C53v83Ev();
extern void _ZN6S266C53v84Ev();
extern void _ZN6S266C53v85Ev();
extern void _ZN6S266C53v86Ev();
extern void _ZN6S266C53v87Ev();
extern void _ZN6S266C53v88Ev();
extern void _ZN6S266C53v89Ev();
extern void _ZN6S266C53v90Ev();
extern void _ZN6S266C53v91Ev();
extern void _ZN6S266C43v92Ev();
extern void _ZN6S266C43v93Ev();
extern void _ZN6S266C43v94Ev();
extern void _ZN6S266C43v95Ev();
extern void _ZN6S266C43v96Ev();
extern void _ZN6S266C43v97Ev();
extern void _ZN6S266C43v98Ev();
extern void _ZN6S266C43v99Ev();
extern void _ZN6S266C44v100Ev();
extern void _ZN6S266C44v101Ev();
extern void _ZN6S266C44v102Ev();
extern void _ZN6S266C44v103Ev();
extern void _ZN6S266C44v104Ev();
extern void _ZN6S266C44v105Ev();
extern void _ZN6S266C44v106Ev();
extern void _ZN6S266C44v107Ev();
extern void _ZN6S266C44v108Ev();
extern void _ZN6S266C44v109Ev();
extern void _ZN6S266C44v110Ev();
extern void _ZN6S266C44v111Ev();
extern void _ZN6S266C34v112Ev();
extern void _ZN6S266C34v113Ev();
extern void _ZN6S266C34v114Ev();
extern void _ZN6S266C34v115Ev();
extern void _ZN6S266C34v116Ev();
extern void _ZN6S266C34v117Ev();
extern void _ZN6S266C34v118Ev();
extern void _ZN6S266C34v119Ev();
extern void _ZN6S266C34v120Ev();
extern void _ZN6S266C34v121Ev();
extern void _ZN6S266C34v122Ev();
extern void _ZN6S266C34v123Ev();
extern void _ZN6S266C34v124Ev();
extern void _ZN6S266C34v125Ev();
static  VTBL_ENTRY vtc_S266C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S266C3[0]),
  (VTBL_ENTRY)&_ZN6S266C3D1Ev,
  (VTBL_ENTRY)&_ZN6S266C3D0Ev,
  (VTBL_ENTRY)&_ZN6S266C62v6Ev,
  (VTBL_ENTRY)&_ZN6S266C62v7Ev,
  (VTBL_ENTRY)&_ZN6S266C62v8Ev,
  (VTBL_ENTRY)&_ZN6S266C62v9Ev,
  (VTBL_ENTRY)&_ZN6S266C63v10Ev,
  (VTBL_ENTRY)&_ZN6S266C63v11Ev,
  (VTBL_ENTRY)&_ZN6S266C63v12Ev,
  (VTBL_ENTRY)&_ZN6S266C63v13Ev,
  (VTBL_ENTRY)&_ZN6S266C63v14Ev,
  (VTBL_ENTRY)&_ZN6S266C63v15Ev,
  (VTBL_ENTRY)&_ZN6S266C63v16Ev,
  (VTBL_ENTRY)&_ZN6S266C63v17Ev,
  (VTBL_ENTRY)&_ZN6S266C63v18Ev,
  (VTBL_ENTRY)&_ZN6S266C63v19Ev,
  (VTBL_ENTRY)&_ZN6S266C63v20Ev,
  (VTBL_ENTRY)&_ZN6S266C63v21Ev,
  (VTBL_ENTRY)&_ZN6S266C63v22Ev,
  (VTBL_ENTRY)&_ZN6S266C63v23Ev,
  (VTBL_ENTRY)&_ZN6S266C63v24Ev,
  (VTBL_ENTRY)&_ZN6S266C63v25Ev,
  (VTBL_ENTRY)&_ZN6S266C63v26Ev,
  (VTBL_ENTRY)&_ZN6S266C63v27Ev,
  (VTBL_ENTRY)&_ZN6S266C63v28Ev,
  (VTBL_ENTRY)&_ZN6S266C63v29Ev,
  (VTBL_ENTRY)&_ZN6S266C63v30Ev,
  (VTBL_ENTRY)&_ZN6S266C63v31Ev,
  (VTBL_ENTRY)&_ZN6S266C63v32Ev,
  (VTBL_ENTRY)&_ZN6S266C63v33Ev,
  (VTBL_ENTRY)&_ZN6S266C63v34Ev,
  (VTBL_ENTRY)&_ZN6S266C63v35Ev,
  (VTBL_ENTRY)&_ZN6S266C63v36Ev,
  (VTBL_ENTRY)&_ZN6S266C63v37Ev,
  (VTBL_ENTRY)&_ZN6S266C63v38Ev,
  (VTBL_ENTRY)&_ZN6S266C63v39Ev,
  (VTBL_ENTRY)&_ZN6S266C63v40Ev,
  (VTBL_ENTRY)&_ZN6S266C63v41Ev,
  (VTBL_ENTRY)&_ZN6S266C63v42Ev,
  (VTBL_ENTRY)&_ZN6S266C63v43Ev,
  (VTBL_ENTRY)&_ZN6S266C63v44Ev,
  (VTBL_ENTRY)&_ZN6S266C63v45Ev,
  (VTBL_ENTRY)&_ZN6S266C63v46Ev,
  (VTBL_ENTRY)&_ZN6S266C63v47Ev,
  (VTBL_ENTRY)&_ZN6S266C63v48Ev,
  (VTBL_ENTRY)&_ZN6S266C63v49Ev,
  (VTBL_ENTRY)&_ZN6S266C63v50Ev,
  (VTBL_ENTRY)&_ZN6S266C63v51Ev,
  (VTBL_ENTRY)&_ZN6S266C63v52Ev,
  (VTBL_ENTRY)&_ZN6S266C63v53Ev,
  (VTBL_ENTRY)&_ZN6S266C63v54Ev,
  (VTBL_ENTRY)&_ZN6S266C63v55Ev,
  (VTBL_ENTRY)&_ZN6S266C63v56Ev,
  (VTBL_ENTRY)&_ZN6S266C63v57Ev,
  (VTBL_ENTRY)&_ZN6S266C63v58Ev,
  (VTBL_ENTRY)&_ZN6S266C63v59Ev,
  (VTBL_ENTRY)&_ZN6S266C63v60Ev,
  (VTBL_ENTRY)&_ZN6S266C63v61Ev,
  (VTBL_ENTRY)&_ZN6S266C63v62Ev,
  (VTBL_ENTRY)&_ZN6S266C63v63Ev,
  (VTBL_ENTRY)&_ZN6S266C63v64Ev,
  (VTBL_ENTRY)&_ZN6S266C63v65Ev,
  (VTBL_ENTRY)&_ZN6S266C63v66Ev,
  (VTBL_ENTRY)&_ZN6S266C63v67Ev,
  (VTBL_ENTRY)&_ZN6S266C63v68Ev,
  (VTBL_ENTRY)&_ZN6S266C63v69Ev,
  (VTBL_ENTRY)&_ZN6S266C53v70Ev,
  (VTBL_ENTRY)&_ZN6S266C53v71Ev,
  (VTBL_ENTRY)&_ZN6S266C53v72Ev,
  (VTBL_ENTRY)&_ZN6S266C53v73Ev,
  (VTBL_ENTRY)&_ZN6S266C53v74Ev,
  (VTBL_ENTRY)&_ZN6S266C53v75Ev,
  (VTBL_ENTRY)&_ZN6S266C53v76Ev,
  (VTBL_ENTRY)&_ZN6S266C53v77Ev,
  (VTBL_ENTRY)&_ZN6S266C53v78Ev,
  (VTBL_ENTRY)&_ZN6S266C53v79Ev,
  (VTBL_ENTRY)&_ZN6S266C53v80Ev,
  (VTBL_ENTRY)&_ZN6S266C53v81Ev,
  (VTBL_ENTRY)&_ZN6S266C53v82Ev,
  (VTBL_ENTRY)&_ZN6S266C53v83Ev,
  (VTBL_ENTRY)&_ZN6S266C53v84Ev,
  (VTBL_ENTRY)&_ZN6S266C53v85Ev,
  (VTBL_ENTRY)&_ZN6S266C53v86Ev,
  (VTBL_ENTRY)&_ZN6S266C53v87Ev,
  (VTBL_ENTRY)&_ZN6S266C53v88Ev,
  (VTBL_ENTRY)&_ZN6S266C53v89Ev,
  (VTBL_ENTRY)&_ZN6S266C53v90Ev,
  (VTBL_ENTRY)&_ZN6S266C53v91Ev,
  (VTBL_ENTRY)&_ZN6S266C43v92Ev,
  (VTBL_ENTRY)&_ZN6S266C43v93Ev,
  (VTBL_ENTRY)&_ZN6S266C43v94Ev,
  (VTBL_ENTRY)&_ZN6S266C43v95Ev,
  (VTBL_ENTRY)&_ZN6S266C43v96Ev,
  (VTBL_ENTRY)&_ZN6S266C43v97Ev,
  (VTBL_ENTRY)&_ZN6S266C43v98Ev,
  (VTBL_ENTRY)&_ZN6S266C43v99Ev,
  (VTBL_ENTRY)&_ZN6S266C44v100Ev,
  (VTBL_ENTRY)&_ZN6S266C44v101Ev,
  (VTBL_ENTRY)&_ZN6S266C44v102Ev,
  (VTBL_ENTRY)&_ZN6S266C44v103Ev,
  (VTBL_ENTRY)&_ZN6S266C44v104Ev,
  (VTBL_ENTRY)&_ZN6S266C44v105Ev,
  (VTBL_ENTRY)&_ZN6S266C44v106Ev,
  (VTBL_ENTRY)&_ZN6S266C44v107Ev,
  (VTBL_ENTRY)&_ZN6S266C44v108Ev,
  (VTBL_ENTRY)&_ZN6S266C44v109Ev,
  (VTBL_ENTRY)&_ZN6S266C44v110Ev,
  (VTBL_ENTRY)&_ZN6S266C44v111Ev,
  (VTBL_ENTRY)&_ZN6S266C34v112Ev,
  (VTBL_ENTRY)&_ZN6S266C34v113Ev,
  (VTBL_ENTRY)&_ZN6S266C34v114Ev,
  (VTBL_ENTRY)&_ZN6S266C34v115Ev,
  (VTBL_ENTRY)&_ZN6S266C34v116Ev,
  (VTBL_ENTRY)&_ZN6S266C34v117Ev,
  (VTBL_ENTRY)&_ZN6S266C34v118Ev,
  (VTBL_ENTRY)&_ZN6S266C34v119Ev,
  (VTBL_ENTRY)&_ZN6S266C34v120Ev,
  (VTBL_ENTRY)&_ZN6S266C34v121Ev,
  (VTBL_ENTRY)&_ZN6S266C34v122Ev,
  (VTBL_ENTRY)&_ZN6S266C34v123Ev,
  (VTBL_ENTRY)&_ZN6S266C34v124Ev,
  (VTBL_ENTRY)&_ZN6S266C34v125Ev,
};
extern VTBL_ENTRY _ZTI6S266C3[];
extern  VTBL_ENTRY _ZTV6S266C3[];
Class_Descriptor cd_S266C3 = {  "S266C3", // class name
  bases_S266C3, 3,
  &(vtc_S266C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(336,244), // object size
  NSPAIRA(_ZTI6S266C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S266C3),124, //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  S266C2  : S266C3 {
  void *s266c2f0[2];
  ::S287C8_nt s266c2f1;
  unsigned int s266c2f2:1;
  unsigned int s266c2f3:1;
  ::S3350C21_nt s266c2f4;
  virtual  ~S266C2(); // _ZN6S266C2D1Ev
  virtual void  v126(); // _ZN6S266C24v126Ev
  virtual void  v127(); // _ZN6S266C24v127Ev
  virtual void  v128(); // _ZN6S266C24v128Ev
  virtual void  v129(); // _ZN6S266C24v129Ev
  virtual void  v130(); // _ZN6S266C24v130Ev
  virtual void  v131(); // _ZN6S266C24v131Ev
  virtual void  v132(); // _ZN6S266C24v132Ev
  virtual void  v133(); // _ZN6S266C24v133Ev
  virtual void  v134(); // _ZN6S266C24v134Ev
  virtual void  v135(); // _ZN6S266C24v135Ev
  virtual void  v136(); // _ZN6S266C24v136Ev
  S266C2(); // tgen
};
//SIG(-1 S266C2) C1{ BC2{ BC3{ BC4{ BC5{ vd v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 Fi[2] Fp Fi[2] FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} FC7 FC11{ m} FC7 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 Fi:1 Fi:1 Fi:1 FC12{ BC13{ BC10}} FC14{ BC15{ BC10}} FC16{ BC17{ BC10}} FC18{ BC19{ BC10}} Fi[3]} vd v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC20{ BC21{ BC10}}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[2] FC7 Fi:1 Fi:1 FC22{ m Fp FC6}}


 S266C2 ::~S266C2(){ note_dtor("S266C2", this);}
void  S266C2 ::v126(){vfunc_called(this, "_ZN6S266C24v126Ev");}
void  S266C2 ::v127(){vfunc_called(this, "_ZN6S266C24v127Ev");}
void  S266C2 ::v128(){vfunc_called(this, "_ZN6S266C24v128Ev");}
void  S266C2 ::v129(){vfunc_called(this, "_ZN6S266C24v129Ev");}
void  S266C2 ::v130(){vfunc_called(this, "_ZN6S266C24v130Ev");}
void  S266C2 ::v131(){vfunc_called(this, "_ZN6S266C24v131Ev");}
void  S266C2 ::v132(){vfunc_called(this, "_ZN6S266C24v132Ev");}
void  S266C2 ::v133(){vfunc_called(this, "_ZN6S266C24v133Ev");}
void  S266C2 ::v134(){vfunc_called(this, "_ZN6S266C24v134Ev");}
void  S266C2 ::v135(){vfunc_called(this, "_ZN6S266C24v135Ev");}
void  S266C2 ::v136(){vfunc_called(this, "_ZN6S266C24v136Ev");}
S266C2 ::S266C2(){ note_ctor("S266C2", this);} // tgen

static void Test_S266C2()
{
  extern Class_Descriptor cd_S266C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(50,71)];
    init_test(&cd_S266C2, buf);
    S266C2 *dp, &lv = *(dp=new (buf) S266C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(392,280), "sizeof(S266C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S266C2)");
    check_base_class_offset(lv, (S266C6*)(S266C5*)(S266C4*)(S266C3*), 0, "S266C2");
    check_base_class_offset(lv, (S266C5*)(S266C4*)(S266C3*), 0, "S266C2");
    check_base_class_offset(lv, (S266C4*)(S266C3*), 0, "S266C2");
    check_base_class_offset(lv, (S266C3*), 0, "S266C2");
    check_field_offset(lv, s266c2f0, ABISELECT(336,244), "S266C2.s266c2f0");
    check_field_offset(lv, s266c2f1, ABISELECT(352,252), "S266C2.s266c2f1");
    set_bf_and_test(lv, s266c2f2, ABISELECT(368,264), 0, 1, 1, "S266C2");
    set_bf_and_test(lv, s266c2f3, ABISELECT(368,264), 1, 1, 1, "S266C2");
    check_field_offset(lv, s266c2f4, ABISELECT(376,268), "S266C2.s266c2f4");
    test_class_info(&lv, &cd_S266C2);
    dp->~S266C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS266C2(Test_S266C2, "S266C2", ABISELECT(392,280));

#else // __cplusplus

extern void _ZN6S266C2C1Ev();
extern void _ZN6S266C2D1Ev();
Name_Map name_map_S266C2[] = {
  NSPAIR(_ZN6S266C2C1Ev),
  NSPAIR(_ZN6S266C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S266C6;
extern VTBL_ENTRY _ZTI6S266C6[];
extern  VTBL_ENTRY _ZTV6S266C6[];
extern Class_Descriptor cd_S266C5;
extern VTBL_ENTRY _ZTI6S266C5[];
extern  VTBL_ENTRY _ZTV6S266C5[];
extern Class_Descriptor cd_S266C4;
extern VTBL_ENTRY _ZTI6S266C4[];
extern  VTBL_ENTRY _ZTV6S266C4[];
extern Class_Descriptor cd_S266C3;
extern VTBL_ENTRY _ZTI6S266C3[];
extern  VTBL_ENTRY _ZTV6S266C3[];
static Base_Class bases_S266C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S266C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S266C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S266C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S266C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S266C2[];
extern void _ZN6S266C2D1Ev();
extern void _ZN6S266C2D0Ev();
extern void _ZN6S266C62v6Ev();
extern void _ZN6S266C62v7Ev();
extern void _ZN6S266C62v8Ev();
extern void _ZN6S266C62v9Ev();
extern void _ZN6S266C63v10Ev();
extern void _ZN6S266C63v11Ev();
extern void _ZN6S266C63v12Ev();
extern void _ZN6S266C63v13Ev();
extern void _ZN6S266C63v14Ev();
extern void _ZN6S266C63v15Ev();
extern void _ZN6S266C63v16Ev();
extern void _ZN6S266C63v17Ev();
extern void _ZN6S266C63v18Ev();
extern void _ZN6S266C63v19Ev();
extern void _ZN6S266C63v20Ev();
extern void _ZN6S266C63v21Ev();
extern void _ZN6S266C63v22Ev();
extern void _ZN6S266C63v23Ev();
extern void _ZN6S266C63v24Ev();
extern void _ZN6S266C63v25Ev();
extern void _ZN6S266C63v26Ev();
extern void _ZN6S266C63v27Ev();
extern void _ZN6S266C63v28Ev();
extern void _ZN6S266C63v29Ev();
extern void _ZN6S266C63v30Ev();
extern void _ZN6S266C63v31Ev();
extern void _ZN6S266C63v32Ev();
extern void _ZN6S266C63v33Ev();
extern void _ZN6S266C63v34Ev();
extern void _ZN6S266C63v35Ev();
extern void _ZN6S266C63v36Ev();
extern void _ZN6S266C63v37Ev();
extern void _ZN6S266C63v38Ev();
extern void _ZN6S266C63v39Ev();
extern void _ZN6S266C63v40Ev();
extern void _ZN6S266C63v41Ev();
extern void _ZN6S266C63v42Ev();
extern void _ZN6S266C63v43Ev();
extern void _ZN6S266C63v44Ev();
extern void _ZN6S266C63v45Ev();
extern void _ZN6S266C63v46Ev();
extern void _ZN6S266C63v47Ev();
extern void _ZN6S266C63v48Ev();
extern void _ZN6S266C63v49Ev();
extern void _ZN6S266C63v50Ev();
extern void _ZN6S266C63v51Ev();
extern void _ZN6S266C63v52Ev();
extern void _ZN6S266C63v53Ev();
extern void _ZN6S266C63v54Ev();
extern void _ZN6S266C63v55Ev();
extern void _ZN6S266C63v56Ev();
extern void _ZN6S266C63v57Ev();
extern void _ZN6S266C63v58Ev();
extern void _ZN6S266C63v59Ev();
extern void _ZN6S266C63v60Ev();
extern void _ZN6S266C63v61Ev();
extern void _ZN6S266C63v62Ev();
extern void _ZN6S266C63v63Ev();
extern void _ZN6S266C63v64Ev();
extern void _ZN6S266C63v65Ev();
extern void _ZN6S266C63v66Ev();
extern void _ZN6S266C63v67Ev();
extern void _ZN6S266C63v68Ev();
extern void _ZN6S266C63v69Ev();
extern void _ZN6S266C53v70Ev();
extern void _ZN6S266C53v71Ev();
extern void _ZN6S266C53v72Ev();
extern void _ZN6S266C53v73Ev();
extern void _ZN6S266C53v74Ev();
extern void _ZN6S266C53v75Ev();
extern void _ZN6S266C53v76Ev();
extern void _ZN6S266C53v77Ev();
extern void _ZN6S266C53v78Ev();
extern void _ZN6S266C53v79Ev();
extern void _ZN6S266C53v80Ev();
extern void _ZN6S266C53v81Ev();
extern void _ZN6S266C53v82Ev();
extern void _ZN6S266C53v83Ev();
extern void _ZN6S266C53v84Ev();
extern void _ZN6S266C53v85Ev();
extern void _ZN6S266C53v86Ev();
extern void _ZN6S266C53v87Ev();
extern void _ZN6S266C53v88Ev();
extern void _ZN6S266C53v89Ev();
extern void _ZN6S266C53v90Ev();
extern void _ZN6S266C53v91Ev();
extern void _ZN6S266C43v92Ev();
extern void _ZN6S266C43v93Ev();
extern void _ZN6S266C43v94Ev();
extern void _ZN6S266C43v95Ev();
extern void _ZN6S266C43v96Ev();
extern void _ZN6S266C43v97Ev();
extern void _ZN6S266C43v98Ev();
extern void _ZN6S266C43v99Ev();
extern void _ZN6S266C44v100Ev();
extern void _ZN6S266C44v101Ev();
extern void _ZN6S266C44v102Ev();
extern void _ZN6S266C44v103Ev();
extern void _ZN6S266C44v104Ev();
extern void _ZN6S266C44v105Ev();
extern void _ZN6S266C44v106Ev();
extern void _ZN6S266C44v107Ev();
extern void _ZN6S266C44v108Ev();
extern void _ZN6S266C44v109Ev();
extern void _ZN6S266C44v110Ev();
extern void _ZN6S266C44v111Ev();
extern void _ZN6S266C34v112Ev();
extern void _ZN6S266C34v113Ev();
extern void _ZN6S266C34v114Ev();
extern void _ZN6S266C34v115Ev();
extern void _ZN6S266C34v116Ev();
extern void _ZN6S266C34v117Ev();
extern void _ZN6S266C34v118Ev();
extern void _ZN6S266C34v119Ev();
extern void _ZN6S266C34v120Ev();
extern void _ZN6S266C34v121Ev();
extern void _ZN6S266C34v122Ev();
extern void _ZN6S266C34v123Ev();
extern void _ZN6S266C34v124Ev();
extern void _ZN6S266C34v125Ev();
extern void _ZN6S266C24v126Ev();
extern void _ZN6S266C24v127Ev();
extern void _ZN6S266C24v128Ev();
extern void _ZN6S266C24v129Ev();
extern void _ZN6S266C24v130Ev();
extern void _ZN6S266C24v131Ev();
extern void _ZN6S266C24v132Ev();
extern void _ZN6S266C24v133Ev();
extern void _ZN6S266C24v134Ev();
extern void _ZN6S266C24v135Ev();
extern void _ZN6S266C24v136Ev();
static  VTBL_ENTRY vtc_S266C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S266C2[0]),
  (VTBL_ENTRY)&_ZN6S266C2D1Ev,
  (VTBL_ENTRY)&_ZN6S266C2D0Ev,
  (VTBL_ENTRY)&_ZN6S266C62v6Ev,
  (VTBL_ENTRY)&_ZN6S266C62v7Ev,
  (VTBL_ENTRY)&_ZN6S266C62v8Ev,
  (VTBL_ENTRY)&_ZN6S266C62v9Ev,
  (VTBL_ENTRY)&_ZN6S266C63v10Ev,
  (VTBL_ENTRY)&_ZN6S266C63v11Ev,
  (VTBL_ENTRY)&_ZN6S266C63v12Ev,
  (VTBL_ENTRY)&_ZN6S266C63v13Ev,
  (VTBL_ENTRY)&_ZN6S266C63v14Ev,
  (VTBL_ENTRY)&_ZN6S266C63v15Ev,
  (VTBL_ENTRY)&_ZN6S266C63v16Ev,
  (VTBL_ENTRY)&_ZN6S266C63v17Ev,
  (VTBL_ENTRY)&_ZN6S266C63v18Ev,
  (VTBL_ENTRY)&_ZN6S266C63v19Ev,
  (VTBL_ENTRY)&_ZN6S266C63v20Ev,
  (VTBL_ENTRY)&_ZN6S266C63v21Ev,
  (VTBL_ENTRY)&_ZN6S266C63v22Ev,
  (VTBL_ENTRY)&_ZN6S266C63v23Ev,
  (VTBL_ENTRY)&_ZN6S266C63v24Ev,
  (VTBL_ENTRY)&_ZN6S266C63v25Ev,
  (VTBL_ENTRY)&_ZN6S266C63v26Ev,
  (VTBL_ENTRY)&_ZN6S266C63v27Ev,
  (VTBL_ENTRY)&_ZN6S266C63v28Ev,
  (VTBL_ENTRY)&_ZN6S266C63v29Ev,
  (VTBL_ENTRY)&_ZN6S266C63v30Ev,
  (VTBL_ENTRY)&_ZN6S266C63v31Ev,
  (VTBL_ENTRY)&_ZN6S266C63v32Ev,
  (VTBL_ENTRY)&_ZN6S266C63v33Ev,
  (VTBL_ENTRY)&_ZN6S266C63v34Ev,
  (VTBL_ENTRY)&_ZN6S266C63v35Ev,
  (VTBL_ENTRY)&_ZN6S266C63v36Ev,
  (VTBL_ENTRY)&_ZN6S266C63v37Ev,
  (VTBL_ENTRY)&_ZN6S266C63v38Ev,
  (VTBL_ENTRY)&_ZN6S266C63v39Ev,
  (VTBL_ENTRY)&_ZN6S266C63v40Ev,
  (VTBL_ENTRY)&_ZN6S266C63v41Ev,
  (VTBL_ENTRY)&_ZN6S266C63v42Ev,
  (VTBL_ENTRY)&_ZN6S266C63v43Ev,
  (VTBL_ENTRY)&_ZN6S266C63v44Ev,
  (VTBL_ENTRY)&_ZN6S266C63v45Ev,
  (VTBL_ENTRY)&_ZN6S266C63v46Ev,
  (VTBL_ENTRY)&_ZN6S266C63v47Ev,
  (VTBL_ENTRY)&_ZN6S266C63v48Ev,
  (VTBL_ENTRY)&_ZN6S266C63v49Ev,
  (VTBL_ENTRY)&_ZN6S266C63v50Ev,
  (VTBL_ENTRY)&_ZN6S266C63v51Ev,
  (VTBL_ENTRY)&_ZN6S266C63v52Ev,
  (VTBL_ENTRY)&_ZN6S266C63v53Ev,
  (VTBL_ENTRY)&_ZN6S266C63v54Ev,
  (VTBL_ENTRY)&_ZN6S266C63v55Ev,
  (VTBL_ENTRY)&_ZN6S266C63v56Ev,
  (VTBL_ENTRY)&_ZN6S266C63v57Ev,
  (VTBL_ENTRY)&_ZN6S266C63v58Ev,
  (VTBL_ENTRY)&_ZN6S266C63v59Ev,
  (VTBL_ENTRY)&_ZN6S266C63v60Ev,
  (VTBL_ENTRY)&_ZN6S266C63v61Ev,
  (VTBL_ENTRY)&_ZN6S266C63v62Ev,
  (VTBL_ENTRY)&_ZN6S266C63v63Ev,
  (VTBL_ENTRY)&_ZN6S266C63v64Ev,
  (VTBL_ENTRY)&_ZN6S266C63v65Ev,
  (VTBL_ENTRY)&_ZN6S266C63v66Ev,
  (VTBL_ENTRY)&_ZN6S266C63v67Ev,
  (VTBL_ENTRY)&_ZN6S266C63v68Ev,
  (VTBL_ENTRY)&_ZN6S266C63v69Ev,
  (VTBL_ENTRY)&_ZN6S266C53v70Ev,
  (VTBL_ENTRY)&_ZN6S266C53v71Ev,
  (VTBL_ENTRY)&_ZN6S266C53v72Ev,
  (VTBL_ENTRY)&_ZN6S266C53v73Ev,
  (VTBL_ENTRY)&_ZN6S266C53v74Ev,
  (VTBL_ENTRY)&_ZN6S266C53v75Ev,
  (VTBL_ENTRY)&_ZN6S266C53v76Ev,
  (VTBL_ENTRY)&_ZN6S266C53v77Ev,
  (VTBL_ENTRY)&_ZN6S266C53v78Ev,
  (VTBL_ENTRY)&_ZN6S266C53v79Ev,
  (VTBL_ENTRY)&_ZN6S266C53v80Ev,
  (VTBL_ENTRY)&_ZN6S266C53v81Ev,
  (VTBL_ENTRY)&_ZN6S266C53v82Ev,
  (VTBL_ENTRY)&_ZN6S266C53v83Ev,
  (VTBL_ENTRY)&_ZN6S266C53v84Ev,
  (VTBL_ENTRY)&_ZN6S266C53v85Ev,
  (VTBL_ENTRY)&_ZN6S266C53v86Ev,
  (VTBL_ENTRY)&_ZN6S266C53v87Ev,
  (VTBL_ENTRY)&_ZN6S266C53v88Ev,
  (VTBL_ENTRY)&_ZN6S266C53v89Ev,
  (VTBL_ENTRY)&_ZN6S266C53v90Ev,
  (VTBL_ENTRY)&_ZN6S266C53v91Ev,
  (VTBL_ENTRY)&_ZN6S266C43v92Ev,
  (VTBL_ENTRY)&_ZN6S266C43v93Ev,
  (VTBL_ENTRY)&_ZN6S266C43v94Ev,
  (VTBL_ENTRY)&_ZN6S266C43v95Ev,
  (VTBL_ENTRY)&_ZN6S266C43v96Ev,
  (VTBL_ENTRY)&_ZN6S266C43v97Ev,
  (VTBL_ENTRY)&_ZN6S266C43v98Ev,
  (VTBL_ENTRY)&_ZN6S266C43v99Ev,
  (VTBL_ENTRY)&_ZN6S266C44v100Ev,
  (VTBL_ENTRY)&_ZN6S266C44v101Ev,
  (VTBL_ENTRY)&_ZN6S266C44v102Ev,
  (VTBL_ENTRY)&_ZN6S266C44v103Ev,
  (VTBL_ENTRY)&_ZN6S266C44v104Ev,
  (VTBL_ENTRY)&_ZN6S266C44v105Ev,
  (VTBL_ENTRY)&_ZN6S266C44v106Ev,
  (VTBL_ENTRY)&_ZN6S266C44v107Ev,
  (VTBL_ENTRY)&_ZN6S266C44v108Ev,
  (VTBL_ENTRY)&_ZN6S266C44v109Ev,
  (VTBL_ENTRY)&_ZN6S266C44v110Ev,
  (VTBL_ENTRY)&_ZN6S266C44v111Ev,
  (VTBL_ENTRY)&_ZN6S266C34v112Ev,
  (VTBL_ENTRY)&_ZN6S266C34v113Ev,
  (VTBL_ENTRY)&_ZN6S266C34v114Ev,
  (VTBL_ENTRY)&_ZN6S266C34v115Ev,
  (VTBL_ENTRY)&_ZN6S266C34v116Ev,
  (VTBL_ENTRY)&_ZN6S266C34v117Ev,
  (VTBL_ENTRY)&_ZN6S266C34v118Ev,
  (VTBL_ENTRY)&_ZN6S266C34v119Ev,
  (VTBL_ENTRY)&_ZN6S266C34v120Ev,
  (VTBL_ENTRY)&_ZN6S266C34v121Ev,
  (VTBL_ENTRY)&_ZN6S266C34v122Ev,
  (VTBL_ENTRY)&_ZN6S266C34v123Ev,
  (VTBL_ENTRY)&_ZN6S266C34v124Ev,
  (VTBL_ENTRY)&_ZN6S266C34v125Ev,
  (VTBL_ENTRY)&_ZN6S266C24v126Ev,
  (VTBL_ENTRY)&_ZN6S266C24v127Ev,
  (VTBL_ENTRY)&_ZN6S266C24v128Ev,
  (VTBL_ENTRY)&_ZN6S266C24v129Ev,
  (VTBL_ENTRY)&_ZN6S266C24v130Ev,
  (VTBL_ENTRY)&_ZN6S266C24v131Ev,
  (VTBL_ENTRY)&_ZN6S266C24v132Ev,
  (VTBL_ENTRY)&_ZN6S266C24v133Ev,
  (VTBL_ENTRY)&_ZN6S266C24v134Ev,
  (VTBL_ENTRY)&_ZN6S266C24v135Ev,
  (VTBL_ENTRY)&_ZN6S266C24v136Ev,
};
extern VTBL_ENTRY _ZTI6S266C2[];
extern  VTBL_ENTRY _ZTV6S266C2[];
Class_Descriptor cd_S266C2 = {  "S266C2", // class name
  bases_S266C2, 4,
  &(vtc_S266C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(392,280), // object size
  NSPAIRA(_ZTI6S266C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S266C2),135, //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  S266C24_nt  {
  virtual  ~S266C24_nt(); // _ZN10S266C24_ntD1Ev
  virtual void  v137(); // _ZN10S266C24_nt4v137Ev
  virtual void  v138(); // _ZN10S266C24_nt4v138Ev
  virtual void  v139(); // _ZN10S266C24_nt4v139Ev
  virtual void  v140(); // _ZN10S266C24_nt4v140Ev
  virtual void  v141(); // _ZN10S266C24_nt4v141Ev
  virtual void  v142(); // _ZN10S266C24_nt4v142Ev
  virtual void  v143(); // _ZN10S266C24_nt4v143Ev
  S266C24_nt(); // tgen
};
//SIG(-1 S266C24_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7}


 S266C24_nt ::~S266C24_nt(){ note_dtor("S266C24_nt", this);}
void  S266C24_nt ::v137(){vfunc_called(this, "_ZN10S266C24_nt4v137Ev");}
void  S266C24_nt ::v138(){vfunc_called(this, "_ZN10S266C24_nt4v138Ev");}
void  S266C24_nt ::v139(){vfunc_called(this, "_ZN10S266C24_nt4v139Ev");}
void  S266C24_nt ::v140(){vfunc_called(this, "_ZN10S266C24_nt4v140Ev");}
void  S266C24_nt ::v141(){vfunc_called(this, "_ZN10S266C24_nt4v141Ev");}
void  S266C24_nt ::v142(){vfunc_called(this, "_ZN10S266C24_nt4v142Ev");}
void  S266C24_nt ::v143(){vfunc_called(this, "_ZN10S266C24_nt4v143Ev");}
S266C24_nt ::S266C24_nt(){ note_ctor("S266C24_nt", this);} // tgen

//skip512 S266C24_nt

#else // __cplusplus

extern void _ZN10S266C24_ntC1Ev();
extern void _ZN10S266C24_ntD1Ev();
Name_Map name_map_S266C24_nt[] = {
  NSPAIR(_ZN10S266C24_ntC1Ev),
  NSPAIR(_ZN10S266C24_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S266C24_nt[];
extern void _ZN10S266C24_ntD1Ev();
extern void _ZN10S266C24_ntD0Ev();
extern void _ZN10S266C24_nt4v137Ev();
extern void _ZN10S266C24_nt4v138Ev();
extern void _ZN10S266C24_nt4v139Ev();
extern void _ZN10S266C24_nt4v140Ev();
extern void _ZN10S266C24_nt4v141Ev();
extern void _ZN10S266C24_nt4v142Ev();
extern void _ZN10S266C24_nt4v143Ev();
static  VTBL_ENTRY vtc_S266C24_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S266C24_nt[0]),
  (VTBL_ENTRY)&_ZN10S266C24_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S266C24_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S266C24_nt4v137Ev,
  (VTBL_ENTRY)&_ZN10S266C24_nt4v138Ev,
  (VTBL_ENTRY)&_ZN10S266C24_nt4v139Ev,
  (VTBL_ENTRY)&_ZN10S266C24_nt4v140Ev,
  (VTBL_ENTRY)&_ZN10S266C24_nt4v141Ev,
  (VTBL_ENTRY)&_ZN10S266C24_nt4v142Ev,
  (VTBL_ENTRY)&_ZN10S266C24_nt4v143Ev,
};
extern VTBL_ENTRY _ZTI10S266C24_nt[];
VTBL_ENTRY *P__ZTI10S266C24_nt = _ZTI10S266C24_nt; 
extern  VTBL_ENTRY _ZTV10S266C24_nt[];
Class_Descriptor cd_S266C24_nt = {  "S266C24_nt", // class name
  0,0,//no base classes
  &(vtc_S266C24_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S266C24_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S266C24_nt),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S266C1  : S266C2 , S266C24_nt {
  virtual  ~S266C1(); // _ZN6S266C1D1Ev
  virtual void  v1(); // _ZN6S266C12v1Ev
  virtual void  v2(); // _ZN6S266C12v2Ev
  virtual void  v3(); // _ZN6S266C12v3Ev
  virtual void  v4(); // _ZN6S266C12v4Ev
  virtual void  v5(); // _ZN6S266C12v5Ev
  S266C1(); // tgen
};
//SIG(1 S266C1) C1{ BC2{ BC3{ BC4{ BC5{ 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 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 FC7{ m Fi[2]} Fp[2]} vd v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 Fi[2] Fp Fi[2] FC8{ BC9{ BC10{ BC11{ m Fp Fi[2]}}}} FC8 FC12{ m} FC8 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 Fi:1 Fi:1 Fi:1 FC13{ BC14{ BC11}} FC15{ BC16{ BC11}} FC17{ BC18{ BC11}} FC19{ BC20{ BC11}} Fi[3]} vd v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC21{ BC22{ BC11}}} vd v126 v127 v128 v129 v130 v131 v132 v133 v134 v135 v136 Fp[2] FC8 Fi:1 Fi:1 FC23{ m Fp FC7}} BC24{ vd v137 v138 v139 v140 v141 v142 v143} vd v1 v2 v3 v4 v5}


 S266C1 ::~S266C1(){ note_dtor("S266C1", this);}
void  S266C1 ::v1(){vfunc_called(this, "_ZN6S266C12v1Ev");}
void  S266C1 ::v2(){vfunc_called(this, "_ZN6S266C12v2Ev");}
void  S266C1 ::v3(){vfunc_called(this, "_ZN6S266C12v3Ev");}
void  S266C1 ::v4(){vfunc_called(this, "_ZN6S266C12v4Ev");}
void  S266C1 ::v5(){vfunc_called(this, "_ZN6S266C12v5Ev");}
S266C1 ::S266C1(){ note_ctor("S266C1", this);} // tgen

static void Test_S266C1()
{
  extern Class_Descriptor cd_S266C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(51,72)];
    init_test(&cd_S266C1, buf);
    S266C1 *dp, &lv = *(dp=new (buf) S266C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(400,284), "sizeof(S266C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S266C1)");
    check_base_class_offset(lv, (S266C6*)(S266C5*)(S266C4*)(S266C3*)(S266C2*), 0, "S266C1");
    check_base_class_offset(lv, (S266C5*)(S266C4*)(S266C3*)(S266C2*), 0, "S266C1");
    check_base_class_offset(lv, (S266C4*)(S266C3*)(S266C2*), 0, "S266C1");
    check_base_class_offset(lv, (S266C3*)(S266C2*), 0, "S266C1");
    check_base_class_offset(lv, (S266C2*), 0, "S266C1");
    check_base_class_offset(lv, (S266C24_nt*), ABISELECT(392,280), "S266C1");
    test_class_info(&lv, &cd_S266C1);
    dp->~S266C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS266C1(Test_S266C1, "S266C1", ABISELECT(400,284));

#else // __cplusplus

extern void _ZN6S266C1C1Ev();
extern void _ZN6S266C1D1Ev();
Name_Map name_map_S266C1[] = {
  NSPAIR(_ZN6S266C1C1Ev),
  NSPAIR(_ZN6S266C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S266C6;
extern VTBL_ENTRY _ZTI6S266C6[];
extern  VTBL_ENTRY _ZTV6S266C6[];
extern Class_Descriptor cd_S266C5;
extern VTBL_ENTRY _ZTI6S266C5[];
extern  VTBL_ENTRY _ZTV6S266C5[];
extern Class_Descriptor cd_S266C4;
extern VTBL_ENTRY _ZTI6S266C4[];
extern  VTBL_ENTRY _ZTV6S266C4[];
extern Class_Descriptor cd_S266C3;
extern VTBL_ENTRY _ZTI6S266C3[];
extern  VTBL_ENTRY _ZTV6S266C3[];
extern Class_Descriptor cd_S266C2;
extern VTBL_ENTRY _ZTI6S266C2[];
extern  VTBL_ENTRY _ZTV6S266C2[];
extern Class_Descriptor cd_S266C24_nt;
extern VTBL_ENTRY _ZTI10S266C24_nt[];
extern  VTBL_ENTRY _ZTV10S266C24_nt[];
static Base_Class bases_S266C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S266C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S266C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S266C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S266C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S266C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S266C24_nt,    ABISELECT(392,280), //bcp->offset
    140, //bcp->virtual_function_table_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 _ZTI6S266C1[];
extern void _ZN6S266C1D1Ev();
extern void _ZN6S266C1D0Ev();
extern void _ZN6S266C62v6Ev();
extern void _ZN6S266C62v7Ev();
extern void _ZN6S266C62v8Ev();
extern void _ZN6S266C62v9Ev();
extern void _ZN6S266C63v10Ev();
extern void _ZN6S266C63v11Ev();
extern void _ZN6S266C63v12Ev();
extern void _ZN6S266C63v13Ev();
extern void _ZN6S266C63v14Ev();
extern void _ZN6S266C63v15Ev();
extern void _ZN6S266C63v16Ev();
extern void _ZN6S266C63v17Ev();
extern void _ZN6S266C63v18Ev();
extern void _ZN6S266C63v19Ev();
extern void _ZN6S266C63v20Ev();
extern void _ZN6S266C63v21Ev();
extern void _ZN6S266C63v22Ev();
extern void _ZN6S266C63v23Ev();
extern void _ZN6S266C63v24Ev();
extern void _ZN6S266C63v25Ev();
extern void _ZN6S266C63v26Ev();
extern void _ZN6S266C63v27Ev();
extern void _ZN6S266C63v28Ev();
extern void _ZN6S266C63v29Ev();
extern void _ZN6S266C63v30Ev();
extern void _ZN6S266C63v31Ev();
extern void _ZN6S266C63v32Ev();
extern void _ZN6S266C63v33Ev();
extern void _ZN6S266C63v34Ev();
extern void _ZN6S266C63v35Ev();
extern void _ZN6S266C63v36Ev();
extern void _ZN6S266C63v37Ev();
extern void _ZN6S266C63v38Ev();
extern void _ZN6S266C63v39Ev();
extern void _ZN6S266C63v40Ev();
extern void _ZN6S266C63v41Ev();
extern void _ZN6S266C63v42Ev();
extern void _ZN6S266C63v43Ev();
extern void _ZN6S266C63v44Ev();
extern void _ZN6S266C63v45Ev();
extern void _ZN6S266C63v46Ev();
extern void _ZN6S266C63v47Ev();
extern void _ZN6S266C63v48Ev();
extern void _ZN6S266C63v49Ev();
extern void _ZN6S266C63v50Ev();
extern void _ZN6S266C63v51Ev();
extern void _ZN6S266C63v52Ev();
extern void _ZN6S266C63v53Ev();
extern void _ZN6S266C63v54Ev();
extern void _ZN6S266C63v55Ev();
extern void _ZN6S266C63v56Ev();
extern void _ZN6S266C63v57Ev();
extern void _ZN6S266C63v58Ev();
extern void _ZN6S266C63v59Ev();
extern void _ZN6S266C63v60Ev();
extern void _ZN6S266C63v61Ev();
extern void _ZN6S266C63v62Ev();
extern void _ZN6S266C63v63Ev();
extern void _ZN6S266C63v64Ev();
extern void _ZN6S266C63v65Ev();
extern void _ZN6S266C63v66Ev();
extern void _ZN6S266C63v67Ev();
extern void _ZN6S266C63v68Ev();
extern void _ZN6S266C63v69Ev();
extern void _ZN6S266C53v70Ev();
extern void _ZN6S266C53v71Ev();
extern void _ZN6S266C53v72Ev();
extern void _ZN6S266C53v73Ev();
extern void _ZN6S266C53v74Ev();
extern void _ZN6S266C53v75Ev();
extern void _ZN6S266C53v76Ev();
extern void _ZN6S266C53v77Ev();
extern void _ZN6S266C53v78Ev();
extern void _ZN6S266C53v79Ev();
extern void _ZN6S266C53v80Ev();
extern void _ZN6S266C53v81Ev();
extern void _ZN6S266C53v82Ev();
extern void _ZN6S266C53v83Ev();
extern void _ZN6S266C53v84Ev();
extern void _ZN6S266C53v85Ev();
extern void _ZN6S266C53v86Ev();
extern void _ZN6S266C53v87Ev();
extern void _ZN6S266C53v88Ev();
extern void _ZN6S266C53v89Ev();
extern void _ZN6S266C53v90Ev();
extern void _ZN6S266C53v91Ev();
extern void _ZN6S266C43v92Ev();
extern void _ZN6S266C43v93Ev();
extern void _ZN6S266C43v94Ev();
extern void _ZN6S266C43v95Ev();
extern void _ZN6S266C43v96Ev();
extern void _ZN6S266C43v97Ev();
extern void _ZN6S266C43v98Ev();
extern void _ZN6S266C43v99Ev();
extern void _ZN6S266C44v100Ev();
extern void _ZN6S266C44v101Ev();
extern void _ZN6S266C44v102Ev();
extern void _ZN6S266C44v103Ev();
extern void _ZN6S266C44v104Ev();
extern void _ZN6S266C44v105Ev();
extern void _ZN6S266C44v106Ev();
extern void _ZN6S266C44v107Ev();
extern void _ZN6S266C44v108Ev();
extern void _ZN6S266C44v109Ev();
extern void _ZN6S266C44v110Ev();
extern void _ZN6S266C44v111Ev();
extern void _ZN6S266C34v112Ev();
extern void _ZN6S266C34v113Ev();
extern void _ZN6S266C34v114Ev();
extern void _ZN6S266C34v115Ev();
extern void _ZN6S266C34v116Ev();
extern void _ZN6S266C34v117Ev();
extern void _ZN6S266C34v118Ev();
extern void _ZN6S266C34v119Ev();
extern void _ZN6S266C34v120Ev();
extern void _ZN6S266C34v121Ev();
extern void _ZN6S266C34v122Ev();
extern void _ZN6S266C34v123Ev();
extern void _ZN6S266C34v124Ev();
extern void _ZN6S266C34v125Ev();
extern void _ZN6S266C24v126Ev();
extern void _ZN6S266C24v127Ev();
extern void _ZN6S266C24v128Ev();
extern void _ZN6S266C24v129Ev();
extern void _ZN6S266C24v130Ev();
extern void _ZN6S266C24v131Ev();
extern void _ZN6S266C24v132Ev();
extern void _ZN6S266C24v133Ev();
extern void _ZN6S266C24v134Ev();
extern void _ZN6S266C24v135Ev();
extern void _ZN6S266C24v136Ev();
extern void _ZN6S266C12v1Ev();
extern void _ZN6S266C12v2Ev();
extern void _ZN6S266C12v3Ev();
extern void _ZN6S266C12v4Ev();
extern void _ZN6S266C12v5Ev();
extern void ABISELECT(_ZThn392_N6S266C1D1Ev,_ZThn280_N6S266C1D1Ev)();
extern void ABISELECT(_ZThn392_N6S266C1D0Ev,_ZThn280_N6S266C1D0Ev)();
extern void _ZN10S266C24_nt4v137Ev();
extern void _ZN10S266C24_nt4v138Ev();
extern void _ZN10S266C24_nt4v139Ev();
extern void _ZN10S266C24_nt4v140Ev();
extern void _ZN10S266C24_nt4v141Ev();
extern void _ZN10S266C24_nt4v142Ev();
extern void _ZN10S266C24_nt4v143Ev();
static  VTBL_ENTRY vtc_S266C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S266C1[0]),
  (VTBL_ENTRY)&_ZN6S266C1D1Ev,
  (VTBL_ENTRY)&_ZN6S266C1D0Ev,
  (VTBL_ENTRY)&_ZN6S266C62v6Ev,
  (VTBL_ENTRY)&_ZN6S266C62v7Ev,
  (VTBL_ENTRY)&_ZN6S266C62v8Ev,
  (VTBL_ENTRY)&_ZN6S266C62v9Ev,
  (VTBL_ENTRY)&_ZN6S266C63v10Ev,
  (VTBL_ENTRY)&_ZN6S266C63v11Ev,
  (VTBL_ENTRY)&_ZN6S266C63v12Ev,
  (VTBL_ENTRY)&_ZN6S266C63v13Ev,
  (VTBL_ENTRY)&_ZN6S266C63v14Ev,
  (VTBL_ENTRY)&_ZN6S266C63v15Ev,
  (VTBL_ENTRY)&_ZN6S266C63v16Ev,
  (VTBL_ENTRY)&_ZN6S266C63v17Ev,
  (VTBL_ENTRY)&_ZN6S266C63v18Ev,
  (VTBL_ENTRY)&_ZN6S266C63v19Ev,
  (VTBL_ENTRY)&_ZN6S266C63v20Ev,
  (VTBL_ENTRY)&_ZN6S266C63v21Ev,
  (VTBL_ENTRY)&_ZN6S266C63v22Ev,
  (VTBL_ENTRY)&_ZN6S266C63v23Ev,
  (VTBL_ENTRY)&_ZN6S266C63v24Ev,
  (VTBL_ENTRY)&_ZN6S266C63v25Ev,
  (VTBL_ENTRY)&_ZN6S266C63v26Ev,
  (VTBL_ENTRY)&_ZN6S266C63v27Ev,
  (VTBL_ENTRY)&_ZN6S266C63v28Ev,
  (VTBL_ENTRY)&_ZN6S266C63v29Ev,
  (VTBL_ENTRY)&_ZN6S266C63v30Ev,
  (VTBL_ENTRY)&_ZN6S266C63v31Ev,
  (VTBL_ENTRY)&_ZN6S266C63v32Ev,
  (VTBL_ENTRY)&_ZN6S266C63v33Ev,
  (VTBL_ENTRY)&_ZN6S266C63v34Ev,
  (VTBL_ENTRY)&_ZN6S266C63v35Ev,
  (VTBL_ENTRY)&_ZN6S266C63v36Ev,
  (VTBL_ENTRY)&_ZN6S266C63v37Ev,
  (VTBL_ENTRY)&_ZN6S266C63v38Ev,
  (VTBL_ENTRY)&_ZN6S266C63v39Ev,
  (VTBL_ENTRY)&_ZN6S266C63v40Ev,
  (VTBL_ENTRY)&_ZN6S266C63v41Ev,
  (VTBL_ENTRY)&_ZN6S266C63v42Ev,
  (VTBL_ENTRY)&_ZN6S266C63v43Ev,
  (VTBL_ENTRY)&_ZN6S266C63v44Ev,
  (VTBL_ENTRY)&_ZN6S266C63v45Ev,
  (VTBL_ENTRY)&_ZN6S266C63v46Ev,
  (VTBL_ENTRY)&_ZN6S266C63v47Ev,
  (VTBL_ENTRY)&_ZN6S266C63v48Ev,
  (VTBL_ENTRY)&_ZN6S266C63v49Ev,
  (VTBL_ENTRY)&_ZN6S266C63v50Ev,
  (VTBL_ENTRY)&_ZN6S266C63v51Ev,
  (VTBL_ENTRY)&_ZN6S266C63v52Ev,
  (VTBL_ENTRY)&_ZN6S266C63v53Ev,
  (VTBL_ENTRY)&_ZN6S266C63v54Ev,
  (VTBL_ENTRY)&_ZN6S266C63v55Ev,
  (VTBL_ENTRY)&_ZN6S266C63v56Ev,
  (VTBL_ENTRY)&_ZN6S266C63v57Ev,
  (VTBL_ENTRY)&_ZN6S266C63v58Ev,
  (VTBL_ENTRY)&_ZN6S266C63v59Ev,
  (VTBL_ENTRY)&_ZN6S266C63v60Ev,
  (VTBL_ENTRY)&_ZN6S266C63v61Ev,
  (VTBL_ENTRY)&_ZN6S266C63v62Ev,
  (VTBL_ENTRY)&_ZN6S266C63v63Ev,
  (VTBL_ENTRY)&_ZN6S266C63v64Ev,
  (VTBL_ENTRY)&_ZN6S266C63v65Ev,
  (VTBL_ENTRY)&_ZN6S266C63v66Ev,
  (VTBL_ENTRY)&_ZN6S266C63v67Ev,
  (VTBL_ENTRY)&_ZN6S266C63v68Ev,
  (VTBL_ENTRY)&_ZN6S266C63v69Ev,
  (VTBL_ENTRY)&_ZN6S266C53v70Ev,
  (VTBL_ENTRY)&_ZN6S266C53v71Ev,
  (VTBL_ENTRY)&_ZN6S266C53v72Ev,
  (VTBL_ENTRY)&_ZN6S266C53v73Ev,
  (VTBL_ENTRY)&_ZN6S266C53v74Ev,
  (VTBL_ENTRY)&_ZN6S266C53v75Ev,
  (VTBL_ENTRY)&_ZN6S266C53v76Ev,
  (VTBL_ENTRY)&_ZN6S266C53v77Ev,
  (VTBL_ENTRY)&_ZN6S266C53v78Ev,
  (VTBL_ENTRY)&_ZN6S266C53v79Ev,
  (VTBL_ENTRY)&_ZN6S266C53v80Ev,
  (VTBL_ENTRY)&_ZN6S266C53v81Ev,
  (VTBL_ENTRY)&_ZN6S266C53v82Ev,
  (VTBL_ENTRY)&_ZN6S266C53v83Ev,
  (VTBL_ENTRY)&_ZN6S266C53v84Ev,
  (VTBL_ENTRY)&_ZN6S266C53v85Ev,
  (VTBL_ENTRY)&_ZN6S266C53v86Ev,
  (VTBL_ENTRY)&_ZN6S266C53v87Ev,
  (VTBL_ENTRY)&_ZN6S266C53v88Ev,
  (VTBL_ENTRY)&_ZN6S266C53v89Ev,
  (VTBL_ENTRY)&_ZN6S266C53v90Ev,
  (VTBL_ENTRY)&_ZN6S266C53v91Ev,
  (VTBL_ENTRY)&_ZN6S266C43v92Ev,
  (VTBL_ENTRY)&_ZN6S266C43v93Ev,
  (VTBL_ENTRY)&_ZN6S266C43v94Ev,
  (VTBL_ENTRY)&_ZN6S266C43v95Ev,
  (VTBL_ENTRY)&_ZN6S266C43v96Ev,
  (VTBL_ENTRY)&_ZN6S266C43v97Ev,
  (VTBL_ENTRY)&_ZN6S266C43v98Ev,
  (VTBL_ENTRY)&_ZN6S266C43v99Ev,
  (VTBL_ENTRY)&_ZN6S266C44v100Ev,
  (VTBL_ENTRY)&_ZN6S266C44v101Ev,
  (VTBL_ENTRY)&_ZN6S266C44v102Ev,
  (VTBL_ENTRY)&_ZN6S266C44v103Ev,
  (VTBL_ENTRY)&_ZN6S266C44v104Ev,
  (VTBL_ENTRY)&_ZN6S266C44v105Ev,
  (VTBL_ENTRY)&_ZN6S266C44v106Ev,
  (VTBL_ENTRY)&_ZN6S266C44v107Ev,
  (VTBL_ENTRY)&_ZN6S266C44v108Ev,
  (VTBL_ENTRY)&_ZN6S266C44v109Ev,
  (VTBL_ENTRY)&_ZN6S266C44v110Ev,
  (VTBL_ENTRY)&_ZN6S266C44v111Ev,
  (VTBL_ENTRY)&_ZN6S266C34v112Ev,
  (VTBL_ENTRY)&_ZN6S266C34v113Ev,
  (VTBL_ENTRY)&_ZN6S266C34v114Ev,
  (VTBL_ENTRY)&_ZN6S266C34v115Ev,
  (VTBL_ENTRY)&_ZN6S266C34v116Ev,
  (VTBL_ENTRY)&_ZN6S266C34v117Ev,
  (VTBL_ENTRY)&_ZN6S266C34v118Ev,
  (VTBL_ENTRY)&_ZN6S266C34v119Ev,
  (VTBL_ENTRY)&_ZN6S266C34v120Ev,
  (VTBL_ENTRY)&_ZN6S266C34v121Ev,
  (VTBL_ENTRY)&_ZN6S266C34v122Ev,
  (VTBL_ENTRY)&_ZN6S266C34v123Ev,
  (VTBL_ENTRY)&_ZN6S266C34v124Ev,
  (VTBL_ENTRY)&_ZN6S266C34v125Ev,
  (VTBL_ENTRY)&_ZN6S266C24v126Ev,
  (VTBL_ENTRY)&_ZN6S266C24v127Ev,
  (VTBL_ENTRY)&_ZN6S266C24v128Ev,
  (VTBL_ENTRY)&_ZN6S266C24v129Ev,
  (VTBL_ENTRY)&_ZN6S266C24v130Ev,
  (VTBL_ENTRY)&_ZN6S266C24v131Ev,
  (VTBL_ENTRY)&_ZN6S266C24v132Ev,
  (VTBL_ENTRY)&_ZN6S266C24v133Ev,
  (VTBL_ENTRY)&_ZN6S266C24v134Ev,
  (VTBL_ENTRY)&_ZN6S266C24v135Ev,
  (VTBL_ENTRY)&_ZN6S266C24v136Ev,
  (VTBL_ENTRY)&_ZN6S266C12v1Ev,
  (VTBL_ENTRY)&_ZN6S266C12v2Ev,
  (VTBL_ENTRY)&_ZN6S266C12v3Ev,
  (VTBL_ENTRY)&_ZN6S266C12v4Ev,
  (VTBL_ENTRY)&_ZN6S266C12v5Ev,
  ABISELECT(-392,-280),
  (VTBL_ENTRY)&(_ZTI6S266C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn392_N6S266C1D1Ev,_ZThn280_N6S266C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn392_N6S266C1D0Ev,_ZThn280_N6S266C1D0Ev),
  (VTBL_ENTRY)&_ZN10S266C24_nt4v137Ev,
  (VTBL_ENTRY)&_ZN10S266C24_nt4v138Ev,
  (VTBL_ENTRY)&_ZN10S266C24_nt4v139Ev,
  (VTBL_ENTRY)&_ZN10S266C24_nt4v140Ev,
  (VTBL_ENTRY)&_ZN10S266C24_nt4v141Ev,
  (VTBL_ENTRY)&_ZN10S266C24_nt4v142Ev,
  (VTBL_ENTRY)&_ZN10S266C24_nt4v143Ev,
};
extern VTBL_ENTRY _ZTI6S266C1[];
extern  VTBL_ENTRY _ZTV6S266C1[];
Class_Descriptor cd_S266C1 = {  "S266C1", // class name
  bases_S266C1, 6,
  &(vtc_S266C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(400,284), // object size
  NSPAIRA(_ZTI6S266C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV6S266C1),151, //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  S267C6  {
  int s267c6f0;
  __tsi64 s267c6f1;
  void *s267c6f2[4];
  int s267c6f3[2];
  void *s267c6f4;
  ::S3350C4_nt s267c6f5;
  void *s267c6f6[2];
  virtual  ~S267C6(); // _ZN6S267C6D1Ev
  virtual void  v6(); // _ZN6S267C62v6Ev
  virtual void  v7(); // _ZN6S267C62v7Ev
  virtual void  v8(); // _ZN6S267C62v8Ev
  virtual void  v9(); // _ZN6S267C62v9Ev
  virtual void  v10(); // _ZN6S267C63v10Ev
  virtual void  v11(); // _ZN6S267C63v11Ev
  virtual void  v12(); // _ZN6S267C63v12Ev
  virtual void  v13(); // _ZN6S267C63v13Ev
  virtual void  v14(); // _ZN6S267C63v14Ev
  virtual void  v15(); // _ZN6S267C63v15Ev
  virtual void  v16(); // _ZN6S267C63v16Ev
  virtual void  v17(); // _ZN6S267C63v17Ev
  virtual void  v18(); // _ZN6S267C63v18Ev
  virtual void  v19(); // _ZN6S267C63v19Ev
  virtual void  v20(); // _ZN6S267C63v20Ev
  virtual void  v21(); // _ZN6S267C63v21Ev
  virtual void  v22(); // _ZN6S267C63v22Ev
  virtual void  v23(); // _ZN6S267C63v23Ev
  virtual void  v24(); // _ZN6S267C63v24Ev
  virtual void  v25(); // _ZN6S267C63v25Ev
  virtual void  v26(); // _ZN6S267C63v26Ev
  virtual void  v27(); // _ZN6S267C63v27Ev
  virtual void  v28(); // _ZN6S267C63v28Ev
  virtual void  v29(); // _ZN6S267C63v29Ev
  virtual void  v30(); // _ZN6S267C63v30Ev
  virtual void  v31(); // _ZN6S267C63v31Ev
  virtual void  v32(); // _ZN6S267C63v32Ev
  virtual void  v33(); // _ZN6S267C63v33Ev
  virtual void  v34(); // _ZN6S267C63v34Ev
  virtual void  v35(); // _ZN6S267C63v35Ev
  virtual void  v36(); // _ZN6S267C63v36Ev
  virtual void  v37(); // _ZN6S267C63v37Ev
  virtual void  v38(); // _ZN6S267C63v38Ev
  virtual void  v39(); // _ZN6S267C63v39Ev
  virtual void  v40(); // _ZN6S267C63v40Ev
  virtual void  v41(); // _ZN6S267C63v41Ev
  virtual void  v42(); // _ZN6S267C63v42Ev
  virtual void  v43(); // _ZN6S267C63v43Ev
  virtual void  v44(); // _ZN6S267C63v44Ev
  virtual void  v45(); // _ZN6S267C63v45Ev
  virtual void  v46(); // _ZN6S267C63v46Ev
  virtual void  v47(); // _ZN6S267C63v47Ev
  virtual void  v48(); // _ZN6S267C63v48Ev
  virtual void  v49(); // _ZN6S267C63v49Ev
  virtual void  v50(); // _ZN6S267C63v50Ev
  virtual void  v51(); // _ZN6S267C63v51Ev
  virtual void  v52(); // _ZN6S267C63v52Ev
  virtual void  v53(); // _ZN6S267C63v53Ev
  virtual void  v54(); // _ZN6S267C63v54Ev
  virtual void  v55(); // _ZN6S267C63v55Ev
  virtual void  v56(); // _ZN6S267C63v56Ev
  virtual void  v57(); // _ZN6S267C63v57Ev
  virtual void  v58(); // _ZN6S267C63v58Ev
  virtual void  v59(); // _ZN6S267C63v59Ev
  virtual void  v60(); // _ZN6S267C63v60Ev
  virtual void  v61(); // _ZN6S267C63v61Ev
  virtual void  v62(); // _ZN6S267C63v62Ev
  virtual void  v63(); // _ZN6S267C63v63Ev
  virtual void  v64(); // _ZN6S267C63v64Ev
  virtual void  v65(); // _ZN6S267C63v65Ev
  virtual void  v66(); // _ZN6S267C63v66Ev
  virtual void  v67(); // _ZN6S267C63v67Ev
  virtual void  v68(); // _ZN6S267C63v68Ev
  virtual void  v69(); // _ZN6S267C63v69Ev
  S267C6(); // tgen
};
//SIG(-1 S267C6) 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]}


 S267C6 ::~S267C6(){ note_dtor("S267C6", this);}
void  S267C6 ::v6(){vfunc_called(this, "_ZN6S267C62v6Ev");}
void  S267C6 ::v7(){vfunc_called(this, "_ZN6S267C62v7Ev");}
void  S267C6 ::v8(){vfunc_called(this, "_ZN6S267C62v8Ev");}
void  S267C6 ::v9(){vfunc_called(this, "_ZN6S267C62v9Ev");}
void  S267C6 ::v10(){vfunc_called(this, "_ZN6S267C63v10Ev");}
void  S267C6 ::v11(){vfunc_called(this, "_ZN6S267C63v11Ev");}
void  S267C6 ::v12(){vfunc_called(this, "_ZN6S267C63v12Ev");}
void  S267C6 ::v13(){vfunc_called(this, "_ZN6S267C63v13Ev");}
void  S267C6 ::v14(){vfunc_called(this, "_ZN6S267C63v14Ev");}
void  S267C6 ::v15(){vfunc_called(this, "_ZN6S267C63v15Ev");}
void  S267C6 ::v16(){vfunc_called(this, "_ZN6S267C63v16Ev");}
void  S267C6 ::v17(){vfunc_called(this, "_ZN6S267C63v17Ev");}
void  S267C6 ::v18(){vfunc_called(this, "_ZN6S267C63v18Ev");}
void  S267C6 ::v19(){vfunc_called(this, "_ZN6S267C63v19Ev");}
void  S267C6 ::v20(){vfunc_called(this, "_ZN6S267C63v20Ev");}
void  S267C6 ::v21(){vfunc_called(this, "_ZN6S267C63v21Ev");}
void  S267C6 ::v22(){vfunc_called(this, "_ZN6S267C63v22Ev");}
void  S267C6 ::v23(){vfunc_called(this, "_ZN6S267C63v23Ev");}
void  S267C6 ::v24(){vfunc_called(this, "_ZN6S267C63v24Ev");}
void  S267C6 ::v25(){vfunc_called(this, "_ZN6S267C63v25Ev");}
void  S267C6 ::v26(){vfunc_called(this, "_ZN6S267C63v26Ev");}
void  S267C6 ::v27(){vfunc_called(this, "_ZN6S267C63v27Ev");}
void  S267C6 ::v28(){vfunc_called(this, "_ZN6S267C63v28Ev");}
void  S267C6 ::v29(){vfunc_called(this, "_ZN6S267C63v29Ev");}
void  S267C6 ::v30(){vfunc_called(this, "_ZN6S267C63v30Ev");}
void  S267C6 ::v31(){vfunc_called(this, "_ZN6S267C63v31Ev");}
void  S267C6 ::v32(){vfunc_called(this, "_ZN6S267C63v32Ev");}
void  S267C6 ::v33(){vfunc_called(this, "_ZN6S267C63v33Ev");}
void  S267C6 ::v34(){vfunc_called(this, "_ZN6S267C63v34Ev");}
void  S267C6 ::v35(){vfunc_called(this, "_ZN6S267C63v35Ev");}
void  S267C6 ::v36(){vfunc_called(this, "_ZN6S267C63v36Ev");}
void  S267C6 ::v37(){vfunc_called(this, "_ZN6S267C63v37Ev");}
void  S267C6 ::v38(){vfunc_called(this, "_ZN6S267C63v38Ev");}
void  S267C6 ::v39(){vfunc_called(this, "_ZN6S267C63v39Ev");}
void  S267C6 ::v40(){vfunc_called(this, "_ZN6S267C63v40Ev");}
void  S267C6 ::v41(){vfunc_called(this, "_ZN6S267C63v41Ev");}
void  S267C6 ::v42(){vfunc_called(this, "_ZN6S267C63v42Ev");}
void  S267C6 ::v43(){vfunc_called(this, "_ZN6S267C63v43Ev");}
void  S267C6 ::v44(){vfunc_called(this, "_ZN6S267C63v44Ev");}
void  S267C6 ::v45(){vfunc_called(this, "_ZN6S267C63v45Ev");}
void  S267C6 ::v46(){vfunc_called(this, "_ZN6S267C63v46Ev");}
void  S267C6 ::v47(){vfunc_called(this, "_ZN6S267C63v47Ev");}
void  S267C6 ::v48(){vfunc_called(this, "_ZN6S267C63v48Ev");}
void  S267C6 ::v49(){vfunc_called(this, "_ZN6S267C63v49Ev");}
void  S267C6 ::v50(){vfunc_called(this, "_ZN6S267C63v50Ev");}
void  S267C6 ::v51(){vfunc_called(this, "_ZN6S267C63v51Ev");}
void  S267C6 ::v52(){vfunc_called(this, "_ZN6S267C63v52Ev");}
void  S267C6 ::v53(){vfunc_called(this, "_ZN6S267C63v53Ev");}
void  S267C6 ::v54(){vfunc_called(this, "_ZN6S267C63v54Ev");}
void  S267C6 ::v55(){vfunc_called(this, "_ZN6S267C63v55Ev");}
void  S267C6 ::v56(){vfunc_called(this, "_ZN6S267C63v56Ev");}
void  S267C6 ::v57(){vfunc_called(this, "_ZN6S267C63v57Ev");}
void  S267C6 ::v58(){vfunc_called(this, "_ZN6S267C63v58Ev");}
void  S267C6 ::v59(){vfunc_called(this, "_ZN6S267C63v59Ev");}
void  S267C6 ::v60(){vfunc_called(this, "_ZN6S267C63v60Ev");}
void  S267C6 ::v61(){vfunc_called(this, "_ZN6S267C63v61Ev");}
void  S267C6 ::v62(){vfunc_called(this, "_ZN6S267C63v62Ev");}
void  S267C6 ::v63(){vfunc_called(this, "_ZN6S267C63v63Ev");}
void  S267C6 ::v64(){vfunc_called(this, "_ZN6S267C63v64Ev");}
void  S267C6 ::v65(){vfunc_called(this, "_ZN6S267C63v65Ev");}
void  S267C6 ::v66(){vfunc_called(this, "_ZN6S267C63v66Ev");}
void  S267C6 ::v67(){vfunc_called(this, "_ZN6S267C63v67Ev");}
void  S267C6 ::v68(){vfunc_called(this, "_ZN6S267C63v68Ev");}
void  S267C6 ::v69(){vfunc_called(this, "_ZN6S267C63v69Ev");}
S267C6 ::S267C6(){ note_ctor("S267C6", this);} // tgen

static void Test_S267C6()
{
  extern Class_Descriptor cd_S267C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S267C6, buf);
    S267C6 *dp, &lv = *(dp=new (buf) S267C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S267C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S267C6)");
    check_field_offset(lv, s267c6f0, ABISELECT(8,4), "S267C6.s267c6f0");
    check_field_offset(lv, s267c6f1, ABISELECT(16,8), "S267C6.s267c6f1");
    check_field_offset(lv, s267c6f2, ABISELECT(24,16), "S267C6.s267c6f2");
    check_field_offset(lv, s267c6f3, ABISELECT(56,32), "S267C6.s267c6f3");
    check_field_offset(lv, s267c6f4, ABISELECT(64,40), "S267C6.s267c6f4");
    check_field_offset(lv, s267c6f5, ABISELECT(72,44), "S267C6.s267c6f5");
    check_field_offset(lv, s267c6f6, ABISELECT(80,52), "S267C6.s267c6f6");
    test_class_info(&lv, &cd_S267C6);
    dp->~S267C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS267C6(Test_S267C6, "S267C6", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S267C6C1Ev();
extern void _ZN6S267C6D1Ev();
Name_Map name_map_S267C6[] = {
  NSPAIR(_ZN6S267C6C1Ev),
  NSPAIR(_ZN6S267C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S267C6[];
extern void _ZN6S267C6D1Ev();
extern void _ZN6S267C6D0Ev();
extern void _ZN6S267C62v6Ev();
extern void _ZN6S267C62v7Ev();
extern void _ZN6S267C62v8Ev();
extern void _ZN6S267C62v9Ev();
extern void _ZN6S267C63v10Ev();
extern void _ZN6S267C63v11Ev();
extern void _ZN6S267C63v12Ev();
extern void _ZN6S267C63v13Ev();
extern void _ZN6S267C63v14Ev();
extern void _ZN6S267C63v15Ev();
extern void _ZN6S267C63v16Ev();
extern void _ZN6S267C63v17Ev();
extern void _ZN6S267C63v18Ev();
extern void _ZN6S267C63v19Ev();
extern void _ZN6S267C63v20Ev();
extern void _ZN6S267C63v21Ev();
extern void _ZN6S267C63v22Ev();
extern void _ZN6S267C63v23Ev();
extern void _ZN6S267C63v24Ev();
extern void _ZN6S267C63v25Ev();
extern void _ZN6S267C63v26Ev();
extern void _ZN6S267C63v27Ev();
extern void _ZN6S267C63v28Ev();
extern void _ZN6S267C63v29Ev();
extern void _ZN6S267C63v30Ev();
extern void _ZN6S267C63v31Ev();
extern void _ZN6S267C63v32Ev();
extern void _ZN6S267C63v33Ev();
extern void _ZN6S267C63v34Ev();
extern void _ZN6S267C63v35Ev();
extern void _ZN6S267C63v36Ev();
extern void _ZN6S267C63v37Ev();
extern void _ZN6S267C63v38Ev();
extern void _ZN6S267C63v39Ev();
extern void _ZN6S267C63v40Ev();
extern void _ZN6S267C63v41Ev();
extern void _ZN6S267C63v42Ev();
extern void _ZN6S267C63v43Ev();
extern void _ZN6S267C63v44Ev();
extern void _ZN6S267C63v45Ev();
extern void _ZN6S267C63v46Ev();
extern void _ZN6S267C63v47Ev();
extern void _ZN6S267C63v48Ev();
extern void _ZN6S267C63v49Ev();
extern void _ZN6S267C63v50Ev();
extern void _ZN6S267C63v51Ev();
extern void _ZN6S267C63v52Ev();
extern void _ZN6S267C63v53Ev();
extern void _ZN6S267C63v54Ev();
extern void _ZN6S267C63v55Ev();
extern void _ZN6S267C63v56Ev();
extern void _ZN6S267C63v57Ev();
extern void _ZN6S267C63v58Ev();
extern void _ZN6S267C63v59Ev();
extern void _ZN6S267C63v60Ev();
extern void _ZN6S267C63v61Ev();
extern void _ZN6S267C63v62Ev();
extern void _ZN6S267C63v63Ev();
extern void _ZN6S267C63v64Ev();
extern void _ZN6S267C63v65Ev();
extern void _ZN6S267C63v66Ev();
extern void _ZN6S267C63v67Ev();
extern void _ZN6S267C63v68Ev();
extern void _ZN6S267C63v69Ev();
static  VTBL_ENTRY vtc_S267C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S267C6[0]),
  (VTBL_ENTRY)&_ZN6S267C6D1Ev,
  (VTBL_ENTRY)&_ZN6S267C6D0Ev,
  (VTBL_ENTRY)&_ZN6S267C62v6Ev,
  (VTBL_ENTRY)&_ZN6S267C62v7Ev,
  (VTBL_ENTRY)&_ZN6S267C62v8Ev,
  (VTBL_ENTRY)&_ZN6S267C62v9Ev,
  (VTBL_ENTRY)&_ZN6S267C63v10Ev,
  (VTBL_ENTRY)&_ZN6S267C63v11Ev,
  (VTBL_ENTRY)&_ZN6S267C63v12Ev,
  (VTBL_ENTRY)&_ZN6S267C63v13Ev,
  (VTBL_ENTRY)&_ZN6S267C63v14Ev,
  (VTBL_ENTRY)&_ZN6S267C63v15Ev,
  (VTBL_ENTRY)&_ZN6S267C63v16Ev,
  (VTBL_ENTRY)&_ZN6S267C63v17Ev,
  (VTBL_ENTRY)&_ZN6S267C63v18Ev,
  (VTBL_ENTRY)&_ZN6S267C63v19Ev,
  (VTBL_ENTRY)&_ZN6S267C63v20Ev,
  (VTBL_ENTRY)&_ZN6S267C63v21Ev,
  (VTBL_ENTRY)&_ZN6S267C63v22Ev,
  (VTBL_ENTRY)&_ZN6S267C63v23Ev,
  (VTBL_ENTRY)&_ZN6S267C63v24Ev,
  (VTBL_ENTRY)&_ZN6S267C63v25Ev,
  (VTBL_ENTRY)&_ZN6S267C63v26Ev,
  (VTBL_ENTRY)&_ZN6S267C63v27Ev,
  (VTBL_ENTRY)&_ZN6S267C63v28Ev,
  (VTBL_ENTRY)&_ZN6S267C63v29Ev,
  (VTBL_ENTRY)&_ZN6S267C63v30Ev,
  (VTBL_ENTRY)&_ZN6S267C63v31Ev,
  (VTBL_ENTRY)&_ZN6S267C63v32Ev,
  (VTBL_ENTRY)&_ZN6S267C63v33Ev,
  (VTBL_ENTRY)&_ZN6S267C63v34Ev,
  (VTBL_ENTRY)&_ZN6S267C63v35Ev,
  (VTBL_ENTRY)&_ZN6S267C63v36Ev,
  (VTBL_ENTRY)&_ZN6S267C63v37Ev,
  (VTBL_ENTRY)&_ZN6S267C63v38Ev,
  (VTBL_ENTRY)&_ZN6S267C63v39Ev,
  (VTBL_ENTRY)&_ZN6S267C63v40Ev,
  (VTBL_ENTRY)&_ZN6S267C63v41Ev,
  (VTBL_ENTRY)&_ZN6S267C63v42Ev,
  (VTBL_ENTRY)&_ZN6S267C63v43Ev,
  (VTBL_ENTRY)&_ZN6S267C63v44Ev,
  (VTBL_ENTRY)&_ZN6S267C63v45Ev,
  (VTBL_ENTRY)&_ZN6S267C63v46Ev,
  (VTBL_ENTRY)&_ZN6S267C63v47Ev,
  (VTBL_ENTRY)&_ZN6S267C63v48Ev,
  (VTBL_ENTRY)&_ZN6S267C63v49Ev,
  (VTBL_ENTRY)&_ZN6S267C63v50Ev,
  (VTBL_ENTRY)&_ZN6S267C63v51Ev,
  (VTBL_ENTRY)&_ZN6S267C63v52Ev,
  (VTBL_ENTRY)&_ZN6S267C63v53Ev,
  (VTBL_ENTRY)&_ZN6S267C63v54Ev,
  (VTBL_ENTRY)&_ZN6S267C63v55Ev,
  (VTBL_ENTRY)&_ZN6S267C63v56Ev,
  (VTBL_ENTRY)&_ZN6S267C63v57Ev,
  (VTBL_ENTRY)&_ZN6S267C63v58Ev,
  (VTBL_ENTRY)&_ZN6S267C63v59Ev,
  (VTBL_ENTRY)&_ZN6S267C63v60Ev,
  (VTBL_ENTRY)&_ZN6S267C63v61Ev,
  (VTBL_ENTRY)&_ZN6S267C63v62Ev,
  (VTBL_ENTRY)&_ZN6S267C63v63Ev,
  (VTBL_ENTRY)&_ZN6S267C63v64Ev,
  (VTBL_ENTRY)&_ZN6S267C63v65Ev,
  (VTBL_ENTRY)&_ZN6S267C63v66Ev,
  (VTBL_ENTRY)&_ZN6S267C63v67Ev,
  (VTBL_ENTRY)&_ZN6S267C63v68Ev,
  (VTBL_ENTRY)&_ZN6S267C63v69Ev,
};
extern VTBL_ENTRY _ZTI6S267C6[];
extern  VTBL_ENTRY _ZTV6S267C6[];
Class_Descriptor cd_S267C6 = {  "S267C6", // class name
  0,0,//no base classes
  &(vtc_S267C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S267C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S267C6),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  S267C5  : S267C6 {
  int s267c5f0[2];
  void *s267c5f1;
  int s267c5f2[2];
  ::S287C8_nt s267c5f3;
  ::S287C8_nt s267c5f4;
  ::S2121C38 s267c5f5;
  ::S287C8_nt s267c5f6;
  unsigned int s267c5f7:1;
  unsigned int s267c5f8:1;
  unsigned int s267c5f9:1;
  unsigned int s267c5f10:1;
  unsigned int s267c5f11:1;
  int s267c5f12[2];
  virtual  ~S267C5(); // _ZN6S267C5D1Ev
  virtual void  v70(); // _ZN6S267C53v70Ev
  virtual void  v71(); // _ZN6S267C53v71Ev
  virtual void  v72(); // _ZN6S267C53v72Ev
  virtual void  v73(); // _ZN6S267C53v73Ev
  virtual void  v74(); // _ZN6S267C53v74Ev
  virtual void  v75(); // _ZN6S267C53v75Ev
  virtual void  v76(); // _ZN6S267C53v76Ev
  virtual void  v77(); // _ZN6S267C53v77Ev
  virtual void  v78(); // _ZN6S267C53v78Ev
  virtual void  v79(); // _ZN6S267C53v79Ev
  virtual void  v80(); // _ZN6S267C53v80Ev
  virtual void  v81(); // _ZN6S267C53v81Ev
  virtual void  v82(); // _ZN6S267C53v82Ev
  virtual void  v83(); // _ZN6S267C53v83Ev
  virtual void  v84(); // _ZN6S267C53v84Ev
  virtual void  v85(); // _ZN6S267C53v85Ev
  virtual void  v86(); // _ZN6S267C53v86Ev
  virtual void  v87(); // _ZN6S267C53v87Ev
  virtual void  v88(); // _ZN6S267C53v88Ev
  virtual void  v89(); // _ZN6S267C53v89Ev
  virtual void  v90(); // _ZN6S267C53v90Ev
  virtual void  v91(); // _ZN6S267C53v91Ev
  S267C5(); // tgen
};
//SIG(-1 S267C5) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S267C5 ::~S267C5(){ note_dtor("S267C5", this);}
void  S267C5 ::v70(){vfunc_called(this, "_ZN6S267C53v70Ev");}
void  S267C5 ::v71(){vfunc_called(this, "_ZN6S267C53v71Ev");}
void  S267C5 ::v72(){vfunc_called(this, "_ZN6S267C53v72Ev");}
void  S267C5 ::v73(){vfunc_called(this, "_ZN6S267C53v73Ev");}
void  S267C5 ::v74(){vfunc_called(this, "_ZN6S267C53v74Ev");}
void  S267C5 ::v75(){vfunc_called(this, "_ZN6S267C53v75Ev");}
void  S267C5 ::v76(){vfunc_called(this, "_ZN6S267C53v76Ev");}
void  S267C5 ::v77(){vfunc_called(this, "_ZN6S267C53v77Ev");}
void  S267C5 ::v78(){vfunc_called(this, "_ZN6S267C53v78Ev");}
void  S267C5 ::v79(){vfunc_called(this, "_ZN6S267C53v79Ev");}
void  S267C5 ::v80(){vfunc_called(this, "_ZN6S267C53v80Ev");}
void  S267C5 ::v81(){vfunc_called(this, "_ZN6S267C53v81Ev");}
void  S267C5 ::v82(){vfunc_called(this, "_ZN6S267C53v82Ev");}
void  S267C5 ::v83(){vfunc_called(this, "_ZN6S267C53v83Ev");}
void  S267C5 ::v84(){vfunc_called(this, "_ZN6S267C53v84Ev");}
void  S267C5 ::v85(){vfunc_called(this, "_ZN6S267C53v85Ev");}
void  S267C5 ::v86(){vfunc_called(this, "_ZN6S267C53v86Ev");}
void  S267C5 ::v87(){vfunc_called(this, "_ZN6S267C53v87Ev");}
void  S267C5 ::v88(){vfunc_called(this, "_ZN6S267C53v88Ev");}
void  S267C5 ::v89(){vfunc_called(this, "_ZN6S267C53v89Ev");}
void  S267C5 ::v90(){vfunc_called(this, "_ZN6S267C53v90Ev");}
void  S267C5 ::v91(){vfunc_called(this, "_ZN6S267C53v91Ev");}
S267C5 ::S267C5(){ note_ctor("S267C5", this);} // tgen

static void Test_S267C5()
{
  extern Class_Descriptor cd_S267C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S267C5, buf);
    S267C5 *dp, &lv = *(dp=new (buf) S267C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S267C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S267C5)");
    check_base_class_offset(lv, (S267C6*), 0, "S267C5");
    check_field_offset(lv, s267c5f0, ABISELECT(96,60), "S267C5.s267c5f0");
    check_field_offset(lv, s267c5f1, ABISELECT(104,68), "S267C5.s267c5f1");
    check_field_offset(lv, s267c5f2, ABISELECT(112,72), "S267C5.s267c5f2");
    check_field_offset(lv, s267c5f3, ABISELECT(120,80), "S267C5.s267c5f3");
    check_field_offset(lv, s267c5f4, ABISELECT(136,92), "S267C5.s267c5f4");
    check_field_offset(lv, s267c5f5, ABISELECT(152,104), "S267C5.s267c5f5");
    check_field_offset(lv, s267c5f6, ABISELECT(160,108), "S267C5.s267c5f6");
    set_bf_and_test(lv, s267c5f7, ABISELECT(176,120), 0, 1, 1, "S267C5");
    set_bf_and_test(lv, s267c5f8, ABISELECT(176,120), 1, 1, 1, "S267C5");
    set_bf_and_test(lv, s267c5f9, ABISELECT(176,120), 2, 1, 1, "S267C5");
    set_bf_and_test(lv, s267c5f10, ABISELECT(176,120), 3, 1, 1, "S267C5");
    set_bf_and_test(lv, s267c5f11, ABISELECT(176,120), 4, 1, 1, "S267C5");
    check_field_offset(lv, s267c5f12, ABISELECT(180,124), "S267C5.s267c5f12");
    test_class_info(&lv, &cd_S267C5);
    dp->~S267C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS267C5(Test_S267C5, "S267C5", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN6S267C5C1Ev();
extern void _ZN6S267C5D1Ev();
Name_Map name_map_S267C5[] = {
  NSPAIR(_ZN6S267C5C1Ev),
  NSPAIR(_ZN6S267C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S267C6;
extern VTBL_ENTRY _ZTI6S267C6[];
extern  VTBL_ENTRY _ZTV6S267C6[];
static Base_Class bases_S267C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S267C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI6S267C5[];
extern void _ZN6S267C5D1Ev();
extern void _ZN6S267C5D0Ev();
extern void _ZN6S267C62v6Ev();
extern void _ZN6S267C62v7Ev();
extern void _ZN6S267C62v8Ev();
extern void _ZN6S267C62v9Ev();
extern void _ZN6S267C63v10Ev();
extern void _ZN6S267C63v11Ev();
extern void _ZN6S267C63v12Ev();
extern void _ZN6S267C63v13Ev();
extern void _ZN6S267C63v14Ev();
extern void _ZN6S267C63v15Ev();
extern void _ZN6S267C63v16Ev();
extern void _ZN6S267C63v17Ev();
extern void _ZN6S267C63v18Ev();
extern void _ZN6S267C63v19Ev();
extern void _ZN6S267C63v20Ev();
extern void _ZN6S267C63v21Ev();
extern void _ZN6S267C63v22Ev();
extern void _ZN6S267C63v23Ev();
extern void _ZN6S267C63v24Ev();
extern void _ZN6S267C63v25Ev();
extern void _ZN6S267C63v26Ev();
extern void _ZN6S267C63v27Ev();
extern void _ZN6S267C63v28Ev();
extern void _ZN6S267C63v29Ev();
extern void _ZN6S267C63v30Ev();
extern void _ZN6S267C63v31Ev();
extern void _ZN6S267C63v32Ev();
extern void _ZN6S267C63v33Ev();
extern void _ZN6S267C63v34Ev();
extern void _ZN6S267C63v35Ev();
extern void _ZN6S267C63v36Ev();
extern void _ZN6S267C63v37Ev();
extern void _ZN6S267C63v38Ev();
extern void _ZN6S267C63v39Ev();
extern void _ZN6S267C63v40Ev();
extern void _ZN6S267C63v41Ev();
extern void _ZN6S267C63v42Ev();
extern void _ZN6S267C63v43Ev();
extern void _ZN6S267C63v44Ev();
extern void _ZN6S267C63v45Ev();
extern void _ZN6S267C63v46Ev();
extern void _ZN6S267C63v47Ev();
extern void _ZN6S267C63v48Ev();
extern void _ZN6S267C63v49Ev();
extern void _ZN6S267C63v50Ev();
extern void _ZN6S267C63v51Ev();
extern void _ZN6S267C63v52Ev();
extern void _ZN6S267C63v53Ev();
extern void _ZN6S267C63v54Ev();
extern void _ZN6S267C63v55Ev();
extern void _ZN6S267C63v56Ev();
extern void _ZN6S267C63v57Ev();
extern void _ZN6S267C63v58Ev();
extern void _ZN6S267C63v59Ev();
extern void _ZN6S267C63v60Ev();
extern void _ZN6S267C63v61Ev();
extern void _ZN6S267C63v62Ev();
extern void _ZN6S267C63v63Ev();
extern void _ZN6S267C63v64Ev();
extern void _ZN6S267C63v65Ev();
extern void _ZN6S267C63v66Ev();
extern void _ZN6S267C63v67Ev();
extern void _ZN6S267C63v68Ev();
extern void _ZN6S267C63v69Ev();
extern void _ZN6S267C53v70Ev();
extern void _ZN6S267C53v71Ev();
extern void _ZN6S267C53v72Ev();
extern void _ZN6S267C53v73Ev();
extern void _ZN6S267C53v74Ev();
extern void _ZN6S267C53v75Ev();
extern void _ZN6S267C53v76Ev();
extern void _ZN6S267C53v77Ev();
extern void _ZN6S267C53v78Ev();
extern void _ZN6S267C53v79Ev();
extern void _ZN6S267C53v80Ev();
extern void _ZN6S267C53v81Ev();
extern void _ZN6S267C53v82Ev();
extern void _ZN6S267C53v83Ev();
extern void _ZN6S267C53v84Ev();
extern void _ZN6S267C53v85Ev();
extern void _ZN6S267C53v86Ev();
extern void _ZN6S267C53v87Ev();
extern void _ZN6S267C53v88Ev();
extern void _ZN6S267C53v89Ev();
extern void _ZN6S267C53v90Ev();
extern void _ZN6S267C53v91Ev();
static  VTBL_ENTRY vtc_S267C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S267C5[0]),
  (VTBL_ENTRY)&_ZN6S267C5D1Ev,
  (VTBL_ENTRY)&_ZN6S267C5D0Ev,
  (VTBL_ENTRY)&_ZN6S267C62v6Ev,
  (VTBL_ENTRY)&_ZN6S267C62v7Ev,
  (VTBL_ENTRY)&_ZN6S267C62v8Ev,
  (VTBL_ENTRY)&_ZN6S267C62v9Ev,
  (VTBL_ENTRY)&_ZN6S267C63v10Ev,
  (VTBL_ENTRY)&_ZN6S267C63v11Ev,
  (VTBL_ENTRY)&_ZN6S267C63v12Ev,
  (VTBL_ENTRY)&_ZN6S267C63v13Ev,
  (VTBL_ENTRY)&_ZN6S267C63v14Ev,
  (VTBL_ENTRY)&_ZN6S267C63v15Ev,
  (VTBL_ENTRY)&_ZN6S267C63v16Ev,
  (VTBL_ENTRY)&_ZN6S267C63v17Ev,
  (VTBL_ENTRY)&_ZN6S267C63v18Ev,
  (VTBL_ENTRY)&_ZN6S267C63v19Ev,
  (VTBL_ENTRY)&_ZN6S267C63v20Ev,
  (VTBL_ENTRY)&_ZN6S267C63v21Ev,
  (VTBL_ENTRY)&_ZN6S267C63v22Ev,
  (VTBL_ENTRY)&_ZN6S267C63v23Ev,
  (VTBL_ENTRY)&_ZN6S267C63v24Ev,
  (VTBL_ENTRY)&_ZN6S267C63v25Ev,
  (VTBL_ENTRY)&_ZN6S267C63v26Ev,
  (VTBL_ENTRY)&_ZN6S267C63v27Ev,
  (VTBL_ENTRY)&_ZN6S267C63v28Ev,
  (VTBL_ENTRY)&_ZN6S267C63v29Ev,
  (VTBL_ENTRY)&_ZN6S267C63v30Ev,
  (VTBL_ENTRY)&_ZN6S267C63v31Ev,
  (VTBL_ENTRY)&_ZN6S267C63v32Ev,
  (VTBL_ENTRY)&_ZN6S267C63v33Ev,
  (VTBL_ENTRY)&_ZN6S267C63v34Ev,
  (VTBL_ENTRY)&_ZN6S267C63v35Ev,
  (VTBL_ENTRY)&_ZN6S267C63v36Ev,
  (VTBL_ENTRY)&_ZN6S267C63v37Ev,
  (VTBL_ENTRY)&_ZN6S267C63v38Ev,
  (VTBL_ENTRY)&_ZN6S267C63v39Ev,
  (VTBL_ENTRY)&_ZN6S267C63v40Ev,
  (VTBL_ENTRY)&_ZN6S267C63v41Ev,
  (VTBL_ENTRY)&_ZN6S267C63v42Ev,
  (VTBL_ENTRY)&_ZN6S267C63v43Ev,
  (VTBL_ENTRY)&_ZN6S267C63v44Ev,
  (VTBL_ENTRY)&_ZN6S267C63v45Ev,
  (VTBL_ENTRY)&_ZN6S267C63v46Ev,
  (VTBL_ENTRY)&_ZN6S267C63v47Ev,
  (VTBL_ENTRY)&_ZN6S267C63v48Ev,
  (VTBL_ENTRY)&_ZN6S267C63v49Ev,
  (VTBL_ENTRY)&_ZN6S267C63v50Ev,
  (VTBL_ENTRY)&_ZN6S267C63v51Ev,
  (VTBL_ENTRY)&_ZN6S267C63v52Ev,
  (VTBL_ENTRY)&_ZN6S267C63v53Ev,
  (VTBL_ENTRY)&_ZN6S267C63v54Ev,
  (VTBL_ENTRY)&_ZN6S267C63v55Ev,
  (VTBL_ENTRY)&_ZN6S267C63v56Ev,
  (VTBL_ENTRY)&_ZN6S267C63v57Ev,
  (VTBL_ENTRY)&_ZN6S267C63v58Ev,
  (VTBL_ENTRY)&_ZN6S267C63v59Ev,
  (VTBL_ENTRY)&_ZN6S267C63v60Ev,
  (VTBL_ENTRY)&_ZN6S267C63v61Ev,
  (VTBL_ENTRY)&_ZN6S267C63v62Ev,
  (VTBL_ENTRY)&_ZN6S267C63v63Ev,
  (VTBL_ENTRY)&_ZN6S267C63v64Ev,
  (VTBL_ENTRY)&_ZN6S267C63v65Ev,
  (VTBL_ENTRY)&_ZN6S267C63v66Ev,
  (VTBL_ENTRY)&_ZN6S267C63v67Ev,
  (VTBL_ENTRY)&_ZN6S267C63v68Ev,
  (VTBL_ENTRY)&_ZN6S267C63v69Ev,
  (VTBL_ENTRY)&_ZN6S267C53v70Ev,
  (VTBL_ENTRY)&_ZN6S267C53v71Ev,
  (VTBL_ENTRY)&_ZN6S267C53v72Ev,
  (VTBL_ENTRY)&_ZN6S267C53v73Ev,
  (VTBL_ENTRY)&_ZN6S267C53v74Ev,
  (VTBL_ENTRY)&_ZN6S267C53v75Ev,
  (VTBL_ENTRY)&_ZN6S267C53v76Ev,
  (VTBL_ENTRY)&_ZN6S267C53v77Ev,
  (VTBL_ENTRY)&_ZN6S267C53v78Ev,
  (VTBL_ENTRY)&_ZN6S267C53v79Ev,
  (VTBL_ENTRY)&_ZN6S267C53v80Ev,
  (VTBL_ENTRY)&_ZN6S267C53v81Ev,
  (VTBL_ENTRY)&_ZN6S267C53v82Ev,
  (VTBL_ENTRY)&_ZN6S267C53v83Ev,
  (VTBL_ENTRY)&_ZN6S267C53v84Ev,
  (VTBL_ENTRY)&_ZN6S267C53v85Ev,
  (VTBL_ENTRY)&_ZN6S267C53v86Ev,
  (VTBL_ENTRY)&_ZN6S267C53v87Ev,
  (VTBL_ENTRY)&_ZN6S267C53v88Ev,
  (VTBL_ENTRY)&_ZN6S267C53v89Ev,
  (VTBL_ENTRY)&_ZN6S267C53v90Ev,
  (VTBL_ENTRY)&_ZN6S267C53v91Ev,
};
extern VTBL_ENTRY _ZTI6S267C5[];
extern  VTBL_ENTRY _ZTV6S267C5[];
Class_Descriptor cd_S267C5 = {  "S267C5", // class name
  bases_S267C5, 1,
  &(vtc_S267C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI6S267C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S267C5),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S267C4  : S267C5 {
  unsigned int s267c4f0:1;
  unsigned int s267c4f1:1;
  unsigned int s267c4f2:1;
  ::S3350C17 s267c4f3;
  ::S3350C11 s267c4f4;
  ::S3350C5_nt s267c4f5;
  ::S287C27 s267c4f6;
  int s267c4f7[3];
  virtual  ~S267C4(); // _ZN6S267C4D1Ev
  virtual void  v92(); // _ZN6S267C43v92Ev
  virtual void  v93(); // _ZN6S267C43v93Ev
  virtual void  v94(); // _ZN6S267C43v94Ev
  virtual void  v95(); // _ZN6S267C43v95Ev
  virtual void  v96(); // _ZN6S267C43v96Ev
  virtual void  v97(); // _ZN6S267C43v97Ev
  virtual void  v98(); // _ZN6S267C43v98Ev
  virtual void  v99(); // _ZN6S267C43v99Ev
  virtual void  v100(); // _ZN6S267C44v100Ev
  virtual void  v101(); // _ZN6S267C44v101Ev
  virtual void  v102(); // _ZN6S267C44v102Ev
  virtual void  v103(); // _ZN6S267C44v103Ev
  virtual void  v104(); // _ZN6S267C44v104Ev
  virtual void  v105(); // _ZN6S267C44v105Ev
  virtual void  v106(); // _ZN6S267C44v106Ev
  virtual void  v107(); // _ZN6S267C44v107Ev
  virtual void  v108(); // _ZN6S267C44v108Ev
  virtual void  v109(); // _ZN6S267C44v109Ev
  virtual void  v110(); // _ZN6S267C44v110Ev
  virtual void  v111(); // _ZN6S267C44v111Ev
  S267C4(); // tgen
};
//SIG(-1 S267C4) C1{ BC2{ BC3{ vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 FC10{ BC11{ BC8}} FC12{ BC13{ BC8}} FC14{ BC15{ BC8}} FC16{ BC17{ BC8}} Fi[3]}


 S267C4 ::~S267C4(){ note_dtor("S267C4", this);}
void  S267C4 ::v92(){vfunc_called(this, "_ZN6S267C43v92Ev");}
void  S267C4 ::v93(){vfunc_called(this, "_ZN6S267C43v93Ev");}
void  S267C4 ::v94(){vfunc_called(this, "_ZN6S267C43v94Ev");}
void  S267C4 ::v95(){vfunc_called(this, "_ZN6S267C43v95Ev");}
void  S267C4 ::v96(){vfunc_called(this, "_ZN6S267C43v96Ev");}
void  S267C4 ::v97(){vfunc_called(this, "_ZN6S267C43v97Ev");}
void  S267C4 ::v98(){vfunc_called(this, "_ZN6S267C43v98Ev");}
void  S267C4 ::v99(){vfunc_called(this, "_ZN6S267C43v99Ev");}
void  S267C4 ::v100(){vfunc_called(this, "_ZN6S267C44v100Ev");}
void  S267C4 ::v101(){vfunc_called(this, "_ZN6S267C44v101Ev");}
void  S267C4 ::v102(){vfunc_called(this, "_ZN6S267C44v102Ev");}
void  S267C4 ::v103(){vfunc_called(this, "_ZN6S267C44v103Ev");}
void  S267C4 ::v104(){vfunc_called(this, "_ZN6S267C44v104Ev");}
void  S267C4 ::v105(){vfunc_called(this, "_ZN6S267C44v105Ev");}
void  S267C4 ::v106(){vfunc_called(this, "_ZN6S267C44v106Ev");}
void  S267C4 ::v107(){vfunc_called(this, "_ZN6S267C44v107Ev");}
void  S267C4 ::v108(){vfunc_called(this, "_ZN6S267C44v108Ev");}
void  S267C4 ::v109(){vfunc_called(this, "_ZN6S267C44v109Ev");}
void  S267C4 ::v110(){vfunc_called(this, "_ZN6S267C44v110Ev");}
void  S267C4 ::v111(){vfunc_called(this, "_ZN6S267C44v111Ev");}
S267C4 ::S267C4(){ note_ctor("S267C4", this);} // tgen

static void Test_S267C4()
{
  extern Class_Descriptor cd_S267C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S267C4, buf);
    S267C4 *dp, &lv = *(dp=new (buf) S267C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S267C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S267C4)");
    check_base_class_offset(lv, (S267C6*)(S267C5*), 0, "S267C4");
    check_base_class_offset(lv, (S267C5*), 0, "S267C4");
    set_bf_and_test(lv, s267c4f0, ABISELECT(188,132), 0, 1, 1, "S267C4");
    set_bf_and_test(lv, s267c4f1, ABISELECT(188,132), 1, 1, 1, "S267C4");
    set_bf_and_test(lv, s267c4f2, ABISELECT(188,132), 2, 1, 1, "S267C4");
    check_field_offset(lv, s267c4f3, ABISELECT(192,136), "S267C4.s267c4f3");
    check_field_offset(lv, s267c4f4, ABISELECT(208,148), "S267C4.s267c4f4");
    check_field_offset(lv, s267c4f5, ABISELECT(224,160), "S267C4.s267c4f5");
    check_field_offset(lv, s267c4f6, ABISELECT(240,172), "S267C4.s267c4f6");
    check_field_offset(lv, s267c4f7, ABISELECT(256,184), "S267C4.s267c4f7");
    test_class_info(&lv, &cd_S267C4);
    dp->~S267C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS267C4(Test_S267C4, "S267C4", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN6S267C4C1Ev();
extern void _ZN6S267C4D1Ev();
Name_Map name_map_S267C4[] = {
  NSPAIR(_ZN6S267C4C1Ev),
  NSPAIR(_ZN6S267C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S267C6;
extern VTBL_ENTRY _ZTI6S267C6[];
extern  VTBL_ENTRY _ZTV6S267C6[];
extern Class_Descriptor cd_S267C5;
extern VTBL_ENTRY _ZTI6S267C5[];
extern  VTBL_ENTRY _ZTV6S267C5[];
static Base_Class bases_S267C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S267C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S267C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S267C4[];
extern void _ZN6S267C4D1Ev();
extern void _ZN6S267C4D0Ev();
extern void _ZN6S267C62v6Ev();
extern void _ZN6S267C62v7Ev();
extern void _ZN6S267C62v8Ev();
extern void _ZN6S267C62v9Ev();
extern void _ZN6S267C63v10Ev();
extern void _ZN6S267C63v11Ev();
extern void _ZN6S267C63v12Ev();
extern void _ZN6S267C63v13Ev();
extern void _ZN6S267C63v14Ev();
extern void _ZN6S267C63v15Ev();
extern void _ZN6S267C63v16Ev();
extern void _ZN6S267C63v17Ev();
extern void _ZN6S267C63v18Ev();
extern void _ZN6S267C63v19Ev();
extern void _ZN6S267C63v20Ev();
extern void _ZN6S267C63v21Ev();
extern void _ZN6S267C63v22Ev();
extern void _ZN6S267C63v23Ev();
extern void _ZN6S267C63v24Ev();
extern void _ZN6S267C63v25Ev();
extern void _ZN6S267C63v26Ev();
extern void _ZN6S267C63v27Ev();
extern void _ZN6S267C63v28Ev();
extern void _ZN6S267C63v29Ev();
extern void _ZN6S267C63v30Ev();
extern void _ZN6S267C63v31Ev();
extern void _ZN6S267C63v32Ev();
extern void _ZN6S267C63v33Ev();
extern void _ZN6S267C63v34Ev();
extern void _ZN6S267C63v35Ev();
extern void _ZN6S267C63v36Ev();
extern void _ZN6S267C63v37Ev();
extern void _ZN6S267C63v38Ev();
extern void _ZN6S267C63v39Ev();
extern void _ZN6S267C63v40Ev();
extern void _ZN6S267C63v41Ev();
extern void _ZN6S267C63v42Ev();
extern void _ZN6S267C63v43Ev();
extern void _ZN6S267C63v44Ev();
extern void _ZN6S267C63v45Ev();
extern void _ZN6S267C63v46Ev();
extern void _ZN6S267C63v47Ev();
extern void _ZN6S267C63v48Ev();
extern void _ZN6S267C63v49Ev();
extern void _ZN6S267C63v50Ev();
extern void _ZN6S267C63v51Ev();
extern void _ZN6S267C63v52Ev();
extern void _ZN6S267C63v53Ev();
extern void _ZN6S267C63v54Ev();
extern void _ZN6S267C63v55Ev();
extern void _ZN6S267C63v56Ev();
extern void _ZN6S267C63v57Ev();
extern void _ZN6S267C63v58Ev();
extern void _ZN6S267C63v59Ev();
extern void _ZN6S267C63v60Ev();
extern void _ZN6S267C63v61Ev();
extern void _ZN6S267C63v62Ev();
extern void _ZN6S267C63v63Ev();
extern void _ZN6S267C63v64Ev();
extern void _ZN6S267C63v65Ev();
extern void _ZN6S267C63v66Ev();
extern void _ZN6S267C63v67Ev();
extern void _ZN6S267C63v68Ev();
extern void _ZN6S267C63v69Ev();
extern void _ZN6S267C53v70Ev();
extern void _ZN6S267C53v71Ev();
extern void _ZN6S267C53v72Ev();
extern void _ZN6S267C53v73Ev();
extern void _ZN6S267C53v74Ev();
extern void _ZN6S267C53v75Ev();
extern void _ZN6S267C53v76Ev();
extern void _ZN6S267C53v77Ev();
extern void _ZN6S267C53v78Ev();
extern void _ZN6S267C53v79Ev();
extern void _ZN6S267C53v80Ev();
extern void _ZN6S267C53v81Ev();
extern void _ZN6S267C53v82Ev();
extern void _ZN6S267C53v83Ev();
extern void _ZN6S267C53v84Ev();
extern void _ZN6S267C53v85Ev();
extern void _ZN6S267C53v86Ev();
extern void _ZN6S267C53v87Ev();
extern void _ZN6S267C53v88Ev();
extern void _ZN6S267C53v89Ev();
extern void _ZN6S267C53v90Ev();
extern void _ZN6S267C53v91Ev();
extern void _ZN6S267C43v92Ev();
extern void _ZN6S267C43v93Ev();
extern void _ZN6S267C43v94Ev();
extern void _ZN6S267C43v95Ev();
extern void _ZN6S267C43v96Ev();
extern void _ZN6S267C43v97Ev();
extern void _ZN6S267C43v98Ev();
extern void _ZN6S267C43v99Ev();
extern void _ZN6S267C44v100Ev();
extern void _ZN6S267C44v101Ev();
extern void _ZN6S267C44v102Ev();
extern void _ZN6S267C44v103Ev();
extern void _ZN6S267C44v104Ev();
extern void _ZN6S267C44v105Ev();
extern void _ZN6S267C44v106Ev();
extern void _ZN6S267C44v107Ev();
extern void _ZN6S267C44v108Ev();
extern void _ZN6S267C44v109Ev();
extern void _ZN6S267C44v110Ev();
extern void _ZN6S267C44v111Ev();
static  VTBL_ENTRY vtc_S267C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S267C4[0]),
  (VTBL_ENTRY)&_ZN6S267C4D1Ev,
  (VTBL_ENTRY)&_ZN6S267C4D0Ev,
  (VTBL_ENTRY)&_ZN6S267C62v6Ev,
  (VTBL_ENTRY)&_ZN6S267C62v7Ev,
  (VTBL_ENTRY)&_ZN6S267C62v8Ev,
  (VTBL_ENTRY)&_ZN6S267C62v9Ev,
  (VTBL_ENTRY)&_ZN6S267C63v10Ev,
  (VTBL_ENTRY)&_ZN6S267C63v11Ev,
  (VTBL_ENTRY)&_ZN6S267C63v12Ev,
  (VTBL_ENTRY)&_ZN6S267C63v13Ev,
  (VTBL_ENTRY)&_ZN6S267C63v14Ev,
  (VTBL_ENTRY)&_ZN6S267C63v15Ev,
  (VTBL_ENTRY)&_ZN6S267C63v16Ev,
  (VTBL_ENTRY)&_ZN6S267C63v17Ev,
  (VTBL_ENTRY)&_ZN6S267C63v18Ev,
  (VTBL_ENTRY)&_ZN6S267C63v19Ev,
  (VTBL_ENTRY)&_ZN6S267C63v20Ev,
  (VTBL_ENTRY)&_ZN6S267C63v21Ev,
  (VTBL_ENTRY)&_ZN6S267C63v22Ev,
  (VTBL_ENTRY)&_ZN6S267C63v23Ev,
  (VTBL_ENTRY)&_ZN6S267C63v24Ev,
  (VTBL_ENTRY)&_ZN6S267C63v25Ev,
  (VTBL_ENTRY)&_ZN6S267C63v26Ev,
  (VTBL_ENTRY)&_ZN6S267C63v27Ev,
  (VTBL_ENTRY)&_ZN6S267C63v28Ev,
  (VTBL_ENTRY)&_ZN6S267C63v29Ev,
  (VTBL_ENTRY)&_ZN6S267C63v30Ev,
  (VTBL_ENTRY)&_ZN6S267C63v31Ev,
  (VTBL_ENTRY)&_ZN6S267C63v32Ev,
  (VTBL_ENTRY)&_ZN6S267C63v33Ev,
  (VTBL_ENTRY)&_ZN6S267C63v34Ev,
  (VTBL_ENTRY)&_ZN6S267C63v35Ev,
  (VTBL_ENTRY)&_ZN6S267C63v36Ev,
  (VTBL_ENTRY)&_ZN6S267C63v37Ev,
  (VTBL_ENTRY)&_ZN6S267C63v38Ev,
  (VTBL_ENTRY)&_ZN6S267C63v39Ev,
  (VTBL_ENTRY)&_ZN6S267C63v40Ev,
  (VTBL_ENTRY)&_ZN6S267C63v41Ev,
  (VTBL_ENTRY)&_ZN6S267C63v42Ev,
  (VTBL_ENTRY)&_ZN6S267C63v43Ev,
  (VTBL_ENTRY)&_ZN6S267C63v44Ev,
  (VTBL_ENTRY)&_ZN6S267C63v45Ev,
  (VTBL_ENTRY)&_ZN6S267C63v46Ev,
  (VTBL_ENTRY)&_ZN6S267C63v47Ev,
  (VTBL_ENTRY)&_ZN6S267C63v48Ev,
  (VTBL_ENTRY)&_ZN6S267C63v49Ev,
  (VTBL_ENTRY)&_ZN6S267C63v50Ev,
  (VTBL_ENTRY)&_ZN6S267C63v51Ev,
  (VTBL_ENTRY)&_ZN6S267C63v52Ev,
  (VTBL_ENTRY)&_ZN6S267C63v53Ev,
  (VTBL_ENTRY)&_ZN6S267C63v54Ev,
  (VTBL_ENTRY)&_ZN6S267C63v55Ev,
  (VTBL_ENTRY)&_ZN6S267C63v56Ev,
  (VTBL_ENTRY)&_ZN6S267C63v57Ev,
  (VTBL_ENTRY)&_ZN6S267C63v58Ev,
  (VTBL_ENTRY)&_ZN6S267C63v59Ev,
  (VTBL_ENTRY)&_ZN6S267C63v60Ev,
  (VTBL_ENTRY)&_ZN6S267C63v61Ev,
  (VTBL_ENTRY)&_ZN6S267C63v62Ev,
  (VTBL_ENTRY)&_ZN6S267C63v63Ev,
  (VTBL_ENTRY)&_ZN6S267C63v64Ev,
  (VTBL_ENTRY)&_ZN6S267C63v65Ev,
  (VTBL_ENTRY)&_ZN6S267C63v66Ev,
  (VTBL_ENTRY)&_ZN6S267C63v67Ev,
  (VTBL_ENTRY)&_ZN6S267C63v68Ev,
  (VTBL_ENTRY)&_ZN6S267C63v69Ev,
  (VTBL_ENTRY)&_ZN6S267C53v70Ev,
  (VTBL_ENTRY)&_ZN6S267C53v71Ev,
  (VTBL_ENTRY)&_ZN6S267C53v72Ev,
  (VTBL_ENTRY)&_ZN6S267C53v73Ev,
  (VTBL_ENTRY)&_ZN6S267C53v74Ev,
  (VTBL_ENTRY)&_ZN6S267C53v75Ev,
  (VTBL_ENTRY)&_ZN6S267C53v76Ev,
  (VTBL_ENTRY)&_ZN6S267C53v77Ev,
  (VTBL_ENTRY)&_ZN6S267C53v78Ev,
  (VTBL_ENTRY)&_ZN6S267C53v79Ev,
  (VTBL_ENTRY)&_ZN6S267C53v80Ev,
  (VTBL_ENTRY)&_ZN6S267C53v81Ev,
  (VTBL_ENTRY)&_ZN6S267C53v82Ev,
  (VTBL_ENTRY)&_ZN6S267C53v83Ev,
  (VTBL_ENTRY)&_ZN6S267C53v84Ev,
  (VTBL_ENTRY)&_ZN6S267C53v85Ev,
  (VTBL_ENTRY)&_ZN6S267C53v86Ev,
  (VTBL_ENTRY)&_ZN6S267C53v87Ev,
  (VTBL_ENTRY)&_ZN6S267C53v88Ev,
  (VTBL_ENTRY)&_ZN6S267C53v89Ev,
  (VTBL_ENTRY)&_ZN6S267C53v90Ev,
  (VTBL_ENTRY)&_ZN6S267C53v91Ev,
  (VTBL_ENTRY)&_ZN6S267C43v92Ev,
  (VTBL_ENTRY)&_ZN6S267C43v93Ev,
  (VTBL_ENTRY)&_ZN6S267C43v94Ev,
  (VTBL_ENTRY)&_ZN6S267C43v95Ev,
  (VTBL_ENTRY)&_ZN6S267C43v96Ev,
  (VTBL_ENTRY)&_ZN6S267C43v97Ev,
  (VTBL_ENTRY)&_ZN6S267C43v98Ev,
  (VTBL_ENTRY)&_ZN6S267C43v99Ev,
  (VTBL_ENTRY)&_ZN6S267C44v100Ev,
  (VTBL_ENTRY)&_ZN6S267C44v101Ev,
  (VTBL_ENTRY)&_ZN6S267C44v102Ev,
  (VTBL_ENTRY)&_ZN6S267C44v103Ev,
  (VTBL_ENTRY)&_ZN6S267C44v104Ev,
  (VTBL_ENTRY)&_ZN6S267C44v105Ev,
  (VTBL_ENTRY)&_ZN6S267C44v106Ev,
  (VTBL_ENTRY)&_ZN6S267C44v107Ev,
  (VTBL_ENTRY)&_ZN6S267C44v108Ev,
  (VTBL_ENTRY)&_ZN6S267C44v109Ev,
  (VTBL_ENTRY)&_ZN6S267C44v110Ev,
  (VTBL_ENTRY)&_ZN6S267C44v111Ev,
};
extern VTBL_ENTRY _ZTI6S267C4[];
extern  VTBL_ENTRY _ZTV6S267C4[];
Class_Descriptor cd_S267C4 = {  "S267C4", // class name
  bases_S267C4, 2,
  &(vtc_S267C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI6S267C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S267C4),110, //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  S267C3  : S267C4 {
  void *s267c3f0[2];
  int s267c3f1[4];
  unsigned int s267c3f2:1;
  unsigned int s267c3f3:1;
  unsigned int s267c3f4:1;
  char s267c3f5;
  int s267c3f6;
  unsigned int s267c3f7:1;
  ::S287C23 s267c3f8;
  virtual  ~S267C3(); // _ZN6S267C3D1Ev
  virtual void  v112(); // _ZN6S267C34v112Ev
  virtual void  v113(); // _ZN6S267C34v113Ev
  virtual void  v114(); // _ZN6S267C34v114Ev
  virtual void  v115(); // _ZN6S267C34v115Ev
  virtual void  v116(); // _ZN6S267C34v116Ev
  virtual void  v117(); // _ZN6S267C34v117Ev
  virtual void  v118(); // _ZN6S267C34v118Ev
  virtual void  v119(); // _ZN6S267C34v119Ev
  virtual void  v120(); // _ZN6S267C34v120Ev
  virtual void  v121(); // _ZN6S267C34v121Ev
  virtual void  v122(); // _ZN6S267C34v122Ev
  virtual void  v123(); // _ZN6S267C34v123Ev
  virtual void  v124(); // _ZN6S267C34v124Ev
  virtual void  v125(); // _ZN6S267C34v125Ev
  S267C3(); // tgen
};
//SIG(-1 S267C3) C1{ BC2{ BC3{ BC4{ 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 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 Fi:1 Fi:1 Fi:1 FC11{ BC12{ BC9}} FC13{ BC14{ BC9}} FC15{ BC16{ BC9}} FC17{ BC18{ BC9}} Fi[3]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC19{ BC20{ BC9}}}


 S267C3 ::~S267C3(){ note_dtor("S267C3", this);}
void  S267C3 ::v112(){vfunc_called(this, "_ZN6S267C34v112Ev");}
void  S267C3 ::v113(){vfunc_called(this, "_ZN6S267C34v113Ev");}
void  S267C3 ::v114(){vfunc_called(this, "_ZN6S267C34v114Ev");}
void  S267C3 ::v115(){vfunc_called(this, "_ZN6S267C34v115Ev");}
void  S267C3 ::v116(){vfunc_called(this, "_ZN6S267C34v116Ev");}
void  S267C3 ::v117(){vfunc_called(this, "_ZN6S267C34v117Ev");}
void  S267C3 ::v118(){vfunc_called(this, "_ZN6S267C34v118Ev");}
void  S267C3 ::v119(){vfunc_called(this, "_ZN6S267C34v119Ev");}
void  S267C3 ::v120(){vfunc_called(this, "_ZN6S267C34v120Ev");}
void  S267C3 ::v121(){vfunc_called(this, "_ZN6S267C34v121Ev");}
void  S267C3 ::v122(){vfunc_called(this, "_ZN6S267C34v122Ev");}
void  S267C3 ::v123(){vfunc_called(this, "_ZN6S267C34v123Ev");}
void  S267C3 ::v124(){vfunc_called(this, "_ZN6S267C34v124Ev");}
void  S267C3 ::v125(){vfunc_called(this, "_ZN6S267C34v125Ev");}
S267C3 ::S267C3(){ note_ctor("S267C3", this);} // tgen

static void Test_S267C3()
{
  extern Class_Descriptor cd_S267C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(43,62)];
    init_test(&cd_S267C3, buf);
    S267C3 *dp, &lv = *(dp=new (buf) S267C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,244), "sizeof(S267C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S267C3)");
    check_base_class_offset(lv, (S267C6*)(S267C5*)(S267C4*), 0, "S267C3");
    check_base_class_offset(lv, (S267C5*)(S267C4*), 0, "S267C3");
    check_base_class_offset(lv, (S267C4*), 0, "S267C3");
    check_field_offset(lv, s267c3f0, ABISELECT(272,196), "S267C3.s267c3f0");
    check_field_offset(lv, s267c3f1, ABISELECT(288,204), "S267C3.s267c3f1");
    set_bf_and_test(lv, s267c3f2, ABISELECT(304,220), 0, 1, 1, "S267C3");
    set_bf_and_test(lv, s267c3f3, ABISELECT(304,220), 1, 1, 1, "S267C3");
    set_bf_and_test(lv, s267c3f4, ABISELECT(304,220), 2, 1, 1, "S267C3");
    check_field_offset(lv, s267c3f5, ABISELECT(305,221), "S267C3.s267c3f5");
    check_field_offset(lv, s267c3f6, ABISELECT(308,224), "S267C3.s267c3f6");
    set_bf_and_test(lv, s267c3f7, ABISELECT(312,228), 0, 1, 1, "S267C3");
    check_field_offset(lv, s267c3f8, ABISELECT(320,232), "S267C3.s267c3f8");
    test_class_info(&lv, &cd_S267C3);
    dp->~S267C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS267C3(Test_S267C3, "S267C3", ABISELECT(336,244));

#else // __cplusplus

extern void _ZN6S267C3C1Ev();
extern void _ZN6S267C3D1Ev();
Name_Map name_map_S267C3[] = {
  NSPAIR(_ZN6S267C3C1Ev),
  NSPAIR(_ZN6S267C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S267C6;
extern VTBL_ENTRY _ZTI6S267C6[];
extern  VTBL_ENTRY _ZTV6S267C6[];
extern Class_Descriptor cd_S267C5;
extern VTBL_ENTRY _ZTI6S267C5[];
extern  VTBL_ENTRY _ZTV6S267C5[];
extern Class_Descriptor cd_S267C4;
extern VTBL_ENTRY _ZTI6S267C4[];
extern  VTBL_ENTRY _ZTV6S267C4[];
static Base_Class bases_S267C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S267C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S267C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S267C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S267C3[];
extern void _ZN6S267C3D1Ev();
extern void _ZN6S267C3D0Ev();
extern void _ZN6S267C62v6Ev();
extern void _ZN6S267C62v7Ev();
extern void _ZN6S267C62v8Ev();
extern void _ZN6S267C62v9Ev();
extern void _ZN6S267C63v10Ev();
extern void _ZN6S267C63v11Ev();
extern void _ZN6S267C63v12Ev();
extern void _ZN6S267C63v13Ev();
extern void _ZN6S267C63v14Ev();
extern void _ZN6S267C63v15Ev();
extern void _ZN6S267C63v16Ev();
extern void _ZN6S267C63v17Ev();
extern void _ZN6S267C63v18Ev();
extern void _ZN6S267C63v19Ev();
extern void _ZN6S267C63v20Ev();
extern void _ZN6S267C63v21Ev();
extern void _ZN6S267C63v22Ev();
extern void _ZN6S267C63v23Ev();
extern void _ZN6S267C63v24Ev();
extern void _ZN6S267C63v25Ev();
extern void _ZN6S267C63v26Ev();
extern void _ZN6S267C63v27Ev();
extern void _ZN6S267C63v28Ev();
extern void _ZN6S267C63v29Ev();
extern void _ZN6S267C63v30Ev();
extern void _ZN6S267C63v31Ev();
extern void _ZN6S267C63v32Ev();
extern void _ZN6S267C63v33Ev();
extern void _ZN6S267C63v34Ev();
extern void _ZN6S267C63v35Ev();
extern void _ZN6S267C63v36Ev();
extern void _ZN6S267C63v37Ev();
extern void _ZN6S267C63v38Ev();
extern void _ZN6S267C63v39Ev();
extern void _ZN6S267C63v40Ev();
extern void _ZN6S267C63v41Ev();
extern void _ZN6S267C63v42Ev();
extern void _ZN6S267C63v43Ev();
extern void _ZN6S267C63v44Ev();
extern void _ZN6S267C63v45Ev();
extern void _ZN6S267C63v46Ev();
extern void _ZN6S267C63v47Ev();
extern void _ZN6S267C63v48Ev();
extern void _ZN6S267C63v49Ev();
extern void _ZN6S267C63v50Ev();
extern void _ZN6S267C63v51Ev();
extern void _ZN6S267C63v52Ev();
extern void _ZN6S267C63v53Ev();
extern void _ZN6S267C63v54Ev();
extern void _ZN6S267C63v55Ev();
extern void _ZN6S267C63v56Ev();
extern void _ZN6S267C63v57Ev();
extern void _ZN6S267C63v58Ev();
extern void _ZN6S267C63v59Ev();
extern void _ZN6S267C63v60Ev();
extern void _ZN6S267C63v61Ev();
extern void _ZN6S267C63v62Ev();
extern void _ZN6S267C63v63Ev();
extern void _ZN6S267C63v64Ev();
extern void _ZN6S267C63v65Ev();
extern void _ZN6S267C63v66Ev();
extern void _ZN6S267C63v67Ev();
extern void _ZN6S267C63v68Ev();
extern void _ZN6S267C63v69Ev();
extern void _ZN6S267C53v70Ev();
extern void _ZN6S267C53v71Ev();
extern void _ZN6S267C53v72Ev();
extern void _ZN6S267C53v73Ev();
extern void _ZN6S267C53v74Ev();
extern void _ZN6S267C53v75Ev();
extern void _ZN6S267C53v76Ev();
extern void _ZN6S267C53v77Ev();
extern void _ZN6S267C53v78Ev();
extern void _ZN6S267C53v79Ev();
extern void _ZN6S267C53v80Ev();
extern void _ZN6S267C53v81Ev();
extern void _ZN6S267C53v82Ev();
extern void _ZN6S267C53v83Ev();
extern void _ZN6S267C53v84Ev();
extern void _ZN6S267C53v85Ev();
extern void _ZN6S267C53v86Ev();
extern void _ZN6S267C53v87Ev();
extern void _ZN6S267C53v88Ev();
extern void _ZN6S267C53v89Ev();
extern void _ZN6S267C53v90Ev();
extern void _ZN6S267C53v91Ev();
extern void _ZN6S267C43v92Ev();
extern void _ZN6S267C43v93Ev();
extern void _ZN6S267C43v94Ev();
extern void _ZN6S267C43v95Ev();
extern void _ZN6S267C43v96Ev();
extern void _ZN6S267C43v97Ev();
extern void _ZN6S267C43v98Ev();
extern void _ZN6S267C43v99Ev();
extern void _ZN6S267C44v100Ev();
extern void _ZN6S267C44v101Ev();
extern void _ZN6S267C44v102Ev();
extern void _ZN6S267C44v103Ev();
extern void _ZN6S267C44v104Ev();
extern void _ZN6S267C44v105Ev();
extern void _ZN6S267C44v106Ev();
extern void _ZN6S267C44v107Ev();
extern void _ZN6S267C44v108Ev();
extern void _ZN6S267C44v109Ev();
extern void _ZN6S267C44v110Ev();
extern void _ZN6S267C44v111Ev();
extern void _ZN6S267C34v112Ev();
extern void _ZN6S267C34v113Ev();
extern void _ZN6S267C34v114Ev();
extern void _ZN6S267C34v115Ev();
extern void _ZN6S267C34v116Ev();
extern void _ZN6S267C34v117Ev();
extern void _ZN6S267C34v118Ev();
extern void _ZN6S267C34v119Ev();
extern void _ZN6S267C34v120Ev();
extern void _ZN6S267C34v121Ev();
extern void _ZN6S267C34v122Ev();
extern void _ZN6S267C34v123Ev();
extern void _ZN6S267C34v124Ev();
extern void _ZN6S267C34v125Ev();
static  VTBL_ENTRY vtc_S267C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S267C3[0]),
  (VTBL_ENTRY)&_ZN6S267C3D1Ev,
  (VTBL_ENTRY)&_ZN6S267C3D0Ev,
  (VTBL_ENTRY)&_ZN6S267C62v6Ev,
  (VTBL_ENTRY)&_ZN6S267C62v7Ev,
  (VTBL_ENTRY)&_ZN6S267C62v8Ev,
  (VTBL_ENTRY)&_ZN6S267C62v9Ev,
  (VTBL_ENTRY)&_ZN6S267C63v10Ev,
  (VTBL_ENTRY)&_ZN6S267C63v11Ev,
  (VTBL_ENTRY)&_ZN6S267C63v12Ev,
  (VTBL_ENTRY)&_ZN6S267C63v13Ev,
  (VTBL_ENTRY)&_ZN6S267C63v14Ev,
  (VTBL_ENTRY)&_ZN6S267C63v15Ev,
  (VTBL_ENTRY)&_ZN6S267C63v16Ev,
  (VTBL_ENTRY)&_ZN6S267C63v17Ev,
  (VTBL_ENTRY)&_ZN6S267C63v18Ev,
  (VTBL_ENTRY)&_ZN6S267C63v19Ev,
  (VTBL_ENTRY)&_ZN6S267C63v20Ev,
  (VTBL_ENTRY)&_ZN6S267C63v21Ev,
  (VTBL_ENTRY)&_ZN6S267C63v22Ev,
  (VTBL_ENTRY)&_ZN6S267C63v23Ev,
  (VTBL_ENTRY)&_ZN6S267C63v24Ev,
  (VTBL_ENTRY)&_ZN6S267C63v25Ev,
  (VTBL_ENTRY)&_ZN6S267C63v26Ev,
  (VTBL_ENTRY)&_ZN6S267C63v27Ev,
  (VTBL_ENTRY)&_ZN6S267C63v28Ev,
  (VTBL_ENTRY)&_ZN6S267C63v29Ev,
  (VTBL_ENTRY)&_ZN6S267C63v30Ev,
  (VTBL_ENTRY)&_ZN6S267C63v31Ev,
  (VTBL_ENTRY)&_ZN6S267C63v32Ev,
  (VTBL_ENTRY)&_ZN6S267C63v33Ev,
  (VTBL_ENTRY)&_ZN6S267C63v34Ev,
  (VTBL_ENTRY)&_ZN6S267C63v35Ev,
  (VTBL_ENTRY)&_ZN6S267C63v36Ev,
  (VTBL_ENTRY)&_ZN6S267C63v37Ev,
  (VTBL_ENTRY)&_ZN6S267C63v38Ev,
  (VTBL_ENTRY)&_ZN6S267C63v39Ev,
  (VTBL_ENTRY)&_ZN6S267C63v40Ev,
  (VTBL_ENTRY)&_ZN6S267C63v41Ev,
  (VTBL_ENTRY)&_ZN6S267C63v42Ev,
  (VTBL_ENTRY)&_ZN6S267C63v43Ev,
  (VTBL_ENTRY)&_ZN6S267C63v44Ev,
  (VTBL_ENTRY)&_ZN6S267C63v45Ev,
  (VTBL_ENTRY)&_ZN6S267C63v46Ev,
  (VTBL_ENTRY)&_ZN6S267C63v47Ev,
  (VTBL_ENTRY)&_ZN6S267C63v48Ev,
  (VTBL_ENTRY)&_ZN6S267C63v49Ev,
  (VTBL_ENTRY)&_ZN6S267C63v50Ev,
  (VTBL_ENTRY)&_ZN6S267C63v51Ev,
  (VTBL_ENTRY)&_ZN6S267C63v52Ev,
  (VTBL_ENTRY)&_ZN6S267C63v53Ev,
  (VTBL_ENTRY)&_ZN6S267C63v54Ev,
  (VTBL_ENTRY)&_ZN6S267C63v55Ev,
  (VTBL_ENTRY)&_ZN6S267C63v56Ev,
  (VTBL_ENTRY)&_ZN6S267C63v57Ev,
  (VTBL_ENTRY)&_ZN6S267C63v58Ev,
  (VTBL_ENTRY)&_ZN6S267C63v59Ev,
  (VTBL_ENTRY)&_ZN6S267C63v60Ev,
  (VTBL_ENTRY)&_ZN6S267C63v61Ev,
  (VTBL_ENTRY)&_ZN6S267C63v62Ev,
  (VTBL_ENTRY)&_ZN6S267C63v63Ev,
  (VTBL_ENTRY)&_ZN6S267C63v64Ev,
  (VTBL_ENTRY)&_ZN6S267C63v65Ev,
  (VTBL_ENTRY)&_ZN6S267C63v66Ev,
  (VTBL_ENTRY)&_ZN6S267C63v67Ev,
  (VTBL_ENTRY)&_ZN6S267C63v68Ev,
  (VTBL_ENTRY)&_ZN6S267C63v69Ev,
  (VTBL_ENTRY)&_ZN6S267C53v70Ev,
  (VTBL_ENTRY)&_ZN6S267C53v71Ev,
  (VTBL_ENTRY)&_ZN6S267C53v72Ev,
  (VTBL_ENTRY)&_ZN6S267C53v73Ev,
  (VTBL_ENTRY)&_ZN6S267C53v74Ev,
  (VTBL_ENTRY)&_ZN6S267C53v75Ev,
  (VTBL_ENTRY)&_ZN6S267C53v76Ev,
  (VTBL_ENTRY)&_ZN6S267C53v77Ev,
  (VTBL_ENTRY)&_ZN6S267C53v78Ev,
  (VTBL_ENTRY)&_ZN6S267C53v79Ev,
  (VTBL_ENTRY)&_ZN6S267C53v80Ev,
  (VTBL_ENTRY)&_ZN6S267C53v81Ev,
  (VTBL_ENTRY)&_ZN6S267C53v82Ev,
  (VTBL_ENTRY)&_ZN6S267C53v83Ev,
  (VTBL_ENTRY)&_ZN6S267C53v84Ev,
  (VTBL_ENTRY)&_ZN6S267C53v85Ev,
  (VTBL_ENTRY)&_ZN6S267C53v86Ev,
  (VTBL_ENTRY)&_ZN6S267C53v87Ev,
  (VTBL_ENTRY)&_ZN6S267C53v88Ev,
  (VTBL_ENTRY)&_ZN6S267C53v89Ev,
  (VTBL_ENTRY)&_ZN6S267C53v90Ev,
  (VTBL_ENTRY)&_ZN6S267C53v91Ev,
  (VTBL_ENTRY)&_ZN6S267C43v92Ev,
  (VTBL_ENTRY)&_ZN6S267C43v93Ev,
  (VTBL_ENTRY)&_ZN6S267C43v94Ev,
  (VTBL_ENTRY)&_ZN6S267C43v95Ev,
  (VTBL_ENTRY)&_ZN6S267C43v96Ev,
  (VTBL_ENTRY)&_ZN6S267C43v97Ev,
  (VTBL_ENTRY)&_ZN6S267C43v98Ev,
  (VTBL_ENTRY)&_ZN6S267C43v99Ev,
  (VTBL_ENTRY)&_ZN6S267C44v100Ev,
  (VTBL_ENTRY)&_ZN6S267C44v101Ev,
  (VTBL_ENTRY)&_ZN6S267C44v102Ev,
  (VTBL_ENTRY)&_ZN6S267C44v103Ev,
  (VTBL_ENTRY)&_ZN6S267C44v104Ev,
  (VTBL_ENTRY)&_ZN6S267C44v105Ev,
  (VTBL_ENTRY)&_ZN6S267C44v106Ev,
  (VTBL_ENTRY)&_ZN6S267C44v107Ev,
  (VTBL_ENTRY)&_ZN6S267C44v108Ev,
  (VTBL_ENTRY)&_ZN6S267C44v109Ev,
  (VTBL_ENTRY)&_ZN6S267C44v110Ev,
  (VTBL_ENTRY)&_ZN6S267C44v111Ev,
  (VTBL_ENTRY)&_ZN6S267C34v112Ev,
  (VTBL_ENTRY)&_ZN6S267C34v113Ev,
  (VTBL_ENTRY)&_ZN6S267C34v114Ev,
  (VTBL_ENTRY)&_ZN6S267C34v115Ev,
  (VTBL_ENTRY)&_ZN6S267C34v116Ev,
  (VTBL_ENTRY)&_ZN6S267C34v117Ev,
  (VTBL_ENTRY)&_ZN6S267C34v118Ev,
  (VTBL_ENTRY)&_ZN6S267C34v119Ev,
  (VTBL_ENTRY)&_ZN6S267C34v120Ev,
  (VTBL_ENTRY)&_ZN6S267C34v121Ev,
  (VTBL_ENTRY)&_ZN6S267C34v122Ev,
  (VTBL_ENTRY)&_ZN6S267C34v123Ev,
  (VTBL_ENTRY)&_ZN6S267C34v124Ev,
  (VTBL_ENTRY)&_ZN6S267C34v125Ev,
};
extern VTBL_ENTRY _ZTI6S267C3[];
extern  VTBL_ENTRY _ZTV6S267C3[];
Class_Descriptor cd_S267C3 = {  "S267C3", // class name
  bases_S267C3, 3,
  &(vtc_S267C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(336,244), // object size
  NSPAIRA(_ZTI6S267C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S267C3),124, //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  S267C2  : S267C3 {
  void *s267c2f0[2];
  ::S287C8_nt s267c2f1;
  unsigned int s267c2f2:1;
  unsigned int s267c2f3:1;
  ::S3350C21_nt s267c2f4;
  virtual  ~S267C2(); // _ZN6S267C2D1Ev
  virtual void  v126(); // _ZN6S267C24v126Ev
  virtual void  v127(); // _ZN6S267C24v127Ev
  virtual void  v128(); // _ZN6S267C24v128Ev
  virtual void  v129(); // _ZN6S267C24v129Ev
  virtual void  v130(); // _ZN6S267C24v130Ev
  virtual void  v131(); // _ZN6S267C24v131Ev
  virtual void  v132(); // _ZN6S267C24v132Ev
  virtual void  v133(); // _ZN6S267C24v133Ev
  virtual void  v134(); // _ZN6S267C24v134Ev
  virtual void  v135(); // _ZN6S267C24v135Ev
  virtual void  v136(); // _ZN6S267C24v136Ev
  S267C2(); // tgen
};
//SIG(-1 S267C2) C1{ BC2{ BC3{ BC4{ BC5{ vd v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 Fi[2] Fp Fi[2] FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} FC7 FC11{ m} FC7 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 Fi:1 Fi:1 Fi:1 FC12{ BC13{ BC10}} FC14{ BC15{ BC10}} FC16{ BC17{ BC10}} FC18{ BC19{ BC10}} Fi[3]} vd v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC20{ BC21{ BC10}}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[2] FC7 Fi:1 Fi:1 FC22{ m Fp FC6}}


 S267C2 ::~S267C2(){ note_dtor("S267C2", this);}
void  S267C2 ::v126(){vfunc_called(this, "_ZN6S267C24v126Ev");}
void  S267C2 ::v127(){vfunc_called(this, "_ZN6S267C24v127Ev");}
void  S267C2 ::v128(){vfunc_called(this, "_ZN6S267C24v128Ev");}
void  S267C2 ::v129(){vfunc_called(this, "_ZN6S267C24v129Ev");}
void  S267C2 ::v130(){vfunc_called(this, "_ZN6S267C24v130Ev");}
void  S267C2 ::v131(){vfunc_called(this, "_ZN6S267C24v131Ev");}
void  S267C2 ::v132(){vfunc_called(this, "_ZN6S267C24v132Ev");}
void  S267C2 ::v133(){vfunc_called(this, "_ZN6S267C24v133Ev");}
void  S267C2 ::v134(){vfunc_called(this, "_ZN6S267C24v134Ev");}
void  S267C2 ::v135(){vfunc_called(this, "_ZN6S267C24v135Ev");}
void  S267C2 ::v136(){vfunc_called(this, "_ZN6S267C24v136Ev");}
S267C2 ::S267C2(){ note_ctor("S267C2", this);} // tgen

static void Test_S267C2()
{
  extern Class_Descriptor cd_S267C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(50,71)];
    init_test(&cd_S267C2, buf);
    S267C2 *dp, &lv = *(dp=new (buf) S267C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(392,280), "sizeof(S267C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S267C2)");
    check_base_class_offset(lv, (S267C6*)(S267C5*)(S267C4*)(S267C3*), 0, "S267C2");
    check_base_class_offset(lv, (S267C5*)(S267C4*)(S267C3*), 0, "S267C2");
    check_base_class_offset(lv, (S267C4*)(S267C3*), 0, "S267C2");
    check_base_class_offset(lv, (S267C3*), 0, "S267C2");
    check_field_offset(lv, s267c2f0, ABISELECT(336,244), "S267C2.s267c2f0");
    check_field_offset(lv, s267c2f1, ABISELECT(352,252), "S267C2.s267c2f1");
    set_bf_and_test(lv, s267c2f2, ABISELECT(368,264), 0, 1, 1, "S267C2");
    set_bf_and_test(lv, s267c2f3, ABISELECT(368,264), 1, 1, 1, "S267C2");
    check_field_offset(lv, s267c2f4, ABISELECT(376,268), "S267C2.s267c2f4");
    test_class_info(&lv, &cd_S267C2);
    dp->~S267C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS267C2(Test_S267C2, "S267C2", ABISELECT(392,280));

#else // __cplusplus

extern void _ZN6S267C2C1Ev();
extern void _ZN6S267C2D1Ev();
Name_Map name_map_S267C2[] = {
  NSPAIR(_ZN6S267C2C1Ev),
  NSPAIR(_ZN6S267C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S267C6;
extern VTBL_ENTRY _ZTI6S267C6[];
extern  VTBL_ENTRY _ZTV6S267C6[];
extern Class_Descriptor cd_S267C5;
extern VTBL_ENTRY _ZTI6S267C5[];
extern  VTBL_ENTRY _ZTV6S267C5[];
extern Class_Descriptor cd_S267C4;
extern VTBL_ENTRY _ZTI6S267C4[];
extern  VTBL_ENTRY _ZTV6S267C4[];
extern Class_Descriptor cd_S267C3;
extern VTBL_ENTRY _ZTI6S267C3[];
extern  VTBL_ENTRY _ZTV6S267C3[];
static Base_Class bases_S267C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S267C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S267C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S267C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S267C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S267C2[];
extern void _ZN6S267C2D1Ev();
extern void _ZN6S267C2D0Ev();
extern void _ZN6S267C62v6Ev();
extern void _ZN6S267C62v7Ev();
extern void _ZN6S267C62v8Ev();
extern void _ZN6S267C62v9Ev();
extern void _ZN6S267C63v10Ev();
extern void _ZN6S267C63v11Ev();
extern void _ZN6S267C63v12Ev();
extern void _ZN6S267C63v13Ev();
extern void _ZN6S267C63v14Ev();
extern void _ZN6S267C63v15Ev();
extern void _ZN6S267C63v16Ev();
extern void _ZN6S267C63v17Ev();
extern void _ZN6S267C63v18Ev();
extern void _ZN6S267C63v19Ev();
extern void _ZN6S267C63v20Ev();
extern void _ZN6S267C63v21Ev();
extern void _ZN6S267C63v22Ev();
extern void _ZN6S267C63v23Ev();
extern void _ZN6S267C63v24Ev();
extern void _ZN6S267C63v25Ev();
extern void _ZN6S267C63v26Ev();
extern void _ZN6S267C63v27Ev();
extern void _ZN6S267C63v28Ev();
extern void _ZN6S267C63v29Ev();
extern void _ZN6S267C63v30Ev();
extern void _ZN6S267C63v31Ev();
extern void _ZN6S267C63v32Ev();
extern void _ZN6S267C63v33Ev();
extern void _ZN6S267C63v34Ev();
extern void _ZN6S267C63v35Ev();
extern void _ZN6S267C63v36Ev();
extern void _ZN6S267C63v37Ev();
extern void _ZN6S267C63v38Ev();
extern void _ZN6S267C63v39Ev();
extern void _ZN6S267C63v40Ev();
extern void _ZN6S267C63v41Ev();
extern void _ZN6S267C63v42Ev();
extern void _ZN6S267C63v43Ev();
extern void _ZN6S267C63v44Ev();
extern void _ZN6S267C63v45Ev();
extern void _ZN6S267C63v46Ev();
extern void _ZN6S267C63v47Ev();
extern void _ZN6S267C63v48Ev();
extern void _ZN6S267C63v49Ev();
extern void _ZN6S267C63v50Ev();
extern void _ZN6S267C63v51Ev();
extern void _ZN6S267C63v52Ev();
extern void _ZN6S267C63v53Ev();
extern void _ZN6S267C63v54Ev();
extern void _ZN6S267C63v55Ev();
extern void _ZN6S267C63v56Ev();
extern void _ZN6S267C63v57Ev();
extern void _ZN6S267C63v58Ev();
extern void _ZN6S267C63v59Ev();
extern void _ZN6S267C63v60Ev();
extern void _ZN6S267C63v61Ev();
extern void _ZN6S267C63v62Ev();
extern void _ZN6S267C63v63Ev();
extern void _ZN6S267C63v64Ev();
extern void _ZN6S267C63v65Ev();
extern void _ZN6S267C63v66Ev();
extern void _ZN6S267C63v67Ev();
extern void _ZN6S267C63v68Ev();
extern void _ZN6S267C63v69Ev();
extern void _ZN6S267C53v70Ev();
extern void _ZN6S267C53v71Ev();
extern void _ZN6S267C53v72Ev();
extern void _ZN6S267C53v73Ev();
extern void _ZN6S267C53v74Ev();
extern void _ZN6S267C53v75Ev();
extern void _ZN6S267C53v76Ev();
extern void _ZN6S267C53v77Ev();
extern void _ZN6S267C53v78Ev();
extern void _ZN6S267C53v79Ev();
extern void _ZN6S267C53v80Ev();
extern void _ZN6S267C53v81Ev();
extern void _ZN6S267C53v82Ev();
extern void _ZN6S267C53v83Ev();
extern void _ZN6S267C53v84Ev();
extern void _ZN6S267C53v85Ev();
extern void _ZN6S267C53v86Ev();
extern void _ZN6S267C53v87Ev();
extern void _ZN6S267C53v88Ev();
extern void _ZN6S267C53v89Ev();
extern void _ZN6S267C53v90Ev();
extern void _ZN6S267C53v91Ev();
extern void _ZN6S267C43v92Ev();
extern void _ZN6S267C43v93Ev();
extern void _ZN6S267C43v94Ev();
extern void _ZN6S267C43v95Ev();
extern void _ZN6S267C43v96Ev();
extern void _ZN6S267C43v97Ev();
extern void _ZN6S267C43v98Ev();
extern void _ZN6S267C43v99Ev();
extern void _ZN6S267C44v100Ev();
extern void _ZN6S267C44v101Ev();
extern void _ZN6S267C44v102Ev();
extern void _ZN6S267C44v103Ev();
extern void _ZN6S267C44v104Ev();
extern void _ZN6S267C44v105Ev();
extern void _ZN6S267C44v106Ev();
extern void _ZN6S267C44v107Ev();
extern void _ZN6S267C44v108Ev();
extern void _ZN6S267C44v109Ev();
extern void _ZN6S267C44v110Ev();
extern void _ZN6S267C44v111Ev();
extern void _ZN6S267C34v112Ev();
extern void _ZN6S267C34v113Ev();
extern void _ZN6S267C34v114Ev();
extern void _ZN6S267C34v115Ev();
extern void _ZN6S267C34v116Ev();
extern void _ZN6S267C34v117Ev();
extern void _ZN6S267C34v118Ev();
extern void _ZN6S267C34v119Ev();
extern void _ZN6S267C34v120Ev();
extern void _ZN6S267C34v121Ev();
extern void _ZN6S267C34v122Ev();
extern void _ZN6S267C34v123Ev();
extern void _ZN6S267C34v124Ev();
extern void _ZN6S267C34v125Ev();
extern void _ZN6S267C24v126Ev();
extern void _ZN6S267C24v127Ev();
extern void _ZN6S267C24v128Ev();
extern void _ZN6S267C24v129Ev();
extern void _ZN6S267C24v130Ev();
extern void _ZN6S267C24v131Ev();
extern void _ZN6S267C24v132Ev();
extern void _ZN6S267C24v133Ev();
extern void _ZN6S267C24v134Ev();
extern void _ZN6S267C24v135Ev();
extern void _ZN6S267C24v136Ev();
static  VTBL_ENTRY vtc_S267C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S267C2[0]),
  (VTBL_ENTRY)&_ZN6S267C2D1Ev,
  (VTBL_ENTRY)&_ZN6S267C2D0Ev,
  (VTBL_ENTRY)&_ZN6S267C62v6Ev,
  (VTBL_ENTRY)&_ZN6S267C62v7Ev,
  (VTBL_ENTRY)&_ZN6S267C62v8Ev,
  (VTBL_ENTRY)&_ZN6S267C62v9Ev,
  (VTBL_ENTRY)&_ZN6S267C63v10Ev,
  (VTBL_ENTRY)&_ZN6S267C63v11Ev,
  (VTBL_ENTRY)&_ZN6S267C63v12Ev,
  (VTBL_ENTRY)&_ZN6S267C63v13Ev,
  (VTBL_ENTRY)&_ZN6S267C63v14Ev,
  (VTBL_ENTRY)&_ZN6S267C63v15Ev,
  (VTBL_ENTRY)&_ZN6S267C63v16Ev,
  (VTBL_ENTRY)&_ZN6S267C63v17Ev,
  (VTBL_ENTRY)&_ZN6S267C63v18Ev,
  (VTBL_ENTRY)&_ZN6S267C63v19Ev,
  (VTBL_ENTRY)&_ZN6S267C63v20Ev,
  (VTBL_ENTRY)&_ZN6S267C63v21Ev,
  (VTBL_ENTRY)&_ZN6S267C63v22Ev,
  (VTBL_ENTRY)&_ZN6S267C63v23Ev,
  (VTBL_ENTRY)&_ZN6S267C63v24Ev,
  (VTBL_ENTRY)&_ZN6S267C63v25Ev,
  (VTBL_ENTRY)&_ZN6S267C63v26Ev,
  (VTBL_ENTRY)&_ZN6S267C63v27Ev,
  (VTBL_ENTRY)&_ZN6S267C63v28Ev,
  (VTBL_ENTRY)&_ZN6S267C63v29Ev,
  (VTBL_ENTRY)&_ZN6S267C63v30Ev,
  (VTBL_ENTRY)&_ZN6S267C63v31Ev,
  (VTBL_ENTRY)&_ZN6S267C63v32Ev,
  (VTBL_ENTRY)&_ZN6S267C63v33Ev,
  (VTBL_ENTRY)&_ZN6S267C63v34Ev,
  (VTBL_ENTRY)&_ZN6S267C63v35Ev,
  (VTBL_ENTRY)&_ZN6S267C63v36Ev,
  (VTBL_ENTRY)&_ZN6S267C63v37Ev,
  (VTBL_ENTRY)&_ZN6S267C63v38Ev,
  (VTBL_ENTRY)&_ZN6S267C63v39Ev,
  (VTBL_ENTRY)&_ZN6S267C63v40Ev,
  (VTBL_ENTRY)&_ZN6S267C63v41Ev,
  (VTBL_ENTRY)&_ZN6S267C63v42Ev,
  (VTBL_ENTRY)&_ZN6S267C63v43Ev,
  (VTBL_ENTRY)&_ZN6S267C63v44Ev,
  (VTBL_ENTRY)&_ZN6S267C63v45Ev,
  (VTBL_ENTRY)&_ZN6S267C63v46Ev,
  (VTBL_ENTRY)&_ZN6S267C63v47Ev,
  (VTBL_ENTRY)&_ZN6S267C63v48Ev,
  (VTBL_ENTRY)&_ZN6S267C63v49Ev,
  (VTBL_ENTRY)&_ZN6S267C63v50Ev,
  (VTBL_ENTRY)&_ZN6S267C63v51Ev,
  (VTBL_ENTRY)&_ZN6S267C63v52Ev,
  (VTBL_ENTRY)&_ZN6S267C63v53Ev,
  (VTBL_ENTRY)&_ZN6S267C63v54Ev,
  (VTBL_ENTRY)&_ZN6S267C63v55Ev,
  (VTBL_ENTRY)&_ZN6S267C63v56Ev,
  (VTBL_ENTRY)&_ZN6S267C63v57Ev,
  (VTBL_ENTRY)&_ZN6S267C63v58Ev,
  (VTBL_ENTRY)&_ZN6S267C63v59Ev,
  (VTBL_ENTRY)&_ZN6S267C63v60Ev,
  (VTBL_ENTRY)&_ZN6S267C63v61Ev,
  (VTBL_ENTRY)&_ZN6S267C63v62Ev,
  (VTBL_ENTRY)&_ZN6S267C63v63Ev,
  (VTBL_ENTRY)&_ZN6S267C63v64Ev,
  (VTBL_ENTRY)&_ZN6S267C63v65Ev,
  (VTBL_ENTRY)&_ZN6S267C63v66Ev,
  (VTBL_ENTRY)&_ZN6S267C63v67Ev,
  (VTBL_ENTRY)&_ZN6S267C63v68Ev,
  (VTBL_ENTRY)&_ZN6S267C63v69Ev,
  (VTBL_ENTRY)&_ZN6S267C53v70Ev,
  (VTBL_ENTRY)&_ZN6S267C53v71Ev,
  (VTBL_ENTRY)&_ZN6S267C53v72Ev,
  (VTBL_ENTRY)&_ZN6S267C53v73Ev,
  (VTBL_ENTRY)&_ZN6S267C53v74Ev,
  (VTBL_ENTRY)&_ZN6S267C53v75Ev,
  (VTBL_ENTRY)&_ZN6S267C53v76Ev,
  (VTBL_ENTRY)&_ZN6S267C53v77Ev,
  (VTBL_ENTRY)&_ZN6S267C53v78Ev,
  (VTBL_ENTRY)&_ZN6S267C53v79Ev,
  (VTBL_ENTRY)&_ZN6S267C53v80Ev,
  (VTBL_ENTRY)&_ZN6S267C53v81Ev,
  (VTBL_ENTRY)&_ZN6S267C53v82Ev,
  (VTBL_ENTRY)&_ZN6S267C53v83Ev,
  (VTBL_ENTRY)&_ZN6S267C53v84Ev,
  (VTBL_ENTRY)&_ZN6S267C53v85Ev,
  (VTBL_ENTRY)&_ZN6S267C53v86Ev,
  (VTBL_ENTRY)&_ZN6S267C53v87Ev,
  (VTBL_ENTRY)&_ZN6S267C53v88Ev,
  (VTBL_ENTRY)&_ZN6S267C53v89Ev,
  (VTBL_ENTRY)&_ZN6S267C53v90Ev,
  (VTBL_ENTRY)&_ZN6S267C53v91Ev,
  (VTBL_ENTRY)&_ZN6S267C43v92Ev,
  (VTBL_ENTRY)&_ZN6S267C43v93Ev,
  (VTBL_ENTRY)&_ZN6S267C43v94Ev,
  (VTBL_ENTRY)&_ZN6S267C43v95Ev,
  (VTBL_ENTRY)&_ZN6S267C43v96Ev,
  (VTBL_ENTRY)&_ZN6S267C43v97Ev,
  (VTBL_ENTRY)&_ZN6S267C43v98Ev,
  (VTBL_ENTRY)&_ZN6S267C43v99Ev,
  (VTBL_ENTRY)&_ZN6S267C44v100Ev,
  (VTBL_ENTRY)&_ZN6S267C44v101Ev,
  (VTBL_ENTRY)&_ZN6S267C44v102Ev,
  (VTBL_ENTRY)&_ZN6S267C44v103Ev,
  (VTBL_ENTRY)&_ZN6S267C44v104Ev,
  (VTBL_ENTRY)&_ZN6S267C44v105Ev,
  (VTBL_ENTRY)&_ZN6S267C44v106Ev,
  (VTBL_ENTRY)&_ZN6S267C44v107Ev,
  (VTBL_ENTRY)&_ZN6S267C44v108Ev,
  (VTBL_ENTRY)&_ZN6S267C44v109Ev,
  (VTBL_ENTRY)&_ZN6S267C44v110Ev,
  (VTBL_ENTRY)&_ZN6S267C44v111Ev,
  (VTBL_ENTRY)&_ZN6S267C34v112Ev,
  (VTBL_ENTRY)&_ZN6S267C34v113Ev,
  (VTBL_ENTRY)&_ZN6S267C34v114Ev,
  (VTBL_ENTRY)&_ZN6S267C34v115Ev,
  (VTBL_ENTRY)&_ZN6S267C34v116Ev,
  (VTBL_ENTRY)&_ZN6S267C34v117Ev,
  (VTBL_ENTRY)&_ZN6S267C34v118Ev,
  (VTBL_ENTRY)&_ZN6S267C34v119Ev,
  (VTBL_ENTRY)&_ZN6S267C34v120Ev,
  (VTBL_ENTRY)&_ZN6S267C34v121Ev,
  (VTBL_ENTRY)&_ZN6S267C34v122Ev,
  (VTBL_ENTRY)&_ZN6S267C34v123Ev,
  (VTBL_ENTRY)&_ZN6S267C34v124Ev,
  (VTBL_ENTRY)&_ZN6S267C34v125Ev,
  (VTBL_ENTRY)&_ZN6S267C24v126Ev,
  (VTBL_ENTRY)&_ZN6S267C24v127Ev,
  (VTBL_ENTRY)&_ZN6S267C24v128Ev,
  (VTBL_ENTRY)&_ZN6S267C24v129Ev,
  (VTBL_ENTRY)&_ZN6S267C24v130Ev,
  (VTBL_ENTRY)&_ZN6S267C24v131Ev,
  (VTBL_ENTRY)&_ZN6S267C24v132Ev,
  (VTBL_ENTRY)&_ZN6S267C24v133Ev,
  (VTBL_ENTRY)&_ZN6S267C24v134Ev,
  (VTBL_ENTRY)&_ZN6S267C24v135Ev,
  (VTBL_ENTRY)&_ZN6S267C24v136Ev,
};
extern VTBL_ENTRY _ZTI6S267C2[];
extern  VTBL_ENTRY _ZTV6S267C2[];
Class_Descriptor cd_S267C2 = {  "S267C2", // class name
  bases_S267C2, 4,
  &(vtc_S267C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(392,280), // object size
  NSPAIRA(_ZTI6S267C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S267C2),135, //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  S267C1  : S267C2 {
  ::S113C26_nt s267c1f0;
  virtual  ~S267C1(); // _ZN6S267C1D1Ev
  virtual void  v1(); // _ZN6S267C12v1Ev
  virtual void  v2(); // _ZN6S267C12v2Ev
  virtual void  v3(); // _ZN6S267C12v3Ev
  virtual void  v4(); // _ZN6S267C12v4Ev
  virtual void  v5(); // _ZN6S267C12v5Ev
  S267C1(); // tgen
};
//SIG(1 S267C1) C1{ BC2{ BC3{ BC4{ BC5{ 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 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 FC7{ m Fi[2]} Fp[2]} vd v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 Fi[2] Fp Fi[2] FC8{ BC9{ BC10{ BC11{ m Fp Fi[2]}}}} FC8 FC12{ m} FC8 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 Fi:1 Fi:1 Fi:1 FC13{ BC14{ BC11}} FC15{ BC16{ BC11}} FC17{ BC18{ BC11}} FC19{ BC20{ BC11}} Fi[3]} vd v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC21{ BC22{ BC11}}} vd v126 v127 v128 v129 v130 v131 v132 v133 v134 v135 v136 Fp[2] FC8 Fi:1 Fi:1 FC23{ m Fp FC7}} vd v1 v2 v3 v4 v5 FC24{ BC25{ m FC14 Fp Fi}}}


 S267C1 ::~S267C1(){ note_dtor("S267C1", this);}
void  S267C1 ::v1(){vfunc_called(this, "_ZN6S267C12v1Ev");}
void  S267C1 ::v2(){vfunc_called(this, "_ZN6S267C12v2Ev");}
void  S267C1 ::v3(){vfunc_called(this, "_ZN6S267C12v3Ev");}
void  S267C1 ::v4(){vfunc_called(this, "_ZN6S267C12v4Ev");}
void  S267C1 ::v5(){vfunc_called(this, "_ZN6S267C12v5Ev");}
S267C1 ::S267C1(){ note_ctor("S267C1", this);} // tgen

static void Test_S267C1()
{
  extern Class_Descriptor cd_S267C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(54,76)];
    init_test(&cd_S267C1, buf);
    S267C1 *dp, &lv = *(dp=new (buf) S267C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(424,300), "sizeof(S267C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S267C1)");
    check_base_class_offset(lv, (S267C6*)(S267C5*)(S267C4*)(S267C3*)(S267C2*), 0, "S267C1");
    check_base_class_offset(lv, (S267C5*)(S267C4*)(S267C3*)(S267C2*), 0, "S267C1");
    check_base_class_offset(lv, (S267C4*)(S267C3*)(S267C2*), 0, "S267C1");
    check_base_class_offset(lv, (S267C3*)(S267C2*), 0, "S267C1");
    check_base_class_offset(lv, (S267C2*), 0, "S267C1");
    check_field_offset(lv, s267c1f0, ABISELECT(392,280), "S267C1.s267c1f0");
    test_class_info(&lv, &cd_S267C1);
    dp->~S267C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS267C1(Test_S267C1, "S267C1", ABISELECT(424,300));

#else // __cplusplus

extern void _ZN6S267C1C1Ev();
extern void _ZN6S267C1D1Ev();
Name_Map name_map_S267C1[] = {
  NSPAIR(_ZN6S267C1C1Ev),
  NSPAIR(_ZN6S267C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S267C6;
extern VTBL_ENTRY _ZTI6S267C6[];
extern  VTBL_ENTRY _ZTV6S267C6[];
extern Class_Descriptor cd_S267C5;
extern VTBL_ENTRY _ZTI6S267C5[];
extern  VTBL_ENTRY _ZTV6S267C5[];
extern Class_Descriptor cd_S267C4;
extern VTBL_ENTRY _ZTI6S267C4[];
extern  VTBL_ENTRY _ZTV6S267C4[];
extern Class_Descriptor cd_S267C3;
extern VTBL_ENTRY _ZTI6S267C3[];
extern  VTBL_ENTRY _ZTV6S267C3[];
extern Class_Descriptor cd_S267C2;
extern VTBL_ENTRY _ZTI6S267C2[];
extern  VTBL_ENTRY _ZTV6S267C2[];
static Base_Class bases_S267C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S267C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S267C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S267C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S267C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S267C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S267C1[];
extern void _ZN6S267C1D1Ev();
extern void _ZN6S267C1D0Ev();
extern void _ZN6S267C62v6Ev();
extern void _ZN6S267C62v7Ev();
extern void _ZN6S267C62v8Ev();
extern void _ZN6S267C62v9Ev();
extern void _ZN6S267C63v10Ev();
extern void _ZN6S267C63v11Ev();
extern void _ZN6S267C63v12Ev();
extern void _ZN6S267C63v13Ev();
extern void _ZN6S267C63v14Ev();
extern void _ZN6S267C63v15Ev();
extern void _ZN6S267C63v16Ev();
extern void _ZN6S267C63v17Ev();
extern void _ZN6S267C63v18Ev();
extern void _ZN6S267C63v19Ev();
extern void _ZN6S267C63v20Ev();
extern void _ZN6S267C63v21Ev();
extern void _ZN6S267C63v22Ev();
extern void _ZN6S267C63v23Ev();
extern void _ZN6S267C63v24Ev();
extern void _ZN6S267C63v25Ev();
extern void _ZN6S267C63v26Ev();
extern void _ZN6S267C63v27Ev();
extern void _ZN6S267C63v28Ev();
extern void _ZN6S267C63v29Ev();
extern void _ZN6S267C63v30Ev();
extern void _ZN6S267C63v31Ev();
extern void _ZN6S267C63v32Ev();
extern void _ZN6S267C63v33Ev();
extern void _ZN6S267C63v34Ev();
extern void _ZN6S267C63v35Ev();
extern void _ZN6S267C63v36Ev();
extern void _ZN6S267C63v37Ev();
extern void _ZN6S267C63v38Ev();
extern void _ZN6S267C63v39Ev();
extern void _ZN6S267C63v40Ev();
extern void _ZN6S267C63v41Ev();
extern void _ZN6S267C63v42Ev();
extern void _ZN6S267C63v43Ev();
extern void _ZN6S267C63v44Ev();
extern void _ZN6S267C63v45Ev();
extern void _ZN6S267C63v46Ev();
extern void _ZN6S267C63v47Ev();
extern void _ZN6S267C63v48Ev();
extern void _ZN6S267C63v49Ev();
extern void _ZN6S267C63v50Ev();
extern void _ZN6S267C63v51Ev();
extern void _ZN6S267C63v52Ev();
extern void _ZN6S267C63v53Ev();
extern void _ZN6S267C63v54Ev();
extern void _ZN6S267C63v55Ev();
extern void _ZN6S267C63v56Ev();
extern void _ZN6S267C63v57Ev();
extern void _ZN6S267C63v58Ev();
extern void _ZN6S267C63v59Ev();
extern void _ZN6S267C63v60Ev();
extern void _ZN6S267C63v61Ev();
extern void _ZN6S267C63v62Ev();
extern void _ZN6S267C63v63Ev();
extern void _ZN6S267C63v64Ev();
extern void _ZN6S267C63v65Ev();
extern void _ZN6S267C63v66Ev();
extern void _ZN6S267C63v67Ev();
extern void _ZN6S267C63v68Ev();
extern void _ZN6S267C63v69Ev();
extern void _ZN6S267C53v70Ev();
extern void _ZN6S267C53v71Ev();
extern void _ZN6S267C53v72Ev();
extern void _ZN6S267C53v73Ev();
extern void _ZN6S267C53v74Ev();
extern void _ZN6S267C53v75Ev();
extern void _ZN6S267C53v76Ev();
extern void _ZN6S267C53v77Ev();
extern void _ZN6S267C53v78Ev();
extern void _ZN6S267C53v79Ev();
extern void _ZN6S267C53v80Ev();
extern void _ZN6S267C53v81Ev();
extern void _ZN6S267C53v82Ev();
extern void _ZN6S267C53v83Ev();
extern void _ZN6S267C53v84Ev();
extern void _ZN6S267C53v85Ev();
extern void _ZN6S267C53v86Ev();
extern void _ZN6S267C53v87Ev();
extern void _ZN6S267C53v88Ev();
extern void _ZN6S267C53v89Ev();
extern void _ZN6S267C53v90Ev();
extern void _ZN6S267C53v91Ev();
extern void _ZN6S267C43v92Ev();
extern void _ZN6S267C43v93Ev();
extern void _ZN6S267C43v94Ev();
extern void _ZN6S267C43v95Ev();
extern void _ZN6S267C43v96Ev();
extern void _ZN6S267C43v97Ev();
extern void _ZN6S267C43v98Ev();
extern void _ZN6S267C43v99Ev();
extern void _ZN6S267C44v100Ev();
extern void _ZN6S267C44v101Ev();
extern void _ZN6S267C44v102Ev();
extern void _ZN6S267C44v103Ev();
extern void _ZN6S267C44v104Ev();
extern void _ZN6S267C44v105Ev();
extern void _ZN6S267C44v106Ev();
extern void _ZN6S267C44v107Ev();
extern void _ZN6S267C44v108Ev();
extern void _ZN6S267C44v109Ev();
extern void _ZN6S267C44v110Ev();
extern void _ZN6S267C44v111Ev();
extern void _ZN6S267C34v112Ev();
extern void _ZN6S267C34v113Ev();
extern void _ZN6S267C34v114Ev();
extern void _ZN6S267C34v115Ev();
extern void _ZN6S267C34v116Ev();
extern void _ZN6S267C34v117Ev();
extern void _ZN6S267C34v118Ev();
extern void _ZN6S267C34v119Ev();
extern void _ZN6S267C34v120Ev();
extern void _ZN6S267C34v121Ev();
extern void _ZN6S267C34v122Ev();
extern void _ZN6S267C34v123Ev();
extern void _ZN6S267C34v124Ev();
extern void _ZN6S267C34v125Ev();
extern void _ZN6S267C24v126Ev();
extern void _ZN6S267C24v127Ev();
extern void _ZN6S267C24v128Ev();
extern void _ZN6S267C24v129Ev();
extern void _ZN6S267C24v130Ev();
extern void _ZN6S267C24v131Ev();
extern void _ZN6S267C24v132Ev();
extern void _ZN6S267C24v133Ev();
extern void _ZN6S267C24v134Ev();
extern void _ZN6S267C24v135Ev();
extern void _ZN6S267C24v136Ev();
extern void _ZN6S267C12v1Ev();
extern void _ZN6S267C12v2Ev();
extern void _ZN6S267C12v3Ev();
extern void _ZN6S267C12v4Ev();
extern void _ZN6S267C12v5Ev();
static  VTBL_ENTRY vtc_S267C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S267C1[0]),
  (VTBL_ENTRY)&_ZN6S267C1D1Ev,
  (VTBL_ENTRY)&_ZN6S267C1D0Ev,
  (VTBL_ENTRY)&_ZN6S267C62v6Ev,
  (VTBL_ENTRY)&_ZN6S267C62v7Ev,
  (VTBL_ENTRY)&_ZN6S267C62v8Ev,
  (VTBL_ENTRY)&_ZN6S267C62v9Ev,
  (VTBL_ENTRY)&_ZN6S267C63v10Ev,
  (VTBL_ENTRY)&_ZN6S267C63v11Ev,
  (VTBL_ENTRY)&_ZN6S267C63v12Ev,
  (VTBL_ENTRY)&_ZN6S267C63v13Ev,
  (VTBL_ENTRY)&_ZN6S267C63v14Ev,
  (VTBL_ENTRY)&_ZN6S267C63v15Ev,
  (VTBL_ENTRY)&_ZN6S267C63v16Ev,
  (VTBL_ENTRY)&_ZN6S267C63v17Ev,
  (VTBL_ENTRY)&_ZN6S267C63v18Ev,
  (VTBL_ENTRY)&_ZN6S267C63v19Ev,
  (VTBL_ENTRY)&_ZN6S267C63v20Ev,
  (VTBL_ENTRY)&_ZN6S267C63v21Ev,
  (VTBL_ENTRY)&_ZN6S267C63v22Ev,
  (VTBL_ENTRY)&_ZN6S267C63v23Ev,
  (VTBL_ENTRY)&_ZN6S267C63v24Ev,
  (VTBL_ENTRY)&_ZN6S267C63v25Ev,
  (VTBL_ENTRY)&_ZN6S267C63v26Ev,
  (VTBL_ENTRY)&_ZN6S267C63v27Ev,
  (VTBL_ENTRY)&_ZN6S267C63v28Ev,
  (VTBL_ENTRY)&_ZN6S267C63v29Ev,
  (VTBL_ENTRY)&_ZN6S267C63v30Ev,
  (VTBL_ENTRY)&_ZN6S267C63v31Ev,
  (VTBL_ENTRY)&_ZN6S267C63v32Ev,
  (VTBL_ENTRY)&_ZN6S267C63v33Ev,
  (VTBL_ENTRY)&_ZN6S267C63v34Ev,
  (VTBL_ENTRY)&_ZN6S267C63v35Ev,
  (VTBL_ENTRY)&_ZN6S267C63v36Ev,
  (VTBL_ENTRY)&_ZN6S267C63v37Ev,
  (VTBL_ENTRY)&_ZN6S267C63v38Ev,
  (VTBL_ENTRY)&_ZN6S267C63v39Ev,
  (VTBL_ENTRY)&_ZN6S267C63v40Ev,
  (VTBL_ENTRY)&_ZN6S267C63v41Ev,
  (VTBL_ENTRY)&_ZN6S267C63v42Ev,
  (VTBL_ENTRY)&_ZN6S267C63v43Ev,
  (VTBL_ENTRY)&_ZN6S267C63v44Ev,
  (VTBL_ENTRY)&_ZN6S267C63v45Ev,
  (VTBL_ENTRY)&_ZN6S267C63v46Ev,
  (VTBL_ENTRY)&_ZN6S267C63v47Ev,
  (VTBL_ENTRY)&_ZN6S267C63v48Ev,
  (VTBL_ENTRY)&_ZN6S267C63v49Ev,
  (VTBL_ENTRY)&_ZN6S267C63v50Ev,
  (VTBL_ENTRY)&_ZN6S267C63v51Ev,
  (VTBL_ENTRY)&_ZN6S267C63v52Ev,
  (VTBL_ENTRY)&_ZN6S267C63v53Ev,
  (VTBL_ENTRY)&_ZN6S267C63v54Ev,
  (VTBL_ENTRY)&_ZN6S267C63v55Ev,
  (VTBL_ENTRY)&_ZN6S267C63v56Ev,
  (VTBL_ENTRY)&_ZN6S267C63v57Ev,
  (VTBL_ENTRY)&_ZN6S267C63v58Ev,
  (VTBL_ENTRY)&_ZN6S267C63v59Ev,
  (VTBL_ENTRY)&_ZN6S267C63v60Ev,
  (VTBL_ENTRY)&_ZN6S267C63v61Ev,
  (VTBL_ENTRY)&_ZN6S267C63v62Ev,
  (VTBL_ENTRY)&_ZN6S267C63v63Ev,
  (VTBL_ENTRY)&_ZN6S267C63v64Ev,
  (VTBL_ENTRY)&_ZN6S267C63v65Ev,
  (VTBL_ENTRY)&_ZN6S267C63v66Ev,
  (VTBL_ENTRY)&_ZN6S267C63v67Ev,
  (VTBL_ENTRY)&_ZN6S267C63v68Ev,
  (VTBL_ENTRY)&_ZN6S267C63v69Ev,
  (VTBL_ENTRY)&_ZN6S267C53v70Ev,
  (VTBL_ENTRY)&_ZN6S267C53v71Ev,
  (VTBL_ENTRY)&_ZN6S267C53v72Ev,
  (VTBL_ENTRY)&_ZN6S267C53v73Ev,
  (VTBL_ENTRY)&_ZN6S267C53v74Ev,
  (VTBL_ENTRY)&_ZN6S267C53v75Ev,
  (VTBL_ENTRY)&_ZN6S267C53v76Ev,
  (VTBL_ENTRY)&_ZN6S267C53v77Ev,
  (VTBL_ENTRY)&_ZN6S267C53v78Ev,
  (VTBL_ENTRY)&_ZN6S267C53v79Ev,
  (VTBL_ENTRY)&_ZN6S267C53v80Ev,
  (VTBL_ENTRY)&_ZN6S267C53v81Ev,
  (VTBL_ENTRY)&_ZN6S267C53v82Ev,
  (VTBL_ENTRY)&_ZN6S267C53v83Ev,
  (VTBL_ENTRY)&_ZN6S267C53v84Ev,
  (VTBL_ENTRY)&_ZN6S267C53v85Ev,
  (VTBL_ENTRY)&_ZN6S267C53v86Ev,
  (VTBL_ENTRY)&_ZN6S267C53v87Ev,
  (VTBL_ENTRY)&_ZN6S267C53v88Ev,
  (VTBL_ENTRY)&_ZN6S267C53v89Ev,
  (VTBL_ENTRY)&_ZN6S267C53v90Ev,
  (VTBL_ENTRY)&_ZN6S267C53v91Ev,
  (VTBL_ENTRY)&_ZN6S267C43v92Ev,
  (VTBL_ENTRY)&_ZN6S267C43v93Ev,
  (VTBL_ENTRY)&_ZN6S267C43v94Ev,
  (VTBL_ENTRY)&_ZN6S267C43v95Ev,
  (VTBL_ENTRY)&_ZN6S267C43v96Ev,
  (VTBL_ENTRY)&_ZN6S267C43v97Ev,
  (VTBL_ENTRY)&_ZN6S267C43v98Ev,
  (VTBL_ENTRY)&_ZN6S267C43v99Ev,
  (VTBL_ENTRY)&_ZN6S267C44v100Ev,
  (VTBL_ENTRY)&_ZN6S267C44v101Ev,
  (VTBL_ENTRY)&_ZN6S267C44v102Ev,
  (VTBL_ENTRY)&_ZN6S267C44v103Ev,
  (VTBL_ENTRY)&_ZN6S267C44v104Ev,
  (VTBL_ENTRY)&_ZN6S267C44v105Ev,
  (VTBL_ENTRY)&_ZN6S267C44v106Ev,
  (VTBL_ENTRY)&_ZN6S267C44v107Ev,
  (VTBL_ENTRY)&_ZN6S267C44v108Ev,
  (VTBL_ENTRY)&_ZN6S267C44v109Ev,
  (VTBL_ENTRY)&_ZN6S267C44v110Ev,
  (VTBL_ENTRY)&_ZN6S267C44v111Ev,
  (VTBL_ENTRY)&_ZN6S267C34v112Ev,
  (VTBL_ENTRY)&_ZN6S267C34v113Ev,
  (VTBL_ENTRY)&_ZN6S267C34v114Ev,
  (VTBL_ENTRY)&_ZN6S267C34v115Ev,
  (VTBL_ENTRY)&_ZN6S267C34v116Ev,
  (VTBL_ENTRY)&_ZN6S267C34v117Ev,
  (VTBL_ENTRY)&_ZN6S267C34v118Ev,
  (VTBL_ENTRY)&_ZN6S267C34v119Ev,
  (VTBL_ENTRY)&_ZN6S267C34v120Ev,
  (VTBL_ENTRY)&_ZN6S267C34v121Ev,
  (VTBL_ENTRY)&_ZN6S267C34v122Ev,
  (VTBL_ENTRY)&_ZN6S267C34v123Ev,
  (VTBL_ENTRY)&_ZN6S267C34v124Ev,
  (VTBL_ENTRY)&_ZN6S267C34v125Ev,
  (VTBL_ENTRY)&_ZN6S267C24v126Ev,
  (VTBL_ENTRY)&_ZN6S267C24v127Ev,
  (VTBL_ENTRY)&_ZN6S267C24v128Ev,
  (VTBL_ENTRY)&_ZN6S267C24v129Ev,
  (VTBL_ENTRY)&_ZN6S267C24v130Ev,
  (VTBL_ENTRY)&_ZN6S267C24v131Ev,
  (VTBL_ENTRY)&_ZN6S267C24v132Ev,
  (VTBL_ENTRY)&_ZN6S267C24v133Ev,
  (VTBL_ENTRY)&_ZN6S267C24v134Ev,
  (VTBL_ENTRY)&_ZN6S267C24v135Ev,
  (VTBL_ENTRY)&_ZN6S267C24v136Ev,
  (VTBL_ENTRY)&_ZN6S267C12v1Ev,
  (VTBL_ENTRY)&_ZN6S267C12v2Ev,
  (VTBL_ENTRY)&_ZN6S267C12v3Ev,
  (VTBL_ENTRY)&_ZN6S267C12v4Ev,
  (VTBL_ENTRY)&_ZN6S267C12v5Ev,
};
extern VTBL_ENTRY _ZTI6S267C1[];
extern  VTBL_ENTRY _ZTV6S267C1[];
Class_Descriptor cd_S267C1 = {  "S267C1", // class name
  bases_S267C1, 5,
  &(vtc_S267C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(424,300), // object size
  NSPAIRA(_ZTI6S267C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S267C1),140, //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  S56C7  {
  int s56c7f0;
  __tsi64 s56c7f1;
  void *s56c7f2[4];
  int s56c7f3[2];
  void *s56c7f4;
  ::S3350C4_nt s56c7f5;
  void *s56c7f6[2];
  virtual  ~S56C7(); // _ZN5S56C7D1Ev
  virtual void  v3(); // _ZN5S56C72v3Ev
  virtual void  v4(); // _ZN5S56C72v4Ev
  virtual void  v5(); // _ZN5S56C72v5Ev
  virtual void  v6(); // _ZN5S56C72v6Ev
  virtual void  v7(); // _ZN5S56C72v7Ev
  virtual void  v8(); // _ZN5S56C72v8Ev
  virtual void  v9(); // _ZN5S56C72v9Ev
  virtual void  v10(); // _ZN5S56C73v10Ev
  virtual void  v11(); // _ZN5S56C73v11Ev
  virtual void  v12(); // _ZN5S56C73v12Ev
  virtual void  v13(); // _ZN5S56C73v13Ev
  virtual void  v14(); // _ZN5S56C73v14Ev
  virtual void  v15(); // _ZN5S56C73v15Ev
  virtual void  v16(); // _ZN5S56C73v16Ev
  virtual void  v17(); // _ZN5S56C73v17Ev
  virtual void  v18(); // _ZN5S56C73v18Ev
  virtual void  v19(); // _ZN5S56C73v19Ev
  virtual void  v20(); // _ZN5S56C73v20Ev
  virtual void  v21(); // _ZN5S56C73v21Ev
  virtual void  v22(); // _ZN5S56C73v22Ev
  virtual void  v23(); // _ZN5S56C73v23Ev
  virtual void  v24(); // _ZN5S56C73v24Ev
  virtual void  v25(); // _ZN5S56C73v25Ev
  virtual void  v26(); // _ZN5S56C73v26Ev
  virtual void  v27(); // _ZN5S56C73v27Ev
  virtual void  v28(); // _ZN5S56C73v28Ev
  virtual void  v29(); // _ZN5S56C73v29Ev
  virtual void  v30(); // _ZN5S56C73v30Ev
  virtual void  v31(); // _ZN5S56C73v31Ev
  virtual void  v32(); // _ZN5S56C73v32Ev
  virtual void  v33(); // _ZN5S56C73v33Ev
  virtual void  v34(); // _ZN5S56C73v34Ev
  virtual void  v35(); // _ZN5S56C73v35Ev
  virtual void  v36(); // _ZN5S56C73v36Ev
  virtual void  v37(); // _ZN5S56C73v37Ev
  virtual void  v38(); // _ZN5S56C73v38Ev
  virtual void  v39(); // _ZN5S56C73v39Ev
  virtual void  v40(); // _ZN5S56C73v40Ev
  virtual void  v41(); // _ZN5S56C73v41Ev
  virtual void  v42(); // _ZN5S56C73v42Ev
  virtual void  v43(); // _ZN5S56C73v43Ev
  virtual void  v44(); // _ZN5S56C73v44Ev
  virtual void  v45(); // _ZN5S56C73v45Ev
  virtual void  v46(); // _ZN5S56C73v46Ev
  virtual void  v47(); // _ZN5S56C73v47Ev
  virtual void  v48(); // _ZN5S56C73v48Ev
  virtual void  v49(); // _ZN5S56C73v49Ev
  virtual void  v50(); // _ZN5S56C73v50Ev
  virtual void  v51(); // _ZN5S56C73v51Ev
  virtual void  v52(); // _ZN5S56C73v52Ev
  virtual void  v53(); // _ZN5S56C73v53Ev
  virtual void  v54(); // _ZN5S56C73v54Ev
  virtual void  v55(); // _ZN5S56C73v55Ev
  virtual void  v56(); // _ZN5S56C73v56Ev
  virtual void  v57(); // _ZN5S56C73v57Ev
  virtual void  v58(); // _ZN5S56C73v58Ev
  virtual void  v59(); // _ZN5S56C73v59Ev
  virtual void  v60(); // _ZN5S56C73v60Ev
  virtual void  v61(); // _ZN5S56C73v61Ev
  virtual void  v62(); // _ZN5S56C73v62Ev
  virtual void  v63(); // _ZN5S56C73v63Ev
  virtual void  v64(); // _ZN5S56C73v64Ev
  virtual void  v65(); // _ZN5S56C73v65Ev
  virtual void  v66(); // _ZN5S56C73v66Ev
  S56C7(); // tgen
};
//SIG(-1 S56C7) 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]}


 S56C7 ::~S56C7(){ note_dtor("S56C7", this);}
void  S56C7 ::v3(){vfunc_called(this, "_ZN5S56C72v3Ev");}
void  S56C7 ::v4(){vfunc_called(this, "_ZN5S56C72v4Ev");}
void  S56C7 ::v5(){vfunc_called(this, "_ZN5S56C72v5Ev");}
void  S56C7 ::v6(){vfunc_called(this, "_ZN5S56C72v6Ev");}
void  S56C7 ::v7(){vfunc_called(this, "_ZN5S56C72v7Ev");}
void  S56C7 ::v8(){vfunc_called(this, "_ZN5S56C72v8Ev");}
void  S56C7 ::v9(){vfunc_called(this, "_ZN5S56C72v9Ev");}
void  S56C7 ::v10(){vfunc_called(this, "_ZN5S56C73v10Ev");}
void  S56C7 ::v11(){vfunc_called(this, "_ZN5S56C73v11Ev");}
void  S56C7 ::v12(){vfunc_called(this, "_ZN5S56C73v12Ev");}
void  S56C7 ::v13(){vfunc_called(this, "_ZN5S56C73v13Ev");}
void  S56C7 ::v14(){vfunc_called(this, "_ZN5S56C73v14Ev");}
void  S56C7 ::v15(){vfunc_called(this, "_ZN5S56C73v15Ev");}
void  S56C7 ::v16(){vfunc_called(this, "_ZN5S56C73v16Ev");}
void  S56C7 ::v17(){vfunc_called(this, "_ZN5S56C73v17Ev");}
void  S56C7 ::v18(){vfunc_called(this, "_ZN5S56C73v18Ev");}
void  S56C7 ::v19(){vfunc_called(this, "_ZN5S56C73v19Ev");}
void  S56C7 ::v20(){vfunc_called(this, "_ZN5S56C73v20Ev");}
void  S56C7 ::v21(){vfunc_called(this, "_ZN5S56C73v21Ev");}
void  S56C7 ::v22(){vfunc_called(this, "_ZN5S56C73v22Ev");}
void  S56C7 ::v23(){vfunc_called(this, "_ZN5S56C73v23Ev");}
void  S56C7 ::v24(){vfunc_called(this, "_ZN5S56C73v24Ev");}
void  S56C7 ::v25(){vfunc_called(this, "_ZN5S56C73v25Ev");}
void  S56C7 ::v26(){vfunc_called(this, "_ZN5S56C73v26Ev");}
void  S56C7 ::v27(){vfunc_called(this, "_ZN5S56C73v27Ev");}
void  S56C7 ::v28(){vfunc_called(this, "_ZN5S56C73v28Ev");}
void  S56C7 ::v29(){vfunc_called(this, "_ZN5S56C73v29Ev");}
void  S56C7 ::v30(){vfunc_called(this, "_ZN5S56C73v30Ev");}
void  S56C7 ::v31(){vfunc_called(this, "_ZN5S56C73v31Ev");}
void  S56C7 ::v32(){vfunc_called(this, "_ZN5S56C73v32Ev");}
void  S56C7 ::v33(){vfunc_called(this, "_ZN5S56C73v33Ev");}
void  S56C7 ::v34(){vfunc_called(this, "_ZN5S56C73v34Ev");}
void  S56C7 ::v35(){vfunc_called(this, "_ZN5S56C73v35Ev");}
void  S56C7 ::v36(){vfunc_called(this, "_ZN5S56C73v36Ev");}
void  S56C7 ::v37(){vfunc_called(this, "_ZN5S56C73v37Ev");}
void  S56C7 ::v38(){vfunc_called(this, "_ZN5S56C73v38Ev");}
void  S56C7 ::v39(){vfunc_called(this, "_ZN5S56C73v39Ev");}
void  S56C7 ::v40(){vfunc_called(this, "_ZN5S56C73v40Ev");}
void  S56C7 ::v41(){vfunc_called(this, "_ZN5S56C73v41Ev");}
void  S56C7 ::v42(){vfunc_called(this, "_ZN5S56C73v42Ev");}
void  S56C7 ::v43(){vfunc_called(this, "_ZN5S56C73v43Ev");}
void  S56C7 ::v44(){vfunc_called(this, "_ZN5S56C73v44Ev");}
void  S56C7 ::v45(){vfunc_called(this, "_ZN5S56C73v45Ev");}
void  S56C7 ::v46(){vfunc_called(this, "_ZN5S56C73v46Ev");}
void  S56C7 ::v47(){vfunc_called(this, "_ZN5S56C73v47Ev");}
void  S56C7 ::v48(){vfunc_called(this, "_ZN5S56C73v48Ev");}
void  S56C7 ::v49(){vfunc_called(this, "_ZN5S56C73v49Ev");}
void  S56C7 ::v50(){vfunc_called(this, "_ZN5S56C73v50Ev");}
void  S56C7 ::v51(){vfunc_called(this, "_ZN5S56C73v51Ev");}
void  S56C7 ::v52(){vfunc_called(this, "_ZN5S56C73v52Ev");}
void  S56C7 ::v53(){vfunc_called(this, "_ZN5S56C73v53Ev");}
void  S56C7 ::v54(){vfunc_called(this, "_ZN5S56C73v54Ev");}
void  S56C7 ::v55(){vfunc_called(this, "_ZN5S56C73v55Ev");}
void  S56C7 ::v56(){vfunc_called(this, "_ZN5S56C73v56Ev");}
void  S56C7 ::v57(){vfunc_called(this, "_ZN5S56C73v57Ev");}
void  S56C7 ::v58(){vfunc_called(this, "_ZN5S56C73v58Ev");}
void  S56C7 ::v59(){vfunc_called(this, "_ZN5S56C73v59Ev");}
void  S56C7 ::v60(){vfunc_called(this, "_ZN5S56C73v60Ev");}
void  S56C7 ::v61(){vfunc_called(this, "_ZN5S56C73v61Ev");}
void  S56C7 ::v62(){vfunc_called(this, "_ZN5S56C73v62Ev");}
void  S56C7 ::v63(){vfunc_called(this, "_ZN5S56C73v63Ev");}
void  S56C7 ::v64(){vfunc_called(this, "_ZN5S56C73v64Ev");}
void  S56C7 ::v65(){vfunc_called(this, "_ZN5S56C73v65Ev");}
void  S56C7 ::v66(){vfunc_called(this, "_ZN5S56C73v66Ev");}
S56C7 ::S56C7(){ note_ctor("S56C7", this);} // tgen

static void Test_S56C7()
{
  extern Class_Descriptor cd_S56C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S56C7, buf);
    S56C7 *dp, &lv = *(dp=new (buf) S56C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S56C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S56C7)");
    check_field_offset(lv, s56c7f0, ABISELECT(8,4), "S56C7.s56c7f0");
    check_field_offset(lv, s56c7f1, ABISELECT(16,8), "S56C7.s56c7f1");
    check_field_offset(lv, s56c7f2, ABISELECT(24,16), "S56C7.s56c7f2");
    check_field_offset(lv, s56c7f3, ABISELECT(56,32), "S56C7.s56c7f3");
    check_field_offset(lv, s56c7f4, ABISELECT(64,40), "S56C7.s56c7f4");
    check_field_offset(lv, s56c7f5, ABISELECT(72,44), "S56C7.s56c7f5");
    check_field_offset(lv, s56c7f6, ABISELECT(80,52), "S56C7.s56c7f6");
    test_class_info(&lv, &cd_S56C7);
    dp->~S56C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS56C7(Test_S56C7, "S56C7", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN5S56C7C1Ev();
extern void _ZN5S56C7D1Ev();
Name_Map name_map_S56C7[] = {
  NSPAIR(_ZN5S56C7C1Ev),
  NSPAIR(_ZN5S56C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI5S56C7[];
extern void _ZN5S56C7D1Ev();
extern void _ZN5S56C7D0Ev();
extern void _ZN5S56C72v3Ev();
extern void _ZN5S56C72v4Ev();
extern void _ZN5S56C72v5Ev();
extern void _ZN5S56C72v6Ev();
extern void _ZN5S56C72v7Ev();
extern void _ZN5S56C72v8Ev();
extern void _ZN5S56C72v9Ev();
extern void _ZN5S56C73v10Ev();
extern void _ZN5S56C73v11Ev();
extern void _ZN5S56C73v12Ev();
extern void _ZN5S56C73v13Ev();
extern void _ZN5S56C73v14Ev();
extern void _ZN5S56C73v15Ev();
extern void _ZN5S56C73v16Ev();
extern void _ZN5S56C73v17Ev();
extern void _ZN5S56C73v18Ev();
extern void _ZN5S56C73v19Ev();
extern void _ZN5S56C73v20Ev();
extern void _ZN5S56C73v21Ev();
extern void _ZN5S56C73v22Ev();
extern void _ZN5S56C73v23Ev();
extern void _ZN5S56C73v24Ev();
extern void _ZN5S56C73v25Ev();
extern void _ZN5S56C73v26Ev();
extern void _ZN5S56C73v27Ev();
extern void _ZN5S56C73v28Ev();
extern void _ZN5S56C73v29Ev();
extern void _ZN5S56C73v30Ev();
extern void _ZN5S56C73v31Ev();
extern void _ZN5S56C73v32Ev();
extern void _ZN5S56C73v33Ev();
extern void _ZN5S56C73v34Ev();
extern void _ZN5S56C73v35Ev();
extern void _ZN5S56C73v36Ev();
extern void _ZN5S56C73v37Ev();
extern void _ZN5S56C73v38Ev();
extern void _ZN5S56C73v39Ev();
extern void _ZN5S56C73v40Ev();
extern void _ZN5S56C73v41Ev();
extern void _ZN5S56C73v42Ev();
extern void _ZN5S56C73v43Ev();
extern void _ZN5S56C73v44Ev();
extern void _ZN5S56C73v45Ev();
extern void _ZN5S56C73v46Ev();
extern void _ZN5S56C73v47Ev();
extern void _ZN5S56C73v48Ev();
extern void _ZN5S56C73v49Ev();
extern void _ZN5S56C73v50Ev();
extern void _ZN5S56C73v51Ev();
extern void _ZN5S56C73v52Ev();
extern void _ZN5S56C73v53Ev();
extern void _ZN5S56C73v54Ev();
extern void _ZN5S56C73v55Ev();
extern void _ZN5S56C73v56Ev();
extern void _ZN5S56C73v57Ev();
extern void _ZN5S56C73v58Ev();
extern void _ZN5S56C73v59Ev();
extern void _ZN5S56C73v60Ev();
extern void _ZN5S56C73v61Ev();
extern void _ZN5S56C73v62Ev();
extern void _ZN5S56C73v63Ev();
extern void _ZN5S56C73v64Ev();
extern void _ZN5S56C73v65Ev();
extern void _ZN5S56C73v66Ev();
static  VTBL_ENTRY vtc_S56C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S56C7[0]),
  (VTBL_ENTRY)&_ZN5S56C7D1Ev,
  (VTBL_ENTRY)&_ZN5S56C7D0Ev,
  (VTBL_ENTRY)&_ZN5S56C72v3Ev,
  (VTBL_ENTRY)&_ZN5S56C72v4Ev,
  (VTBL_ENTRY)&_ZN5S56C72v5Ev,
  (VTBL_ENTRY)&_ZN5S56C72v6Ev,
  (VTBL_ENTRY)&_ZN5S56C72v7Ev,
  (VTBL_ENTRY)&_ZN5S56C72v8Ev,
  (VTBL_ENTRY)&_ZN5S56C72v9Ev,
  (VTBL_ENTRY)&_ZN5S56C73v10Ev,
  (VTBL_ENTRY)&_ZN5S56C73v11Ev,
  (VTBL_ENTRY)&_ZN5S56C73v12Ev,
  (VTBL_ENTRY)&_ZN5S56C73v13Ev,
  (VTBL_ENTRY)&_ZN5S56C73v14Ev,
  (VTBL_ENTRY)&_ZN5S56C73v15Ev,
  (VTBL_ENTRY)&_ZN5S56C73v16Ev,
  (VTBL_ENTRY)&_ZN5S56C73v17Ev,
  (VTBL_ENTRY)&_ZN5S56C73v18Ev,
  (VTBL_ENTRY)&_ZN5S56C73v19Ev,
  (VTBL_ENTRY)&_ZN5S56C73v20Ev,
  (VTBL_ENTRY)&_ZN5S56C73v21Ev,
  (VTBL_ENTRY)&_ZN5S56C73v22Ev,
  (VTBL_ENTRY)&_ZN5S56C73v23Ev,
  (VTBL_ENTRY)&_ZN5S56C73v24Ev,
  (VTBL_ENTRY)&_ZN5S56C73v25Ev,
  (VTBL_ENTRY)&_ZN5S56C73v26Ev,
  (VTBL_ENTRY)&_ZN5S56C73v27Ev,
  (VTBL_ENTRY)&_ZN5S56C73v28Ev,
  (VTBL_ENTRY)&_ZN5S56C73v29Ev,
  (VTBL_ENTRY)&_ZN5S56C73v30Ev,
  (VTBL_ENTRY)&_ZN5S56C73v31Ev,
  (VTBL_ENTRY)&_ZN5S56C73v32Ev,
  (VTBL_ENTRY)&_ZN5S56C73v33Ev,
  (VTBL_ENTRY)&_ZN5S56C73v34Ev,
  (VTBL_ENTRY)&_ZN5S56C73v35Ev,
  (VTBL_ENTRY)&_ZN5S56C73v36Ev,
  (VTBL_ENTRY)&_ZN5S56C73v37Ev,
  (VTBL_ENTRY)&_ZN5S56C73v38Ev,
  (VTBL_ENTRY)&_ZN5S56C73v39Ev,
  (VTBL_ENTRY)&_ZN5S56C73v40Ev,
  (VTBL_ENTRY)&_ZN5S56C73v41Ev,
  (VTBL_ENTRY)&_ZN5S56C73v42Ev,
  (VTBL_ENTRY)&_ZN5S56C73v43Ev,
  (VTBL_ENTRY)&_ZN5S56C73v44Ev,
  (VTBL_ENTRY)&_ZN5S56C73v45Ev,
  (VTBL_ENTRY)&_ZN5S56C73v46Ev,
  (VTBL_ENTRY)&_ZN5S56C73v47Ev,
  (VTBL_ENTRY)&_ZN5S56C73v48Ev,
  (VTBL_ENTRY)&_ZN5S56C73v49Ev,
  (VTBL_ENTRY)&_ZN5S56C73v50Ev,
  (VTBL_ENTRY)&_ZN5S56C73v51Ev,
  (VTBL_ENTRY)&_ZN5S56C73v52Ev,
  (VTBL_ENTRY)&_ZN5S56C73v53Ev,
  (VTBL_ENTRY)&_ZN5S56C73v54Ev,
  (VTBL_ENTRY)&_ZN5S56C73v55Ev,
  (VTBL_ENTRY)&_ZN5S56C73v56Ev,
  (VTBL_ENTRY)&_ZN5S56C73v57Ev,
  (VTBL_ENTRY)&_ZN5S56C73v58Ev,
  (VTBL_ENTRY)&_ZN5S56C73v59Ev,
  (VTBL_ENTRY)&_ZN5S56C73v60Ev,
  (VTBL_ENTRY)&_ZN5S56C73v61Ev,
  (VTBL_ENTRY)&_ZN5S56C73v62Ev,
  (VTBL_ENTRY)&_ZN5S56C73v63Ev,
  (VTBL_ENTRY)&_ZN5S56C73v64Ev,
  (VTBL_ENTRY)&_ZN5S56C73v65Ev,
  (VTBL_ENTRY)&_ZN5S56C73v66Ev,
};
extern VTBL_ENTRY _ZTI5S56C7[];
extern  VTBL_ENTRY _ZTV5S56C7[];
Class_Descriptor cd_S56C7 = {  "S56C7", // class name
  0,0,//no base classes
  &(vtc_S56C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI5S56C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV5S56C7),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  S56C6  : S56C7 {
  int s56c6f0[2];
  void *s56c6f1;
  int s56c6f2[2];
  ::S287C8_nt s56c6f3;
  ::S287C8_nt s56c6f4;
  ::S2121C38 s56c6f5;
  ::S287C8_nt s56c6f6;
  unsigned int s56c6f7:1;
  unsigned int s56c6f8:1;
  unsigned int s56c6f9:1;
  unsigned int s56c6f10:1;
  unsigned int s56c6f11:1;
  int s56c6f12[2];
  virtual  ~S56C6(); // _ZN5S56C6D1Ev
  virtual void  v67(); // _ZN5S56C63v67Ev
  virtual void  v68(); // _ZN5S56C63v68Ev
  virtual void  v69(); // _ZN5S56C63v69Ev
  virtual void  v70(); // _ZN5S56C63v70Ev
  virtual void  v71(); // _ZN5S56C63v71Ev
  virtual void  v72(); // _ZN5S56C63v72Ev
  virtual void  v73(); // _ZN5S56C63v73Ev
  virtual void  v74(); // _ZN5S56C63v74Ev
  virtual void  v75(); // _ZN5S56C63v75Ev
  virtual void  v76(); // _ZN5S56C63v76Ev
  virtual void  v77(); // _ZN5S56C63v77Ev
  virtual void  v78(); // _ZN5S56C63v78Ev
  virtual void  v79(); // _ZN5S56C63v79Ev
  virtual void  v80(); // _ZN5S56C63v80Ev
  virtual void  v81(); // _ZN5S56C63v81Ev
  virtual void  v82(); // _ZN5S56C63v82Ev
  virtual void  v83(); // _ZN5S56C63v83Ev
  virtual void  v84(); // _ZN5S56C63v84Ev
  virtual void  v85(); // _ZN5S56C63v85Ev
  virtual void  v86(); // _ZN5S56C63v86Ev
  virtual void  v87(); // _ZN5S56C63v87Ev
  virtual void  v88(); // _ZN5S56C63v88Ev
  S56C6(); // tgen
};
//SIG(-1 S56C6) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S56C6 ::~S56C6(){ note_dtor("S56C6", this);}
void  S56C6 ::v67(){vfunc_called(this, "_ZN5S56C63v67Ev");}
void  S56C6 ::v68(){vfunc_called(this, "_ZN5S56C63v68Ev");}
void  S56C6 ::v69(){vfunc_called(this, "_ZN5S56C63v69Ev");}
void  S56C6 ::v70(){vfunc_called(this, "_ZN5S56C63v70Ev");}
void  S56C6 ::v71(){vfunc_called(this, "_ZN5S56C63v71Ev");}
void  S56C6 ::v72(){vfunc_called(this, "_ZN5S56C63v72Ev");}
void  S56C6 ::v73(){vfunc_called(this, "_ZN5S56C63v73Ev");}
void  S56C6 ::v74(){vfunc_called(this, "_ZN5S56C63v74Ev");}
void  S56C6 ::v75(){vfunc_called(this, "_ZN5S56C63v75Ev");}
void  S56C6 ::v76(){vfunc_called(this, "_ZN5S56C63v76Ev");}
void  S56C6 ::v77(){vfunc_called(this, "_ZN5S56C63v77Ev");}
void  S56C6 ::v78(){vfunc_called(this, "_ZN5S56C63v78Ev");}
void  S56C6 ::v79(){vfunc_called(this, "_ZN5S56C63v79Ev");}
void  S56C6 ::v80(){vfunc_called(this, "_ZN5S56C63v80Ev");}
void  S56C6 ::v81(){vfunc_called(this, "_ZN5S56C63v81Ev");}
void  S56C6 ::v82(){vfunc_called(this, "_ZN5S56C63v82Ev");}
void  S56C6 ::v83(){vfunc_called(this, "_ZN5S56C63v83Ev");}
void  S56C6 ::v84(){vfunc_called(this, "_ZN5S56C63v84Ev");}
void  S56C6 ::v85(){vfunc_called(this, "_ZN5S56C63v85Ev");}
void  S56C6 ::v86(){vfunc_called(this, "_ZN5S56C63v86Ev");}
void  S56C6 ::v87(){vfunc_called(this, "_ZN5S56C63v87Ev");}
void  S56C6 ::v88(){vfunc_called(this, "_ZN5S56C63v88Ev");}
S56C6 ::S56C6(){ note_ctor("S56C6", this);} // tgen

static void Test_S56C6()
{
  extern Class_Descriptor cd_S56C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S56C6, buf);
    S56C6 *dp, &lv = *(dp=new (buf) S56C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S56C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S56C6)");
    check_base_class_offset(lv, (S56C7*), 0, "S56C6");
    check_field_offset(lv, s56c6f0, ABISELECT(96,60), "S56C6.s56c6f0");
    check_field_offset(lv, s56c6f1, ABISELECT(104,68), "S56C6.s56c6f1");
    check_field_offset(lv, s56c6f2, ABISELECT(112,72), "S56C6.s56c6f2");
    check_field_offset(lv, s56c6f3, ABISELECT(120,80), "S56C6.s56c6f3");
    check_field_offset(lv, s56c6f4, ABISELECT(136,92), "S56C6.s56c6f4");
    check_field_offset(lv, s56c6f5, ABISELECT(152,104), "S56C6.s56c6f5");
    check_field_offset(lv, s56c6f6, ABISELECT(160,108), "S56C6.s56c6f6");
    set_bf_and_test(lv, s56c6f7, ABISELECT(176,120), 0, 1, 1, "S56C6");
    set_bf_and_test(lv, s56c6f8, ABISELECT(176,120), 1, 1, 1, "S56C6");
    set_bf_and_test(lv, s56c6f9, ABISELECT(176,120), 2, 1, 1, "S56C6");
    set_bf_and_test(lv, s56c6f10, ABISELECT(176,120), 3, 1, 1, "S56C6");
    set_bf_and_test(lv, s56c6f11, ABISELECT(176,120), 4, 1, 1, "S56C6");
    check_field_offset(lv, s56c6f12, ABISELECT(180,124), "S56C6.s56c6f12");
    test_class_info(&lv, &cd_S56C6);
    dp->~S56C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS56C6(Test_S56C6, "S56C6", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN5S56C6C1Ev();
extern void _ZN5S56C6D1Ev();
Name_Map name_map_S56C6[] = {
  NSPAIR(_ZN5S56C6C1Ev),
  NSPAIR(_ZN5S56C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S56C7;
extern VTBL_ENTRY _ZTI5S56C7[];
extern  VTBL_ENTRY _ZTV5S56C7[];
static Base_Class bases_S56C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S56C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI5S56C6[];
extern void _ZN5S56C6D1Ev();
extern void _ZN5S56C6D0Ev();
extern void _ZN5S56C72v3Ev();
extern void _ZN5S56C72v4Ev();
extern void _ZN5S56C72v5Ev();
extern void _ZN5S56C72v6Ev();
extern void _ZN5S56C72v7Ev();
extern void _ZN5S56C72v8Ev();
extern void _ZN5S56C72v9Ev();
extern void _ZN5S56C73v10Ev();
extern void _ZN5S56C73v11Ev();
extern void _ZN5S56C73v12Ev();
extern void _ZN5S56C73v13Ev();
extern void _ZN5S56C73v14Ev();
extern void _ZN5S56C73v15Ev();
extern void _ZN5S56C73v16Ev();
extern void _ZN5S56C73v17Ev();
extern void _ZN5S56C73v18Ev();
extern void _ZN5S56C73v19Ev();
extern void _ZN5S56C73v20Ev();
extern void _ZN5S56C73v21Ev();
extern void _ZN5S56C73v22Ev();
extern void _ZN5S56C73v23Ev();
extern void _ZN5S56C73v24Ev();
extern void _ZN5S56C73v25Ev();
extern void _ZN5S56C73v26Ev();
extern void _ZN5S56C73v27Ev();
extern void _ZN5S56C73v28Ev();
extern void _ZN5S56C73v29Ev();
extern void _ZN5S56C73v30Ev();
extern void _ZN5S56C73v31Ev();
extern void _ZN5S56C73v32Ev();
extern void _ZN5S56C73v33Ev();
extern void _ZN5S56C73v34Ev();
extern void _ZN5S56C73v35Ev();
extern void _ZN5S56C73v36Ev();
extern void _ZN5S56C73v37Ev();
extern void _ZN5S56C73v38Ev();
extern void _ZN5S56C73v39Ev();
extern void _ZN5S56C73v40Ev();
extern void _ZN5S56C73v41Ev();
extern void _ZN5S56C73v42Ev();
extern void _ZN5S56C73v43Ev();
extern void _ZN5S56C73v44Ev();
extern void _ZN5S56C73v45Ev();
extern void _ZN5S56C73v46Ev();
extern void _ZN5S56C73v47Ev();
extern void _ZN5S56C73v48Ev();
extern void _ZN5S56C73v49Ev();
extern void _ZN5S56C73v50Ev();
extern void _ZN5S56C73v51Ev();
extern void _ZN5S56C73v52Ev();
extern void _ZN5S56C73v53Ev();
extern void _ZN5S56C73v54Ev();
extern void _ZN5S56C73v55Ev();
extern void _ZN5S56C73v56Ev();
extern void _ZN5S56C73v57Ev();
extern void _ZN5S56C73v58Ev();
extern void _ZN5S56C73v59Ev();
extern void _ZN5S56C73v60Ev();
extern void _ZN5S56C73v61Ev();
extern void _ZN5S56C73v62Ev();
extern void _ZN5S56C73v63Ev();
extern void _ZN5S56C73v64Ev();
extern void _ZN5S56C73v65Ev();
extern void _ZN5S56C73v66Ev();
extern void _ZN5S56C63v67Ev();
extern void _ZN5S56C63v68Ev();
extern void _ZN5S56C63v69Ev();
extern void _ZN5S56C63v70Ev();
extern void _ZN5S56C63v71Ev();
extern void _ZN5S56C63v72Ev();
extern void _ZN5S56C63v73Ev();
extern void _ZN5S56C63v74Ev();
extern void _ZN5S56C63v75Ev();
extern void _ZN5S56C63v76Ev();
extern void _ZN5S56C63v77Ev();
extern void _ZN5S56C63v78Ev();
extern void _ZN5S56C63v79Ev();
extern void _ZN5S56C63v80Ev();
extern void _ZN5S56C63v81Ev();
extern void _ZN5S56C63v82Ev();
extern void _ZN5S56C63v83Ev();
extern void _ZN5S56C63v84Ev();
extern void _ZN5S56C63v85Ev();
extern void _ZN5S56C63v86Ev();
extern void _ZN5S56C63v87Ev();
extern void _ZN5S56C63v88Ev();
static  VTBL_ENTRY vtc_S56C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S56C6[0]),
  (VTBL_ENTRY)&_ZN5S56C6D1Ev,
  (VTBL_ENTRY)&_ZN5S56C6D0Ev,
  (VTBL_ENTRY)&_ZN5S56C72v3Ev,
  (VTBL_ENTRY)&_ZN5S56C72v4Ev,
  (VTBL_ENTRY)&_ZN5S56C72v5Ev,
  (VTBL_ENTRY)&_ZN5S56C72v6Ev,
  (VTBL_ENTRY)&_ZN5S56C72v7Ev,
  (VTBL_ENTRY)&_ZN5S56C72v8Ev,
  (VTBL_ENTRY)&_ZN5S56C72v9Ev,
  (VTBL_ENTRY)&_ZN5S56C73v10Ev,
  (VTBL_ENTRY)&_ZN5S56C73v11Ev,
  (VTBL_ENTRY)&_ZN5S56C73v12Ev,
  (VTBL_ENTRY)&_ZN5S56C73v13Ev,
  (VTBL_ENTRY)&_ZN5S56C73v14Ev,
  (VTBL_ENTRY)&_ZN5S56C73v15Ev,
  (VTBL_ENTRY)&_ZN5S56C73v16Ev,
  (VTBL_ENTRY)&_ZN5S56C73v17Ev,
  (VTBL_ENTRY)&_ZN5S56C73v18Ev,
  (VTBL_ENTRY)&_ZN5S56C73v19Ev,
  (VTBL_ENTRY)&_ZN5S56C73v20Ev,
  (VTBL_ENTRY)&_ZN5S56C73v21Ev,
  (VTBL_ENTRY)&_ZN5S56C73v22Ev,
  (VTBL_ENTRY)&_ZN5S56C73v23Ev,
  (VTBL_ENTRY)&_ZN5S56C73v24Ev,
  (VTBL_ENTRY)&_ZN5S56C73v25Ev,
  (VTBL_ENTRY)&_ZN5S56C73v26Ev,
  (VTBL_ENTRY)&_ZN5S56C73v27Ev,
  (VTBL_ENTRY)&_ZN5S56C73v28Ev,
  (VTBL_ENTRY)&_ZN5S56C73v29Ev,
  (VTBL_ENTRY)&_ZN5S56C73v30Ev,
  (VTBL_ENTRY)&_ZN5S56C73v31Ev,
  (VTBL_ENTRY)&_ZN5S56C73v32Ev,
  (VTBL_ENTRY)&_ZN5S56C73v33Ev,
  (VTBL_ENTRY)&_ZN5S56C73v34Ev,
  (VTBL_ENTRY)&_ZN5S56C73v35Ev,
  (VTBL_ENTRY)&_ZN5S56C73v36Ev,
  (VTBL_ENTRY)&_ZN5S56C73v37Ev,
  (VTBL_ENTRY)&_ZN5S56C73v38Ev,
  (VTBL_ENTRY)&_ZN5S56C73v39Ev,
  (VTBL_ENTRY)&_ZN5S56C73v40Ev,
  (VTBL_ENTRY)&_ZN5S56C73v41Ev,
  (VTBL_ENTRY)&_ZN5S56C73v42Ev,
  (VTBL_ENTRY)&_ZN5S56C73v43Ev,
  (VTBL_ENTRY)&_ZN5S56C73v44Ev,
  (VTBL_ENTRY)&_ZN5S56C73v45Ev,
  (VTBL_ENTRY)&_ZN5S56C73v46Ev,
  (VTBL_ENTRY)&_ZN5S56C73v47Ev,
  (VTBL_ENTRY)&_ZN5S56C73v48Ev,
  (VTBL_ENTRY)&_ZN5S56C73v49Ev,
  (VTBL_ENTRY)&_ZN5S56C73v50Ev,
  (VTBL_ENTRY)&_ZN5S56C73v51Ev,
  (VTBL_ENTRY)&_ZN5S56C73v52Ev,
  (VTBL_ENTRY)&_ZN5S56C73v53Ev,
  (VTBL_ENTRY)&_ZN5S56C73v54Ev,
  (VTBL_ENTRY)&_ZN5S56C73v55Ev,
  (VTBL_ENTRY)&_ZN5S56C73v56Ev,
  (VTBL_ENTRY)&_ZN5S56C73v57Ev,
  (VTBL_ENTRY)&_ZN5S56C73v58Ev,
  (VTBL_ENTRY)&_ZN5S56C73v59Ev,
  (VTBL_ENTRY)&_ZN5S56C73v60Ev,
  (VTBL_ENTRY)&_ZN5S56C73v61Ev,
  (VTBL_ENTRY)&_ZN5S56C73v62Ev,
  (VTBL_ENTRY)&_ZN5S56C73v63Ev,
  (VTBL_ENTRY)&_ZN5S56C73v64Ev,
  (VTBL_ENTRY)&_ZN5S56C73v65Ev,
  (VTBL_ENTRY)&_ZN5S56C73v66Ev,
  (VTBL_ENTRY)&_ZN5S56C63v67Ev,
  (VTBL_ENTRY)&_ZN5S56C63v68Ev,
  (VTBL_ENTRY)&_ZN5S56C63v69Ev,
  (VTBL_ENTRY)&_ZN5S56C63v70Ev,
  (VTBL_ENTRY)&_ZN5S56C63v71Ev,
  (VTBL_ENTRY)&_ZN5S56C63v72Ev,
  (VTBL_ENTRY)&_ZN5S56C63v73Ev,
  (VTBL_ENTRY)&_ZN5S56C63v74Ev,
  (VTBL_ENTRY)&_ZN5S56C63v75Ev,
  (VTBL_ENTRY)&_ZN5S56C63v76Ev,
  (VTBL_ENTRY)&_ZN5S56C63v77Ev,
  (VTBL_ENTRY)&_ZN5S56C63v78Ev,
  (VTBL_ENTRY)&_ZN5S56C63v79Ev,
  (VTBL_ENTRY)&_ZN5S56C63v80Ev,
  (VTBL_ENTRY)&_ZN5S56C63v81Ev,
  (VTBL_ENTRY)&_ZN5S56C63v82Ev,
  (VTBL_ENTRY)&_ZN5S56C63v83Ev,
  (VTBL_ENTRY)&_ZN5S56C63v84Ev,
  (VTBL_ENTRY)&_ZN5S56C63v85Ev,
  (VTBL_ENTRY)&_ZN5S56C63v86Ev,
  (VTBL_ENTRY)&_ZN5S56C63v87Ev,
  (VTBL_ENTRY)&_ZN5S56C63v88Ev,
};
extern VTBL_ENTRY _ZTI5S56C6[];
extern  VTBL_ENTRY _ZTV5S56C6[];
Class_Descriptor cd_S56C6 = {  "S56C6", // class name
  bases_S56C6, 1,
  &(vtc_S56C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI5S56C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S56C6),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S56C5  : S56C6 {
  unsigned int s56c5f0:1;
  unsigned int s56c5f1:1;
  unsigned int s56c5f2:1;
  ::S3350C17 s56c5f3;
  ::S3350C11 s56c5f4;
  ::S3350C5_nt s56c5f5;
  ::S287C27 s56c5f6;
  int s56c5f7[3];
  virtual  ~S56C5(); // _ZN5S56C5D1Ev
  virtual void  v89(); // _ZN5S56C53v89Ev
  virtual void  v90(); // _ZN5S56C53v90Ev
  virtual void  v91(); // _ZN5S56C53v91Ev
  virtual void  v92(); // _ZN5S56C53v92Ev
  virtual void  v93(); // _ZN5S56C53v93Ev
  virtual void  v94(); // _ZN5S56C53v94Ev
  virtual void  v95(); // _ZN5S56C53v95Ev
  virtual void  v96(); // _ZN5S56C53v96Ev
  virtual void  v97(); // _ZN5S56C53v97Ev
  virtual void  v98(); // _ZN5S56C53v98Ev
  virtual void  v99(); // _ZN5S56C53v99Ev
  virtual void  v100(); // _ZN5S56C54v100Ev
  virtual void  v101(); // _ZN5S56C54v101Ev
  virtual void  v102(); // _ZN5S56C54v102Ev
  virtual void  v103(); // _ZN5S56C54v103Ev
  virtual void  v104(); // _ZN5S56C54v104Ev
  virtual void  v105(); // _ZN5S56C54v105Ev
  virtual void  v106(); // _ZN5S56C54v106Ev
  virtual void  v107(); // _ZN5S56C54v107Ev
  virtual void  v108(); // _ZN5S56C54v108Ev
  S56C5(); // tgen
};
//SIG(-1 S56C5) C1{ BC2{ BC3{ vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 FC10{ BC11{ BC8}} FC12{ BC13{ BC8}} FC14{ BC15{ BC8}} FC16{ BC17{ BC8}} Fi[3]}


 S56C5 ::~S56C5(){ note_dtor("S56C5", this);}
void  S56C5 ::v89(){vfunc_called(this, "_ZN5S56C53v89Ev");}
void  S56C5 ::v90(){vfunc_called(this, "_ZN5S56C53v90Ev");}
void  S56C5 ::v91(){vfunc_called(this, "_ZN5S56C53v91Ev");}
void  S56C5 ::v92(){vfunc_called(this, "_ZN5S56C53v92Ev");}
void  S56C5 ::v93(){vfunc_called(this, "_ZN5S56C53v93Ev");}
void  S56C5 ::v94(){vfunc_called(this, "_ZN5S56C53v94Ev");}
void  S56C5 ::v95(){vfunc_called(this, "_ZN5S56C53v95Ev");}
void  S56C5 ::v96(){vfunc_called(this, "_ZN5S56C53v96Ev");}
void  S56C5 ::v97(){vfunc_called(this, "_ZN5S56C53v97Ev");}
void  S56C5 ::v98(){vfunc_called(this, "_ZN5S56C53v98Ev");}
void  S56C5 ::v99(){vfunc_called(this, "_ZN5S56C53v99Ev");}
void  S56C5 ::v100(){vfunc_called(this, "_ZN5S56C54v100Ev");}
void  S56C5 ::v101(){vfunc_called(this, "_ZN5S56C54v101Ev");}
void  S56C5 ::v102(){vfunc_called(this, "_ZN5S56C54v102Ev");}
void  S56C5 ::v103(){vfunc_called(this, "_ZN5S56C54v103Ev");}
void  S56C5 ::v104(){vfunc_called(this, "_ZN5S56C54v104Ev");}
void  S56C5 ::v105(){vfunc_called(this, "_ZN5S56C54v105Ev");}
void  S56C5 ::v106(){vfunc_called(this, "_ZN5S56C54v106Ev");}
void  S56C5 ::v107(){vfunc_called(this, "_ZN5S56C54v107Ev");}
void  S56C5 ::v108(){vfunc_called(this, "_ZN5S56C54v108Ev");}
S56C5 ::S56C5(){ note_ctor("S56C5", this);} // tgen

static void Test_S56C5()
{
  extern Class_Descriptor cd_S56C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S56C5, buf);
    S56C5 *dp, &lv = *(dp=new (buf) S56C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S56C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S56C5)");
    check_base_class_offset(lv, (S56C7*)(S56C6*), 0, "S56C5");
    check_base_class_offset(lv, (S56C6*), 0, "S56C5");
    set_bf_and_test(lv, s56c5f0, ABISELECT(188,132), 0, 1, 1, "S56C5");
    set_bf_and_test(lv, s56c5f1, ABISELECT(188,132), 1, 1, 1, "S56C5");
    set_bf_and_test(lv, s56c5f2, ABISELECT(188,132), 2, 1, 1, "S56C5");
    check_field_offset(lv, s56c5f3, ABISELECT(192,136), "S56C5.s56c5f3");
    check_field_offset(lv, s56c5f4, ABISELECT(208,148), "S56C5.s56c5f4");
    check_field_offset(lv, s56c5f5, ABISELECT(224,160), "S56C5.s56c5f5");
    check_field_offset(lv, s56c5f6, ABISELECT(240,172), "S56C5.s56c5f6");
    check_field_offset(lv, s56c5f7, ABISELECT(256,184), "S56C5.s56c5f7");
    test_class_info(&lv, &cd_S56C5);
    dp->~S56C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS56C5(Test_S56C5, "S56C5", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN5S56C5C1Ev();
extern void _ZN5S56C5D1Ev();
Name_Map name_map_S56C5[] = {
  NSPAIR(_ZN5S56C5C1Ev),
  NSPAIR(_ZN5S56C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S56C7;
extern VTBL_ENTRY _ZTI5S56C7[];
extern  VTBL_ENTRY _ZTV5S56C7[];
extern Class_Descriptor cd_S56C6;
extern VTBL_ENTRY _ZTI5S56C6[];
extern  VTBL_ENTRY _ZTV5S56C6[];
static Base_Class bases_S56C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S56C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S56C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S56C5[];
extern void _ZN5S56C5D1Ev();
extern void _ZN5S56C5D0Ev();
extern void _ZN5S56C72v3Ev();
extern void _ZN5S56C72v4Ev();
extern void _ZN5S56C72v5Ev();
extern void _ZN5S56C72v6Ev();
extern void _ZN5S56C72v7Ev();
extern void _ZN5S56C72v8Ev();
extern void _ZN5S56C72v9Ev();
extern void _ZN5S56C73v10Ev();
extern void _ZN5S56C73v11Ev();
extern void _ZN5S56C73v12Ev();
extern void _ZN5S56C73v13Ev();
extern void _ZN5S56C73v14Ev();
extern void _ZN5S56C73v15Ev();
extern void _ZN5S56C73v16Ev();
extern void _ZN5S56C73v17Ev();
extern void _ZN5S56C73v18Ev();
extern void _ZN5S56C73v19Ev();
extern void _ZN5S56C73v20Ev();
extern void _ZN5S56C73v21Ev();
extern void _ZN5S56C73v22Ev();
extern void _ZN5S56C73v23Ev();
extern void _ZN5S56C73v24Ev();
extern void _ZN5S56C73v25Ev();
extern void _ZN5S56C73v26Ev();
extern void _ZN5S56C73v27Ev();
extern void _ZN5S56C73v28Ev();
extern void _ZN5S56C73v29Ev();
extern void _ZN5S56C73v30Ev();
extern void _ZN5S56C73v31Ev();
extern void _ZN5S56C73v32Ev();
extern void _ZN5S56C73v33Ev();
extern void _ZN5S56C73v34Ev();
extern void _ZN5S56C73v35Ev();
extern void _ZN5S56C73v36Ev();
extern void _ZN5S56C73v37Ev();
extern void _ZN5S56C73v38Ev();
extern void _ZN5S56C73v39Ev();
extern void _ZN5S56C73v40Ev();
extern void _ZN5S56C73v41Ev();
extern void _ZN5S56C73v42Ev();
extern void _ZN5S56C73v43Ev();
extern void _ZN5S56C73v44Ev();
extern void _ZN5S56C73v45Ev();
extern void _ZN5S56C73v46Ev();
extern void _ZN5S56C73v47Ev();
extern void _ZN5S56C73v48Ev();
extern void _ZN5S56C73v49Ev();
extern void _ZN5S56C73v50Ev();
extern void _ZN5S56C73v51Ev();
extern void _ZN5S56C73v52Ev();
extern void _ZN5S56C73v53Ev();
extern void _ZN5S56C73v54Ev();
extern void _ZN5S56C73v55Ev();
extern void _ZN5S56C73v56Ev();
extern void _ZN5S56C73v57Ev();
extern void _ZN5S56C73v58Ev();
extern void _ZN5S56C73v59Ev();
extern void _ZN5S56C73v60Ev();
extern void _ZN5S56C73v61Ev();
extern void _ZN5S56C73v62Ev();
extern void _ZN5S56C73v63Ev();
extern void _ZN5S56C73v64Ev();
extern void _ZN5S56C73v65Ev();
extern void _ZN5S56C73v66Ev();
extern void _ZN5S56C63v67Ev();
extern void _ZN5S56C63v68Ev();
extern void _ZN5S56C63v69Ev();
extern void _ZN5S56C63v70Ev();
extern void _ZN5S56C63v71Ev();
extern void _ZN5S56C63v72Ev();
extern void _ZN5S56C63v73Ev();
extern void _ZN5S56C63v74Ev();
extern void _ZN5S56C63v75Ev();
extern void _ZN5S56C63v76Ev();
extern void _ZN5S56C63v77Ev();
extern void _ZN5S56C63v78Ev();
extern void _ZN5S56C63v79Ev();
extern void _ZN5S56C63v80Ev();
extern void _ZN5S56C63v81Ev();
extern void _ZN5S56C63v82Ev();
extern void _ZN5S56C63v83Ev();
extern void _ZN5S56C63v84Ev();
extern void _ZN5S56C63v85Ev();
extern void _ZN5S56C63v86Ev();
extern void _ZN5S56C63v87Ev();
extern void _ZN5S56C63v88Ev();
extern void _ZN5S56C53v89Ev();
extern void _ZN5S56C53v90Ev();
extern void _ZN5S56C53v91Ev();
extern void _ZN5S56C53v92Ev();
extern void _ZN5S56C53v93Ev();
extern void _ZN5S56C53v94Ev();
extern void _ZN5S56C53v95Ev();
extern void _ZN5S56C53v96Ev();
extern void _ZN5S56C53v97Ev();
extern void _ZN5S56C53v98Ev();
extern void _ZN5S56C53v99Ev();
extern void _ZN5S56C54v100Ev();
extern void _ZN5S56C54v101Ev();
extern void _ZN5S56C54v102Ev();
extern void _ZN5S56C54v103Ev();
extern void _ZN5S56C54v104Ev();
extern void _ZN5S56C54v105Ev();
extern void _ZN5S56C54v106Ev();
extern void _ZN5S56C54v107Ev();
extern void _ZN5S56C54v108Ev();
static  VTBL_ENTRY vtc_S56C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S56C5[0]),
  (VTBL_ENTRY)&_ZN5S56C5D1Ev,
  (VTBL_ENTRY)&_ZN5S56C5D0Ev,
  (VTBL_ENTRY)&_ZN5S56C72v3Ev,
  (VTBL_ENTRY)&_ZN5S56C72v4Ev,
  (VTBL_ENTRY)&_ZN5S56C72v5Ev,
  (VTBL_ENTRY)&_ZN5S56C72v6Ev,
  (VTBL_ENTRY)&_ZN5S56C72v7Ev,
  (VTBL_ENTRY)&_ZN5S56C72v8Ev,
  (VTBL_ENTRY)&_ZN5S56C72v9Ev,
  (VTBL_ENTRY)&_ZN5S56C73v10Ev,
  (VTBL_ENTRY)&_ZN5S56C73v11Ev,
  (VTBL_ENTRY)&_ZN5S56C73v12Ev,
  (VTBL_ENTRY)&_ZN5S56C73v13Ev,
  (VTBL_ENTRY)&_ZN5S56C73v14Ev,
  (VTBL_ENTRY)&_ZN5S56C73v15Ev,
  (VTBL_ENTRY)&_ZN5S56C73v16Ev,
  (VTBL_ENTRY)&_ZN5S56C73v17Ev,
  (VTBL_ENTRY)&_ZN5S56C73v18Ev,
  (VTBL_ENTRY)&_ZN5S56C73v19Ev,
  (VTBL_ENTRY)&_ZN5S56C73v20Ev,
  (VTBL_ENTRY)&_ZN5S56C73v21Ev,
  (VTBL_ENTRY)&_ZN5S56C73v22Ev,
  (VTBL_ENTRY)&_ZN5S56C73v23Ev,
  (VTBL_ENTRY)&_ZN5S56C73v24Ev,
  (VTBL_ENTRY)&_ZN5S56C73v25Ev,
  (VTBL_ENTRY)&_ZN5S56C73v26Ev,
  (VTBL_ENTRY)&_ZN5S56C73v27Ev,
  (VTBL_ENTRY)&_ZN5S56C73v28Ev,
  (VTBL_ENTRY)&_ZN5S56C73v29Ev,
  (VTBL_ENTRY)&_ZN5S56C73v30Ev,
  (VTBL_ENTRY)&_ZN5S56C73v31Ev,
  (VTBL_ENTRY)&_ZN5S56C73v32Ev,
  (VTBL_ENTRY)&_ZN5S56C73v33Ev,
  (VTBL_ENTRY)&_ZN5S56C73v34Ev,
  (VTBL_ENTRY)&_ZN5S56C73v35Ev,
  (VTBL_ENTRY)&_ZN5S56C73v36Ev,
  (VTBL_ENTRY)&_ZN5S56C73v37Ev,
  (VTBL_ENTRY)&_ZN5S56C73v38Ev,
  (VTBL_ENTRY)&_ZN5S56C73v39Ev,
  (VTBL_ENTRY)&_ZN5S56C73v40Ev,
  (VTBL_ENTRY)&_ZN5S56C73v41Ev,
  (VTBL_ENTRY)&_ZN5S56C73v42Ev,
  (VTBL_ENTRY)&_ZN5S56C73v43Ev,
  (VTBL_ENTRY)&_ZN5S56C73v44Ev,
  (VTBL_ENTRY)&_ZN5S56C73v45Ev,
  (VTBL_ENTRY)&_ZN5S56C73v46Ev,
  (VTBL_ENTRY)&_ZN5S56C73v47Ev,
  (VTBL_ENTRY)&_ZN5S56C73v48Ev,
  (VTBL_ENTRY)&_ZN5S56C73v49Ev,
  (VTBL_ENTRY)&_ZN5S56C73v50Ev,
  (VTBL_ENTRY)&_ZN5S56C73v51Ev,
  (VTBL_ENTRY)&_ZN5S56C73v52Ev,
  (VTBL_ENTRY)&_ZN5S56C73v53Ev,
  (VTBL_ENTRY)&_ZN5S56C73v54Ev,
  (VTBL_ENTRY)&_ZN5S56C73v55Ev,
  (VTBL_ENTRY)&_ZN5S56C73v56Ev,
  (VTBL_ENTRY)&_ZN5S56C73v57Ev,
  (VTBL_ENTRY)&_ZN5S56C73v58Ev,
  (VTBL_ENTRY)&_ZN5S56C73v59Ev,
  (VTBL_ENTRY)&_ZN5S56C73v60Ev,
  (VTBL_ENTRY)&_ZN5S56C73v61Ev,
  (VTBL_ENTRY)&_ZN5S56C73v62Ev,
  (VTBL_ENTRY)&_ZN5S56C73v63Ev,
  (VTBL_ENTRY)&_ZN5S56C73v64Ev,
  (VTBL_ENTRY)&_ZN5S56C73v65Ev,
  (VTBL_ENTRY)&_ZN5S56C73v66Ev,
  (VTBL_ENTRY)&_ZN5S56C63v67Ev,
  (VTBL_ENTRY)&_ZN5S56C63v68Ev,
  (VTBL_ENTRY)&_ZN5S56C63v69Ev,
  (VTBL_ENTRY)&_ZN5S56C63v70Ev,
  (VTBL_ENTRY)&_ZN5S56C63v71Ev,
  (VTBL_ENTRY)&_ZN5S56C63v72Ev,
  (VTBL_ENTRY)&_ZN5S56C63v73Ev,
  (VTBL_ENTRY)&_ZN5S56C63v74Ev,
  (VTBL_ENTRY)&_ZN5S56C63v75Ev,
  (VTBL_ENTRY)&_ZN5S56C63v76Ev,
  (VTBL_ENTRY)&_ZN5S56C63v77Ev,
  (VTBL_ENTRY)&_ZN5S56C63v78Ev,
  (VTBL_ENTRY)&_ZN5S56C63v79Ev,
  (VTBL_ENTRY)&_ZN5S56C63v80Ev,
  (VTBL_ENTRY)&_ZN5S56C63v81Ev,
  (VTBL_ENTRY)&_ZN5S56C63v82Ev,
  (VTBL_ENTRY)&_ZN5S56C63v83Ev,
  (VTBL_ENTRY)&_ZN5S56C63v84Ev,
  (VTBL_ENTRY)&_ZN5S56C63v85Ev,
  (VTBL_ENTRY)&_ZN5S56C63v86Ev,
  (VTBL_ENTRY)&_ZN5S56C63v87Ev,
  (VTBL_ENTRY)&_ZN5S56C63v88Ev,
  (VTBL_ENTRY)&_ZN5S56C53v89Ev,
  (VTBL_ENTRY)&_ZN5S56C53v90Ev,
  (VTBL_ENTRY)&_ZN5S56C53v91Ev,
  (VTBL_ENTRY)&_ZN5S56C53v92Ev,
  (VTBL_ENTRY)&_ZN5S56C53v93Ev,
  (VTBL_ENTRY)&_ZN5S56C53v94Ev,
  (VTBL_ENTRY)&_ZN5S56C53v95Ev,
  (VTBL_ENTRY)&_ZN5S56C53v96Ev,
  (VTBL_ENTRY)&_ZN5S56C53v97Ev,
  (VTBL_ENTRY)&_ZN5S56C53v98Ev,
  (VTBL_ENTRY)&_ZN5S56C53v99Ev,
  (VTBL_ENTRY)&_ZN5S56C54v100Ev,
  (VTBL_ENTRY)&_ZN5S56C54v101Ev,
  (VTBL_ENTRY)&_ZN5S56C54v102Ev,
  (VTBL_ENTRY)&_ZN5S56C54v103Ev,
  (VTBL_ENTRY)&_ZN5S56C54v104Ev,
  (VTBL_ENTRY)&_ZN5S56C54v105Ev,
  (VTBL_ENTRY)&_ZN5S56C54v106Ev,
  (VTBL_ENTRY)&_ZN5S56C54v107Ev,
  (VTBL_ENTRY)&_ZN5S56C54v108Ev,
};
extern VTBL_ENTRY _ZTI5S56C5[];
extern  VTBL_ENTRY _ZTV5S56C5[];
Class_Descriptor cd_S56C5 = {  "S56C5", // class name
  bases_S56C5, 2,
  &(vtc_S56C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI5S56C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S56C5),110, //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  S56C4  : S56C5 {
  void *s56c4f0[2];
  int s56c4f1[4];
  unsigned int s56c4f2:1;
  unsigned int s56c4f3:1;
  unsigned int s56c4f4:1;
  char s56c4f5;
  int s56c4f6;
  unsigned int s56c4f7:1;
  ::S287C23 s56c4f8;
  virtual  ~S56C4(); // _ZN5S56C4D1Ev
  virtual void  v109(); // _ZN5S56C44v109Ev
  virtual void  v110(); // _ZN5S56C44v110Ev
  virtual void  v111(); // _ZN5S56C44v111Ev
  virtual void  v112(); // _ZN5S56C44v112Ev
  virtual void  v113(); // _ZN5S56C44v113Ev
  virtual void  v114(); // _ZN5S56C44v114Ev
  virtual void  v115(); // _ZN5S56C44v115Ev
  virtual void  v116(); // _ZN5S56C44v116Ev
  virtual void  v117(); // _ZN5S56C44v117Ev
  virtual void  v118(); // _ZN5S56C44v118Ev
  virtual void  v119(); // _ZN5S56C44v119Ev
  virtual void  v120(); // _ZN5S56C44v120Ev
  virtual void  v121(); // _ZN5S56C44v121Ev
  virtual void  v122(); // _ZN5S56C44v122Ev
  S56C4(); // tgen
};
//SIG(-1 S56C4) C1{ BC2{ BC3{ BC4{ 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 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 Fi:1 Fi:1 Fi:1 FC11{ BC12{ BC9}} FC13{ BC14{ BC9}} FC15{ BC16{ BC9}} FC17{ BC18{ BC9}} Fi[3]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC19{ BC20{ BC9}}}


 S56C4 ::~S56C4(){ note_dtor("S56C4", this);}
void  S56C4 ::v109(){vfunc_called(this, "_ZN5S56C44v109Ev");}
void  S56C4 ::v110(){vfunc_called(this, "_ZN5S56C44v110Ev");}
void  S56C4 ::v111(){vfunc_called(this, "_ZN5S56C44v111Ev");}
void  S56C4 ::v112(){vfunc_called(this, "_ZN5S56C44v112Ev");}
void  S56C4 ::v113(){vfunc_called(this, "_ZN5S56C44v113Ev");}
void  S56C4 ::v114(){vfunc_called(this, "_ZN5S56C44v114Ev");}
void  S56C4 ::v115(){vfunc_called(this, "_ZN5S56C44v115Ev");}
void  S56C4 ::v116(){vfunc_called(this, "_ZN5S56C44v116Ev");}
void  S56C4 ::v117(){vfunc_called(this, "_ZN5S56C44v117Ev");}
void  S56C4 ::v118(){vfunc_called(this, "_ZN5S56C44v118Ev");}
void  S56C4 ::v119(){vfunc_called(this, "_ZN5S56C44v119Ev");}
void  S56C4 ::v120(){vfunc_called(this, "_ZN5S56C44v120Ev");}
void  S56C4 ::v121(){vfunc_called(this, "_ZN5S56C44v121Ev");}
void  S56C4 ::v122(){vfunc_called(this, "_ZN5S56C44v122Ev");}
S56C4 ::S56C4(){ note_ctor("S56C4", this);} // tgen

static void Test_S56C4()
{
  extern Class_Descriptor cd_S56C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(43,62)];
    init_test(&cd_S56C4, buf);
    S56C4 *dp, &lv = *(dp=new (buf) S56C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,244), "sizeof(S56C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S56C4)");
    check_base_class_offset(lv, (S56C7*)(S56C6*)(S56C5*), 0, "S56C4");
    check_base_class_offset(lv, (S56C6*)(S56C5*), 0, "S56C4");
    check_base_class_offset(lv, (S56C5*), 0, "S56C4");
    check_field_offset(lv, s56c4f0, ABISELECT(272,196), "S56C4.s56c4f0");
    check_field_offset(lv, s56c4f1, ABISELECT(288,204), "S56C4.s56c4f1");
    set_bf_and_test(lv, s56c4f2, ABISELECT(304,220), 0, 1, 1, "S56C4");
    set_bf_and_test(lv, s56c4f3, ABISELECT(304,220), 1, 1, 1, "S56C4");
    set_bf_and_test(lv, s56c4f4, ABISELECT(304,220), 2, 1, 1, "S56C4");
    check_field_offset(lv, s56c4f5, ABISELECT(305,221), "S56C4.s56c4f5");
    check_field_offset(lv, s56c4f6, ABISELECT(308,224), "S56C4.s56c4f6");
    set_bf_and_test(lv, s56c4f7, ABISELECT(312,228), 0, 1, 1, "S56C4");
    check_field_offset(lv, s56c4f8, ABISELECT(320,232), "S56C4.s56c4f8");
    test_class_info(&lv, &cd_S56C4);
    dp->~S56C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS56C4(Test_S56C4, "S56C4", ABISELECT(336,244));

#else // __cplusplus

extern void _ZN5S56C4C1Ev();
extern void _ZN5S56C4D1Ev();
Name_Map name_map_S56C4[] = {
  NSPAIR(_ZN5S56C4C1Ev),
  NSPAIR(_ZN5S56C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S56C7;
extern VTBL_ENTRY _ZTI5S56C7[];
extern  VTBL_ENTRY _ZTV5S56C7[];
extern Class_Descriptor cd_S56C6;
extern VTBL_ENTRY _ZTI5S56C6[];
extern  VTBL_ENTRY _ZTV5S56C6[];
extern Class_Descriptor cd_S56C5;
extern VTBL_ENTRY _ZTI5S56C5[];
extern  VTBL_ENTRY _ZTV5S56C5[];
static Base_Class bases_S56C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S56C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S56C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S56C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S56C4[];
extern void _ZN5S56C4D1Ev();
extern void _ZN5S56C4D0Ev();
extern void _ZN5S56C72v3Ev();
extern void _ZN5S56C72v4Ev();
extern void _ZN5S56C72v5Ev();
extern void _ZN5S56C72v6Ev();
extern void _ZN5S56C72v7Ev();
extern void _ZN5S56C72v8Ev();
extern void _ZN5S56C72v9Ev();
extern void _ZN5S56C73v10Ev();
extern void _ZN5S56C73v11Ev();
extern void _ZN5S56C73v12Ev();
extern void _ZN5S56C73v13Ev();
extern void _ZN5S56C73v14Ev();
extern void _ZN5S56C73v15Ev();
extern void _ZN5S56C73v16Ev();
extern void _ZN5S56C73v17Ev();
extern void _ZN5S56C73v18Ev();
extern void _ZN5S56C73v19Ev();
extern void _ZN5S56C73v20Ev();
extern void _ZN5S56C73v21Ev();
extern void _ZN5S56C73v22Ev();
extern void _ZN5S56C73v23Ev();
extern void _ZN5S56C73v24Ev();
extern void _ZN5S56C73v25Ev();
extern void _ZN5S56C73v26Ev();
extern void _ZN5S56C73v27Ev();
extern void _ZN5S56C73v28Ev();
extern void _ZN5S56C73v29Ev();
extern void _ZN5S56C73v30Ev();
extern void _ZN5S56C73v31Ev();
extern void _ZN5S56C73v32Ev();
extern void _ZN5S56C73v33Ev();
extern void _ZN5S56C73v34Ev();
extern void _ZN5S56C73v35Ev();
extern void _ZN5S56C73v36Ev();
extern void _ZN5S56C73v37Ev();
extern void _ZN5S56C73v38Ev();
extern void _ZN5S56C73v39Ev();
extern void _ZN5S56C73v40Ev();
extern void _ZN5S56C73v41Ev();
extern void _ZN5S56C73v42Ev();
extern void _ZN5S56C73v43Ev();
extern void _ZN5S56C73v44Ev();
extern void _ZN5S56C73v45Ev();
extern void _ZN5S56C73v46Ev();
extern void _ZN5S56C73v47Ev();
extern void _ZN5S56C73v48Ev();
extern void _ZN5S56C73v49Ev();
extern void _ZN5S56C73v50Ev();
extern void _ZN5S56C73v51Ev();
extern void _ZN5S56C73v52Ev();
extern void _ZN5S56C73v53Ev();
extern void _ZN5S56C73v54Ev();
extern void _ZN5S56C73v55Ev();
extern void _ZN5S56C73v56Ev();
extern void _ZN5S56C73v57Ev();
extern void _ZN5S56C73v58Ev();
extern void _ZN5S56C73v59Ev();
extern void _ZN5S56C73v60Ev();
extern void _ZN5S56C73v61Ev();
extern void _ZN5S56C73v62Ev();
extern void _ZN5S56C73v63Ev();
extern void _ZN5S56C73v64Ev();
extern void _ZN5S56C73v65Ev();
extern void _ZN5S56C73v66Ev();
extern void _ZN5S56C63v67Ev();
extern void _ZN5S56C63v68Ev();
extern void _ZN5S56C63v69Ev();
extern void _ZN5S56C63v70Ev();
extern void _ZN5S56C63v71Ev();
extern void _ZN5S56C63v72Ev();
extern void _ZN5S56C63v73Ev();
extern void _ZN5S56C63v74Ev();
extern void _ZN5S56C63v75Ev();
extern void _ZN5S56C63v76Ev();
extern void _ZN5S56C63v77Ev();
extern void _ZN5S56C63v78Ev();
extern void _ZN5S56C63v79Ev();
extern void _ZN5S56C63v80Ev();
extern void _ZN5S56C63v81Ev();
extern void _ZN5S56C63v82Ev();
extern void _ZN5S56C63v83Ev();
extern void _ZN5S56C63v84Ev();
extern void _ZN5S56C63v85Ev();
extern void _ZN5S56C63v86Ev();
extern void _ZN5S56C63v87Ev();
extern void _ZN5S56C63v88Ev();
extern void _ZN5S56C53v89Ev();
extern void _ZN5S56C53v90Ev();
extern void _ZN5S56C53v91Ev();
extern void _ZN5S56C53v92Ev();
extern void _ZN5S56C53v93Ev();
extern void _ZN5S56C53v94Ev();
extern void _ZN5S56C53v95Ev();
extern void _ZN5S56C53v96Ev();
extern void _ZN5S56C53v97Ev();
extern void _ZN5S56C53v98Ev();
extern void _ZN5S56C53v99Ev();
extern void _ZN5S56C54v100Ev();
extern void _ZN5S56C54v101Ev();
extern void _ZN5S56C54v102Ev();
extern void _ZN5S56C54v103Ev();
extern void _ZN5S56C54v104Ev();
extern void _ZN5S56C54v105Ev();
extern void _ZN5S56C54v106Ev();
extern void _ZN5S56C54v107Ev();
extern void _ZN5S56C54v108Ev();
extern void _ZN5S56C44v109Ev();
extern void _ZN5S56C44v110Ev();
extern void _ZN5S56C44v111Ev();
extern void _ZN5S56C44v112Ev();
extern void _ZN5S56C44v113Ev();
extern void _ZN5S56C44v114Ev();
extern void _ZN5S56C44v115Ev();
extern void _ZN5S56C44v116Ev();
extern void _ZN5S56C44v117Ev();
extern void _ZN5S56C44v118Ev();
extern void _ZN5S56C44v119Ev();
extern void _ZN5S56C44v120Ev();
extern void _ZN5S56C44v121Ev();
extern void _ZN5S56C44v122Ev();
static  VTBL_ENTRY vtc_S56C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S56C4[0]),
  (VTBL_ENTRY)&_ZN5S56C4D1Ev,
  (VTBL_ENTRY)&_ZN5S56C4D0Ev,
  (VTBL_ENTRY)&_ZN5S56C72v3Ev,
  (VTBL_ENTRY)&_ZN5S56C72v4Ev,
  (VTBL_ENTRY)&_ZN5S56C72v5Ev,
  (VTBL_ENTRY)&_ZN5S56C72v6Ev,
  (VTBL_ENTRY)&_ZN5S56C72v7Ev,
  (VTBL_ENTRY)&_ZN5S56C72v8Ev,
  (VTBL_ENTRY)&_ZN5S56C72v9Ev,
  (VTBL_ENTRY)&_ZN5S56C73v10Ev,
  (VTBL_ENTRY)&_ZN5S56C73v11Ev,
  (VTBL_ENTRY)&_ZN5S56C73v12Ev,
  (VTBL_ENTRY)&_ZN5S56C73v13Ev,
  (VTBL_ENTRY)&_ZN5S56C73v14Ev,
  (VTBL_ENTRY)&_ZN5S56C73v15Ev,
  (VTBL_ENTRY)&_ZN5S56C73v16Ev,
  (VTBL_ENTRY)&_ZN5S56C73v17Ev,
  (VTBL_ENTRY)&_ZN5S56C73v18Ev,
  (VTBL_ENTRY)&_ZN5S56C73v19Ev,
  (VTBL_ENTRY)&_ZN5S56C73v20Ev,
  (VTBL_ENTRY)&_ZN5S56C73v21Ev,
  (VTBL_ENTRY)&_ZN5S56C73v22Ev,
  (VTBL_ENTRY)&_ZN5S56C73v23Ev,
  (VTBL_ENTRY)&_ZN5S56C73v24Ev,
  (VTBL_ENTRY)&_ZN5S56C73v25Ev,
  (VTBL_ENTRY)&_ZN5S56C73v26Ev,
  (VTBL_ENTRY)&_ZN5S56C73v27Ev,
  (VTBL_ENTRY)&_ZN5S56C73v28Ev,
  (VTBL_ENTRY)&_ZN5S56C73v29Ev,
  (VTBL_ENTRY)&_ZN5S56C73v30Ev,
  (VTBL_ENTRY)&_ZN5S56C73v31Ev,
  (VTBL_ENTRY)&_ZN5S56C73v32Ev,
  (VTBL_ENTRY)&_ZN5S56C73v33Ev,
  (VTBL_ENTRY)&_ZN5S56C73v34Ev,
  (VTBL_ENTRY)&_ZN5S56C73v35Ev,
  (VTBL_ENTRY)&_ZN5S56C73v36Ev,
  (VTBL_ENTRY)&_ZN5S56C73v37Ev,
  (VTBL_ENTRY)&_ZN5S56C73v38Ev,
  (VTBL_ENTRY)&_ZN5S56C73v39Ev,
  (VTBL_ENTRY)&_ZN5S56C73v40Ev,
  (VTBL_ENTRY)&_ZN5S56C73v41Ev,
  (VTBL_ENTRY)&_ZN5S56C73v42Ev,
  (VTBL_ENTRY)&_ZN5S56C73v43Ev,
  (VTBL_ENTRY)&_ZN5S56C73v44Ev,
  (VTBL_ENTRY)&_ZN5S56C73v45Ev,
  (VTBL_ENTRY)&_ZN5S56C73v46Ev,
  (VTBL_ENTRY)&_ZN5S56C73v47Ev,
  (VTBL_ENTRY)&_ZN5S56C73v48Ev,
  (VTBL_ENTRY)&_ZN5S56C73v49Ev,
  (VTBL_ENTRY)&_ZN5S56C73v50Ev,
  (VTBL_ENTRY)&_ZN5S56C73v51Ev,
  (VTBL_ENTRY)&_ZN5S56C73v52Ev,
  (VTBL_ENTRY)&_ZN5S56C73v53Ev,
  (VTBL_ENTRY)&_ZN5S56C73v54Ev,
  (VTBL_ENTRY)&_ZN5S56C73v55Ev,
  (VTBL_ENTRY)&_ZN5S56C73v56Ev,
  (VTBL_ENTRY)&_ZN5S56C73v57Ev,
  (VTBL_ENTRY)&_ZN5S56C73v58Ev,
  (VTBL_ENTRY)&_ZN5S56C73v59Ev,
  (VTBL_ENTRY)&_ZN5S56C73v60Ev,
  (VTBL_ENTRY)&_ZN5S56C73v61Ev,
  (VTBL_ENTRY)&_ZN5S56C73v62Ev,
  (VTBL_ENTRY)&_ZN5S56C73v63Ev,
  (VTBL_ENTRY)&_ZN5S56C73v64Ev,
  (VTBL_ENTRY)&_ZN5S56C73v65Ev,
  (VTBL_ENTRY)&_ZN5S56C73v66Ev,
  (VTBL_ENTRY)&_ZN5S56C63v67Ev,
  (VTBL_ENTRY)&_ZN5S56C63v68Ev,
  (VTBL_ENTRY)&_ZN5S56C63v69Ev,
  (VTBL_ENTRY)&_ZN5S56C63v70Ev,
  (VTBL_ENTRY)&_ZN5S56C63v71Ev,
  (VTBL_ENTRY)&_ZN5S56C63v72Ev,
  (VTBL_ENTRY)&_ZN5S56C63v73Ev,
  (VTBL_ENTRY)&_ZN5S56C63v74Ev,
  (VTBL_ENTRY)&_ZN5S56C63v75Ev,
  (VTBL_ENTRY)&_ZN5S56C63v76Ev,
  (VTBL_ENTRY)&_ZN5S56C63v77Ev,
  (VTBL_ENTRY)&_ZN5S56C63v78Ev,
  (VTBL_ENTRY)&_ZN5S56C63v79Ev,
  (VTBL_ENTRY)&_ZN5S56C63v80Ev,
  (VTBL_ENTRY)&_ZN5S56C63v81Ev,
  (VTBL_ENTRY)&_ZN5S56C63v82Ev,
  (VTBL_ENTRY)&_ZN5S56C63v83Ev,
  (VTBL_ENTRY)&_ZN5S56C63v84Ev,
  (VTBL_ENTRY)&_ZN5S56C63v85Ev,
  (VTBL_ENTRY)&_ZN5S56C63v86Ev,
  (VTBL_ENTRY)&_ZN5S56C63v87Ev,
  (VTBL_ENTRY)&_ZN5S56C63v88Ev,
  (VTBL_ENTRY)&_ZN5S56C53v89Ev,
  (VTBL_ENTRY)&_ZN5S56C53v90Ev,
  (VTBL_ENTRY)&_ZN5S56C53v91Ev,
  (VTBL_ENTRY)&_ZN5S56C53v92Ev,
  (VTBL_ENTRY)&_ZN5S56C53v93Ev,
  (VTBL_ENTRY)&_ZN5S56C53v94Ev,
  (VTBL_ENTRY)&_ZN5S56C53v95Ev,
  (VTBL_ENTRY)&_ZN5S56C53v96Ev,
  (VTBL_ENTRY)&_ZN5S56C53v97Ev,
  (VTBL_ENTRY)&_ZN5S56C53v98Ev,
  (VTBL_ENTRY)&_ZN5S56C53v99Ev,
  (VTBL_ENTRY)&_ZN5S56C54v100Ev,
  (VTBL_ENTRY)&_ZN5S56C54v101Ev,
  (VTBL_ENTRY)&_ZN5S56C54v102Ev,
  (VTBL_ENTRY)&_ZN5S56C54v103Ev,
  (VTBL_ENTRY)&_ZN5S56C54v104Ev,
  (VTBL_ENTRY)&_ZN5S56C54v105Ev,
  (VTBL_ENTRY)&_ZN5S56C54v106Ev,
  (VTBL_ENTRY)&_ZN5S56C54v107Ev,
  (VTBL_ENTRY)&_ZN5S56C54v108Ev,
  (VTBL_ENTRY)&_ZN5S56C44v109Ev,
  (VTBL_ENTRY)&_ZN5S56C44v110Ev,
  (VTBL_ENTRY)&_ZN5S56C44v111Ev,
  (VTBL_ENTRY)&_ZN5S56C44v112Ev,
  (VTBL_ENTRY)&_ZN5S56C44v113Ev,
  (VTBL_ENTRY)&_ZN5S56C44v114Ev,
  (VTBL_ENTRY)&_ZN5S56C44v115Ev,
  (VTBL_ENTRY)&_ZN5S56C44v116Ev,
  (VTBL_ENTRY)&_ZN5S56C44v117Ev,
  (VTBL_ENTRY)&_ZN5S56C44v118Ev,
  (VTBL_ENTRY)&_ZN5S56C44v119Ev,
  (VTBL_ENTRY)&_ZN5S56C44v120Ev,
  (VTBL_ENTRY)&_ZN5S56C44v121Ev,
  (VTBL_ENTRY)&_ZN5S56C44v122Ev,
};
extern VTBL_ENTRY _ZTI5S56C4[];
extern  VTBL_ENTRY _ZTV5S56C4[];
Class_Descriptor cd_S56C4 = {  "S56C4", // class name
  bases_S56C4, 3,
  &(vtc_S56C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(336,244), // object size
  NSPAIRA(_ZTI5S56C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S56C4),124, //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  S56C3  : S56C4 {
  void *s56c3f0[2];
  ::S287C8_nt s56c3f1;
  unsigned int s56c3f2:1;
  unsigned int s56c3f3:1;
  ::S3350C21_nt s56c3f4;
  virtual  ~S56C3(); // _ZN5S56C3D1Ev
  virtual void  v123(); // _ZN5S56C34v123Ev
  virtual void  v124(); // _ZN5S56C34v124Ev
  virtual void  v125(); // _ZN5S56C34v125Ev
  virtual void  v126(); // _ZN5S56C34v126Ev
  virtual void  v127(); // _ZN5S56C34v127Ev
  virtual void  v128(); // _ZN5S56C34v128Ev
  virtual void  v129(); // _ZN5S56C34v129Ev
  virtual void  v130(); // _ZN5S56C34v130Ev
  virtual void  v131(); // _ZN5S56C34v131Ev
  virtual void  v132(); // _ZN5S56C34v132Ev
  virtual void  v133(); // _ZN5S56C34v133Ev
  S56C3(); // tgen
};
//SIG(-1 S56C3) C1{ BC2{ BC3{ BC4{ BC5{ vd v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 Fi[2] Fp Fi[2] FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} FC7 FC11{ m} FC7 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 Fi:1 Fi:1 Fi:1 FC12{ BC13{ BC10}} FC14{ BC15{ BC10}} FC16{ BC17{ BC10}} FC18{ BC19{ BC10}} Fi[3]} vd v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC20{ BC21{ BC10}}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[2] FC7 Fi:1 Fi:1 FC22{ m Fp FC6}}


 S56C3 ::~S56C3(){ note_dtor("S56C3", this);}
void  S56C3 ::v123(){vfunc_called(this, "_ZN5S56C34v123Ev");}
void  S56C3 ::v124(){vfunc_called(this, "_ZN5S56C34v124Ev");}
void  S56C3 ::v125(){vfunc_called(this, "_ZN5S56C34v125Ev");}
void  S56C3 ::v126(){vfunc_called(this, "_ZN5S56C34v126Ev");}
void  S56C3 ::v127(){vfunc_called(this, "_ZN5S56C34v127Ev");}
void  S56C3 ::v128(){vfunc_called(this, "_ZN5S56C34v128Ev");}
void  S56C3 ::v129(){vfunc_called(this, "_ZN5S56C34v129Ev");}
void  S56C3 ::v130(){vfunc_called(this, "_ZN5S56C34v130Ev");}
void  S56C3 ::v131(){vfunc_called(this, "_ZN5S56C34v131Ev");}
void  S56C3 ::v132(){vfunc_called(this, "_ZN5S56C34v132Ev");}
void  S56C3 ::v133(){vfunc_called(this, "_ZN5S56C34v133Ev");}
S56C3 ::S56C3(){ note_ctor("S56C3", this);} // tgen

static void Test_S56C3()
{
  extern Class_Descriptor cd_S56C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(50,71)];
    init_test(&cd_S56C3, buf);
    S56C3 *dp, &lv = *(dp=new (buf) S56C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(392,280), "sizeof(S56C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S56C3)");
    check_base_class_offset(lv, (S56C7*)(S56C6*)(S56C5*)(S56C4*), 0, "S56C3");
    check_base_class_offset(lv, (S56C6*)(S56C5*)(S56C4*), 0, "S56C3");
    check_base_class_offset(lv, (S56C5*)(S56C4*), 0, "S56C3");
    check_base_class_offset(lv, (S56C4*), 0, "S56C3");
    check_field_offset(lv, s56c3f0, ABISELECT(336,244), "S56C3.s56c3f0");
    check_field_offset(lv, s56c3f1, ABISELECT(352,252), "S56C3.s56c3f1");
    set_bf_and_test(lv, s56c3f2, ABISELECT(368,264), 0, 1, 1, "S56C3");
    set_bf_and_test(lv, s56c3f3, ABISELECT(368,264), 1, 1, 1, "S56C3");
    check_field_offset(lv, s56c3f4, ABISELECT(376,268), "S56C3.s56c3f4");
    test_class_info(&lv, &cd_S56C3);
    dp->~S56C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS56C3(Test_S56C3, "S56C3", ABISELECT(392,280));

#else // __cplusplus

extern void _ZN5S56C3C1Ev();
extern void _ZN5S56C3D1Ev();
Name_Map name_map_S56C3[] = {
  NSPAIR(_ZN5S56C3C1Ev),
  NSPAIR(_ZN5S56C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S56C7;
extern VTBL_ENTRY _ZTI5S56C7[];
extern  VTBL_ENTRY _ZTV5S56C7[];
extern Class_Descriptor cd_S56C6;
extern VTBL_ENTRY _ZTI5S56C6[];
extern  VTBL_ENTRY _ZTV5S56C6[];
extern Class_Descriptor cd_S56C5;
extern VTBL_ENTRY _ZTI5S56C5[];
extern  VTBL_ENTRY _ZTV5S56C5[];
extern Class_Descriptor cd_S56C4;
extern VTBL_ENTRY _ZTI5S56C4[];
extern  VTBL_ENTRY _ZTV5S56C4[];
static Base_Class bases_S56C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S56C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S56C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S56C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S56C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S56C3[];
extern void _ZN5S56C3D1Ev();
extern void _ZN5S56C3D0Ev();
extern void _ZN5S56C72v3Ev();
extern void _ZN5S56C72v4Ev();
extern void _ZN5S56C72v5Ev();
extern void _ZN5S56C72v6Ev();
extern void _ZN5S56C72v7Ev();
extern void _ZN5S56C72v8Ev();
extern void _ZN5S56C72v9Ev();
extern void _ZN5S56C73v10Ev();
extern void _ZN5S56C73v11Ev();
extern void _ZN5S56C73v12Ev();
extern void _ZN5S56C73v13Ev();
extern void _ZN5S56C73v14Ev();
extern void _ZN5S56C73v15Ev();
extern void _ZN5S56C73v16Ev();
extern void _ZN5S56C73v17Ev();
extern void _ZN5S56C73v18Ev();
extern void _ZN5S56C73v19Ev();
extern void _ZN5S56C73v20Ev();
extern void _ZN5S56C73v21Ev();
extern void _ZN5S56C73v22Ev();
extern void _ZN5S56C73v23Ev();
extern void _ZN5S56C73v24Ev();
extern void _ZN5S56C73v25Ev();
extern void _ZN5S56C73v26Ev();
extern void _ZN5S56C73v27Ev();
extern void _ZN5S56C73v28Ev();
extern void _ZN5S56C73v29Ev();
extern void _ZN5S56C73v30Ev();
extern void _ZN5S56C73v31Ev();
extern void _ZN5S56C73v32Ev();
extern void _ZN5S56C73v33Ev();
extern void _ZN5S56C73v34Ev();
extern void _ZN5S56C73v35Ev();
extern void _ZN5S56C73v36Ev();
extern void _ZN5S56C73v37Ev();
extern void _ZN5S56C73v38Ev();
extern void _ZN5S56C73v39Ev();
extern void _ZN5S56C73v40Ev();
extern void _ZN5S56C73v41Ev();
extern void _ZN5S56C73v42Ev();
extern void _ZN5S56C73v43Ev();
extern void _ZN5S56C73v44Ev();
extern void _ZN5S56C73v45Ev();
extern void _ZN5S56C73v46Ev();
extern void _ZN5S56C73v47Ev();
extern void _ZN5S56C73v48Ev();
extern void _ZN5S56C73v49Ev();
extern void _ZN5S56C73v50Ev();
extern void _ZN5S56C73v51Ev();
extern void _ZN5S56C73v52Ev();
extern void _ZN5S56C73v53Ev();
extern void _ZN5S56C73v54Ev();
extern void _ZN5S56C73v55Ev();
extern void _ZN5S56C73v56Ev();
extern void _ZN5S56C73v57Ev();
extern void _ZN5S56C73v58Ev();
extern void _ZN5S56C73v59Ev();
extern void _ZN5S56C73v60Ev();
extern void _ZN5S56C73v61Ev();
extern void _ZN5S56C73v62Ev();
extern void _ZN5S56C73v63Ev();
extern void _ZN5S56C73v64Ev();
extern void _ZN5S56C73v65Ev();
extern void _ZN5S56C73v66Ev();
extern void _ZN5S56C63v67Ev();
extern void _ZN5S56C63v68Ev();
extern void _ZN5S56C63v69Ev();
extern void _ZN5S56C63v70Ev();
extern void _ZN5S56C63v71Ev();
extern void _ZN5S56C63v72Ev();
extern void _ZN5S56C63v73Ev();
extern void _ZN5S56C63v74Ev();
extern void _ZN5S56C63v75Ev();
extern void _ZN5S56C63v76Ev();
extern void _ZN5S56C63v77Ev();
extern void _ZN5S56C63v78Ev();
extern void _ZN5S56C63v79Ev();
extern void _ZN5S56C63v80Ev();
extern void _ZN5S56C63v81Ev();
extern void _ZN5S56C63v82Ev();
extern void _ZN5S56C63v83Ev();
extern void _ZN5S56C63v84Ev();
extern void _ZN5S56C63v85Ev();
extern void _ZN5S56C63v86Ev();
extern void _ZN5S56C63v87Ev();
extern void _ZN5S56C63v88Ev();
extern void _ZN5S56C53v89Ev();
extern void _ZN5S56C53v90Ev();
extern void _ZN5S56C53v91Ev();
extern void _ZN5S56C53v92Ev();
extern void _ZN5S56C53v93Ev();
extern void _ZN5S56C53v94Ev();
extern void _ZN5S56C53v95Ev();
extern void _ZN5S56C53v96Ev();
extern void _ZN5S56C53v97Ev();
extern void _ZN5S56C53v98Ev();
extern void _ZN5S56C53v99Ev();
extern void _ZN5S56C54v100Ev();
extern void _ZN5S56C54v101Ev();
extern void _ZN5S56C54v102Ev();
extern void _ZN5S56C54v103Ev();
extern void _ZN5S56C54v104Ev();
extern void _ZN5S56C54v105Ev();
extern void _ZN5S56C54v106Ev();
extern void _ZN5S56C54v107Ev();
extern void _ZN5S56C54v108Ev();
extern void _ZN5S56C44v109Ev();
extern void _ZN5S56C44v110Ev();
extern void _ZN5S56C44v111Ev();
extern void _ZN5S56C44v112Ev();
extern void _ZN5S56C44v113Ev();
extern void _ZN5S56C44v114Ev();
extern void _ZN5S56C44v115Ev();
extern void _ZN5S56C44v116Ev();
extern void _ZN5S56C44v117Ev();
extern void _ZN5S56C44v118Ev();
extern void _ZN5S56C44v119Ev();
extern void _ZN5S56C44v120Ev();
extern void _ZN5S56C44v121Ev();
extern void _ZN5S56C44v122Ev();
extern void _ZN5S56C34v123Ev();
extern void _ZN5S56C34v124Ev();
extern void _ZN5S56C34v125Ev();
extern void _ZN5S56C34v126Ev();
extern void _ZN5S56C34v127Ev();
extern void _ZN5S56C34v128Ev();
extern void _ZN5S56C34v129Ev();
extern void _ZN5S56C34v130Ev();
extern void _ZN5S56C34v131Ev();
extern void _ZN5S56C34v132Ev();
extern void _ZN5S56C34v133Ev();
static  VTBL_ENTRY vtc_S56C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S56C3[0]),
  (VTBL_ENTRY)&_ZN5S56C3D1Ev,
  (VTBL_ENTRY)&_ZN5S56C3D0Ev,
  (VTBL_ENTRY)&_ZN5S56C72v3Ev,
  (VTBL_ENTRY)&_ZN5S56C72v4Ev,
  (VTBL_ENTRY)&_ZN5S56C72v5Ev,
  (VTBL_ENTRY)&_ZN5S56C72v6Ev,
  (VTBL_ENTRY)&_ZN5S56C72v7Ev,
  (VTBL_ENTRY)&_ZN5S56C72v8Ev,
  (VTBL_ENTRY)&_ZN5S56C72v9Ev,
  (VTBL_ENTRY)&_ZN5S56C73v10Ev,
  (VTBL_ENTRY)&_ZN5S56C73v11Ev,
  (VTBL_ENTRY)&_ZN5S56C73v12Ev,
  (VTBL_ENTRY)&_ZN5S56C73v13Ev,
  (VTBL_ENTRY)&_ZN5S56C73v14Ev,
  (VTBL_ENTRY)&_ZN5S56C73v15Ev,
  (VTBL_ENTRY)&_ZN5S56C73v16Ev,
  (VTBL_ENTRY)&_ZN5S56C73v17Ev,
  (VTBL_ENTRY)&_ZN5S56C73v18Ev,
  (VTBL_ENTRY)&_ZN5S56C73v19Ev,
  (VTBL_ENTRY)&_ZN5S56C73v20Ev,
  (VTBL_ENTRY)&_ZN5S56C73v21Ev,
  (VTBL_ENTRY)&_ZN5S56C73v22Ev,
  (VTBL_ENTRY)&_ZN5S56C73v23Ev,
  (VTBL_ENTRY)&_ZN5S56C73v24Ev,
  (VTBL_ENTRY)&_ZN5S56C73v25Ev,
  (VTBL_ENTRY)&_ZN5S56C73v26Ev,
  (VTBL_ENTRY)&_ZN5S56C73v27Ev,
  (VTBL_ENTRY)&_ZN5S56C73v28Ev,
  (VTBL_ENTRY)&_ZN5S56C73v29Ev,
  (VTBL_ENTRY)&_ZN5S56C73v30Ev,
  (VTBL_ENTRY)&_ZN5S56C73v31Ev,
  (VTBL_ENTRY)&_ZN5S56C73v32Ev,
  (VTBL_ENTRY)&_ZN5S56C73v33Ev,
  (VTBL_ENTRY)&_ZN5S56C73v34Ev,
  (VTBL_ENTRY)&_ZN5S56C73v35Ev,
  (VTBL_ENTRY)&_ZN5S56C73v36Ev,
  (VTBL_ENTRY)&_ZN5S56C73v37Ev,
  (VTBL_ENTRY)&_ZN5S56C73v38Ev,
  (VTBL_ENTRY)&_ZN5S56C73v39Ev,
  (VTBL_ENTRY)&_ZN5S56C73v40Ev,
  (VTBL_ENTRY)&_ZN5S56C73v41Ev,
  (VTBL_ENTRY)&_ZN5S56C73v42Ev,
  (VTBL_ENTRY)&_ZN5S56C73v43Ev,
  (VTBL_ENTRY)&_ZN5S56C73v44Ev,
  (VTBL_ENTRY)&_ZN5S56C73v45Ev,
  (VTBL_ENTRY)&_ZN5S56C73v46Ev,
  (VTBL_ENTRY)&_ZN5S56C73v47Ev,
  (VTBL_ENTRY)&_ZN5S56C73v48Ev,
  (VTBL_ENTRY)&_ZN5S56C73v49Ev,
  (VTBL_ENTRY)&_ZN5S56C73v50Ev,
  (VTBL_ENTRY)&_ZN5S56C73v51Ev,
  (VTBL_ENTRY)&_ZN5S56C73v52Ev,
  (VTBL_ENTRY)&_ZN5S56C73v53Ev,
  (VTBL_ENTRY)&_ZN5S56C73v54Ev,
  (VTBL_ENTRY)&_ZN5S56C73v55Ev,
  (VTBL_ENTRY)&_ZN5S56C73v56Ev,
  (VTBL_ENTRY)&_ZN5S56C73v57Ev,
  (VTBL_ENTRY)&_ZN5S56C73v58Ev,
  (VTBL_ENTRY)&_ZN5S56C73v59Ev,
  (VTBL_ENTRY)&_ZN5S56C73v60Ev,
  (VTBL_ENTRY)&_ZN5S56C73v61Ev,
  (VTBL_ENTRY)&_ZN5S56C73v62Ev,
  (VTBL_ENTRY)&_ZN5S56C73v63Ev,
  (VTBL_ENTRY)&_ZN5S56C73v64Ev,
  (VTBL_ENTRY)&_ZN5S56C73v65Ev,
  (VTBL_ENTRY)&_ZN5S56C73v66Ev,
  (VTBL_ENTRY)&_ZN5S56C63v67Ev,
  (VTBL_ENTRY)&_ZN5S56C63v68Ev,
  (VTBL_ENTRY)&_ZN5S56C63v69Ev,
  (VTBL_ENTRY)&_ZN5S56C63v70Ev,
  (VTBL_ENTRY)&_ZN5S56C63v71Ev,
  (VTBL_ENTRY)&_ZN5S56C63v72Ev,
  (VTBL_ENTRY)&_ZN5S56C63v73Ev,
  (VTBL_ENTRY)&_ZN5S56C63v74Ev,
  (VTBL_ENTRY)&_ZN5S56C63v75Ev,
  (VTBL_ENTRY)&_ZN5S56C63v76Ev,
  (VTBL_ENTRY)&_ZN5S56C63v77Ev,
  (VTBL_ENTRY)&_ZN5S56C63v78Ev,
  (VTBL_ENTRY)&_ZN5S56C63v79Ev,
  (VTBL_ENTRY)&_ZN5S56C63v80Ev,
  (VTBL_ENTRY)&_ZN5S56C63v81Ev,
  (VTBL_ENTRY)&_ZN5S56C63v82Ev,
  (VTBL_ENTRY)&_ZN5S56C63v83Ev,
  (VTBL_ENTRY)&_ZN5S56C63v84Ev,
  (VTBL_ENTRY)&_ZN5S56C63v85Ev,
  (VTBL_ENTRY)&_ZN5S56C63v86Ev,
  (VTBL_ENTRY)&_ZN5S56C63v87Ev,
  (VTBL_ENTRY)&_ZN5S56C63v88Ev,
  (VTBL_ENTRY)&_ZN5S56C53v89Ev,
  (VTBL_ENTRY)&_ZN5S56C53v90Ev,
  (VTBL_ENTRY)&_ZN5S56C53v91Ev,
  (VTBL_ENTRY)&_ZN5S56C53v92Ev,
  (VTBL_ENTRY)&_ZN5S56C53v93Ev,
  (VTBL_ENTRY)&_ZN5S56C53v94Ev,
  (VTBL_ENTRY)&_ZN5S56C53v95Ev,
  (VTBL_ENTRY)&_ZN5S56C53v96Ev,
  (VTBL_ENTRY)&_ZN5S56C53v97Ev,
  (VTBL_ENTRY)&_ZN5S56C53v98Ev,
  (VTBL_ENTRY)&_ZN5S56C53v99Ev,
  (VTBL_ENTRY)&_ZN5S56C54v100Ev,
  (VTBL_ENTRY)&_ZN5S56C54v101Ev,
  (VTBL_ENTRY)&_ZN5S56C54v102Ev,
  (VTBL_ENTRY)&_ZN5S56C54v103Ev,
  (VTBL_ENTRY)&_ZN5S56C54v104Ev,
  (VTBL_ENTRY)&_ZN5S56C54v105Ev,
  (VTBL_ENTRY)&_ZN5S56C54v106Ev,
  (VTBL_ENTRY)&_ZN5S56C54v107Ev,
  (VTBL_ENTRY)&_ZN5S56C54v108Ev,
  (VTBL_ENTRY)&_ZN5S56C44v109Ev,
  (VTBL_ENTRY)&_ZN5S56C44v110Ev,
  (VTBL_ENTRY)&_ZN5S56C44v111Ev,
  (VTBL_ENTRY)&_ZN5S56C44v112Ev,
  (VTBL_ENTRY)&_ZN5S56C44v113Ev,
  (VTBL_ENTRY)&_ZN5S56C44v114Ev,
  (VTBL_ENTRY)&_ZN5S56C44v115Ev,
  (VTBL_ENTRY)&_ZN5S56C44v116Ev,
  (VTBL_ENTRY)&_ZN5S56C44v117Ev,
  (VTBL_ENTRY)&_ZN5S56C44v118Ev,
  (VTBL_ENTRY)&_ZN5S56C44v119Ev,
  (VTBL_ENTRY)&_ZN5S56C44v120Ev,
  (VTBL_ENTRY)&_ZN5S56C44v121Ev,
  (VTBL_ENTRY)&_ZN5S56C44v122Ev,
  (VTBL_ENTRY)&_ZN5S56C34v123Ev,
  (VTBL_ENTRY)&_ZN5S56C34v124Ev,
  (VTBL_ENTRY)&_ZN5S56C34v125Ev,
  (VTBL_ENTRY)&_ZN5S56C34v126Ev,
  (VTBL_ENTRY)&_ZN5S56C34v127Ev,
  (VTBL_ENTRY)&_ZN5S56C34v128Ev,
  (VTBL_ENTRY)&_ZN5S56C34v129Ev,
  (VTBL_ENTRY)&_ZN5S56C34v130Ev,
  (VTBL_ENTRY)&_ZN5S56C34v131Ev,
  (VTBL_ENTRY)&_ZN5S56C34v132Ev,
  (VTBL_ENTRY)&_ZN5S56C34v133Ev,
};
extern VTBL_ENTRY _ZTI5S56C3[];
extern  VTBL_ENTRY _ZTV5S56C3[];
Class_Descriptor cd_S56C3 = {  "S56C3", // class name
  bases_S56C3, 4,
  &(vtc_S56C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(392,280), // object size
  NSPAIRA(_ZTI5S56C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S56C3),135, //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  S56C2  : S56C3 {
  virtual  ~S56C2(); // _ZN5S56C2D1Ev
  virtual void  v134(); // _ZN5S56C24v134Ev
  virtual void  v135(); // _ZN5S56C24v135Ev
  S56C2(); // tgen
};
//SIG(-1 S56C2) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ 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 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 Fi FL Fp[4] Fi[2] Fp FC7{ m Fi[2]} Fp[2]} vd v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fi[2] Fp Fi[2] FC8{ BC9{ BC10{ BC11{ m Fp Fi[2]}}}} FC8 FC12{ m} FC8 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 Fi:1 Fi:1 Fi:1 FC13{ BC14{ BC11}} FC15{ BC16{ BC11}} FC17{ BC18{ BC11}} FC19{ BC20{ BC11}} Fi[3]} vd v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC21{ BC22{ BC11}}} vd v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 Fp[2] FC8 Fi:1 Fi:1 FC23{ m Fp FC7}} vd v1 v2}


 S56C2 ::~S56C2(){ note_dtor("S56C2", this);}
void  S56C2 ::v134(){vfunc_called(this, "_ZN5S56C24v134Ev");}
void  S56C2 ::v135(){vfunc_called(this, "_ZN5S56C24v135Ev");}
S56C2 ::S56C2(){ note_ctor("S56C2", this);} // tgen

static void Test_S56C2()
{
  extern Class_Descriptor cd_S56C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(50,71)];
    init_test(&cd_S56C2, buf);
    S56C2 *dp, &lv = *(dp=new (buf) S56C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(392,280), "sizeof(S56C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S56C2)");
    check_base_class_offset(lv, (S56C7*)(S56C6*)(S56C5*)(S56C4*)(S56C3*), 0, "S56C2");
    check_base_class_offset(lv, (S56C6*)(S56C5*)(S56C4*)(S56C3*), 0, "S56C2");
    check_base_class_offset(lv, (S56C5*)(S56C4*)(S56C3*), 0, "S56C2");
    check_base_class_offset(lv, (S56C4*)(S56C3*), 0, "S56C2");
    check_base_class_offset(lv, (S56C3*), 0, "S56C2");
    test_class_info(&lv, &cd_S56C2);
    dp->~S56C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS56C2(Test_S56C2, "S56C2", ABISELECT(392,280));

#else // __cplusplus

extern void _ZN5S56C2C1Ev();
extern void _ZN5S56C2D1Ev();
Name_Map name_map_S56C2[] = {
  NSPAIR(_ZN5S56C2C1Ev),
  NSPAIR(_ZN5S56C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S56C7;
extern VTBL_ENTRY _ZTI5S56C7[];
extern  VTBL_ENTRY _ZTV5S56C7[];
extern Class_Descriptor cd_S56C6;
extern VTBL_ENTRY _ZTI5S56C6[];
extern  VTBL_ENTRY _ZTV5S56C6[];
extern Class_Descriptor cd_S56C5;
extern VTBL_ENTRY _ZTI5S56C5[];
extern  VTBL_ENTRY _ZTV5S56C5[];
extern Class_Descriptor cd_S56C4;
extern VTBL_ENTRY _ZTI5S56C4[];
extern  VTBL_ENTRY _ZTV5S56C4[];
extern Class_Descriptor cd_S56C3;
extern VTBL_ENTRY _ZTI5S56C3[];
extern  VTBL_ENTRY _ZTV5S56C3[];
static Base_Class bases_S56C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S56C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S56C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S56C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S56C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S56C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S56C2[];
extern void _ZN5S56C2D1Ev();
extern void _ZN5S56C2D0Ev();
extern void _ZN5S56C72v3Ev();
extern void _ZN5S56C72v4Ev();
extern void _ZN5S56C72v5Ev();
extern void _ZN5S56C72v6Ev();
extern void _ZN5S56C72v7Ev();
extern void _ZN5S56C72v8Ev();
extern void _ZN5S56C72v9Ev();
extern void _ZN5S56C73v10Ev();
extern void _ZN5S56C73v11Ev();
extern void _ZN5S56C73v12Ev();
extern void _ZN5S56C73v13Ev();
extern void _ZN5S56C73v14Ev();
extern void _ZN5S56C73v15Ev();
extern void _ZN5S56C73v16Ev();
extern void _ZN5S56C73v17Ev();
extern void _ZN5S56C73v18Ev();
extern void _ZN5S56C73v19Ev();
extern void _ZN5S56C73v20Ev();
extern void _ZN5S56C73v21Ev();
extern void _ZN5S56C73v22Ev();
extern void _ZN5S56C73v23Ev();
extern void _ZN5S56C73v24Ev();
extern void _ZN5S56C73v25Ev();
extern void _ZN5S56C73v26Ev();
extern void _ZN5S56C73v27Ev();
extern void _ZN5S56C73v28Ev();
extern void _ZN5S56C73v29Ev();
extern void _ZN5S56C73v30Ev();
extern void _ZN5S56C73v31Ev();
extern void _ZN5S56C73v32Ev();
extern void _ZN5S56C73v33Ev();
extern void _ZN5S56C73v34Ev();
extern void _ZN5S56C73v35Ev();
extern void _ZN5S56C73v36Ev();
extern void _ZN5S56C73v37Ev();
extern void _ZN5S56C73v38Ev();
extern void _ZN5S56C73v39Ev();
extern void _ZN5S56C73v40Ev();
extern void _ZN5S56C73v41Ev();
extern void _ZN5S56C73v42Ev();
extern void _ZN5S56C73v43Ev();
extern void _ZN5S56C73v44Ev();
extern void _ZN5S56C73v45Ev();
extern void _ZN5S56C73v46Ev();
extern void _ZN5S56C73v47Ev();
extern void _ZN5S56C73v48Ev();
extern void _ZN5S56C73v49Ev();
extern void _ZN5S56C73v50Ev();
extern void _ZN5S56C73v51Ev();
extern void _ZN5S56C73v52Ev();
extern void _ZN5S56C73v53Ev();
extern void _ZN5S56C73v54Ev();
extern void _ZN5S56C73v55Ev();
extern void _ZN5S56C73v56Ev();
extern void _ZN5S56C73v57Ev();
extern void _ZN5S56C73v58Ev();
extern void _ZN5S56C73v59Ev();
extern void _ZN5S56C73v60Ev();
extern void _ZN5S56C73v61Ev();
extern void _ZN5S56C73v62Ev();
extern void _ZN5S56C73v63Ev();
extern void _ZN5S56C73v64Ev();
extern void _ZN5S56C73v65Ev();
extern void _ZN5S56C73v66Ev();
extern void _ZN5S56C63v67Ev();
extern void _ZN5S56C63v68Ev();
extern void _ZN5S56C63v69Ev();
extern void _ZN5S56C63v70Ev();
extern void _ZN5S56C63v71Ev();
extern void _ZN5S56C63v72Ev();
extern void _ZN5S56C63v73Ev();
extern void _ZN5S56C63v74Ev();
extern void _ZN5S56C63v75Ev();
extern void _ZN5S56C63v76Ev();
extern void _ZN5S56C63v77Ev();
extern void _ZN5S56C63v78Ev();
extern void _ZN5S56C63v79Ev();
extern void _ZN5S56C63v80Ev();
extern void _ZN5S56C63v81Ev();
extern void _ZN5S56C63v82Ev();
extern void _ZN5S56C63v83Ev();
extern void _ZN5S56C63v84Ev();
extern void _ZN5S56C63v85Ev();
extern void _ZN5S56C63v86Ev();
extern void _ZN5S56C63v87Ev();
extern void _ZN5S56C63v88Ev();
extern void _ZN5S56C53v89Ev();
extern void _ZN5S56C53v90Ev();
extern void _ZN5S56C53v91Ev();
extern void _ZN5S56C53v92Ev();
extern void _ZN5S56C53v93Ev();
extern void _ZN5S56C53v94Ev();
extern void _ZN5S56C53v95Ev();
extern void _ZN5S56C53v96Ev();
extern void _ZN5S56C53v97Ev();
extern void _ZN5S56C53v98Ev();
extern void _ZN5S56C53v99Ev();
extern void _ZN5S56C54v100Ev();
extern void _ZN5S56C54v101Ev();
extern void _ZN5S56C54v102Ev();
extern void _ZN5S56C54v103Ev();
extern void _ZN5S56C54v104Ev();
extern void _ZN5S56C54v105Ev();
extern void _ZN5S56C54v106Ev();
extern void _ZN5S56C54v107Ev();
extern void _ZN5S56C54v108Ev();
extern void _ZN5S56C44v109Ev();
extern void _ZN5S56C44v110Ev();
extern void _ZN5S56C44v111Ev();
extern void _ZN5S56C44v112Ev();
extern void _ZN5S56C44v113Ev();
extern void _ZN5S56C44v114Ev();
extern void _ZN5S56C44v115Ev();
extern void _ZN5S56C44v116Ev();
extern void _ZN5S56C44v117Ev();
extern void _ZN5S56C44v118Ev();
extern void _ZN5S56C44v119Ev();
extern void _ZN5S56C44v120Ev();
extern void _ZN5S56C44v121Ev();
extern void _ZN5S56C44v122Ev();
extern void _ZN5S56C34v123Ev();
extern void _ZN5S56C34v124Ev();
extern void _ZN5S56C34v125Ev();
extern void _ZN5S56C34v126Ev();
extern void _ZN5S56C34v127Ev();
extern void _ZN5S56C34v128Ev();
extern void _ZN5S56C34v129Ev();
extern void _ZN5S56C34v130Ev();
extern void _ZN5S56C34v131Ev();
extern void _ZN5S56C34v132Ev();
extern void _ZN5S56C34v133Ev();
extern void _ZN5S56C24v134Ev();
extern void _ZN5S56C24v135Ev();
static  VTBL_ENTRY vtc_S56C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S56C2[0]),
  (VTBL_ENTRY)&_ZN5S56C2D1Ev,
  (VTBL_ENTRY)&_ZN5S56C2D0Ev,
  (VTBL_ENTRY)&_ZN5S56C72v3Ev,
  (VTBL_ENTRY)&_ZN5S56C72v4Ev,
  (VTBL_ENTRY)&_ZN5S56C72v5Ev,
  (VTBL_ENTRY)&_ZN5S56C72v6Ev,
  (VTBL_ENTRY)&_ZN5S56C72v7Ev,
  (VTBL_ENTRY)&_ZN5S56C72v8Ev,
  (VTBL_ENTRY)&_ZN5S56C72v9Ev,
  (VTBL_ENTRY)&_ZN5S56C73v10Ev,
  (VTBL_ENTRY)&_ZN5S56C73v11Ev,
  (VTBL_ENTRY)&_ZN5S56C73v12Ev,
  (VTBL_ENTRY)&_ZN5S56C73v13Ev,
  (VTBL_ENTRY)&_ZN5S56C73v14Ev,
  (VTBL_ENTRY)&_ZN5S56C73v15Ev,
  (VTBL_ENTRY)&_ZN5S56C73v16Ev,
  (VTBL_ENTRY)&_ZN5S56C73v17Ev,
  (VTBL_ENTRY)&_ZN5S56C73v18Ev,
  (VTBL_ENTRY)&_ZN5S56C73v19Ev,
  (VTBL_ENTRY)&_ZN5S56C73v20Ev,
  (VTBL_ENTRY)&_ZN5S56C73v21Ev,
  (VTBL_ENTRY)&_ZN5S56C73v22Ev,
  (VTBL_ENTRY)&_ZN5S56C73v23Ev,
  (VTBL_ENTRY)&_ZN5S56C73v24Ev,
  (VTBL_ENTRY)&_ZN5S56C73v25Ev,
  (VTBL_ENTRY)&_ZN5S56C73v26Ev,
  (VTBL_ENTRY)&_ZN5S56C73v27Ev,
  (VTBL_ENTRY)&_ZN5S56C73v28Ev,
  (VTBL_ENTRY)&_ZN5S56C73v29Ev,
  (VTBL_ENTRY)&_ZN5S56C73v30Ev,
  (VTBL_ENTRY)&_ZN5S56C73v31Ev,
  (VTBL_ENTRY)&_ZN5S56C73v32Ev,
  (VTBL_ENTRY)&_ZN5S56C73v33Ev,
  (VTBL_ENTRY)&_ZN5S56C73v34Ev,
  (VTBL_ENTRY)&_ZN5S56C73v35Ev,
  (VTBL_ENTRY)&_ZN5S56C73v36Ev,
  (VTBL_ENTRY)&_ZN5S56C73v37Ev,
  (VTBL_ENTRY)&_ZN5S56C73v38Ev,
  (VTBL_ENTRY)&_ZN5S56C73v39Ev,
  (VTBL_ENTRY)&_ZN5S56C73v40Ev,
  (VTBL_ENTRY)&_ZN5S56C73v41Ev,
  (VTBL_ENTRY)&_ZN5S56C73v42Ev,
  (VTBL_ENTRY)&_ZN5S56C73v43Ev,
  (VTBL_ENTRY)&_ZN5S56C73v44Ev,
  (VTBL_ENTRY)&_ZN5S56C73v45Ev,
  (VTBL_ENTRY)&_ZN5S56C73v46Ev,
  (VTBL_ENTRY)&_ZN5S56C73v47Ev,
  (VTBL_ENTRY)&_ZN5S56C73v48Ev,
  (VTBL_ENTRY)&_ZN5S56C73v49Ev,
  (VTBL_ENTRY)&_ZN5S56C73v50Ev,
  (VTBL_ENTRY)&_ZN5S56C73v51Ev,
  (VTBL_ENTRY)&_ZN5S56C73v52Ev,
  (VTBL_ENTRY)&_ZN5S56C73v53Ev,
  (VTBL_ENTRY)&_ZN5S56C73v54Ev,
  (VTBL_ENTRY)&_ZN5S56C73v55Ev,
  (VTBL_ENTRY)&_ZN5S56C73v56Ev,
  (VTBL_ENTRY)&_ZN5S56C73v57Ev,
  (VTBL_ENTRY)&_ZN5S56C73v58Ev,
  (VTBL_ENTRY)&_ZN5S56C73v59Ev,
  (VTBL_ENTRY)&_ZN5S56C73v60Ev,
  (VTBL_ENTRY)&_ZN5S56C73v61Ev,
  (VTBL_ENTRY)&_ZN5S56C73v62Ev,
  (VTBL_ENTRY)&_ZN5S56C73v63Ev,
  (VTBL_ENTRY)&_ZN5S56C73v64Ev,
  (VTBL_ENTRY)&_ZN5S56C73v65Ev,
  (VTBL_ENTRY)&_ZN5S56C73v66Ev,
  (VTBL_ENTRY)&_ZN5S56C63v67Ev,
  (VTBL_ENTRY)&_ZN5S56C63v68Ev,
  (VTBL_ENTRY)&_ZN5S56C63v69Ev,
  (VTBL_ENTRY)&_ZN5S56C63v70Ev,
  (VTBL_ENTRY)&_ZN5S56C63v71Ev,
  (VTBL_ENTRY)&_ZN5S56C63v72Ev,
  (VTBL_ENTRY)&_ZN5S56C63v73Ev,
  (VTBL_ENTRY)&_ZN5S56C63v74Ev,
  (VTBL_ENTRY)&_ZN5S56C63v75Ev,
  (VTBL_ENTRY)&_ZN5S56C63v76Ev,
  (VTBL_ENTRY)&_ZN5S56C63v77Ev,
  (VTBL_ENTRY)&_ZN5S56C63v78Ev,
  (VTBL_ENTRY)&_ZN5S56C63v79Ev,
  (VTBL_ENTRY)&_ZN5S56C63v80Ev,
  (VTBL_ENTRY)&_ZN5S56C63v81Ev,
  (VTBL_ENTRY)&_ZN5S56C63v82Ev,
  (VTBL_ENTRY)&_ZN5S56C63v83Ev,
  (VTBL_ENTRY)&_ZN5S56C63v84Ev,
  (VTBL_ENTRY)&_ZN5S56C63v85Ev,
  (VTBL_ENTRY)&_ZN5S56C63v86Ev,
  (VTBL_ENTRY)&_ZN5S56C63v87Ev,
  (VTBL_ENTRY)&_ZN5S56C63v88Ev,
  (VTBL_ENTRY)&_ZN5S56C53v89Ev,
  (VTBL_ENTRY)&_ZN5S56C53v90Ev,
  (VTBL_ENTRY)&_ZN5S56C53v91Ev,
  (VTBL_ENTRY)&_ZN5S56C53v92Ev,
  (VTBL_ENTRY)&_ZN5S56C53v93Ev,
  (VTBL_ENTRY)&_ZN5S56C53v94Ev,
  (VTBL_ENTRY)&_ZN5S56C53v95Ev,
  (VTBL_ENTRY)&_ZN5S56C53v96Ev,
  (VTBL_ENTRY)&_ZN5S56C53v97Ev,
  (VTBL_ENTRY)&_ZN5S56C53v98Ev,
  (VTBL_ENTRY)&_ZN5S56C53v99Ev,
  (VTBL_ENTRY)&_ZN5S56C54v100Ev,
  (VTBL_ENTRY)&_ZN5S56C54v101Ev,
  (VTBL_ENTRY)&_ZN5S56C54v102Ev,
  (VTBL_ENTRY)&_ZN5S56C54v103Ev,
  (VTBL_ENTRY)&_ZN5S56C54v104Ev,
  (VTBL_ENTRY)&_ZN5S56C54v105Ev,
  (VTBL_ENTRY)&_ZN5S56C54v106Ev,
  (VTBL_ENTRY)&_ZN5S56C54v107Ev,
  (VTBL_ENTRY)&_ZN5S56C54v108Ev,
  (VTBL_ENTRY)&_ZN5S56C44v109Ev,
  (VTBL_ENTRY)&_ZN5S56C44v110Ev,
  (VTBL_ENTRY)&_ZN5S56C44v111Ev,
  (VTBL_ENTRY)&_ZN5S56C44v112Ev,
  (VTBL_ENTRY)&_ZN5S56C44v113Ev,
  (VTBL_ENTRY)&_ZN5S56C44v114Ev,
  (VTBL_ENTRY)&_ZN5S56C44v115Ev,
  (VTBL_ENTRY)&_ZN5S56C44v116Ev,
  (VTBL_ENTRY)&_ZN5S56C44v117Ev,
  (VTBL_ENTRY)&_ZN5S56C44v118Ev,
  (VTBL_ENTRY)&_ZN5S56C44v119Ev,
  (VTBL_ENTRY)&_ZN5S56C44v120Ev,
  (VTBL_ENTRY)&_ZN5S56C44v121Ev,
  (VTBL_ENTRY)&_ZN5S56C44v122Ev,
  (VTBL_ENTRY)&_ZN5S56C34v123Ev,
  (VTBL_ENTRY)&_ZN5S56C34v124Ev,
  (VTBL_ENTRY)&_ZN5S56C34v125Ev,
  (VTBL_ENTRY)&_ZN5S56C34v126Ev,
  (VTBL_ENTRY)&_ZN5S56C34v127Ev,
  (VTBL_ENTRY)&_ZN5S56C34v128Ev,
  (VTBL_ENTRY)&_ZN5S56C34v129Ev,
  (VTBL_ENTRY)&_ZN5S56C34v130Ev,
  (VTBL_ENTRY)&_ZN5S56C34v131Ev,
  (VTBL_ENTRY)&_ZN5S56C34v132Ev,
  (VTBL_ENTRY)&_ZN5S56C34v133Ev,
  (VTBL_ENTRY)&_ZN5S56C24v134Ev,
  (VTBL_ENTRY)&_ZN5S56C24v135Ev,
};
extern VTBL_ENTRY _ZTI5S56C2[];
extern  VTBL_ENTRY _ZTV5S56C2[];
Class_Descriptor cd_S56C2 = {  "S56C2", // class name
  bases_S56C2, 5,
  &(vtc_S56C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(392,280), // object size
  NSPAIRA(_ZTI5S56C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S56C2),137, //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  S56C1  : S56C2 {
  ::S287C8_nt s56c1f0;
  unsigned int s56c1f1:1;
  virtual  ~S56C1(); // _ZN5S56C1D1Ev
  virtual void  v1(); // _ZN5S56C12v1Ev
  virtual void  v2(); // _ZN5S56C12v2Ev
  S56C1(); // tgen
};
//SIG(1 S56C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ 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 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 Fi FL Fp[4] Fi[2] Fp FC8{ m Fi[2]} Fp[2]} vd v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fi[2] Fp Fi[2] FC9{ BC10{ BC11{ BC12{ m Fp Fi[2]}}}} FC9 FC13{ m} FC9 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 Fi:1 Fi:1 Fi:1 FC14{ BC15{ BC12}} FC16{ BC17{ BC12}} FC18{ BC19{ BC12}} FC20{ BC21{ BC12}} Fi[3]} vd v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC22{ BC23{ BC12}}} vd v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 Fp[2] FC9 Fi:1 Fi:1 FC24{ m Fp FC8}} vd v134 v135} vd v1 v2 FC9 Fi:1}


 S56C1 ::~S56C1(){ note_dtor("S56C1", this);}
void  S56C1 ::v1(){vfunc_called(this, "_ZN5S56C12v1Ev");}
void  S56C1 ::v2(){vfunc_called(this, "_ZN5S56C12v2Ev");}
S56C1 ::S56C1(){ note_ctor("S56C1", this);} // tgen

static void Test_S56C1()
{
  extern Class_Descriptor cd_S56C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(53,75)];
    init_test(&cd_S56C1, buf);
    S56C1 *dp, &lv = *(dp=new (buf) S56C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(416,296), "sizeof(S56C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S56C1)");
    check_base_class_offset(lv, (S56C7*)(S56C6*)(S56C5*)(S56C4*)(S56C3*)(S56C2*), 0, "S56C1");
    check_base_class_offset(lv, (S56C6*)(S56C5*)(S56C4*)(S56C3*)(S56C2*), 0, "S56C1");
    check_base_class_offset(lv, (S56C5*)(S56C4*)(S56C3*)(S56C2*), 0, "S56C1");
    check_base_class_offset(lv, (S56C4*)(S56C3*)(S56C2*), 0, "S56C1");
    check_base_class_offset(lv, (S56C3*)(S56C2*), 0, "S56C1");
    check_base_class_offset(lv, (S56C2*), 0, "S56C1");
    check_field_offset(lv, s56c1f0, ABISELECT(392,280), "S56C1.s56c1f0");
    set_bf_and_test(lv, s56c1f1, ABISELECT(408,292), 0, 1, 1, "S56C1");
    test_class_info(&lv, &cd_S56C1);
    dp->~S56C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS56C1(Test_S56C1, "S56C1", ABISELECT(416,296));

#else // __cplusplus

extern void _ZN5S56C1C1Ev();
extern void _ZN5S56C1D1Ev();
Name_Map name_map_S56C1[] = {
  NSPAIR(_ZN5S56C1C1Ev),
  NSPAIR(_ZN5S56C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S56C7;
extern VTBL_ENTRY _ZTI5S56C7[];
extern  VTBL_ENTRY _ZTV5S56C7[];
extern Class_Descriptor cd_S56C6;
extern VTBL_ENTRY _ZTI5S56C6[];
extern  VTBL_ENTRY _ZTV5S56C6[];
extern Class_Descriptor cd_S56C5;
extern VTBL_ENTRY _ZTI5S56C5[];
extern  VTBL_ENTRY _ZTV5S56C5[];
extern Class_Descriptor cd_S56C4;
extern VTBL_ENTRY _ZTI5S56C4[];
extern  VTBL_ENTRY _ZTV5S56C4[];
extern Class_Descriptor cd_S56C3;
extern VTBL_ENTRY _ZTI5S56C3[];
extern  VTBL_ENTRY _ZTV5S56C3[];
extern Class_Descriptor cd_S56C2;
extern VTBL_ENTRY _ZTI5S56C2[];
extern  VTBL_ENTRY _ZTV5S56C2[];
static Base_Class bases_S56C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S56C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S56C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S56C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S56C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S56C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S56C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S56C1[];
extern void _ZN5S56C1D1Ev();
extern void _ZN5S56C1D0Ev();
extern void _ZN5S56C72v3Ev();
extern void _ZN5S56C72v4Ev();
extern void _ZN5S56C72v5Ev();
extern void _ZN5S56C72v6Ev();
extern void _ZN5S56C72v7Ev();
extern void _ZN5S56C72v8Ev();
extern void _ZN5S56C72v9Ev();
extern void _ZN5S56C73v10Ev();
extern void _ZN5S56C73v11Ev();
extern void _ZN5S56C73v12Ev();
extern void _ZN5S56C73v13Ev();
extern void _ZN5S56C73v14Ev();
extern void _ZN5S56C73v15Ev();
extern void _ZN5S56C73v16Ev();
extern void _ZN5S56C73v17Ev();
extern void _ZN5S56C73v18Ev();
extern void _ZN5S56C73v19Ev();
extern void _ZN5S56C73v20Ev();
extern void _ZN5S56C73v21Ev();
extern void _ZN5S56C73v22Ev();
extern void _ZN5S56C73v23Ev();
extern void _ZN5S56C73v24Ev();
extern void _ZN5S56C73v25Ev();
extern void _ZN5S56C73v26Ev();
extern void _ZN5S56C73v27Ev();
extern void _ZN5S56C73v28Ev();
extern void _ZN5S56C73v29Ev();
extern void _ZN5S56C73v30Ev();
extern void _ZN5S56C73v31Ev();
extern void _ZN5S56C73v32Ev();
extern void _ZN5S56C73v33Ev();
extern void _ZN5S56C73v34Ev();
extern void _ZN5S56C73v35Ev();
extern void _ZN5S56C73v36Ev();
extern void _ZN5S56C73v37Ev();
extern void _ZN5S56C73v38Ev();
extern void _ZN5S56C73v39Ev();
extern void _ZN5S56C73v40Ev();
extern void _ZN5S56C73v41Ev();
extern void _ZN5S56C73v42Ev();
extern void _ZN5S56C73v43Ev();
extern void _ZN5S56C73v44Ev();
extern void _ZN5S56C73v45Ev();
extern void _ZN5S56C73v46Ev();
extern void _ZN5S56C73v47Ev();
extern void _ZN5S56C73v48Ev();
extern void _ZN5S56C73v49Ev();
extern void _ZN5S56C73v50Ev();
extern void _ZN5S56C73v51Ev();
extern void _ZN5S56C73v52Ev();
extern void _ZN5S56C73v53Ev();
extern void _ZN5S56C73v54Ev();
extern void _ZN5S56C73v55Ev();
extern void _ZN5S56C73v56Ev();
extern void _ZN5S56C73v57Ev();
extern void _ZN5S56C73v58Ev();
extern void _ZN5S56C73v59Ev();
extern void _ZN5S56C73v60Ev();
extern void _ZN5S56C73v61Ev();
extern void _ZN5S56C73v62Ev();
extern void _ZN5S56C73v63Ev();
extern void _ZN5S56C73v64Ev();
extern void _ZN5S56C73v65Ev();
extern void _ZN5S56C73v66Ev();
extern void _ZN5S56C63v67Ev();
extern void _ZN5S56C63v68Ev();
extern void _ZN5S56C63v69Ev();
extern void _ZN5S56C63v70Ev();
extern void _ZN5S56C63v71Ev();
extern void _ZN5S56C63v72Ev();
extern void _ZN5S56C63v73Ev();
extern void _ZN5S56C63v74Ev();
extern void _ZN5S56C63v75Ev();
extern void _ZN5S56C63v76Ev();
extern void _ZN5S56C63v77Ev();
extern void _ZN5S56C63v78Ev();
extern void _ZN5S56C63v79Ev();
extern void _ZN5S56C63v80Ev();
extern void _ZN5S56C63v81Ev();
extern void _ZN5S56C63v82Ev();
extern void _ZN5S56C63v83Ev();
extern void _ZN5S56C63v84Ev();
extern void _ZN5S56C63v85Ev();
extern void _ZN5S56C63v86Ev();
extern void _ZN5S56C63v87Ev();
extern void _ZN5S56C63v88Ev();
extern void _ZN5S56C53v89Ev();
extern void _ZN5S56C53v90Ev();
extern void _ZN5S56C53v91Ev();
extern void _ZN5S56C53v92Ev();
extern void _ZN5S56C53v93Ev();
extern void _ZN5S56C53v94Ev();
extern void _ZN5S56C53v95Ev();
extern void _ZN5S56C53v96Ev();
extern void _ZN5S56C53v97Ev();
extern void _ZN5S56C53v98Ev();
extern void _ZN5S56C53v99Ev();
extern void _ZN5S56C54v100Ev();
extern void _ZN5S56C54v101Ev();
extern void _ZN5S56C54v102Ev();
extern void _ZN5S56C54v103Ev();
extern void _ZN5S56C54v104Ev();
extern void _ZN5S56C54v105Ev();
extern void _ZN5S56C54v106Ev();
extern void _ZN5S56C54v107Ev();
extern void _ZN5S56C54v108Ev();
extern void _ZN5S56C44v109Ev();
extern void _ZN5S56C44v110Ev();
extern void _ZN5S56C44v111Ev();
extern void _ZN5S56C44v112Ev();
extern void _ZN5S56C44v113Ev();
extern void _ZN5S56C44v114Ev();
extern void _ZN5S56C44v115Ev();
extern void _ZN5S56C44v116Ev();
extern void _ZN5S56C44v117Ev();
extern void _ZN5S56C44v118Ev();
extern void _ZN5S56C44v119Ev();
extern void _ZN5S56C44v120Ev();
extern void _ZN5S56C44v121Ev();
extern void _ZN5S56C44v122Ev();
extern void _ZN5S56C34v123Ev();
extern void _ZN5S56C34v124Ev();
extern void _ZN5S56C34v125Ev();
extern void _ZN5S56C34v126Ev();
extern void _ZN5S56C34v127Ev();
extern void _ZN5S56C34v128Ev();
extern void _ZN5S56C34v129Ev();
extern void _ZN5S56C34v130Ev();
extern void _ZN5S56C34v131Ev();
extern void _ZN5S56C34v132Ev();
extern void _ZN5S56C34v133Ev();
extern void _ZN5S56C24v134Ev();
extern void _ZN5S56C24v135Ev();
extern void _ZN5S56C12v1Ev();
extern void _ZN5S56C12v2Ev();
static  VTBL_ENTRY vtc_S56C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S56C1[0]),
  (VTBL_ENTRY)&_ZN5S56C1D1Ev,
  (VTBL_ENTRY)&_ZN5S56C1D0Ev,
  (VTBL_ENTRY)&_ZN5S56C72v3Ev,
  (VTBL_ENTRY)&_ZN5S56C72v4Ev,
  (VTBL_ENTRY)&_ZN5S56C72v5Ev,
  (VTBL_ENTRY)&_ZN5S56C72v6Ev,
  (VTBL_ENTRY)&_ZN5S56C72v7Ev,
  (VTBL_ENTRY)&_ZN5S56C72v8Ev,
  (VTBL_ENTRY)&_ZN5S56C72v9Ev,
  (VTBL_ENTRY)&_ZN5S56C73v10Ev,
  (VTBL_ENTRY)&_ZN5S56C73v11Ev,
  (VTBL_ENTRY)&_ZN5S56C73v12Ev,
  (VTBL_ENTRY)&_ZN5S56C73v13Ev,
  (VTBL_ENTRY)&_ZN5S56C73v14Ev,
  (VTBL_ENTRY)&_ZN5S56C73v15Ev,
  (VTBL_ENTRY)&_ZN5S56C73v16Ev,
  (VTBL_ENTRY)&_ZN5S56C73v17Ev,
  (VTBL_ENTRY)&_ZN5S56C73v18Ev,
  (VTBL_ENTRY)&_ZN5S56C73v19Ev,
  (VTBL_ENTRY)&_ZN5S56C73v20Ev,
  (VTBL_ENTRY)&_ZN5S56C73v21Ev,
  (VTBL_ENTRY)&_ZN5S56C73v22Ev,
  (VTBL_ENTRY)&_ZN5S56C73v23Ev,
  (VTBL_ENTRY)&_ZN5S56C73v24Ev,
  (VTBL_ENTRY)&_ZN5S56C73v25Ev,
  (VTBL_ENTRY)&_ZN5S56C73v26Ev,
  (VTBL_ENTRY)&_ZN5S56C73v27Ev,
  (VTBL_ENTRY)&_ZN5S56C73v28Ev,
  (VTBL_ENTRY)&_ZN5S56C73v29Ev,
  (VTBL_ENTRY)&_ZN5S56C73v30Ev,
  (VTBL_ENTRY)&_ZN5S56C73v31Ev,
  (VTBL_ENTRY)&_ZN5S56C73v32Ev,
  (VTBL_ENTRY)&_ZN5S56C73v33Ev,
  (VTBL_ENTRY)&_ZN5S56C73v34Ev,
  (VTBL_ENTRY)&_ZN5S56C73v35Ev,
  (VTBL_ENTRY)&_ZN5S56C73v36Ev,
  (VTBL_ENTRY)&_ZN5S56C73v37Ev,
  (VTBL_ENTRY)&_ZN5S56C73v38Ev,
  (VTBL_ENTRY)&_ZN5S56C73v39Ev,
  (VTBL_ENTRY)&_ZN5S56C73v40Ev,
  (VTBL_ENTRY)&_ZN5S56C73v41Ev,
  (VTBL_ENTRY)&_ZN5S56C73v42Ev,
  (VTBL_ENTRY)&_ZN5S56C73v43Ev,
  (VTBL_ENTRY)&_ZN5S56C73v44Ev,
  (VTBL_ENTRY)&_ZN5S56C73v45Ev,
  (VTBL_ENTRY)&_ZN5S56C73v46Ev,
  (VTBL_ENTRY)&_ZN5S56C73v47Ev,
  (VTBL_ENTRY)&_ZN5S56C73v48Ev,
  (VTBL_ENTRY)&_ZN5S56C73v49Ev,
  (VTBL_ENTRY)&_ZN5S56C73v50Ev,
  (VTBL_ENTRY)&_ZN5S56C73v51Ev,
  (VTBL_ENTRY)&_ZN5S56C73v52Ev,
  (VTBL_ENTRY)&_ZN5S56C73v53Ev,
  (VTBL_ENTRY)&_ZN5S56C73v54Ev,
  (VTBL_ENTRY)&_ZN5S56C73v55Ev,
  (VTBL_ENTRY)&_ZN5S56C73v56Ev,
  (VTBL_ENTRY)&_ZN5S56C73v57Ev,
  (VTBL_ENTRY)&_ZN5S56C73v58Ev,
  (VTBL_ENTRY)&_ZN5S56C73v59Ev,
  (VTBL_ENTRY)&_ZN5S56C73v60Ev,
  (VTBL_ENTRY)&_ZN5S56C73v61Ev,
  (VTBL_ENTRY)&_ZN5S56C73v62Ev,
  (VTBL_ENTRY)&_ZN5S56C73v63Ev,
  (VTBL_ENTRY)&_ZN5S56C73v64Ev,
  (VTBL_ENTRY)&_ZN5S56C73v65Ev,
  (VTBL_ENTRY)&_ZN5S56C73v66Ev,
  (VTBL_ENTRY)&_ZN5S56C63v67Ev,
  (VTBL_ENTRY)&_ZN5S56C63v68Ev,
  (VTBL_ENTRY)&_ZN5S56C63v69Ev,
  (VTBL_ENTRY)&_ZN5S56C63v70Ev,
  (VTBL_ENTRY)&_ZN5S56C63v71Ev,
  (VTBL_ENTRY)&_ZN5S56C63v72Ev,
  (VTBL_ENTRY)&_ZN5S56C63v73Ev,
  (VTBL_ENTRY)&_ZN5S56C63v74Ev,
  (VTBL_ENTRY)&_ZN5S56C63v75Ev,
  (VTBL_ENTRY)&_ZN5S56C63v76Ev,
  (VTBL_ENTRY)&_ZN5S56C63v77Ev,
  (VTBL_ENTRY)&_ZN5S56C63v78Ev,
  (VTBL_ENTRY)&_ZN5S56C63v79Ev,
  (VTBL_ENTRY)&_ZN5S56C63v80Ev,
  (VTBL_ENTRY)&_ZN5S56C63v81Ev,
  (VTBL_ENTRY)&_ZN5S56C63v82Ev,
  (VTBL_ENTRY)&_ZN5S56C63v83Ev,
  (VTBL_ENTRY)&_ZN5S56C63v84Ev,
  (VTBL_ENTRY)&_ZN5S56C63v85Ev,
  (VTBL_ENTRY)&_ZN5S56C63v86Ev,
  (VTBL_ENTRY)&_ZN5S56C63v87Ev,
  (VTBL_ENTRY)&_ZN5S56C63v88Ev,
  (VTBL_ENTRY)&_ZN5S56C53v89Ev,
  (VTBL_ENTRY)&_ZN5S56C53v90Ev,
  (VTBL_ENTRY)&_ZN5S56C53v91Ev,
  (VTBL_ENTRY)&_ZN5S56C53v92Ev,
  (VTBL_ENTRY)&_ZN5S56C53v93Ev,
  (VTBL_ENTRY)&_ZN5S56C53v94Ev,
  (VTBL_ENTRY)&_ZN5S56C53v95Ev,
  (VTBL_ENTRY)&_ZN5S56C53v96Ev,
  (VTBL_ENTRY)&_ZN5S56C53v97Ev,
  (VTBL_ENTRY)&_ZN5S56C53v98Ev,
  (VTBL_ENTRY)&_ZN5S56C53v99Ev,
  (VTBL_ENTRY)&_ZN5S56C54v100Ev,
  (VTBL_ENTRY)&_ZN5S56C54v101Ev,
  (VTBL_ENTRY)&_ZN5S56C54v102Ev,
  (VTBL_ENTRY)&_ZN5S56C54v103Ev,
  (VTBL_ENTRY)&_ZN5S56C54v104Ev,
  (VTBL_ENTRY)&_ZN5S56C54v105Ev,
  (VTBL_ENTRY)&_ZN5S56C54v106Ev,
  (VTBL_ENTRY)&_ZN5S56C54v107Ev,
  (VTBL_ENTRY)&_ZN5S56C54v108Ev,
  (VTBL_ENTRY)&_ZN5S56C44v109Ev,
  (VTBL_ENTRY)&_ZN5S56C44v110Ev,
  (VTBL_ENTRY)&_ZN5S56C44v111Ev,
  (VTBL_ENTRY)&_ZN5S56C44v112Ev,
  (VTBL_ENTRY)&_ZN5S56C44v113Ev,
  (VTBL_ENTRY)&_ZN5S56C44v114Ev,
  (VTBL_ENTRY)&_ZN5S56C44v115Ev,
  (VTBL_ENTRY)&_ZN5S56C44v116Ev,
  (VTBL_ENTRY)&_ZN5S56C44v117Ev,
  (VTBL_ENTRY)&_ZN5S56C44v118Ev,
  (VTBL_ENTRY)&_ZN5S56C44v119Ev,
  (VTBL_ENTRY)&_ZN5S56C44v120Ev,
  (VTBL_ENTRY)&_ZN5S56C44v121Ev,
  (VTBL_ENTRY)&_ZN5S56C44v122Ev,
  (VTBL_ENTRY)&_ZN5S56C34v123Ev,
  (VTBL_ENTRY)&_ZN5S56C34v124Ev,
  (VTBL_ENTRY)&_ZN5S56C34v125Ev,
  (VTBL_ENTRY)&_ZN5S56C34v126Ev,
  (VTBL_ENTRY)&_ZN5S56C34v127Ev,
  (VTBL_ENTRY)&_ZN5S56C34v128Ev,
  (VTBL_ENTRY)&_ZN5S56C34v129Ev,
  (VTBL_ENTRY)&_ZN5S56C34v130Ev,
  (VTBL_ENTRY)&_ZN5S56C34v131Ev,
  (VTBL_ENTRY)&_ZN5S56C34v132Ev,
  (VTBL_ENTRY)&_ZN5S56C34v133Ev,
  (VTBL_ENTRY)&_ZN5S56C24v134Ev,
  (VTBL_ENTRY)&_ZN5S56C24v135Ev,
  (VTBL_ENTRY)&_ZN5S56C12v1Ev,
  (VTBL_ENTRY)&_ZN5S56C12v2Ev,
};
extern VTBL_ENTRY _ZTI5S56C1[];
extern  VTBL_ENTRY _ZTV5S56C1[];
Class_Descriptor cd_S56C1 = {  "S56C1", // class name
  bases_S56C1, 6,
  &(vtc_S56C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(416,296), // object size
  NSPAIRA(_ZTI5S56C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S56C1),139, //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  S57C7  {
  int s57c7f0;
  __tsi64 s57c7f1;
  void *s57c7f2[4];
  int s57c7f3[2];
  void *s57c7f4;
  ::S3350C4_nt s57c7f5;
  void *s57c7f6[2];
  virtual  ~S57C7(); // _ZN5S57C7D1Ev
  virtual void  v3(); // _ZN5S57C72v3Ev
  virtual void  v4(); // _ZN5S57C72v4Ev
  virtual void  v5(); // _ZN5S57C72v5Ev
  virtual void  v6(); // _ZN5S57C72v6Ev
  virtual void  v7(); // _ZN5S57C72v7Ev
  virtual void  v8(); // _ZN5S57C72v8Ev
  virtual void  v9(); // _ZN5S57C72v9Ev
  virtual void  v10(); // _ZN5S57C73v10Ev
  virtual void  v11(); // _ZN5S57C73v11Ev
  virtual void  v12(); // _ZN5S57C73v12Ev
  virtual void  v13(); // _ZN5S57C73v13Ev
  virtual void  v14(); // _ZN5S57C73v14Ev
  virtual void  v15(); // _ZN5S57C73v15Ev
  virtual void  v16(); // _ZN5S57C73v16Ev
  virtual void  v17(); // _ZN5S57C73v17Ev
  virtual void  v18(); // _ZN5S57C73v18Ev
  virtual void  v19(); // _ZN5S57C73v19Ev
  virtual void  v20(); // _ZN5S57C73v20Ev
  virtual void  v21(); // _ZN5S57C73v21Ev
  virtual void  v22(); // _ZN5S57C73v22Ev
  virtual void  v23(); // _ZN5S57C73v23Ev
  virtual void  v24(); // _ZN5S57C73v24Ev
  virtual void  v25(); // _ZN5S57C73v25Ev
  virtual void  v26(); // _ZN5S57C73v26Ev
  virtual void  v27(); // _ZN5S57C73v27Ev
  virtual void  v28(); // _ZN5S57C73v28Ev
  virtual void  v29(); // _ZN5S57C73v29Ev
  virtual void  v30(); // _ZN5S57C73v30Ev
  virtual void  v31(); // _ZN5S57C73v31Ev
  virtual void  v32(); // _ZN5S57C73v32Ev
  virtual void  v33(); // _ZN5S57C73v33Ev
  virtual void  v34(); // _ZN5S57C73v34Ev
  virtual void  v35(); // _ZN5S57C73v35Ev
  virtual void  v36(); // _ZN5S57C73v36Ev
  virtual void  v37(); // _ZN5S57C73v37Ev
  virtual void  v38(); // _ZN5S57C73v38Ev
  virtual void  v39(); // _ZN5S57C73v39Ev
  virtual void  v40(); // _ZN5S57C73v40Ev
  virtual void  v41(); // _ZN5S57C73v41Ev
  virtual void  v42(); // _ZN5S57C73v42Ev
  virtual void  v43(); // _ZN5S57C73v43Ev
  virtual void  v44(); // _ZN5S57C73v44Ev
  virtual void  v45(); // _ZN5S57C73v45Ev
  virtual void  v46(); // _ZN5S57C73v46Ev
  virtual void  v47(); // _ZN5S57C73v47Ev
  virtual void  v48(); // _ZN5S57C73v48Ev
  virtual void  v49(); // _ZN5S57C73v49Ev
  virtual void  v50(); // _ZN5S57C73v50Ev
  virtual void  v51(); // _ZN5S57C73v51Ev
  virtual void  v52(); // _ZN5S57C73v52Ev
  virtual void  v53(); // _ZN5S57C73v53Ev
  virtual void  v54(); // _ZN5S57C73v54Ev
  virtual void  v55(); // _ZN5S57C73v55Ev
  virtual void  v56(); // _ZN5S57C73v56Ev
  virtual void  v57(); // _ZN5S57C73v57Ev
  virtual void  v58(); // _ZN5S57C73v58Ev
  virtual void  v59(); // _ZN5S57C73v59Ev
  virtual void  v60(); // _ZN5S57C73v60Ev
  virtual void  v61(); // _ZN5S57C73v61Ev
  virtual void  v62(); // _ZN5S57C73v62Ev
  virtual void  v63(); // _ZN5S57C73v63Ev
  virtual void  v64(); // _ZN5S57C73v64Ev
  virtual void  v65(); // _ZN5S57C73v65Ev
  virtual void  v66(); // _ZN5S57C73v66Ev
  S57C7(); // tgen
};
//SIG(-1 S57C7) 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]}


 S57C7 ::~S57C7(){ note_dtor("S57C7", this);}
void  S57C7 ::v3(){vfunc_called(this, "_ZN5S57C72v3Ev");}
void  S57C7 ::v4(){vfunc_called(this, "_ZN5S57C72v4Ev");}
void  S57C7 ::v5(){vfunc_called(this, "_ZN5S57C72v5Ev");}
void  S57C7 ::v6(){vfunc_called(this, "_ZN5S57C72v6Ev");}
void  S57C7 ::v7(){vfunc_called(this, "_ZN5S57C72v7Ev");}
void  S57C7 ::v8(){vfunc_called(this, "_ZN5S57C72v8Ev");}
void  S57C7 ::v9(){vfunc_called(this, "_ZN5S57C72v9Ev");}
void  S57C7 ::v10(){vfunc_called(this, "_ZN5S57C73v10Ev");}
void  S57C7 ::v11(){vfunc_called(this, "_ZN5S57C73v11Ev");}
void  S57C7 ::v12(){vfunc_called(this, "_ZN5S57C73v12Ev");}
void  S57C7 ::v13(){vfunc_called(this, "_ZN5S57C73v13Ev");}
void  S57C7 ::v14(){vfunc_called(this, "_ZN5S57C73v14Ev");}
void  S57C7 ::v15(){vfunc_called(this, "_ZN5S57C73v15Ev");}
void  S57C7 ::v16(){vfunc_called(this, "_ZN5S57C73v16Ev");}
void  S57C7 ::v17(){vfunc_called(this, "_ZN5S57C73v17Ev");}
void  S57C7 ::v18(){vfunc_called(this, "_ZN5S57C73v18Ev");}
void  S57C7 ::v19(){vfunc_called(this, "_ZN5S57C73v19Ev");}
void  S57C7 ::v20(){vfunc_called(this, "_ZN5S57C73v20Ev");}
void  S57C7 ::v21(){vfunc_called(this, "_ZN5S57C73v21Ev");}
void  S57C7 ::v22(){vfunc_called(this, "_ZN5S57C73v22Ev");}
void  S57C7 ::v23(){vfunc_called(this, "_ZN5S57C73v23Ev");}
void  S57C7 ::v24(){vfunc_called(this, "_ZN5S57C73v24Ev");}
void  S57C7 ::v25(){vfunc_called(this, "_ZN5S57C73v25Ev");}
void  S57C7 ::v26(){vfunc_called(this, "_ZN5S57C73v26Ev");}
void  S57C7 ::v27(){vfunc_called(this, "_ZN5S57C73v27Ev");}
void  S57C7 ::v28(){vfunc_called(this, "_ZN5S57C73v28Ev");}
void  S57C7 ::v29(){vfunc_called(this, "_ZN5S57C73v29Ev");}
void  S57C7 ::v30(){vfunc_called(this, "_ZN5S57C73v30Ev");}
void  S57C7 ::v31(){vfunc_called(this, "_ZN5S57C73v31Ev");}
void  S57C7 ::v32(){vfunc_called(this, "_ZN5S57C73v32Ev");}
void  S57C7 ::v33(){vfunc_called(this, "_ZN5S57C73v33Ev");}
void  S57C7 ::v34(){vfunc_called(this, "_ZN5S57C73v34Ev");}
void  S57C7 ::v35(){vfunc_called(this, "_ZN5S57C73v35Ev");}
void  S57C7 ::v36(){vfunc_called(this, "_ZN5S57C73v36Ev");}
void  S57C7 ::v37(){vfunc_called(this, "_ZN5S57C73v37Ev");}
void  S57C7 ::v38(){vfunc_called(this, "_ZN5S57C73v38Ev");}
void  S57C7 ::v39(){vfunc_called(this, "_ZN5S57C73v39Ev");}
void  S57C7 ::v40(){vfunc_called(this, "_ZN5S57C73v40Ev");}
void  S57C7 ::v41(){vfunc_called(this, "_ZN5S57C73v41Ev");}
void  S57C7 ::v42(){vfunc_called(this, "_ZN5S57C73v42Ev");}
void  S57C7 ::v43(){vfunc_called(this, "_ZN5S57C73v43Ev");}
void  S57C7 ::v44(){vfunc_called(this, "_ZN5S57C73v44Ev");}
void  S57C7 ::v45(){vfunc_called(this, "_ZN5S57C73v45Ev");}
void  S57C7 ::v46(){vfunc_called(this, "_ZN5S57C73v46Ev");}
void  S57C7 ::v47(){vfunc_called(this, "_ZN5S57C73v47Ev");}
void  S57C7 ::v48(){vfunc_called(this, "_ZN5S57C73v48Ev");}
void  S57C7 ::v49(){vfunc_called(this, "_ZN5S57C73v49Ev");}
void  S57C7 ::v50(){vfunc_called(this, "_ZN5S57C73v50Ev");}
void  S57C7 ::v51(){vfunc_called(this, "_ZN5S57C73v51Ev");}
void  S57C7 ::v52(){vfunc_called(this, "_ZN5S57C73v52Ev");}
void  S57C7 ::v53(){vfunc_called(this, "_ZN5S57C73v53Ev");}
void  S57C7 ::v54(){vfunc_called(this, "_ZN5S57C73v54Ev");}
void  S57C7 ::v55(){vfunc_called(this, "_ZN5S57C73v55Ev");}
void  S57C7 ::v56(){vfunc_called(this, "_ZN5S57C73v56Ev");}
void  S57C7 ::v57(){vfunc_called(this, "_ZN5S57C73v57Ev");}
void  S57C7 ::v58(){vfunc_called(this, "_ZN5S57C73v58Ev");}
void  S57C7 ::v59(){vfunc_called(this, "_ZN5S57C73v59Ev");}
void  S57C7 ::v60(){vfunc_called(this, "_ZN5S57C73v60Ev");}
void  S57C7 ::v61(){vfunc_called(this, "_ZN5S57C73v61Ev");}
void  S57C7 ::v62(){vfunc_called(this, "_ZN5S57C73v62Ev");}
void  S57C7 ::v63(){vfunc_called(this, "_ZN5S57C73v63Ev");}
void  S57C7 ::v64(){vfunc_called(this, "_ZN5S57C73v64Ev");}
void  S57C7 ::v65(){vfunc_called(this, "_ZN5S57C73v65Ev");}
void  S57C7 ::v66(){vfunc_called(this, "_ZN5S57C73v66Ev");}
S57C7 ::S57C7(){ note_ctor("S57C7", this);} // tgen

static void Test_S57C7()
{
  extern Class_Descriptor cd_S57C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S57C7, buf);
    S57C7 *dp, &lv = *(dp=new (buf) S57C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S57C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S57C7)");
    check_field_offset(lv, s57c7f0, ABISELECT(8,4), "S57C7.s57c7f0");
    check_field_offset(lv, s57c7f1, ABISELECT(16,8), "S57C7.s57c7f1");
    check_field_offset(lv, s57c7f2, ABISELECT(24,16), "S57C7.s57c7f2");
    check_field_offset(lv, s57c7f3, ABISELECT(56,32), "S57C7.s57c7f3");
    check_field_offset(lv, s57c7f4, ABISELECT(64,40), "S57C7.s57c7f4");
    check_field_offset(lv, s57c7f5, ABISELECT(72,44), "S57C7.s57c7f5");
    check_field_offset(lv, s57c7f6, ABISELECT(80,52), "S57C7.s57c7f6");
    test_class_info(&lv, &cd_S57C7);
    dp->~S57C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS57C7(Test_S57C7, "S57C7", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN5S57C7C1Ev();
extern void _ZN5S57C7D1Ev();
Name_Map name_map_S57C7[] = {
  NSPAIR(_ZN5S57C7C1Ev),
  NSPAIR(_ZN5S57C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI5S57C7[];
extern void _ZN5S57C7D1Ev();
extern void _ZN5S57C7D0Ev();
extern void _ZN5S57C72v3Ev();
extern void _ZN5S57C72v4Ev();
extern void _ZN5S57C72v5Ev();
extern void _ZN5S57C72v6Ev();
extern void _ZN5S57C72v7Ev();
extern void _ZN5S57C72v8Ev();
extern void _ZN5S57C72v9Ev();
extern void _ZN5S57C73v10Ev();
extern void _ZN5S57C73v11Ev();
extern void _ZN5S57C73v12Ev();
extern void _ZN5S57C73v13Ev();
extern void _ZN5S57C73v14Ev();
extern void _ZN5S57C73v15Ev();
extern void _ZN5S57C73v16Ev();
extern void _ZN5S57C73v17Ev();
extern void _ZN5S57C73v18Ev();
extern void _ZN5S57C73v19Ev();
extern void _ZN5S57C73v20Ev();
extern void _ZN5S57C73v21Ev();
extern void _ZN5S57C73v22Ev();
extern void _ZN5S57C73v23Ev();
extern void _ZN5S57C73v24Ev();
extern void _ZN5S57C73v25Ev();
extern void _ZN5S57C73v26Ev();
extern void _ZN5S57C73v27Ev();
extern void _ZN5S57C73v28Ev();
extern void _ZN5S57C73v29Ev();
extern void _ZN5S57C73v30Ev();
extern void _ZN5S57C73v31Ev();
extern void _ZN5S57C73v32Ev();
extern void _ZN5S57C73v33Ev();
extern void _ZN5S57C73v34Ev();
extern void _ZN5S57C73v35Ev();
extern void _ZN5S57C73v36Ev();
extern void _ZN5S57C73v37Ev();
extern void _ZN5S57C73v38Ev();
extern void _ZN5S57C73v39Ev();
extern void _ZN5S57C73v40Ev();
extern void _ZN5S57C73v41Ev();
extern void _ZN5S57C73v42Ev();
extern void _ZN5S57C73v43Ev();
extern void _ZN5S57C73v44Ev();
extern void _ZN5S57C73v45Ev();
extern void _ZN5S57C73v46Ev();
extern void _ZN5S57C73v47Ev();
extern void _ZN5S57C73v48Ev();
extern void _ZN5S57C73v49Ev();
extern void _ZN5S57C73v50Ev();
extern void _ZN5S57C73v51Ev();
extern void _ZN5S57C73v52Ev();
extern void _ZN5S57C73v53Ev();
extern void _ZN5S57C73v54Ev();
extern void _ZN5S57C73v55Ev();
extern void _ZN5S57C73v56Ev();
extern void _ZN5S57C73v57Ev();
extern void _ZN5S57C73v58Ev();
extern void _ZN5S57C73v59Ev();
extern void _ZN5S57C73v60Ev();
extern void _ZN5S57C73v61Ev();
extern void _ZN5S57C73v62Ev();
extern void _ZN5S57C73v63Ev();
extern void _ZN5S57C73v64Ev();
extern void _ZN5S57C73v65Ev();
extern void _ZN5S57C73v66Ev();
static  VTBL_ENTRY vtc_S57C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S57C7[0]),
  (VTBL_ENTRY)&_ZN5S57C7D1Ev,
  (VTBL_ENTRY)&_ZN5S57C7D0Ev,
  (VTBL_ENTRY)&_ZN5S57C72v3Ev,
  (VTBL_ENTRY)&_ZN5S57C72v4Ev,
  (VTBL_ENTRY)&_ZN5S57C72v5Ev,
  (VTBL_ENTRY)&_ZN5S57C72v6Ev,
  (VTBL_ENTRY)&_ZN5S57C72v7Ev,
  (VTBL_ENTRY)&_ZN5S57C72v8Ev,
  (VTBL_ENTRY)&_ZN5S57C72v9Ev,
  (VTBL_ENTRY)&_ZN5S57C73v10Ev,
  (VTBL_ENTRY)&_ZN5S57C73v11Ev,
  (VTBL_ENTRY)&_ZN5S57C73v12Ev,
  (VTBL_ENTRY)&_ZN5S57C73v13Ev,
  (VTBL_ENTRY)&_ZN5S57C73v14Ev,
  (VTBL_ENTRY)&_ZN5S57C73v15Ev,
  (VTBL_ENTRY)&_ZN5S57C73v16Ev,
  (VTBL_ENTRY)&_ZN5S57C73v17Ev,
  (VTBL_ENTRY)&_ZN5S57C73v18Ev,
  (VTBL_ENTRY)&_ZN5S57C73v19Ev,
  (VTBL_ENTRY)&_ZN5S57C73v20Ev,
  (VTBL_ENTRY)&_ZN5S57C73v21Ev,
  (VTBL_ENTRY)&_ZN5S57C73v22Ev,
  (VTBL_ENTRY)&_ZN5S57C73v23Ev,
  (VTBL_ENTRY)&_ZN5S57C73v24Ev,
  (VTBL_ENTRY)&_ZN5S57C73v25Ev,
  (VTBL_ENTRY)&_ZN5S57C73v26Ev,
  (VTBL_ENTRY)&_ZN5S57C73v27Ev,
  (VTBL_ENTRY)&_ZN5S57C73v28Ev,
  (VTBL_ENTRY)&_ZN5S57C73v29Ev,
  (VTBL_ENTRY)&_ZN5S57C73v30Ev,
  (VTBL_ENTRY)&_ZN5S57C73v31Ev,
  (VTBL_ENTRY)&_ZN5S57C73v32Ev,
  (VTBL_ENTRY)&_ZN5S57C73v33Ev,
  (VTBL_ENTRY)&_ZN5S57C73v34Ev,
  (VTBL_ENTRY)&_ZN5S57C73v35Ev,
  (VTBL_ENTRY)&_ZN5S57C73v36Ev,
  (VTBL_ENTRY)&_ZN5S57C73v37Ev,
  (VTBL_ENTRY)&_ZN5S57C73v38Ev,
  (VTBL_ENTRY)&_ZN5S57C73v39Ev,
  (VTBL_ENTRY)&_ZN5S57C73v40Ev,
  (VTBL_ENTRY)&_ZN5S57C73v41Ev,
  (VTBL_ENTRY)&_ZN5S57C73v42Ev,
  (VTBL_ENTRY)&_ZN5S57C73v43Ev,
  (VTBL_ENTRY)&_ZN5S57C73v44Ev,
  (VTBL_ENTRY)&_ZN5S57C73v45Ev,
  (VTBL_ENTRY)&_ZN5S57C73v46Ev,
  (VTBL_ENTRY)&_ZN5S57C73v47Ev,
  (VTBL_ENTRY)&_ZN5S57C73v48Ev,
  (VTBL_ENTRY)&_ZN5S57C73v49Ev,
  (VTBL_ENTRY)&_ZN5S57C73v50Ev,
  (VTBL_ENTRY)&_ZN5S57C73v51Ev,
  (VTBL_ENTRY)&_ZN5S57C73v52Ev,
  (VTBL_ENTRY)&_ZN5S57C73v53Ev,
  (VTBL_ENTRY)&_ZN5S57C73v54Ev,
  (VTBL_ENTRY)&_ZN5S57C73v55Ev,
  (VTBL_ENTRY)&_ZN5S57C73v56Ev,
  (VTBL_ENTRY)&_ZN5S57C73v57Ev,
  (VTBL_ENTRY)&_ZN5S57C73v58Ev,
  (VTBL_ENTRY)&_ZN5S57C73v59Ev,
  (VTBL_ENTRY)&_ZN5S57C73v60Ev,
  (VTBL_ENTRY)&_ZN5S57C73v61Ev,
  (VTBL_ENTRY)&_ZN5S57C73v62Ev,
  (VTBL_ENTRY)&_ZN5S57C73v63Ev,
  (VTBL_ENTRY)&_ZN5S57C73v64Ev,
  (VTBL_ENTRY)&_ZN5S57C73v65Ev,
  (VTBL_ENTRY)&_ZN5S57C73v66Ev,
};
extern VTBL_ENTRY _ZTI5S57C7[];
extern  VTBL_ENTRY _ZTV5S57C7[];
Class_Descriptor cd_S57C7 = {  "S57C7", // class name
  0,0,//no base classes
  &(vtc_S57C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI5S57C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV5S57C7),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  S57C6  : S57C7 {
  int s57c6f0[2];
  void *s57c6f1;
  int s57c6f2[2];
  ::S287C8_nt s57c6f3;
  ::S287C8_nt s57c6f4;
  ::S2121C38 s57c6f5;
  ::S287C8_nt s57c6f6;
  unsigned int s57c6f7:1;
  unsigned int s57c6f8:1;
  unsigned int s57c6f9:1;
  unsigned int s57c6f10:1;
  unsigned int s57c6f11:1;
  int s57c6f12[2];
  virtual  ~S57C6(); // _ZN5S57C6D1Ev
  virtual void  v67(); // _ZN5S57C63v67Ev
  virtual void  v68(); // _ZN5S57C63v68Ev
  virtual void  v69(); // _ZN5S57C63v69Ev
  virtual void  v70(); // _ZN5S57C63v70Ev
  virtual void  v71(); // _ZN5S57C63v71Ev
  virtual void  v72(); // _ZN5S57C63v72Ev
  virtual void  v73(); // _ZN5S57C63v73Ev
  virtual void  v74(); // _ZN5S57C63v74Ev
  virtual void  v75(); // _ZN5S57C63v75Ev
  virtual void  v76(); // _ZN5S57C63v76Ev
  virtual void  v77(); // _ZN5S57C63v77Ev
  virtual void  v78(); // _ZN5S57C63v78Ev
  virtual void  v79(); // _ZN5S57C63v79Ev
  virtual void  v80(); // _ZN5S57C63v80Ev
  virtual void  v81(); // _ZN5S57C63v81Ev
  virtual void  v82(); // _ZN5S57C63v82Ev
  virtual void  v83(); // _ZN5S57C63v83Ev
  virtual void  v84(); // _ZN5S57C63v84Ev
  virtual void  v85(); // _ZN5S57C63v85Ev
  virtual void  v86(); // _ZN5S57C63v86Ev
  virtual void  v87(); // _ZN5S57C63v87Ev
  virtual void  v88(); // _ZN5S57C63v88Ev
  S57C6(); // tgen
};
//SIG(-1 S57C6) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S57C6 ::~S57C6(){ note_dtor("S57C6", this);}
void  S57C6 ::v67(){vfunc_called(this, "_ZN5S57C63v67Ev");}
void  S57C6 ::v68(){vfunc_called(this, "_ZN5S57C63v68Ev");}
void  S57C6 ::v69(){vfunc_called(this, "_ZN5S57C63v69Ev");}
void  S57C6 ::v70(){vfunc_called(this, "_ZN5S57C63v70Ev");}
void  S57C6 ::v71(){vfunc_called(this, "_ZN5S57C63v71Ev");}
void  S57C6 ::v72(){vfunc_called(this, "_ZN5S57C63v72Ev");}
void  S57C6 ::v73(){vfunc_called(this, "_ZN5S57C63v73Ev");}
void  S57C6 ::v74(){vfunc_called(this, "_ZN5S57C63v74Ev");}
void  S57C6 ::v75(){vfunc_called(this, "_ZN5S57C63v75Ev");}
void  S57C6 ::v76(){vfunc_called(this, "_ZN5S57C63v76Ev");}
void  S57C6 ::v77(){vfunc_called(this, "_ZN5S57C63v77Ev");}
void  S57C6 ::v78(){vfunc_called(this, "_ZN5S57C63v78Ev");}
void  S57C6 ::v79(){vfunc_called(this, "_ZN5S57C63v79Ev");}
void  S57C6 ::v80(){vfunc_called(this, "_ZN5S57C63v80Ev");}
void  S57C6 ::v81(){vfunc_called(this, "_ZN5S57C63v81Ev");}
void  S57C6 ::v82(){vfunc_called(this, "_ZN5S57C63v82Ev");}
void  S57C6 ::v83(){vfunc_called(this, "_ZN5S57C63v83Ev");}
void  S57C6 ::v84(){vfunc_called(this, "_ZN5S57C63v84Ev");}
void  S57C6 ::v85(){vfunc_called(this, "_ZN5S57C63v85Ev");}
void  S57C6 ::v86(){vfunc_called(this, "_ZN5S57C63v86Ev");}
void  S57C6 ::v87(){vfunc_called(this, "_ZN5S57C63v87Ev");}
void  S57C6 ::v88(){vfunc_called(this, "_ZN5S57C63v88Ev");}
S57C6 ::S57C6(){ note_ctor("S57C6", this);} // tgen

static void Test_S57C6()
{
  extern Class_Descriptor cd_S57C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S57C6, buf);
    S57C6 *dp, &lv = *(dp=new (buf) S57C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S57C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S57C6)");
    check_base_class_offset(lv, (S57C7*), 0, "S57C6");
    check_field_offset(lv, s57c6f0, ABISELECT(96,60), "S57C6.s57c6f0");
    check_field_offset(lv, s57c6f1, ABISELECT(104,68), "S57C6.s57c6f1");
    check_field_offset(lv, s57c6f2, ABISELECT(112,72), "S57C6.s57c6f2");
    check_field_offset(lv, s57c6f3, ABISELECT(120,80), "S57C6.s57c6f3");
    check_field_offset(lv, s57c6f4, ABISELECT(136,92), "S57C6.s57c6f4");
    check_field_offset(lv, s57c6f5, ABISELECT(152,104), "S57C6.s57c6f5");
    check_field_offset(lv, s57c6f6, ABISELECT(160,108), "S57C6.s57c6f6");
    set_bf_and_test(lv, s57c6f7, ABISELECT(176,120), 0, 1, 1, "S57C6");
    set_bf_and_test(lv, s57c6f8, ABISELECT(176,120), 1, 1, 1, "S57C6");
    set_bf_and_test(lv, s57c6f9, ABISELECT(176,120), 2, 1, 1, "S57C6");
    set_bf_and_test(lv, s57c6f10, ABISELECT(176,120), 3, 1, 1, "S57C6");
    set_bf_and_test(lv, s57c6f11, ABISELECT(176,120), 4, 1, 1, "S57C6");
    check_field_offset(lv, s57c6f12, ABISELECT(180,124), "S57C6.s57c6f12");
    test_class_info(&lv, &cd_S57C6);
    dp->~S57C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS57C6(Test_S57C6, "S57C6", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN5S57C6C1Ev();
extern void _ZN5S57C6D1Ev();
Name_Map name_map_S57C6[] = {
  NSPAIR(_ZN5S57C6C1Ev),
  NSPAIR(_ZN5S57C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S57C7;
extern VTBL_ENTRY _ZTI5S57C7[];
extern  VTBL_ENTRY _ZTV5S57C7[];
static Base_Class bases_S57C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S57C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI5S57C6[];
extern void _ZN5S57C6D1Ev();
extern void _ZN5S57C6D0Ev();
extern void _ZN5S57C72v3Ev();
extern void _ZN5S57C72v4Ev();
extern void _ZN5S57C72v5Ev();
extern void _ZN5S57C72v6Ev();
extern void _ZN5S57C72v7Ev();
extern void _ZN5S57C72v8Ev();
extern void _ZN5S57C72v9Ev();
extern void _ZN5S57C73v10Ev();
extern void _ZN5S57C73v11Ev();
extern void _ZN5S57C73v12Ev();
extern void _ZN5S57C73v13Ev();
extern void _ZN5S57C73v14Ev();
extern void _ZN5S57C73v15Ev();
extern void _ZN5S57C73v16Ev();
extern void _ZN5S57C73v17Ev();
extern void _ZN5S57C73v18Ev();
extern void _ZN5S57C73v19Ev();
extern void _ZN5S57C73v20Ev();
extern void _ZN5S57C73v21Ev();
extern void _ZN5S57C73v22Ev();
extern void _ZN5S57C73v23Ev();
extern void _ZN5S57C73v24Ev();
extern void _ZN5S57C73v25Ev();
extern void _ZN5S57C73v26Ev();
extern void _ZN5S57C73v27Ev();
extern void _ZN5S57C73v28Ev();
extern void _ZN5S57C73v29Ev();
extern void _ZN5S57C73v30Ev();
extern void _ZN5S57C73v31Ev();
extern void _ZN5S57C73v32Ev();
extern void _ZN5S57C73v33Ev();
extern void _ZN5S57C73v34Ev();
extern void _ZN5S57C73v35Ev();
extern void _ZN5S57C73v36Ev();
extern void _ZN5S57C73v37Ev();
extern void _ZN5S57C73v38Ev();
extern void _ZN5S57C73v39Ev();
extern void _ZN5S57C73v40Ev();
extern void _ZN5S57C73v41Ev();
extern void _ZN5S57C73v42Ev();
extern void _ZN5S57C73v43Ev();
extern void _ZN5S57C73v44Ev();
extern void _ZN5S57C73v45Ev();
extern void _ZN5S57C73v46Ev();
extern void _ZN5S57C73v47Ev();
extern void _ZN5S57C73v48Ev();
extern void _ZN5S57C73v49Ev();
extern void _ZN5S57C73v50Ev();
extern void _ZN5S57C73v51Ev();
extern void _ZN5S57C73v52Ev();
extern void _ZN5S57C73v53Ev();
extern void _ZN5S57C73v54Ev();
extern void _ZN5S57C73v55Ev();
extern void _ZN5S57C73v56Ev();
extern void _ZN5S57C73v57Ev();
extern void _ZN5S57C73v58Ev();
extern void _ZN5S57C73v59Ev();
extern void _ZN5S57C73v60Ev();
extern void _ZN5S57C73v61Ev();
extern void _ZN5S57C73v62Ev();
extern void _ZN5S57C73v63Ev();
extern void _ZN5S57C73v64Ev();
extern void _ZN5S57C73v65Ev();
extern void _ZN5S57C73v66Ev();
extern void _ZN5S57C63v67Ev();
extern void _ZN5S57C63v68Ev();
extern void _ZN5S57C63v69Ev();
extern void _ZN5S57C63v70Ev();
extern void _ZN5S57C63v71Ev();
extern void _ZN5S57C63v72Ev();
extern void _ZN5S57C63v73Ev();
extern void _ZN5S57C63v74Ev();
extern void _ZN5S57C63v75Ev();
extern void _ZN5S57C63v76Ev();
extern void _ZN5S57C63v77Ev();
extern void _ZN5S57C63v78Ev();
extern void _ZN5S57C63v79Ev();
extern void _ZN5S57C63v80Ev();
extern void _ZN5S57C63v81Ev();
extern void _ZN5S57C63v82Ev();
extern void _ZN5S57C63v83Ev();
extern void _ZN5S57C63v84Ev();
extern void _ZN5S57C63v85Ev();
extern void _ZN5S57C63v86Ev();
extern void _ZN5S57C63v87Ev();
extern void _ZN5S57C63v88Ev();
static  VTBL_ENTRY vtc_S57C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S57C6[0]),
  (VTBL_ENTRY)&_ZN5S57C6D1Ev,
  (VTBL_ENTRY)&_ZN5S57C6D0Ev,
  (VTBL_ENTRY)&_ZN5S57C72v3Ev,
  (VTBL_ENTRY)&_ZN5S57C72v4Ev,
  (VTBL_ENTRY)&_ZN5S57C72v5Ev,
  (VTBL_ENTRY)&_ZN5S57C72v6Ev,
  (VTBL_ENTRY)&_ZN5S57C72v7Ev,
  (VTBL_ENTRY)&_ZN5S57C72v8Ev,
  (VTBL_ENTRY)&_ZN5S57C72v9Ev,
  (VTBL_ENTRY)&_ZN5S57C73v10Ev,
  (VTBL_ENTRY)&_ZN5S57C73v11Ev,
  (VTBL_ENTRY)&_ZN5S57C73v12Ev,
  (VTBL_ENTRY)&_ZN5S57C73v13Ev,
  (VTBL_ENTRY)&_ZN5S57C73v14Ev,
  (VTBL_ENTRY)&_ZN5S57C73v15Ev,
  (VTBL_ENTRY)&_ZN5S57C73v16Ev,
  (VTBL_ENTRY)&_ZN5S57C73v17Ev,
  (VTBL_ENTRY)&_ZN5S57C73v18Ev,
  (VTBL_ENTRY)&_ZN5S57C73v19Ev,
  (VTBL_ENTRY)&_ZN5S57C73v20Ev,
  (VTBL_ENTRY)&_ZN5S57C73v21Ev,
  (VTBL_ENTRY)&_ZN5S57C73v22Ev,
  (VTBL_ENTRY)&_ZN5S57C73v23Ev,
  (VTBL_ENTRY)&_ZN5S57C73v24Ev,
  (VTBL_ENTRY)&_ZN5S57C73v25Ev,
  (VTBL_ENTRY)&_ZN5S57C73v26Ev,
  (VTBL_ENTRY)&_ZN5S57C73v27Ev,
  (VTBL_ENTRY)&_ZN5S57C73v28Ev,
  (VTBL_ENTRY)&_ZN5S57C73v29Ev,
  (VTBL_ENTRY)&_ZN5S57C73v30Ev,
  (VTBL_ENTRY)&_ZN5S57C73v31Ev,
  (VTBL_ENTRY)&_ZN5S57C73v32Ev,
  (VTBL_ENTRY)&_ZN5S57C73v33Ev,
  (VTBL_ENTRY)&_ZN5S57C73v34Ev,
  (VTBL_ENTRY)&_ZN5S57C73v35Ev,
  (VTBL_ENTRY)&_ZN5S57C73v36Ev,
  (VTBL_ENTRY)&_ZN5S57C73v37Ev,
  (VTBL_ENTRY)&_ZN5S57C73v38Ev,
  (VTBL_ENTRY)&_ZN5S57C73v39Ev,
  (VTBL_ENTRY)&_ZN5S57C73v40Ev,
  (VTBL_ENTRY)&_ZN5S57C73v41Ev,
  (VTBL_ENTRY)&_ZN5S57C73v42Ev,
  (VTBL_ENTRY)&_ZN5S57C73v43Ev,
  (VTBL_ENTRY)&_ZN5S57C73v44Ev,
  (VTBL_ENTRY)&_ZN5S57C73v45Ev,
  (VTBL_ENTRY)&_ZN5S57C73v46Ev,
  (VTBL_ENTRY)&_ZN5S57C73v47Ev,
  (VTBL_ENTRY)&_ZN5S57C73v48Ev,
  (VTBL_ENTRY)&_ZN5S57C73v49Ev,
  (VTBL_ENTRY)&_ZN5S57C73v50Ev,
  (VTBL_ENTRY)&_ZN5S57C73v51Ev,
  (VTBL_ENTRY)&_ZN5S57C73v52Ev,
  (VTBL_ENTRY)&_ZN5S57C73v53Ev,
  (VTBL_ENTRY)&_ZN5S57C73v54Ev,
  (VTBL_ENTRY)&_ZN5S57C73v55Ev,
  (VTBL_ENTRY)&_ZN5S57C73v56Ev,
  (VTBL_ENTRY)&_ZN5S57C73v57Ev,
  (VTBL_ENTRY)&_ZN5S57C73v58Ev,
  (VTBL_ENTRY)&_ZN5S57C73v59Ev,
  (VTBL_ENTRY)&_ZN5S57C73v60Ev,
  (VTBL_ENTRY)&_ZN5S57C73v61Ev,
  (VTBL_ENTRY)&_ZN5S57C73v62Ev,
  (VTBL_ENTRY)&_ZN5S57C73v63Ev,
  (VTBL_ENTRY)&_ZN5S57C73v64Ev,
  (VTBL_ENTRY)&_ZN5S57C73v65Ev,
  (VTBL_ENTRY)&_ZN5S57C73v66Ev,
  (VTBL_ENTRY)&_ZN5S57C63v67Ev,
  (VTBL_ENTRY)&_ZN5S57C63v68Ev,
  (VTBL_ENTRY)&_ZN5S57C63v69Ev,
  (VTBL_ENTRY)&_ZN5S57C63v70Ev,
  (VTBL_ENTRY)&_ZN5S57C63v71Ev,
  (VTBL_ENTRY)&_ZN5S57C63v72Ev,
  (VTBL_ENTRY)&_ZN5S57C63v73Ev,
  (VTBL_ENTRY)&_ZN5S57C63v74Ev,
  (VTBL_ENTRY)&_ZN5S57C63v75Ev,
  (VTBL_ENTRY)&_ZN5S57C63v76Ev,
  (VTBL_ENTRY)&_ZN5S57C63v77Ev,
  (VTBL_ENTRY)&_ZN5S57C63v78Ev,
  (VTBL_ENTRY)&_ZN5S57C63v79Ev,
  (VTBL_ENTRY)&_ZN5S57C63v80Ev,
  (VTBL_ENTRY)&_ZN5S57C63v81Ev,
  (VTBL_ENTRY)&_ZN5S57C63v82Ev,
  (VTBL_ENTRY)&_ZN5S57C63v83Ev,
  (VTBL_ENTRY)&_ZN5S57C63v84Ev,
  (VTBL_ENTRY)&_ZN5S57C63v85Ev,
  (VTBL_ENTRY)&_ZN5S57C63v86Ev,
  (VTBL_ENTRY)&_ZN5S57C63v87Ev,
  (VTBL_ENTRY)&_ZN5S57C63v88Ev,
};
extern VTBL_ENTRY _ZTI5S57C6[];
extern  VTBL_ENTRY _ZTV5S57C6[];
Class_Descriptor cd_S57C6 = {  "S57C6", // class name
  bases_S57C6, 1,
  &(vtc_S57C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI5S57C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S57C6),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S57C5  : S57C6 {
  unsigned int s57c5f0:1;
  unsigned int s57c5f1:1;
  unsigned int s57c5f2:1;
  ::S3350C17 s57c5f3;
  ::S3350C11 s57c5f4;
  ::S3350C5_nt s57c5f5;
  ::S287C27 s57c5f6;
  int s57c5f7[3];
  virtual  ~S57C5(); // _ZN5S57C5D1Ev
  virtual void  v89(); // _ZN5S57C53v89Ev
  virtual void  v90(); // _ZN5S57C53v90Ev
  virtual void  v91(); // _ZN5S57C53v91Ev
  virtual void  v92(); // _ZN5S57C53v92Ev
  virtual void  v93(); // _ZN5S57C53v93Ev
  virtual void  v94(); // _ZN5S57C53v94Ev
  virtual void  v95(); // _ZN5S57C53v95Ev
  virtual void  v96(); // _ZN5S57C53v96Ev
  virtual void  v97(); // _ZN5S57C53v97Ev
  virtual void  v98(); // _ZN5S57C53v98Ev
  virtual void  v99(); // _ZN5S57C53v99Ev
  virtual void  v100(); // _ZN5S57C54v100Ev
  virtual void  v101(); // _ZN5S57C54v101Ev
  virtual void  v102(); // _ZN5S57C54v102Ev
  virtual void  v103(); // _ZN5S57C54v103Ev
  virtual void  v104(); // _ZN5S57C54v104Ev
  virtual void  v105(); // _ZN5S57C54v105Ev
  virtual void  v106(); // _ZN5S57C54v106Ev
  virtual void  v107(); // _ZN5S57C54v107Ev
  virtual void  v108(); // _ZN5S57C54v108Ev
  S57C5(); // tgen
};
//SIG(-1 S57C5) C1{ BC2{ BC3{ vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 FC10{ BC11{ BC8}} FC12{ BC13{ BC8}} FC14{ BC15{ BC8}} FC16{ BC17{ BC8}} Fi[3]}


 S57C5 ::~S57C5(){ note_dtor("S57C5", this);}
void  S57C5 ::v89(){vfunc_called(this, "_ZN5S57C53v89Ev");}
void  S57C5 ::v90(){vfunc_called(this, "_ZN5S57C53v90Ev");}
void  S57C5 ::v91(){vfunc_called(this, "_ZN5S57C53v91Ev");}
void  S57C5 ::v92(){vfunc_called(this, "_ZN5S57C53v92Ev");}
void  S57C5 ::v93(){vfunc_called(this, "_ZN5S57C53v93Ev");}
void  S57C5 ::v94(){vfunc_called(this, "_ZN5S57C53v94Ev");}
void  S57C5 ::v95(){vfunc_called(this, "_ZN5S57C53v95Ev");}
void  S57C5 ::v96(){vfunc_called(this, "_ZN5S57C53v96Ev");}
void  S57C5 ::v97(){vfunc_called(this, "_ZN5S57C53v97Ev");}
void  S57C5 ::v98(){vfunc_called(this, "_ZN5S57C53v98Ev");}
void  S57C5 ::v99(){vfunc_called(this, "_ZN5S57C53v99Ev");}
void  S57C5 ::v100(){vfunc_called(this, "_ZN5S57C54v100Ev");}
void  S57C5 ::v101(){vfunc_called(this, "_ZN5S57C54v101Ev");}
void  S57C5 ::v102(){vfunc_called(this, "_ZN5S57C54v102Ev");}
void  S57C5 ::v103(){vfunc_called(this, "_ZN5S57C54v103Ev");}
void  S57C5 ::v104(){vfunc_called(this, "_ZN5S57C54v104Ev");}
void  S57C5 ::v105(){vfunc_called(this, "_ZN5S57C54v105Ev");}
void  S57C5 ::v106(){vfunc_called(this, "_ZN5S57C54v106Ev");}
void  S57C5 ::v107(){vfunc_called(this, "_ZN5S57C54v107Ev");}
void  S57C5 ::v108(){vfunc_called(this, "_ZN5S57C54v108Ev");}
S57C5 ::S57C5(){ note_ctor("S57C5", this);} // tgen

static void Test_S57C5()
{
  extern Class_Descriptor cd_S57C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S57C5, buf);
    S57C5 *dp, &lv = *(dp=new (buf) S57C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S57C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S57C5)");
    check_base_class_offset(lv, (S57C7*)(S57C6*), 0, "S57C5");
    check_base_class_offset(lv, (S57C6*), 0, "S57C5");
    set_bf_and_test(lv, s57c5f0, ABISELECT(188,132), 0, 1, 1, "S57C5");
    set_bf_and_test(lv, s57c5f1, ABISELECT(188,132), 1, 1, 1, "S57C5");
    set_bf_and_test(lv, s57c5f2, ABISELECT(188,132), 2, 1, 1, "S57C5");
    check_field_offset(lv, s57c5f3, ABISELECT(192,136), "S57C5.s57c5f3");
    check_field_offset(lv, s57c5f4, ABISELECT(208,148), "S57C5.s57c5f4");
    check_field_offset(lv, s57c5f5, ABISELECT(224,160), "S57C5.s57c5f5");
    check_field_offset(lv, s57c5f6, ABISELECT(240,172), "S57C5.s57c5f6");
    check_field_offset(lv, s57c5f7, ABISELECT(256,184), "S57C5.s57c5f7");
    test_class_info(&lv, &cd_S57C5);
    dp->~S57C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS57C5(Test_S57C5, "S57C5", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN5S57C5C1Ev();
extern void _ZN5S57C5D1Ev();
Name_Map name_map_S57C5[] = {
  NSPAIR(_ZN5S57C5C1Ev),
  NSPAIR(_ZN5S57C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S57C7;
extern VTBL_ENTRY _ZTI5S57C7[];
extern  VTBL_ENTRY _ZTV5S57C7[];
extern Class_Descriptor cd_S57C6;
extern VTBL_ENTRY _ZTI5S57C6[];
extern  VTBL_ENTRY _ZTV5S57C6[];
static Base_Class bases_S57C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S57C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S57C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S57C5[];
extern void _ZN5S57C5D1Ev();
extern void _ZN5S57C5D0Ev();
extern void _ZN5S57C72v3Ev();
extern void _ZN5S57C72v4Ev();
extern void _ZN5S57C72v5Ev();
extern void _ZN5S57C72v6Ev();
extern void _ZN5S57C72v7Ev();
extern void _ZN5S57C72v8Ev();
extern void _ZN5S57C72v9Ev();
extern void _ZN5S57C73v10Ev();
extern void _ZN5S57C73v11Ev();
extern void _ZN5S57C73v12Ev();
extern void _ZN5S57C73v13Ev();
extern void _ZN5S57C73v14Ev();
extern void _ZN5S57C73v15Ev();
extern void _ZN5S57C73v16Ev();
extern void _ZN5S57C73v17Ev();
extern void _ZN5S57C73v18Ev();
extern void _ZN5S57C73v19Ev();
extern void _ZN5S57C73v20Ev();
extern void _ZN5S57C73v21Ev();
extern void _ZN5S57C73v22Ev();
extern void _ZN5S57C73v23Ev();
extern void _ZN5S57C73v24Ev();
extern void _ZN5S57C73v25Ev();
extern void _ZN5S57C73v26Ev();
extern void _ZN5S57C73v27Ev();
extern void _ZN5S57C73v28Ev();
extern void _ZN5S57C73v29Ev();
extern void _ZN5S57C73v30Ev();
extern void _ZN5S57C73v31Ev();
extern void _ZN5S57C73v32Ev();
extern void _ZN5S57C73v33Ev();
extern void _ZN5S57C73v34Ev();
extern void _ZN5S57C73v35Ev();
extern void _ZN5S57C73v36Ev();
extern void _ZN5S57C73v37Ev();
extern void _ZN5S57C73v38Ev();
extern void _ZN5S57C73v39Ev();
extern void _ZN5S57C73v40Ev();
extern void _ZN5S57C73v41Ev();
extern void _ZN5S57C73v42Ev();
extern void _ZN5S57C73v43Ev();
extern void _ZN5S57C73v44Ev();
extern void _ZN5S57C73v45Ev();
extern void _ZN5S57C73v46Ev();
extern void _ZN5S57C73v47Ev();
extern void _ZN5S57C73v48Ev();
extern void _ZN5S57C73v49Ev();
extern void _ZN5S57C73v50Ev();
extern void _ZN5S57C73v51Ev();
extern void _ZN5S57C73v52Ev();
extern void _ZN5S57C73v53Ev();
extern void _ZN5S57C73v54Ev();
extern void _ZN5S57C73v55Ev();
extern void _ZN5S57C73v56Ev();
extern void _ZN5S57C73v57Ev();
extern void _ZN5S57C73v58Ev();
extern void _ZN5S57C73v59Ev();
extern void _ZN5S57C73v60Ev();
extern void _ZN5S57C73v61Ev();
extern void _ZN5S57C73v62Ev();
extern void _ZN5S57C73v63Ev();
extern void _ZN5S57C73v64Ev();
extern void _ZN5S57C73v65Ev();
extern void _ZN5S57C73v66Ev();
extern void _ZN5S57C63v67Ev();
extern void _ZN5S57C63v68Ev();
extern void _ZN5S57C63v69Ev();
extern void _ZN5S57C63v70Ev();
extern void _ZN5S57C63v71Ev();
extern void _ZN5S57C63v72Ev();
extern void _ZN5S57C63v73Ev();
extern void _ZN5S57C63v74Ev();
extern void _ZN5S57C63v75Ev();
extern void _ZN5S57C63v76Ev();
extern void _ZN5S57C63v77Ev();
extern void _ZN5S57C63v78Ev();
extern void _ZN5S57C63v79Ev();
extern void _ZN5S57C63v80Ev();
extern void _ZN5S57C63v81Ev();
extern void _ZN5S57C63v82Ev();
extern void _ZN5S57C63v83Ev();
extern void _ZN5S57C63v84Ev();
extern void _ZN5S57C63v85Ev();
extern void _ZN5S57C63v86Ev();
extern void _ZN5S57C63v87Ev();
extern void _ZN5S57C63v88Ev();
extern void _ZN5S57C53v89Ev();
extern void _ZN5S57C53v90Ev();
extern void _ZN5S57C53v91Ev();
extern void _ZN5S57C53v92Ev();
extern void _ZN5S57C53v93Ev();
extern void _ZN5S57C53v94Ev();
extern void _ZN5S57C53v95Ev();
extern void _ZN5S57C53v96Ev();
extern void _ZN5S57C53v97Ev();
extern void _ZN5S57C53v98Ev();
extern void _ZN5S57C53v99Ev();
extern void _ZN5S57C54v100Ev();
extern void _ZN5S57C54v101Ev();
extern void _ZN5S57C54v102Ev();
extern void _ZN5S57C54v103Ev();
extern void _ZN5S57C54v104Ev();
extern void _ZN5S57C54v105Ev();
extern void _ZN5S57C54v106Ev();
extern void _ZN5S57C54v107Ev();
extern void _ZN5S57C54v108Ev();
static  VTBL_ENTRY vtc_S57C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S57C5[0]),
  (VTBL_ENTRY)&_ZN5S57C5D1Ev,
  (VTBL_ENTRY)&_ZN5S57C5D0Ev,
  (VTBL_ENTRY)&_ZN5S57C72v3Ev,
  (VTBL_ENTRY)&_ZN5S57C72v4Ev,
  (VTBL_ENTRY)&_ZN5S57C72v5Ev,
  (VTBL_ENTRY)&_ZN5S57C72v6Ev,
  (VTBL_ENTRY)&_ZN5S57C72v7Ev,
  (VTBL_ENTRY)&_ZN5S57C72v8Ev,
  (VTBL_ENTRY)&_ZN5S57C72v9Ev,
  (VTBL_ENTRY)&_ZN5S57C73v10Ev,
  (VTBL_ENTRY)&_ZN5S57C73v11Ev,
  (VTBL_ENTRY)&_ZN5S57C73v12Ev,
  (VTBL_ENTRY)&_ZN5S57C73v13Ev,
  (VTBL_ENTRY)&_ZN5S57C73v14Ev,
  (VTBL_ENTRY)&_ZN5S57C73v15Ev,
  (VTBL_ENTRY)&_ZN5S57C73v16Ev,
  (VTBL_ENTRY)&_ZN5S57C73v17Ev,
  (VTBL_ENTRY)&_ZN5S57C73v18Ev,
  (VTBL_ENTRY)&_ZN5S57C73v19Ev,
  (VTBL_ENTRY)&_ZN5S57C73v20Ev,
  (VTBL_ENTRY)&_ZN5S57C73v21Ev,
  (VTBL_ENTRY)&_ZN5S57C73v22Ev,
  (VTBL_ENTRY)&_ZN5S57C73v23Ev,
  (VTBL_ENTRY)&_ZN5S57C73v24Ev,
  (VTBL_ENTRY)&_ZN5S57C73v25Ev,
  (VTBL_ENTRY)&_ZN5S57C73v26Ev,
  (VTBL_ENTRY)&_ZN5S57C73v27Ev,
  (VTBL_ENTRY)&_ZN5S57C73v28Ev,
  (VTBL_ENTRY)&_ZN5S57C73v29Ev,
  (VTBL_ENTRY)&_ZN5S57C73v30Ev,
  (VTBL_ENTRY)&_ZN5S57C73v31Ev,
  (VTBL_ENTRY)&_ZN5S57C73v32Ev,
  (VTBL_ENTRY)&_ZN5S57C73v33Ev,
  (VTBL_ENTRY)&_ZN5S57C73v34Ev,
  (VTBL_ENTRY)&_ZN5S57C73v35Ev,
  (VTBL_ENTRY)&_ZN5S57C73v36Ev,
  (VTBL_ENTRY)&_ZN5S57C73v37Ev,
  (VTBL_ENTRY)&_ZN5S57C73v38Ev,
  (VTBL_ENTRY)&_ZN5S57C73v39Ev,
  (VTBL_ENTRY)&_ZN5S57C73v40Ev,
  (VTBL_ENTRY)&_ZN5S57C73v41Ev,
  (VTBL_ENTRY)&_ZN5S57C73v42Ev,
  (VTBL_ENTRY)&_ZN5S57C73v43Ev,
  (VTBL_ENTRY)&_ZN5S57C73v44Ev,
  (VTBL_ENTRY)&_ZN5S57C73v45Ev,
  (VTBL_ENTRY)&_ZN5S57C73v46Ev,
  (VTBL_ENTRY)&_ZN5S57C73v47Ev,
  (VTBL_ENTRY)&_ZN5S57C73v48Ev,
  (VTBL_ENTRY)&_ZN5S57C73v49Ev,
  (VTBL_ENTRY)&_ZN5S57C73v50Ev,
  (VTBL_ENTRY)&_ZN5S57C73v51Ev,
  (VTBL_ENTRY)&_ZN5S57C73v52Ev,
  (VTBL_ENTRY)&_ZN5S57C73v53Ev,
  (VTBL_ENTRY)&_ZN5S57C73v54Ev,
  (VTBL_ENTRY)&_ZN5S57C73v55Ev,
  (VTBL_ENTRY)&_ZN5S57C73v56Ev,
  (VTBL_ENTRY)&_ZN5S57C73v57Ev,
  (VTBL_ENTRY)&_ZN5S57C73v58Ev,
  (VTBL_ENTRY)&_ZN5S57C73v59Ev,
  (VTBL_ENTRY)&_ZN5S57C73v60Ev,
  (VTBL_ENTRY)&_ZN5S57C73v61Ev,
  (VTBL_ENTRY)&_ZN5S57C73v62Ev,
  (VTBL_ENTRY)&_ZN5S57C73v63Ev,
  (VTBL_ENTRY)&_ZN5S57C73v64Ev,
  (VTBL_ENTRY)&_ZN5S57C73v65Ev,
  (VTBL_ENTRY)&_ZN5S57C73v66Ev,
  (VTBL_ENTRY)&_ZN5S57C63v67Ev,
  (VTBL_ENTRY)&_ZN5S57C63v68Ev,
  (VTBL_ENTRY)&_ZN5S57C63v69Ev,
  (VTBL_ENTRY)&_ZN5S57C63v70Ev,
  (VTBL_ENTRY)&_ZN5S57C63v71Ev,
  (VTBL_ENTRY)&_ZN5S57C63v72Ev,
  (VTBL_ENTRY)&_ZN5S57C63v73Ev,
  (VTBL_ENTRY)&_ZN5S57C63v74Ev,
  (VTBL_ENTRY)&_ZN5S57C63v75Ev,
  (VTBL_ENTRY)&_ZN5S57C63v76Ev,
  (VTBL_ENTRY)&_ZN5S57C63v77Ev,
  (VTBL_ENTRY)&_ZN5S57C63v78Ev,
  (VTBL_ENTRY)&_ZN5S57C63v79Ev,
  (VTBL_ENTRY)&_ZN5S57C63v80Ev,
  (VTBL_ENTRY)&_ZN5S57C63v81Ev,
  (VTBL_ENTRY)&_ZN5S57C63v82Ev,
  (VTBL_ENTRY)&_ZN5S57C63v83Ev,
  (VTBL_ENTRY)&_ZN5S57C63v84Ev,
  (VTBL_ENTRY)&_ZN5S57C63v85Ev,
  (VTBL_ENTRY)&_ZN5S57C63v86Ev,
  (VTBL_ENTRY)&_ZN5S57C63v87Ev,
  (VTBL_ENTRY)&_ZN5S57C63v88Ev,
  (VTBL_ENTRY)&_ZN5S57C53v89Ev,
  (VTBL_ENTRY)&_ZN5S57C53v90Ev,
  (VTBL_ENTRY)&_ZN5S57C53v91Ev,
  (VTBL_ENTRY)&_ZN5S57C53v92Ev,
  (VTBL_ENTRY)&_ZN5S57C53v93Ev,
  (VTBL_ENTRY)&_ZN5S57C53v94Ev,
  (VTBL_ENTRY)&_ZN5S57C53v95Ev,
  (VTBL_ENTRY)&_ZN5S57C53v96Ev,
  (VTBL_ENTRY)&_ZN5S57C53v97Ev,
  (VTBL_ENTRY)&_ZN5S57C53v98Ev,
  (VTBL_ENTRY)&_ZN5S57C53v99Ev,
  (VTBL_ENTRY)&_ZN5S57C54v100Ev,
  (VTBL_ENTRY)&_ZN5S57C54v101Ev,
  (VTBL_ENTRY)&_ZN5S57C54v102Ev,
  (VTBL_ENTRY)&_ZN5S57C54v103Ev,
  (VTBL_ENTRY)&_ZN5S57C54v104Ev,
  (VTBL_ENTRY)&_ZN5S57C54v105Ev,
  (VTBL_ENTRY)&_ZN5S57C54v106Ev,
  (VTBL_ENTRY)&_ZN5S57C54v107Ev,
  (VTBL_ENTRY)&_ZN5S57C54v108Ev,
};
extern VTBL_ENTRY _ZTI5S57C5[];
extern  VTBL_ENTRY _ZTV5S57C5[];
Class_Descriptor cd_S57C5 = {  "S57C5", // class name
  bases_S57C5, 2,
  &(vtc_S57C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI5S57C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S57C5),110, //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  S57C4  : S57C5 {
  void *s57c4f0[2];
  int s57c4f1[4];
  unsigned int s57c4f2:1;
  unsigned int s57c4f3:1;
  unsigned int s57c4f4:1;
  char s57c4f5;
  int s57c4f6;
  unsigned int s57c4f7:1;
  ::S287C23 s57c4f8;
  virtual  ~S57C4(); // _ZN5S57C4D1Ev
  virtual void  v109(); // _ZN5S57C44v109Ev
  virtual void  v110(); // _ZN5S57C44v110Ev
  virtual void  v111(); // _ZN5S57C44v111Ev
  virtual void  v112(); // _ZN5S57C44v112Ev
  virtual void  v113(); // _ZN5S57C44v113Ev
  virtual void  v114(); // _ZN5S57C44v114Ev
  virtual void  v115(); // _ZN5S57C44v115Ev
  virtual void  v116(); // _ZN5S57C44v116Ev
  virtual void  v117(); // _ZN5S57C44v117Ev
  virtual void  v118(); // _ZN5S57C44v118Ev
  virtual void  v119(); // _ZN5S57C44v119Ev
  virtual void  v120(); // _ZN5S57C44v120Ev
  virtual void  v121(); // _ZN5S57C44v121Ev
  virtual void  v122(); // _ZN5S57C44v122Ev
  S57C4(); // tgen
};
//SIG(-1 S57C4) C1{ BC2{ BC3{ BC4{ 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 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 Fi:1 Fi:1 Fi:1 FC11{ BC12{ BC9}} FC13{ BC14{ BC9}} FC15{ BC16{ BC9}} FC17{ BC18{ BC9}} Fi[3]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC19{ BC20{ BC9}}}


 S57C4 ::~S57C4(){ note_dtor("S57C4", this);}
void  S57C4 ::v109(){vfunc_called(this, "_ZN5S57C44v109Ev");}
void  S57C4 ::v110(){vfunc_called(this, "_ZN5S57C44v110Ev");}
void  S57C4 ::v111(){vfunc_called(this, "_ZN5S57C44v111Ev");}
void  S57C4 ::v112(){vfunc_called(this, "_ZN5S57C44v112Ev");}
void  S57C4 ::v113(){vfunc_called(this, "_ZN5S57C44v113Ev");}
void  S57C4 ::v114(){vfunc_called(this, "_ZN5S57C44v114Ev");}
void  S57C4 ::v115(){vfunc_called(this, "_ZN5S57C44v115Ev");}
void  S57C4 ::v116(){vfunc_called(this, "_ZN5S57C44v116Ev");}
void  S57C4 ::v117(){vfunc_called(this, "_ZN5S57C44v117Ev");}
void  S57C4 ::v118(){vfunc_called(this, "_ZN5S57C44v118Ev");}
void  S57C4 ::v119(){vfunc_called(this, "_ZN5S57C44v119Ev");}
void  S57C4 ::v120(){vfunc_called(this, "_ZN5S57C44v120Ev");}
void  S57C4 ::v121(){vfunc_called(this, "_ZN5S57C44v121Ev");}
void  S57C4 ::v122(){vfunc_called(this, "_ZN5S57C44v122Ev");}
S57C4 ::S57C4(){ note_ctor("S57C4", this);} // tgen

static void Test_S57C4()
{
  extern Class_Descriptor cd_S57C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(43,62)];
    init_test(&cd_S57C4, buf);
    S57C4 *dp, &lv = *(dp=new (buf) S57C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,244), "sizeof(S57C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S57C4)");
    check_base_class_offset(lv, (S57C7*)(S57C6*)(S57C5*), 0, "S57C4");
    check_base_class_offset(lv, (S57C6*)(S57C5*), 0, "S57C4");
    check_base_class_offset(lv, (S57C5*), 0, "S57C4");
    check_field_offset(lv, s57c4f0, ABISELECT(272,196), "S57C4.s57c4f0");
    check_field_offset(lv, s57c4f1, ABISELECT(288,204), "S57C4.s57c4f1");
    set_bf_and_test(lv, s57c4f2, ABISELECT(304,220), 0, 1, 1, "S57C4");
    set_bf_and_test(lv, s57c4f3, ABISELECT(304,220), 1, 1, 1, "S57C4");
    set_bf_and_test(lv, s57c4f4, ABISELECT(304,220), 2, 1, 1, "S57C4");
    check_field_offset(lv, s57c4f5, ABISELECT(305,221), "S57C4.s57c4f5");
    check_field_offset(lv, s57c4f6, ABISELECT(308,224), "S57C4.s57c4f6");
    set_bf_and_test(lv, s57c4f7, ABISELECT(312,228), 0, 1, 1, "S57C4");
    check_field_offset(lv, s57c4f8, ABISELECT(320,232), "S57C4.s57c4f8");
    test_class_info(&lv, &cd_S57C4);
    dp->~S57C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS57C4(Test_S57C4, "S57C4", ABISELECT(336,244));

#else // __cplusplus

extern void _ZN5S57C4C1Ev();
extern void _ZN5S57C4D1Ev();
Name_Map name_map_S57C4[] = {
  NSPAIR(_ZN5S57C4C1Ev),
  NSPAIR(_ZN5S57C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S57C7;
extern VTBL_ENTRY _ZTI5S57C7[];
extern  VTBL_ENTRY _ZTV5S57C7[];
extern Class_Descriptor cd_S57C6;
extern VTBL_ENTRY _ZTI5S57C6[];
extern  VTBL_ENTRY _ZTV5S57C6[];
extern Class_Descriptor cd_S57C5;
extern VTBL_ENTRY _ZTI5S57C5[];
extern  VTBL_ENTRY _ZTV5S57C5[];
static Base_Class bases_S57C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S57C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S57C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S57C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S57C4[];
extern void _ZN5S57C4D1Ev();
extern void _ZN5S57C4D0Ev();
extern void _ZN5S57C72v3Ev();
extern void _ZN5S57C72v4Ev();
extern void _ZN5S57C72v5Ev();
extern void _ZN5S57C72v6Ev();
extern void _ZN5S57C72v7Ev();
extern void _ZN5S57C72v8Ev();
extern void _ZN5S57C72v9Ev();
extern void _ZN5S57C73v10Ev();
extern void _ZN5S57C73v11Ev();
extern void _ZN5S57C73v12Ev();
extern void _ZN5S57C73v13Ev();
extern void _ZN5S57C73v14Ev();
extern void _ZN5S57C73v15Ev();
extern void _ZN5S57C73v16Ev();
extern void _ZN5S57C73v17Ev();
extern void _ZN5S57C73v18Ev();
extern void _ZN5S57C73v19Ev();
extern void _ZN5S57C73v20Ev();
extern void _ZN5S57C73v21Ev();
extern void _ZN5S57C73v22Ev();
extern void _ZN5S57C73v23Ev();
extern void _ZN5S57C73v24Ev();
extern void _ZN5S57C73v25Ev();
extern void _ZN5S57C73v26Ev();
extern void _ZN5S57C73v27Ev();
extern void _ZN5S57C73v28Ev();
extern void _ZN5S57C73v29Ev();
extern void _ZN5S57C73v30Ev();
extern void _ZN5S57C73v31Ev();
extern void _ZN5S57C73v32Ev();
extern void _ZN5S57C73v33Ev();
extern void _ZN5S57C73v34Ev();
extern void _ZN5S57C73v35Ev();
extern void _ZN5S57C73v36Ev();
extern void _ZN5S57C73v37Ev();
extern void _ZN5S57C73v38Ev();
extern void _ZN5S57C73v39Ev();
extern void _ZN5S57C73v40Ev();
extern void _ZN5S57C73v41Ev();
extern void _ZN5S57C73v42Ev();
extern void _ZN5S57C73v43Ev();
extern void _ZN5S57C73v44Ev();
extern void _ZN5S57C73v45Ev();
extern void _ZN5S57C73v46Ev();
extern void _ZN5S57C73v47Ev();
extern void _ZN5S57C73v48Ev();
extern void _ZN5S57C73v49Ev();
extern void _ZN5S57C73v50Ev();
extern void _ZN5S57C73v51Ev();
extern void _ZN5S57C73v52Ev();
extern void _ZN5S57C73v53Ev();
extern void _ZN5S57C73v54Ev();
extern void _ZN5S57C73v55Ev();
extern void _ZN5S57C73v56Ev();
extern void _ZN5S57C73v57Ev();
extern void _ZN5S57C73v58Ev();
extern void _ZN5S57C73v59Ev();
extern void _ZN5S57C73v60Ev();
extern void _ZN5S57C73v61Ev();
extern void _ZN5S57C73v62Ev();
extern void _ZN5S57C73v63Ev();
extern void _ZN5S57C73v64Ev();
extern void _ZN5S57C73v65Ev();
extern void _ZN5S57C73v66Ev();
extern void _ZN5S57C63v67Ev();
extern void _ZN5S57C63v68Ev();
extern void _ZN5S57C63v69Ev();
extern void _ZN5S57C63v70Ev();
extern void _ZN5S57C63v71Ev();
extern void _ZN5S57C63v72Ev();
extern void _ZN5S57C63v73Ev();
extern void _ZN5S57C63v74Ev();
extern void _ZN5S57C63v75Ev();
extern void _ZN5S57C63v76Ev();
extern void _ZN5S57C63v77Ev();
extern void _ZN5S57C63v78Ev();
extern void _ZN5S57C63v79Ev();
extern void _ZN5S57C63v80Ev();
extern void _ZN5S57C63v81Ev();
extern void _ZN5S57C63v82Ev();
extern void _ZN5S57C63v83Ev();
extern void _ZN5S57C63v84Ev();
extern void _ZN5S57C63v85Ev();
extern void _ZN5S57C63v86Ev();
extern void _ZN5S57C63v87Ev();
extern void _ZN5S57C63v88Ev();
extern void _ZN5S57C53v89Ev();
extern void _ZN5S57C53v90Ev();
extern void _ZN5S57C53v91Ev();
extern void _ZN5S57C53v92Ev();
extern void _ZN5S57C53v93Ev();
extern void _ZN5S57C53v94Ev();
extern void _ZN5S57C53v95Ev();
extern void _ZN5S57C53v96Ev();
extern void _ZN5S57C53v97Ev();
extern void _ZN5S57C53v98Ev();
extern void _ZN5S57C53v99Ev();
extern void _ZN5S57C54v100Ev();
extern void _ZN5S57C54v101Ev();
extern void _ZN5S57C54v102Ev();
extern void _ZN5S57C54v103Ev();
extern void _ZN5S57C54v104Ev();
extern void _ZN5S57C54v105Ev();
extern void _ZN5S57C54v106Ev();
extern void _ZN5S57C54v107Ev();
extern void _ZN5S57C54v108Ev();
extern void _ZN5S57C44v109Ev();
extern void _ZN5S57C44v110Ev();
extern void _ZN5S57C44v111Ev();
extern void _ZN5S57C44v112Ev();
extern void _ZN5S57C44v113Ev();
extern void _ZN5S57C44v114Ev();
extern void _ZN5S57C44v115Ev();
extern void _ZN5S57C44v116Ev();
extern void _ZN5S57C44v117Ev();
extern void _ZN5S57C44v118Ev();
extern void _ZN5S57C44v119Ev();
extern void _ZN5S57C44v120Ev();
extern void _ZN5S57C44v121Ev();
extern void _ZN5S57C44v122Ev();
static  VTBL_ENTRY vtc_S57C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S57C4[0]),
  (VTBL_ENTRY)&_ZN5S57C4D1Ev,
  (VTBL_ENTRY)&_ZN5S57C4D0Ev,
  (VTBL_ENTRY)&_ZN5S57C72v3Ev,
  (VTBL_ENTRY)&_ZN5S57C72v4Ev,
  (VTBL_ENTRY)&_ZN5S57C72v5Ev,
  (VTBL_ENTRY)&_ZN5S57C72v6Ev,
  (VTBL_ENTRY)&_ZN5S57C72v7Ev,
  (VTBL_ENTRY)&_ZN5S57C72v8Ev,
  (VTBL_ENTRY)&_ZN5S57C72v9Ev,
  (VTBL_ENTRY)&_ZN5S57C73v10Ev,
  (VTBL_ENTRY)&_ZN5S57C73v11Ev,
  (VTBL_ENTRY)&_ZN5S57C73v12Ev,
  (VTBL_ENTRY)&_ZN5S57C73v13Ev,
  (VTBL_ENTRY)&_ZN5S57C73v14Ev,
  (VTBL_ENTRY)&_ZN5S57C73v15Ev,
  (VTBL_ENTRY)&_ZN5S57C73v16Ev,
  (VTBL_ENTRY)&_ZN5S57C73v17Ev,
  (VTBL_ENTRY)&_ZN5S57C73v18Ev,
  (VTBL_ENTRY)&_ZN5S57C73v19Ev,
  (VTBL_ENTRY)&_ZN5S57C73v20Ev,
  (VTBL_ENTRY)&_ZN5S57C73v21Ev,
  (VTBL_ENTRY)&_ZN5S57C73v22Ev,
  (VTBL_ENTRY)&_ZN5S57C73v23Ev,
  (VTBL_ENTRY)&_ZN5S57C73v24Ev,
  (VTBL_ENTRY)&_ZN5S57C73v25Ev,
  (VTBL_ENTRY)&_ZN5S57C73v26Ev,
  (VTBL_ENTRY)&_ZN5S57C73v27Ev,
  (VTBL_ENTRY)&_ZN5S57C73v28Ev,
  (VTBL_ENTRY)&_ZN5S57C73v29Ev,
  (VTBL_ENTRY)&_ZN5S57C73v30Ev,
  (VTBL_ENTRY)&_ZN5S57C73v31Ev,
  (VTBL_ENTRY)&_ZN5S57C73v32Ev,
  (VTBL_ENTRY)&_ZN5S57C73v33Ev,
  (VTBL_ENTRY)&_ZN5S57C73v34Ev,
  (VTBL_ENTRY)&_ZN5S57C73v35Ev,
  (VTBL_ENTRY)&_ZN5S57C73v36Ev,
  (VTBL_ENTRY)&_ZN5S57C73v37Ev,
  (VTBL_ENTRY)&_ZN5S57C73v38Ev,
  (VTBL_ENTRY)&_ZN5S57C73v39Ev,
  (VTBL_ENTRY)&_ZN5S57C73v40Ev,
  (VTBL_ENTRY)&_ZN5S57C73v41Ev,
  (VTBL_ENTRY)&_ZN5S57C73v42Ev,
  (VTBL_ENTRY)&_ZN5S57C73v43Ev,
  (VTBL_ENTRY)&_ZN5S57C73v44Ev,
  (VTBL_ENTRY)&_ZN5S57C73v45Ev,
  (VTBL_ENTRY)&_ZN5S57C73v46Ev,
  (VTBL_ENTRY)&_ZN5S57C73v47Ev,
  (VTBL_ENTRY)&_ZN5S57C73v48Ev,
  (VTBL_ENTRY)&_ZN5S57C73v49Ev,
  (VTBL_ENTRY)&_ZN5S57C73v50Ev,
  (VTBL_ENTRY)&_ZN5S57C73v51Ev,
  (VTBL_ENTRY)&_ZN5S57C73v52Ev,
  (VTBL_ENTRY)&_ZN5S57C73v53Ev,
  (VTBL_ENTRY)&_ZN5S57C73v54Ev,
  (VTBL_ENTRY)&_ZN5S57C73v55Ev,
  (VTBL_ENTRY)&_ZN5S57C73v56Ev,
  (VTBL_ENTRY)&_ZN5S57C73v57Ev,
  (VTBL_ENTRY)&_ZN5S57C73v58Ev,
  (VTBL_ENTRY)&_ZN5S57C73v59Ev,
  (VTBL_ENTRY)&_ZN5S57C73v60Ev,
  (VTBL_ENTRY)&_ZN5S57C73v61Ev,
  (VTBL_ENTRY)&_ZN5S57C73v62Ev,
  (VTBL_ENTRY)&_ZN5S57C73v63Ev,
  (VTBL_ENTRY)&_ZN5S57C73v64Ev,
  (VTBL_ENTRY)&_ZN5S57C73v65Ev,
  (VTBL_ENTRY)&_ZN5S57C73v66Ev,
  (VTBL_ENTRY)&_ZN5S57C63v67Ev,
  (VTBL_ENTRY)&_ZN5S57C63v68Ev,
  (VTBL_ENTRY)&_ZN5S57C63v69Ev,
  (VTBL_ENTRY)&_ZN5S57C63v70Ev,
  (VTBL_ENTRY)&_ZN5S57C63v71Ev,
  (VTBL_ENTRY)&_ZN5S57C63v72Ev,
  (VTBL_ENTRY)&_ZN5S57C63v73Ev,
  (VTBL_ENTRY)&_ZN5S57C63v74Ev,
  (VTBL_ENTRY)&_ZN5S57C63v75Ev,
  (VTBL_ENTRY)&_ZN5S57C63v76Ev,
  (VTBL_ENTRY)&_ZN5S57C63v77Ev,
  (VTBL_ENTRY)&_ZN5S57C63v78Ev,
  (VTBL_ENTRY)&_ZN5S57C63v79Ev,
  (VTBL_ENTRY)&_ZN5S57C63v80Ev,
  (VTBL_ENTRY)&_ZN5S57C63v81Ev,
  (VTBL_ENTRY)&_ZN5S57C63v82Ev,
  (VTBL_ENTRY)&_ZN5S57C63v83Ev,
  (VTBL_ENTRY)&_ZN5S57C63v84Ev,
  (VTBL_ENTRY)&_ZN5S57C63v85Ev,
  (VTBL_ENTRY)&_ZN5S57C63v86Ev,
  (VTBL_ENTRY)&_ZN5S57C63v87Ev,
  (VTBL_ENTRY)&_ZN5S57C63v88Ev,
  (VTBL_ENTRY)&_ZN5S57C53v89Ev,
  (VTBL_ENTRY)&_ZN5S57C53v90Ev,
  (VTBL_ENTRY)&_ZN5S57C53v91Ev,
  (VTBL_ENTRY)&_ZN5S57C53v92Ev,
  (VTBL_ENTRY)&_ZN5S57C53v93Ev,
  (VTBL_ENTRY)&_ZN5S57C53v94Ev,
  (VTBL_ENTRY)&_ZN5S57C53v95Ev,
  (VTBL_ENTRY)&_ZN5S57C53v96Ev,
  (VTBL_ENTRY)&_ZN5S57C53v97Ev,
  (VTBL_ENTRY)&_ZN5S57C53v98Ev,
  (VTBL_ENTRY)&_ZN5S57C53v99Ev,
  (VTBL_ENTRY)&_ZN5S57C54v100Ev,
  (VTBL_ENTRY)&_ZN5S57C54v101Ev,
  (VTBL_ENTRY)&_ZN5S57C54v102Ev,
  (VTBL_ENTRY)&_ZN5S57C54v103Ev,
  (VTBL_ENTRY)&_ZN5S57C54v104Ev,
  (VTBL_ENTRY)&_ZN5S57C54v105Ev,
  (VTBL_ENTRY)&_ZN5S57C54v106Ev,
  (VTBL_ENTRY)&_ZN5S57C54v107Ev,
  (VTBL_ENTRY)&_ZN5S57C54v108Ev,
  (VTBL_ENTRY)&_ZN5S57C44v109Ev,
  (VTBL_ENTRY)&_ZN5S57C44v110Ev,
  (VTBL_ENTRY)&_ZN5S57C44v111Ev,
  (VTBL_ENTRY)&_ZN5S57C44v112Ev,
  (VTBL_ENTRY)&_ZN5S57C44v113Ev,
  (VTBL_ENTRY)&_ZN5S57C44v114Ev,
  (VTBL_ENTRY)&_ZN5S57C44v115Ev,
  (VTBL_ENTRY)&_ZN5S57C44v116Ev,
  (VTBL_ENTRY)&_ZN5S57C44v117Ev,
  (VTBL_ENTRY)&_ZN5S57C44v118Ev,
  (VTBL_ENTRY)&_ZN5S57C44v119Ev,
  (VTBL_ENTRY)&_ZN5S57C44v120Ev,
  (VTBL_ENTRY)&_ZN5S57C44v121Ev,
  (VTBL_ENTRY)&_ZN5S57C44v122Ev,
};
extern VTBL_ENTRY _ZTI5S57C4[];
extern  VTBL_ENTRY _ZTV5S57C4[];
Class_Descriptor cd_S57C4 = {  "S57C4", // class name
  bases_S57C4, 3,
  &(vtc_S57C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(336,244), // object size
  NSPAIRA(_ZTI5S57C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S57C4),124, //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  S57C3  : S57C4 {
  void *s57c3f0[2];
  ::S287C8_nt s57c3f1;
  unsigned int s57c3f2:1;
  unsigned int s57c3f3:1;
  ::S3350C21_nt s57c3f4;
  virtual  ~S57C3(); // _ZN5S57C3D1Ev
  virtual void  v123(); // _ZN5S57C34v123Ev
  virtual void  v124(); // _ZN5S57C34v124Ev
  virtual void  v125(); // _ZN5S57C34v125Ev
  virtual void  v126(); // _ZN5S57C34v126Ev
  virtual void  v127(); // _ZN5S57C34v127Ev
  virtual void  v128(); // _ZN5S57C34v128Ev
  virtual void  v129(); // _ZN5S57C34v129Ev
  virtual void  v130(); // _ZN5S57C34v130Ev
  virtual void  v131(); // _ZN5S57C34v131Ev
  virtual void  v132(); // _ZN5S57C34v132Ev
  virtual void  v133(); // _ZN5S57C34v133Ev
  S57C3(); // tgen
};
//SIG(-1 S57C3) C1{ BC2{ BC3{ BC4{ BC5{ vd v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 Fi[2] Fp Fi[2] FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} FC7 FC11{ m} FC7 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 Fi:1 Fi:1 Fi:1 FC12{ BC13{ BC10}} FC14{ BC15{ BC10}} FC16{ BC17{ BC10}} FC18{ BC19{ BC10}} Fi[3]} vd v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC20{ BC21{ BC10}}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[2] FC7 Fi:1 Fi:1 FC22{ m Fp FC6}}


 S57C3 ::~S57C3(){ note_dtor("S57C3", this);}
void  S57C3 ::v123(){vfunc_called(this, "_ZN5S57C34v123Ev");}
void  S57C3 ::v124(){vfunc_called(this, "_ZN5S57C34v124Ev");}
void  S57C3 ::v125(){vfunc_called(this, "_ZN5S57C34v125Ev");}
void  S57C3 ::v126(){vfunc_called(this, "_ZN5S57C34v126Ev");}
void  S57C3 ::v127(){vfunc_called(this, "_ZN5S57C34v127Ev");}
void  S57C3 ::v128(){vfunc_called(this, "_ZN5S57C34v128Ev");}
void  S57C3 ::v129(){vfunc_called(this, "_ZN5S57C34v129Ev");}
void  S57C3 ::v130(){vfunc_called(this, "_ZN5S57C34v130Ev");}
void  S57C3 ::v131(){vfunc_called(this, "_ZN5S57C34v131Ev");}
void  S57C3 ::v132(){vfunc_called(this, "_ZN5S57C34v132Ev");}
void  S57C3 ::v133(){vfunc_called(this, "_ZN5S57C34v133Ev");}
S57C3 ::S57C3(){ note_ctor("S57C3", this);} // tgen

static void Test_S57C3()
{
  extern Class_Descriptor cd_S57C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(50,71)];
    init_test(&cd_S57C3, buf);
    S57C3 *dp, &lv = *(dp=new (buf) S57C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(392,280), "sizeof(S57C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S57C3)");
    check_base_class_offset(lv, (S57C7*)(S57C6*)(S57C5*)(S57C4*), 0, "S57C3");
    check_base_class_offset(lv, (S57C6*)(S57C5*)(S57C4*), 0, "S57C3");
    check_base_class_offset(lv, (S57C5*)(S57C4*), 0, "S57C3");
    check_base_class_offset(lv, (S57C4*), 0, "S57C3");
    check_field_offset(lv, s57c3f0, ABISELECT(336,244), "S57C3.s57c3f0");
    check_field_offset(lv, s57c3f1, ABISELECT(352,252), "S57C3.s57c3f1");
    set_bf_and_test(lv, s57c3f2, ABISELECT(368,264), 0, 1, 1, "S57C3");
    set_bf_and_test(lv, s57c3f3, ABISELECT(368,264), 1, 1, 1, "S57C3");
    check_field_offset(lv, s57c3f4, ABISELECT(376,268), "S57C3.s57c3f4");
    test_class_info(&lv, &cd_S57C3);
    dp->~S57C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS57C3(Test_S57C3, "S57C3", ABISELECT(392,280));

#else // __cplusplus

extern void _ZN5S57C3C1Ev();
extern void _ZN5S57C3D1Ev();
Name_Map name_map_S57C3[] = {
  NSPAIR(_ZN5S57C3C1Ev),
  NSPAIR(_ZN5S57C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S57C7;
extern VTBL_ENTRY _ZTI5S57C7[];
extern  VTBL_ENTRY _ZTV5S57C7[];
extern Class_Descriptor cd_S57C6;
extern VTBL_ENTRY _ZTI5S57C6[];
extern  VTBL_ENTRY _ZTV5S57C6[];
extern Class_Descriptor cd_S57C5;
extern VTBL_ENTRY _ZTI5S57C5[];
extern  VTBL_ENTRY _ZTV5S57C5[];
extern Class_Descriptor cd_S57C4;
extern VTBL_ENTRY _ZTI5S57C4[];
extern  VTBL_ENTRY _ZTV5S57C4[];
static Base_Class bases_S57C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S57C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S57C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S57C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S57C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S57C3[];
extern void _ZN5S57C3D1Ev();
extern void _ZN5S57C3D0Ev();
extern void _ZN5S57C72v3Ev();
extern void _ZN5S57C72v4Ev();
extern void _ZN5S57C72v5Ev();
extern void _ZN5S57C72v6Ev();
extern void _ZN5S57C72v7Ev();
extern void _ZN5S57C72v8Ev();
extern void _ZN5S57C72v9Ev();
extern void _ZN5S57C73v10Ev();
extern void _ZN5S57C73v11Ev();
extern void _ZN5S57C73v12Ev();
extern void _ZN5S57C73v13Ev();
extern void _ZN5S57C73v14Ev();
extern void _ZN5S57C73v15Ev();
extern void _ZN5S57C73v16Ev();
extern void _ZN5S57C73v17Ev();
extern void _ZN5S57C73v18Ev();
extern void _ZN5S57C73v19Ev();
extern void _ZN5S57C73v20Ev();
extern void _ZN5S57C73v21Ev();
extern void _ZN5S57C73v22Ev();
extern void _ZN5S57C73v23Ev();
extern void _ZN5S57C73v24Ev();
extern void _ZN5S57C73v25Ev();
extern void _ZN5S57C73v26Ev();
extern void _ZN5S57C73v27Ev();
extern void _ZN5S57C73v28Ev();
extern void _ZN5S57C73v29Ev();
extern void _ZN5S57C73v30Ev();
extern void _ZN5S57C73v31Ev();
extern void _ZN5S57C73v32Ev();
extern void _ZN5S57C73v33Ev();
extern void _ZN5S57C73v34Ev();
extern void _ZN5S57C73v35Ev();
extern void _ZN5S57C73v36Ev();
extern void _ZN5S57C73v37Ev();
extern void _ZN5S57C73v38Ev();
extern void _ZN5S57C73v39Ev();
extern void _ZN5S57C73v40Ev();
extern void _ZN5S57C73v41Ev();
extern void _ZN5S57C73v42Ev();
extern void _ZN5S57C73v43Ev();
extern void _ZN5S57C73v44Ev();
extern void _ZN5S57C73v45Ev();
extern void _ZN5S57C73v46Ev();
extern void _ZN5S57C73v47Ev();
extern void _ZN5S57C73v48Ev();
extern void _ZN5S57C73v49Ev();
extern void _ZN5S57C73v50Ev();
extern void _ZN5S57C73v51Ev();
extern void _ZN5S57C73v52Ev();
extern void _ZN5S57C73v53Ev();
extern void _ZN5S57C73v54Ev();
extern void _ZN5S57C73v55Ev();
extern void _ZN5S57C73v56Ev();
extern void _ZN5S57C73v57Ev();
extern void _ZN5S57C73v58Ev();
extern void _ZN5S57C73v59Ev();
extern void _ZN5S57C73v60Ev();
extern void _ZN5S57C73v61Ev();
extern void _ZN5S57C73v62Ev();
extern void _ZN5S57C73v63Ev();
extern void _ZN5S57C73v64Ev();
extern void _ZN5S57C73v65Ev();
extern void _ZN5S57C73v66Ev();
extern void _ZN5S57C63v67Ev();
extern void _ZN5S57C63v68Ev();
extern void _ZN5S57C63v69Ev();
extern void _ZN5S57C63v70Ev();
extern void _ZN5S57C63v71Ev();
extern void _ZN5S57C63v72Ev();
extern void _ZN5S57C63v73Ev();
extern void _ZN5S57C63v74Ev();
extern void _ZN5S57C63v75Ev();
extern void _ZN5S57C63v76Ev();
extern void _ZN5S57C63v77Ev();
extern void _ZN5S57C63v78Ev();
extern void _ZN5S57C63v79Ev();
extern void _ZN5S57C63v80Ev();
extern void _ZN5S57C63v81Ev();
extern void _ZN5S57C63v82Ev();
extern void _ZN5S57C63v83Ev();
extern void _ZN5S57C63v84Ev();
extern void _ZN5S57C63v85Ev();
extern void _ZN5S57C63v86Ev();
extern void _ZN5S57C63v87Ev();
extern void _ZN5S57C63v88Ev();
extern void _ZN5S57C53v89Ev();
extern void _ZN5S57C53v90Ev();
extern void _ZN5S57C53v91Ev();
extern void _ZN5S57C53v92Ev();
extern void _ZN5S57C53v93Ev();
extern void _ZN5S57C53v94Ev();
extern void _ZN5S57C53v95Ev();
extern void _ZN5S57C53v96Ev();
extern void _ZN5S57C53v97Ev();
extern void _ZN5S57C53v98Ev();
extern void _ZN5S57C53v99Ev();
extern void _ZN5S57C54v100Ev();
extern void _ZN5S57C54v101Ev();
extern void _ZN5S57C54v102Ev();
extern void _ZN5S57C54v103Ev();
extern void _ZN5S57C54v104Ev();
extern void _ZN5S57C54v105Ev();
extern void _ZN5S57C54v106Ev();
extern void _ZN5S57C54v107Ev();
extern void _ZN5S57C54v108Ev();
extern void _ZN5S57C44v109Ev();
extern void _ZN5S57C44v110Ev();
extern void _ZN5S57C44v111Ev();
extern void _ZN5S57C44v112Ev();
extern void _ZN5S57C44v113Ev();
extern void _ZN5S57C44v114Ev();
extern void _ZN5S57C44v115Ev();
extern void _ZN5S57C44v116Ev();
extern void _ZN5S57C44v117Ev();
extern void _ZN5S57C44v118Ev();
extern void _ZN5S57C44v119Ev();
extern void _ZN5S57C44v120Ev();
extern void _ZN5S57C44v121Ev();
extern void _ZN5S57C44v122Ev();
extern void _ZN5S57C34v123Ev();
extern void _ZN5S57C34v124Ev();
extern void _ZN5S57C34v125Ev();
extern void _ZN5S57C34v126Ev();
extern void _ZN5S57C34v127Ev();
extern void _ZN5S57C34v128Ev();
extern void _ZN5S57C34v129Ev();
extern void _ZN5S57C34v130Ev();
extern void _ZN5S57C34v131Ev();
extern void _ZN5S57C34v132Ev();
extern void _ZN5S57C34v133Ev();
static  VTBL_ENTRY vtc_S57C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S57C3[0]),
  (VTBL_ENTRY)&_ZN5S57C3D1Ev,
  (VTBL_ENTRY)&_ZN5S57C3D0Ev,
  (VTBL_ENTRY)&_ZN5S57C72v3Ev,
  (VTBL_ENTRY)&_ZN5S57C72v4Ev,
  (VTBL_ENTRY)&_ZN5S57C72v5Ev,
  (VTBL_ENTRY)&_ZN5S57C72v6Ev,
  (VTBL_ENTRY)&_ZN5S57C72v7Ev,
  (VTBL_ENTRY)&_ZN5S57C72v8Ev,
  (VTBL_ENTRY)&_ZN5S57C72v9Ev,
  (VTBL_ENTRY)&_ZN5S57C73v10Ev,
  (VTBL_ENTRY)&_ZN5S57C73v11Ev,
  (VTBL_ENTRY)&_ZN5S57C73v12Ev,
  (VTBL_ENTRY)&_ZN5S57C73v13Ev,
  (VTBL_ENTRY)&_ZN5S57C73v14Ev,
  (VTBL_ENTRY)&_ZN5S57C73v15Ev,
  (VTBL_ENTRY)&_ZN5S57C73v16Ev,
  (VTBL_ENTRY)&_ZN5S57C73v17Ev,
  (VTBL_ENTRY)&_ZN5S57C73v18Ev,
  (VTBL_ENTRY)&_ZN5S57C73v19Ev,
  (VTBL_ENTRY)&_ZN5S57C73v20Ev,
  (VTBL_ENTRY)&_ZN5S57C73v21Ev,
  (VTBL_ENTRY)&_ZN5S57C73v22Ev,
  (VTBL_ENTRY)&_ZN5S57C73v23Ev,
  (VTBL_ENTRY)&_ZN5S57C73v24Ev,
  (VTBL_ENTRY)&_ZN5S57C73v25Ev,
  (VTBL_ENTRY)&_ZN5S57C73v26Ev,
  (VTBL_ENTRY)&_ZN5S57C73v27Ev,
  (VTBL_ENTRY)&_ZN5S57C73v28Ev,
  (VTBL_ENTRY)&_ZN5S57C73v29Ev,
  (VTBL_ENTRY)&_ZN5S57C73v30Ev,
  (VTBL_ENTRY)&_ZN5S57C73v31Ev,
  (VTBL_ENTRY)&_ZN5S57C73v32Ev,
  (VTBL_ENTRY)&_ZN5S57C73v33Ev,
  (VTBL_ENTRY)&_ZN5S57C73v34Ev,
  (VTBL_ENTRY)&_ZN5S57C73v35Ev,
  (VTBL_ENTRY)&_ZN5S57C73v36Ev,
  (VTBL_ENTRY)&_ZN5S57C73v37Ev,
  (VTBL_ENTRY)&_ZN5S57C73v38Ev,
  (VTBL_ENTRY)&_ZN5S57C73v39Ev,
  (VTBL_ENTRY)&_ZN5S57C73v40Ev,
  (VTBL_ENTRY)&_ZN5S57C73v41Ev,
  (VTBL_ENTRY)&_ZN5S57C73v42Ev,
  (VTBL_ENTRY)&_ZN5S57C73v43Ev,
  (VTBL_ENTRY)&_ZN5S57C73v44Ev,
  (VTBL_ENTRY)&_ZN5S57C73v45Ev,
  (VTBL_ENTRY)&_ZN5S57C73v46Ev,
  (VTBL_ENTRY)&_ZN5S57C73v47Ev,
  (VTBL_ENTRY)&_ZN5S57C73v48Ev,
  (VTBL_ENTRY)&_ZN5S57C73v49Ev,
  (VTBL_ENTRY)&_ZN5S57C73v50Ev,
  (VTBL_ENTRY)&_ZN5S57C73v51Ev,
  (VTBL_ENTRY)&_ZN5S57C73v52Ev,
  (VTBL_ENTRY)&_ZN5S57C73v53Ev,
  (VTBL_ENTRY)&_ZN5S57C73v54Ev,
  (VTBL_ENTRY)&_ZN5S57C73v55Ev,
  (VTBL_ENTRY)&_ZN5S57C73v56Ev,
  (VTBL_ENTRY)&_ZN5S57C73v57Ev,
  (VTBL_ENTRY)&_ZN5S57C73v58Ev,
  (VTBL_ENTRY)&_ZN5S57C73v59Ev,
  (VTBL_ENTRY)&_ZN5S57C73v60Ev,
  (VTBL_ENTRY)&_ZN5S57C73v61Ev,
  (VTBL_ENTRY)&_ZN5S57C73v62Ev,
  (VTBL_ENTRY)&_ZN5S57C73v63Ev,
  (VTBL_ENTRY)&_ZN5S57C73v64Ev,
  (VTBL_ENTRY)&_ZN5S57C73v65Ev,
  (VTBL_ENTRY)&_ZN5S57C73v66Ev,
  (VTBL_ENTRY)&_ZN5S57C63v67Ev,
  (VTBL_ENTRY)&_ZN5S57C63v68Ev,
  (VTBL_ENTRY)&_ZN5S57C63v69Ev,
  (VTBL_ENTRY)&_ZN5S57C63v70Ev,
  (VTBL_ENTRY)&_ZN5S57C63v71Ev,
  (VTBL_ENTRY)&_ZN5S57C63v72Ev,
  (VTBL_ENTRY)&_ZN5S57C63v73Ev,
  (VTBL_ENTRY)&_ZN5S57C63v74Ev,
  (VTBL_ENTRY)&_ZN5S57C63v75Ev,
  (VTBL_ENTRY)&_ZN5S57C63v76Ev,
  (VTBL_ENTRY)&_ZN5S57C63v77Ev,
  (VTBL_ENTRY)&_ZN5S57C63v78Ev,
  (VTBL_ENTRY)&_ZN5S57C63v79Ev,
  (VTBL_ENTRY)&_ZN5S57C63v80Ev,
  (VTBL_ENTRY)&_ZN5S57C63v81Ev,
  (VTBL_ENTRY)&_ZN5S57C63v82Ev,
  (VTBL_ENTRY)&_ZN5S57C63v83Ev,
  (VTBL_ENTRY)&_ZN5S57C63v84Ev,
  (VTBL_ENTRY)&_ZN5S57C63v85Ev,
  (VTBL_ENTRY)&_ZN5S57C63v86Ev,
  (VTBL_ENTRY)&_ZN5S57C63v87Ev,
  (VTBL_ENTRY)&_ZN5S57C63v88Ev,
  (VTBL_ENTRY)&_ZN5S57C53v89Ev,
  (VTBL_ENTRY)&_ZN5S57C53v90Ev,
  (VTBL_ENTRY)&_ZN5S57C53v91Ev,
  (VTBL_ENTRY)&_ZN5S57C53v92Ev,
  (VTBL_ENTRY)&_ZN5S57C53v93Ev,
  (VTBL_ENTRY)&_ZN5S57C53v94Ev,
  (VTBL_ENTRY)&_ZN5S57C53v95Ev,
  (VTBL_ENTRY)&_ZN5S57C53v96Ev,
  (VTBL_ENTRY)&_ZN5S57C53v97Ev,
  (VTBL_ENTRY)&_ZN5S57C53v98Ev,
  (VTBL_ENTRY)&_ZN5S57C53v99Ev,
  (VTBL_ENTRY)&_ZN5S57C54v100Ev,
  (VTBL_ENTRY)&_ZN5S57C54v101Ev,
  (VTBL_ENTRY)&_ZN5S57C54v102Ev,
  (VTBL_ENTRY)&_ZN5S57C54v103Ev,
  (VTBL_ENTRY)&_ZN5S57C54v104Ev,
  (VTBL_ENTRY)&_ZN5S57C54v105Ev,
  (VTBL_ENTRY)&_ZN5S57C54v106Ev,
  (VTBL_ENTRY)&_ZN5S57C54v107Ev,
  (VTBL_ENTRY)&_ZN5S57C54v108Ev,
  (VTBL_ENTRY)&_ZN5S57C44v109Ev,
  (VTBL_ENTRY)&_ZN5S57C44v110Ev,
  (VTBL_ENTRY)&_ZN5S57C44v111Ev,
  (VTBL_ENTRY)&_ZN5S57C44v112Ev,
  (VTBL_ENTRY)&_ZN5S57C44v113Ev,
  (VTBL_ENTRY)&_ZN5S57C44v114Ev,
  (VTBL_ENTRY)&_ZN5S57C44v115Ev,
  (VTBL_ENTRY)&_ZN5S57C44v116Ev,
  (VTBL_ENTRY)&_ZN5S57C44v117Ev,
  (VTBL_ENTRY)&_ZN5S57C44v118Ev,
  (VTBL_ENTRY)&_ZN5S57C44v119Ev,
  (VTBL_ENTRY)&_ZN5S57C44v120Ev,
  (VTBL_ENTRY)&_ZN5S57C44v121Ev,
  (VTBL_ENTRY)&_ZN5S57C44v122Ev,
  (VTBL_ENTRY)&_ZN5S57C34v123Ev,
  (VTBL_ENTRY)&_ZN5S57C34v124Ev,
  (VTBL_ENTRY)&_ZN5S57C34v125Ev,
  (VTBL_ENTRY)&_ZN5S57C34v126Ev,
  (VTBL_ENTRY)&_ZN5S57C34v127Ev,
  (VTBL_ENTRY)&_ZN5S57C34v128Ev,
  (VTBL_ENTRY)&_ZN5S57C34v129Ev,
  (VTBL_ENTRY)&_ZN5S57C34v130Ev,
  (VTBL_ENTRY)&_ZN5S57C34v131Ev,
  (VTBL_ENTRY)&_ZN5S57C34v132Ev,
  (VTBL_ENTRY)&_ZN5S57C34v133Ev,
};
extern VTBL_ENTRY _ZTI5S57C3[];
extern  VTBL_ENTRY _ZTV5S57C3[];
Class_Descriptor cd_S57C3 = {  "S57C3", // class name
  bases_S57C3, 4,
  &(vtc_S57C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(392,280), // object size
  NSPAIRA(_ZTI5S57C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S57C3),135, //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  S57C2  : S57C3 {
  virtual  ~S57C2(); // _ZN5S57C2D1Ev
  virtual void  v134(); // _ZN5S57C24v134Ev
  virtual void  v135(); // _ZN5S57C24v135Ev
  S57C2(); // tgen
};
//SIG(-1 S57C2) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ 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 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 Fi FL Fp[4] Fi[2] Fp FC7{ m Fi[2]} Fp[2]} vd v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fi[2] Fp Fi[2] FC8{ BC9{ BC10{ BC11{ m Fp Fi[2]}}}} FC8 FC12{ m} FC8 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 Fi:1 Fi:1 Fi:1 FC13{ BC14{ BC11}} FC15{ BC16{ BC11}} FC17{ BC18{ BC11}} FC19{ BC20{ BC11}} Fi[3]} vd v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC21{ BC22{ BC11}}} vd v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 Fp[2] FC8 Fi:1 Fi:1 FC23{ m Fp FC7}} vd v1 v2}


 S57C2 ::~S57C2(){ note_dtor("S57C2", this);}
void  S57C2 ::v134(){vfunc_called(this, "_ZN5S57C24v134Ev");}
void  S57C2 ::v135(){vfunc_called(this, "_ZN5S57C24v135Ev");}
S57C2 ::S57C2(){ note_ctor("S57C2", this);} // tgen

static void Test_S57C2()
{
  extern Class_Descriptor cd_S57C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(50,71)];
    init_test(&cd_S57C2, buf);
    S57C2 *dp, &lv = *(dp=new (buf) S57C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(392,280), "sizeof(S57C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S57C2)");
    check_base_class_offset(lv, (S57C7*)(S57C6*)(S57C5*)(S57C4*)(S57C3*), 0, "S57C2");
    check_base_class_offset(lv, (S57C6*)(S57C5*)(S57C4*)(S57C3*), 0, "S57C2");
    check_base_class_offset(lv, (S57C5*)(S57C4*)(S57C3*), 0, "S57C2");
    check_base_class_offset(lv, (S57C4*)(S57C3*), 0, "S57C2");
    check_base_class_offset(lv, (S57C3*), 0, "S57C2");
    test_class_info(&lv, &cd_S57C2);
    dp->~S57C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS57C2(Test_S57C2, "S57C2", ABISELECT(392,280));

#else // __cplusplus

extern void _ZN5S57C2C1Ev();
extern void _ZN5S57C2D1Ev();
Name_Map name_map_S57C2[] = {
  NSPAIR(_ZN5S57C2C1Ev),
  NSPAIR(_ZN5S57C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S57C7;
extern VTBL_ENTRY _ZTI5S57C7[];
extern  VTBL_ENTRY _ZTV5S57C7[];
extern Class_Descriptor cd_S57C6;
extern VTBL_ENTRY _ZTI5S57C6[];
extern  VTBL_ENTRY _ZTV5S57C6[];
extern Class_Descriptor cd_S57C5;
extern VTBL_ENTRY _ZTI5S57C5[];
extern  VTBL_ENTRY _ZTV5S57C5[];
extern Class_Descriptor cd_S57C4;
extern VTBL_ENTRY _ZTI5S57C4[];
extern  VTBL_ENTRY _ZTV5S57C4[];
extern Class_Descriptor cd_S57C3;
extern VTBL_ENTRY _ZTI5S57C3[];
extern  VTBL_ENTRY _ZTV5S57C3[];
static Base_Class bases_S57C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S57C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S57C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S57C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S57C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S57C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S57C2[];
extern void _ZN5S57C2D1Ev();
extern void _ZN5S57C2D0Ev();
extern void _ZN5S57C72v3Ev();
extern void _ZN5S57C72v4Ev();
extern void _ZN5S57C72v5Ev();
extern void _ZN5S57C72v6Ev();
extern void _ZN5S57C72v7Ev();
extern void _ZN5S57C72v8Ev();
extern void _ZN5S57C72v9Ev();
extern void _ZN5S57C73v10Ev();
extern void _ZN5S57C73v11Ev();
extern void _ZN5S57C73v12Ev();
extern void _ZN5S57C73v13Ev();
extern void _ZN5S57C73v14Ev();
extern void _ZN5S57C73v15Ev();
extern void _ZN5S57C73v16Ev();
extern void _ZN5S57C73v17Ev();
extern void _ZN5S57C73v18Ev();
extern void _ZN5S57C73v19Ev();
extern void _ZN5S57C73v20Ev();
extern void _ZN5S57C73v21Ev();
extern void _ZN5S57C73v22Ev();
extern void _ZN5S57C73v23Ev();
extern void _ZN5S57C73v24Ev();
extern void _ZN5S57C73v25Ev();
extern void _ZN5S57C73v26Ev();
extern void _ZN5S57C73v27Ev();
extern void _ZN5S57C73v28Ev();
extern void _ZN5S57C73v29Ev();
extern void _ZN5S57C73v30Ev();
extern void _ZN5S57C73v31Ev();
extern void _ZN5S57C73v32Ev();
extern void _ZN5S57C73v33Ev();
extern void _ZN5S57C73v34Ev();
extern void _ZN5S57C73v35Ev();
extern void _ZN5S57C73v36Ev();
extern void _ZN5S57C73v37Ev();
extern void _ZN5S57C73v38Ev();
extern void _ZN5S57C73v39Ev();
extern void _ZN5S57C73v40Ev();
extern void _ZN5S57C73v41Ev();
extern void _ZN5S57C73v42Ev();
extern void _ZN5S57C73v43Ev();
extern void _ZN5S57C73v44Ev();
extern void _ZN5S57C73v45Ev();
extern void _ZN5S57C73v46Ev();
extern void _ZN5S57C73v47Ev();
extern void _ZN5S57C73v48Ev();
extern void _ZN5S57C73v49Ev();
extern void _ZN5S57C73v50Ev();
extern void _ZN5S57C73v51Ev();
extern void _ZN5S57C73v52Ev();
extern void _ZN5S57C73v53Ev();
extern void _ZN5S57C73v54Ev();
extern void _ZN5S57C73v55Ev();
extern void _ZN5S57C73v56Ev();
extern void _ZN5S57C73v57Ev();
extern void _ZN5S57C73v58Ev();
extern void _ZN5S57C73v59Ev();
extern void _ZN5S57C73v60Ev();
extern void _ZN5S57C73v61Ev();
extern void _ZN5S57C73v62Ev();
extern void _ZN5S57C73v63Ev();
extern void _ZN5S57C73v64Ev();
extern void _ZN5S57C73v65Ev();
extern void _ZN5S57C73v66Ev();
extern void _ZN5S57C63v67Ev();
extern void _ZN5S57C63v68Ev();
extern void _ZN5S57C63v69Ev();
extern void _ZN5S57C63v70Ev();
extern void _ZN5S57C63v71Ev();
extern void _ZN5S57C63v72Ev();
extern void _ZN5S57C63v73Ev();
extern void _ZN5S57C63v74Ev();
extern void _ZN5S57C63v75Ev();
extern void _ZN5S57C63v76Ev();
extern void _ZN5S57C63v77Ev();
extern void _ZN5S57C63v78Ev();
extern void _ZN5S57C63v79Ev();
extern void _ZN5S57C63v80Ev();
extern void _ZN5S57C63v81Ev();
extern void _ZN5S57C63v82Ev();
extern void _ZN5S57C63v83Ev();
extern void _ZN5S57C63v84Ev();
extern void _ZN5S57C63v85Ev();
extern void _ZN5S57C63v86Ev();
extern void _ZN5S57C63v87Ev();
extern void _ZN5S57C63v88Ev();
extern void _ZN5S57C53v89Ev();
extern void _ZN5S57C53v90Ev();
extern void _ZN5S57C53v91Ev();
extern void _ZN5S57C53v92Ev();
extern void _ZN5S57C53v93Ev();
extern void _ZN5S57C53v94Ev();
extern void _ZN5S57C53v95Ev();
extern void _ZN5S57C53v96Ev();
extern void _ZN5S57C53v97Ev();
extern void _ZN5S57C53v98Ev();
extern void _ZN5S57C53v99Ev();
extern void _ZN5S57C54v100Ev();
extern void _ZN5S57C54v101Ev();
extern void _ZN5S57C54v102Ev();
extern void _ZN5S57C54v103Ev();
extern void _ZN5S57C54v104Ev();
extern void _ZN5S57C54v105Ev();
extern void _ZN5S57C54v106Ev();
extern void _ZN5S57C54v107Ev();
extern void _ZN5S57C54v108Ev();
extern void _ZN5S57C44v109Ev();
extern void _ZN5S57C44v110Ev();
extern void _ZN5S57C44v111Ev();
extern void _ZN5S57C44v112Ev();
extern void _ZN5S57C44v113Ev();
extern void _ZN5S57C44v114Ev();
extern void _ZN5S57C44v115Ev();
extern void _ZN5S57C44v116Ev();
extern void _ZN5S57C44v117Ev();
extern void _ZN5S57C44v118Ev();
extern void _ZN5S57C44v119Ev();
extern void _ZN5S57C44v120Ev();
extern void _ZN5S57C44v121Ev();
extern void _ZN5S57C44v122Ev();
extern void _ZN5S57C34v123Ev();
extern void _ZN5S57C34v124Ev();
extern void _ZN5S57C34v125Ev();
extern void _ZN5S57C34v126Ev();
extern void _ZN5S57C34v127Ev();
extern void _ZN5S57C34v128Ev();
extern void _ZN5S57C34v129Ev();
extern void _ZN5S57C34v130Ev();
extern void _ZN5S57C34v131Ev();
extern void _ZN5S57C34v132Ev();
extern void _ZN5S57C34v133Ev();
extern void _ZN5S57C24v134Ev();
extern void _ZN5S57C24v135Ev();
static  VTBL_ENTRY vtc_S57C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S57C2[0]),
  (VTBL_ENTRY)&_ZN5S57C2D1Ev,
  (VTBL_ENTRY)&_ZN5S57C2D0Ev,
  (VTBL_ENTRY)&_ZN5S57C72v3Ev,
  (VTBL_ENTRY)&_ZN5S57C72v4Ev,
  (VTBL_ENTRY)&_ZN5S57C72v5Ev,
  (VTBL_ENTRY)&_ZN5S57C72v6Ev,
  (VTBL_ENTRY)&_ZN5S57C72v7Ev,
  (VTBL_ENTRY)&_ZN5S57C72v8Ev,
  (VTBL_ENTRY)&_ZN5S57C72v9Ev,
  (VTBL_ENTRY)&_ZN5S57C73v10Ev,
  (VTBL_ENTRY)&_ZN5S57C73v11Ev,
  (VTBL_ENTRY)&_ZN5S57C73v12Ev,
  (VTBL_ENTRY)&_ZN5S57C73v13Ev,
  (VTBL_ENTRY)&_ZN5S57C73v14Ev,
  (VTBL_ENTRY)&_ZN5S57C73v15Ev,
  (VTBL_ENTRY)&_ZN5S57C73v16Ev,
  (VTBL_ENTRY)&_ZN5S57C73v17Ev,
  (VTBL_ENTRY)&_ZN5S57C73v18Ev,
  (VTBL_ENTRY)&_ZN5S57C73v19Ev,
  (VTBL_ENTRY)&_ZN5S57C73v20Ev,
  (VTBL_ENTRY)&_ZN5S57C73v21Ev,
  (VTBL_ENTRY)&_ZN5S57C73v22Ev,
  (VTBL_ENTRY)&_ZN5S57C73v23Ev,
  (VTBL_ENTRY)&_ZN5S57C73v24Ev,
  (VTBL_ENTRY)&_ZN5S57C73v25Ev,
  (VTBL_ENTRY)&_ZN5S57C73v26Ev,
  (VTBL_ENTRY)&_ZN5S57C73v27Ev,
  (VTBL_ENTRY)&_ZN5S57C73v28Ev,
  (VTBL_ENTRY)&_ZN5S57C73v29Ev,
  (VTBL_ENTRY)&_ZN5S57C73v30Ev,
  (VTBL_ENTRY)&_ZN5S57C73v31Ev,
  (VTBL_ENTRY)&_ZN5S57C73v32Ev,
  (VTBL_ENTRY)&_ZN5S57C73v33Ev,
  (VTBL_ENTRY)&_ZN5S57C73v34Ev,
  (VTBL_ENTRY)&_ZN5S57C73v35Ev,
  (VTBL_ENTRY)&_ZN5S57C73v36Ev,
  (VTBL_ENTRY)&_ZN5S57C73v37Ev,
  (VTBL_ENTRY)&_ZN5S57C73v38Ev,
  (VTBL_ENTRY)&_ZN5S57C73v39Ev,
  (VTBL_ENTRY)&_ZN5S57C73v40Ev,
  (VTBL_ENTRY)&_ZN5S57C73v41Ev,
  (VTBL_ENTRY)&_ZN5S57C73v42Ev,
  (VTBL_ENTRY)&_ZN5S57C73v43Ev,
  (VTBL_ENTRY)&_ZN5S57C73v44Ev,
  (VTBL_ENTRY)&_ZN5S57C73v45Ev,
  (VTBL_ENTRY)&_ZN5S57C73v46Ev,
  (VTBL_ENTRY)&_ZN5S57C73v47Ev,
  (VTBL_ENTRY)&_ZN5S57C73v48Ev,
  (VTBL_ENTRY)&_ZN5S57C73v49Ev,
  (VTBL_ENTRY)&_ZN5S57C73v50Ev,
  (VTBL_ENTRY)&_ZN5S57C73v51Ev,
  (VTBL_ENTRY)&_ZN5S57C73v52Ev,
  (VTBL_ENTRY)&_ZN5S57C73v53Ev,
  (VTBL_ENTRY)&_ZN5S57C73v54Ev,
  (VTBL_ENTRY)&_ZN5S57C73v55Ev,
  (VTBL_ENTRY)&_ZN5S57C73v56Ev,
  (VTBL_ENTRY)&_ZN5S57C73v57Ev,
  (VTBL_ENTRY)&_ZN5S57C73v58Ev,
  (VTBL_ENTRY)&_ZN5S57C73v59Ev,
  (VTBL_ENTRY)&_ZN5S57C73v60Ev,
  (VTBL_ENTRY)&_ZN5S57C73v61Ev,
  (VTBL_ENTRY)&_ZN5S57C73v62Ev,
  (VTBL_ENTRY)&_ZN5S57C73v63Ev,
  (VTBL_ENTRY)&_ZN5S57C73v64Ev,
  (VTBL_ENTRY)&_ZN5S57C73v65Ev,
  (VTBL_ENTRY)&_ZN5S57C73v66Ev,
  (VTBL_ENTRY)&_ZN5S57C63v67Ev,
  (VTBL_ENTRY)&_ZN5S57C63v68Ev,
  (VTBL_ENTRY)&_ZN5S57C63v69Ev,
  (VTBL_ENTRY)&_ZN5S57C63v70Ev,
  (VTBL_ENTRY)&_ZN5S57C63v71Ev,
  (VTBL_ENTRY)&_ZN5S57C63v72Ev,
  (VTBL_ENTRY)&_ZN5S57C63v73Ev,
  (VTBL_ENTRY)&_ZN5S57C63v74Ev,
  (VTBL_ENTRY)&_ZN5S57C63v75Ev,
  (VTBL_ENTRY)&_ZN5S57C63v76Ev,
  (VTBL_ENTRY)&_ZN5S57C63v77Ev,
  (VTBL_ENTRY)&_ZN5S57C63v78Ev,
  (VTBL_ENTRY)&_ZN5S57C63v79Ev,
  (VTBL_ENTRY)&_ZN5S57C63v80Ev,
  (VTBL_ENTRY)&_ZN5S57C63v81Ev,
  (VTBL_ENTRY)&_ZN5S57C63v82Ev,
  (VTBL_ENTRY)&_ZN5S57C63v83Ev,
  (VTBL_ENTRY)&_ZN5S57C63v84Ev,
  (VTBL_ENTRY)&_ZN5S57C63v85Ev,
  (VTBL_ENTRY)&_ZN5S57C63v86Ev,
  (VTBL_ENTRY)&_ZN5S57C63v87Ev,
  (VTBL_ENTRY)&_ZN5S57C63v88Ev,
  (VTBL_ENTRY)&_ZN5S57C53v89Ev,
  (VTBL_ENTRY)&_ZN5S57C53v90Ev,
  (VTBL_ENTRY)&_ZN5S57C53v91Ev,
  (VTBL_ENTRY)&_ZN5S57C53v92Ev,
  (VTBL_ENTRY)&_ZN5S57C53v93Ev,
  (VTBL_ENTRY)&_ZN5S57C53v94Ev,
  (VTBL_ENTRY)&_ZN5S57C53v95Ev,
  (VTBL_ENTRY)&_ZN5S57C53v96Ev,
  (VTBL_ENTRY)&_ZN5S57C53v97Ev,
  (VTBL_ENTRY)&_ZN5S57C53v98Ev,
  (VTBL_ENTRY)&_ZN5S57C53v99Ev,
  (VTBL_ENTRY)&_ZN5S57C54v100Ev,
  (VTBL_ENTRY)&_ZN5S57C54v101Ev,
  (VTBL_ENTRY)&_ZN5S57C54v102Ev,
  (VTBL_ENTRY)&_ZN5S57C54v103Ev,
  (VTBL_ENTRY)&_ZN5S57C54v104Ev,
  (VTBL_ENTRY)&_ZN5S57C54v105Ev,
  (VTBL_ENTRY)&_ZN5S57C54v106Ev,
  (VTBL_ENTRY)&_ZN5S57C54v107Ev,
  (VTBL_ENTRY)&_ZN5S57C54v108Ev,
  (VTBL_ENTRY)&_ZN5S57C44v109Ev,
  (VTBL_ENTRY)&_ZN5S57C44v110Ev,
  (VTBL_ENTRY)&_ZN5S57C44v111Ev,
  (VTBL_ENTRY)&_ZN5S57C44v112Ev,
  (VTBL_ENTRY)&_ZN5S57C44v113Ev,
  (VTBL_ENTRY)&_ZN5S57C44v114Ev,
  (VTBL_ENTRY)&_ZN5S57C44v115Ev,
  (VTBL_ENTRY)&_ZN5S57C44v116Ev,
  (VTBL_ENTRY)&_ZN5S57C44v117Ev,
  (VTBL_ENTRY)&_ZN5S57C44v118Ev,
  (VTBL_ENTRY)&_ZN5S57C44v119Ev,
  (VTBL_ENTRY)&_ZN5S57C44v120Ev,
  (VTBL_ENTRY)&_ZN5S57C44v121Ev,
  (VTBL_ENTRY)&_ZN5S57C44v122Ev,
  (VTBL_ENTRY)&_ZN5S57C34v123Ev,
  (VTBL_ENTRY)&_ZN5S57C34v124Ev,
  (VTBL_ENTRY)&_ZN5S57C34v125Ev,
  (VTBL_ENTRY)&_ZN5S57C34v126Ev,
  (VTBL_ENTRY)&_ZN5S57C34v127Ev,
  (VTBL_ENTRY)&_ZN5S57C34v128Ev,
  (VTBL_ENTRY)&_ZN5S57C34v129Ev,
  (VTBL_ENTRY)&_ZN5S57C34v130Ev,
  (VTBL_ENTRY)&_ZN5S57C34v131Ev,
  (VTBL_ENTRY)&_ZN5S57C34v132Ev,
  (VTBL_ENTRY)&_ZN5S57C34v133Ev,
  (VTBL_ENTRY)&_ZN5S57C24v134Ev,
  (VTBL_ENTRY)&_ZN5S57C24v135Ev,
};
extern VTBL_ENTRY _ZTI5S57C2[];
extern  VTBL_ENTRY _ZTV5S57C2[];
Class_Descriptor cd_S57C2 = {  "S57C2", // class name
  bases_S57C2, 5,
  &(vtc_S57C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(392,280), // object size
  NSPAIRA(_ZTI5S57C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S57C2),137, //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  S57C1  : S57C2 {
  int s57c1f0[2];
  virtual  ~S57C1(); // _ZN5S57C1D1Ev
  virtual void  v1(); // _ZN5S57C12v1Ev
  virtual void  v2(); // _ZN5S57C12v2Ev
  S57C1(); // tgen
};
//SIG(1 S57C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ 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 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 Fi FL Fp[4] Fi[2] Fp FC8{ m Fi[2]} Fp[2]} vd v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fi[2] Fp Fi[2] FC9{ BC10{ BC11{ BC12{ m Fp Fi[2]}}}} FC9 FC13{ m} FC9 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 Fi:1 Fi:1 Fi:1 FC14{ BC15{ BC12}} FC16{ BC17{ BC12}} FC18{ BC19{ BC12}} FC20{ BC21{ BC12}} Fi[3]} vd v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC22{ BC23{ BC12}}} vd v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 Fp[2] FC9 Fi:1 Fi:1 FC24{ m Fp FC8}} vd v134 v135} vd v1 v2 Fi[2]}


 S57C1 ::~S57C1(){ note_dtor("S57C1", this);}
void  S57C1 ::v1(){vfunc_called(this, "_ZN5S57C12v1Ev");}
void  S57C1 ::v2(){vfunc_called(this, "_ZN5S57C12v2Ev");}
S57C1 ::S57C1(){ note_ctor("S57C1", this);} // tgen

static void Test_S57C1()
{
  extern Class_Descriptor cd_S57C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(51,73)];
    init_test(&cd_S57C1, buf);
    S57C1 *dp, &lv = *(dp=new (buf) S57C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(400,288), "sizeof(S57C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S57C1)");
    check_base_class_offset(lv, (S57C7*)(S57C6*)(S57C5*)(S57C4*)(S57C3*)(S57C2*), 0, "S57C1");
    check_base_class_offset(lv, (S57C6*)(S57C5*)(S57C4*)(S57C3*)(S57C2*), 0, "S57C1");
    check_base_class_offset(lv, (S57C5*)(S57C4*)(S57C3*)(S57C2*), 0, "S57C1");
    check_base_class_offset(lv, (S57C4*)(S57C3*)(S57C2*), 0, "S57C1");
    check_base_class_offset(lv, (S57C3*)(S57C2*), 0, "S57C1");
    check_base_class_offset(lv, (S57C2*), 0, "S57C1");
    check_field_offset(lv, s57c1f0, ABISELECT(392,280), "S57C1.s57c1f0");
    test_class_info(&lv, &cd_S57C1);
    dp->~S57C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS57C1(Test_S57C1, "S57C1", ABISELECT(400,288));

#else // __cplusplus

extern void _ZN5S57C1C1Ev();
extern void _ZN5S57C1D1Ev();
Name_Map name_map_S57C1[] = {
  NSPAIR(_ZN5S57C1C1Ev),
  NSPAIR(_ZN5S57C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S57C7;
extern VTBL_ENTRY _ZTI5S57C7[];
extern  VTBL_ENTRY _ZTV5S57C7[];
extern Class_Descriptor cd_S57C6;
extern VTBL_ENTRY _ZTI5S57C6[];
extern  VTBL_ENTRY _ZTV5S57C6[];
extern Class_Descriptor cd_S57C5;
extern VTBL_ENTRY _ZTI5S57C5[];
extern  VTBL_ENTRY _ZTV5S57C5[];
extern Class_Descriptor cd_S57C4;
extern VTBL_ENTRY _ZTI5S57C4[];
extern  VTBL_ENTRY _ZTV5S57C4[];
extern Class_Descriptor cd_S57C3;
extern VTBL_ENTRY _ZTI5S57C3[];
extern  VTBL_ENTRY _ZTV5S57C3[];
extern Class_Descriptor cd_S57C2;
extern VTBL_ENTRY _ZTI5S57C2[];
extern  VTBL_ENTRY _ZTV5S57C2[];
static Base_Class bases_S57C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S57C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S57C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S57C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S57C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S57C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S57C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S57C1[];
extern void _ZN5S57C1D1Ev();
extern void _ZN5S57C1D0Ev();
extern void _ZN5S57C72v3Ev();
extern void _ZN5S57C72v4Ev();
extern void _ZN5S57C72v5Ev();
extern void _ZN5S57C72v6Ev();
extern void _ZN5S57C72v7Ev();
extern void _ZN5S57C72v8Ev();
extern void _ZN5S57C72v9Ev();
extern void _ZN5S57C73v10Ev();
extern void _ZN5S57C73v11Ev();
extern void _ZN5S57C73v12Ev();
extern void _ZN5S57C73v13Ev();
extern void _ZN5S57C73v14Ev();
extern void _ZN5S57C73v15Ev();
extern void _ZN5S57C73v16Ev();
extern void _ZN5S57C73v17Ev();
extern void _ZN5S57C73v18Ev();
extern void _ZN5S57C73v19Ev();
extern void _ZN5S57C73v20Ev();
extern void _ZN5S57C73v21Ev();
extern void _ZN5S57C73v22Ev();
extern void _ZN5S57C73v23Ev();
extern void _ZN5S57C73v24Ev();
extern void _ZN5S57C73v25Ev();
extern void _ZN5S57C73v26Ev();
extern void _ZN5S57C73v27Ev();
extern void _ZN5S57C73v28Ev();
extern void _ZN5S57C73v29Ev();
extern void _ZN5S57C73v30Ev();
extern void _ZN5S57C73v31Ev();
extern void _ZN5S57C73v32Ev();
extern void _ZN5S57C73v33Ev();
extern void _ZN5S57C73v34Ev();
extern void _ZN5S57C73v35Ev();
extern void _ZN5S57C73v36Ev();
extern void _ZN5S57C73v37Ev();
extern void _ZN5S57C73v38Ev();
extern void _ZN5S57C73v39Ev();
extern void _ZN5S57C73v40Ev();
extern void _ZN5S57C73v41Ev();
extern void _ZN5S57C73v42Ev();
extern void _ZN5S57C73v43Ev();
extern void _ZN5S57C73v44Ev();
extern void _ZN5S57C73v45Ev();
extern void _ZN5S57C73v46Ev();
extern void _ZN5S57C73v47Ev();
extern void _ZN5S57C73v48Ev();
extern void _ZN5S57C73v49Ev();
extern void _ZN5S57C73v50Ev();
extern void _ZN5S57C73v51Ev();
extern void _ZN5S57C73v52Ev();
extern void _ZN5S57C73v53Ev();
extern void _ZN5S57C73v54Ev();
extern void _ZN5S57C73v55Ev();
extern void _ZN5S57C73v56Ev();
extern void _ZN5S57C73v57Ev();
extern void _ZN5S57C73v58Ev();
extern void _ZN5S57C73v59Ev();
extern void _ZN5S57C73v60Ev();
extern void _ZN5S57C73v61Ev();
extern void _ZN5S57C73v62Ev();
extern void _ZN5S57C73v63Ev();
extern void _ZN5S57C73v64Ev();
extern void _ZN5S57C73v65Ev();
extern void _ZN5S57C73v66Ev();
extern void _ZN5S57C63v67Ev();
extern void _ZN5S57C63v68Ev();
extern void _ZN5S57C63v69Ev();
extern void _ZN5S57C63v70Ev();
extern void _ZN5S57C63v71Ev();
extern void _ZN5S57C63v72Ev();
extern void _ZN5S57C63v73Ev();
extern void _ZN5S57C63v74Ev();
extern void _ZN5S57C63v75Ev();
extern void _ZN5S57C63v76Ev();
extern void _ZN5S57C63v77Ev();
extern void _ZN5S57C63v78Ev();
extern void _ZN5S57C63v79Ev();
extern void _ZN5S57C63v80Ev();
extern void _ZN5S57C63v81Ev();
extern void _ZN5S57C63v82Ev();
extern void _ZN5S57C63v83Ev();
extern void _ZN5S57C63v84Ev();
extern void _ZN5S57C63v85Ev();
extern void _ZN5S57C63v86Ev();
extern void _ZN5S57C63v87Ev();
extern void _ZN5S57C63v88Ev();
extern void _ZN5S57C53v89Ev();
extern void _ZN5S57C53v90Ev();
extern void _ZN5S57C53v91Ev();
extern void _ZN5S57C53v92Ev();
extern void _ZN5S57C53v93Ev();
extern void _ZN5S57C53v94Ev();
extern void _ZN5S57C53v95Ev();
extern void _ZN5S57C53v96Ev();
extern void _ZN5S57C53v97Ev();
extern void _ZN5S57C53v98Ev();
extern void _ZN5S57C53v99Ev();
extern void _ZN5S57C54v100Ev();
extern void _ZN5S57C54v101Ev();
extern void _ZN5S57C54v102Ev();
extern void _ZN5S57C54v103Ev();
extern void _ZN5S57C54v104Ev();
extern void _ZN5S57C54v105Ev();
extern void _ZN5S57C54v106Ev();
extern void _ZN5S57C54v107Ev();
extern void _ZN5S57C54v108Ev();
extern void _ZN5S57C44v109Ev();
extern void _ZN5S57C44v110Ev();
extern void _ZN5S57C44v111Ev();
extern void _ZN5S57C44v112Ev();
extern void _ZN5S57C44v113Ev();
extern void _ZN5S57C44v114Ev();
extern void _ZN5S57C44v115Ev();
extern void _ZN5S57C44v116Ev();
extern void _ZN5S57C44v117Ev();
extern void _ZN5S57C44v118Ev();
extern void _ZN5S57C44v119Ev();
extern void _ZN5S57C44v120Ev();
extern void _ZN5S57C44v121Ev();
extern void _ZN5S57C44v122Ev();
extern void _ZN5S57C34v123Ev();
extern void _ZN5S57C34v124Ev();
extern void _ZN5S57C34v125Ev();
extern void _ZN5S57C34v126Ev();
extern void _ZN5S57C34v127Ev();
extern void _ZN5S57C34v128Ev();
extern void _ZN5S57C34v129Ev();
extern void _ZN5S57C34v130Ev();
extern void _ZN5S57C34v131Ev();
extern void _ZN5S57C34v132Ev();
extern void _ZN5S57C34v133Ev();
extern void _ZN5S57C24v134Ev();
extern void _ZN5S57C24v135Ev();
extern void _ZN5S57C12v1Ev();
extern void _ZN5S57C12v2Ev();
static  VTBL_ENTRY vtc_S57C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S57C1[0]),
  (VTBL_ENTRY)&_ZN5S57C1D1Ev,
  (VTBL_ENTRY)&_ZN5S57C1D0Ev,
  (VTBL_ENTRY)&_ZN5S57C72v3Ev,
  (VTBL_ENTRY)&_ZN5S57C72v4Ev,
  (VTBL_ENTRY)&_ZN5S57C72v5Ev,
  (VTBL_ENTRY)&_ZN5S57C72v6Ev,
  (VTBL_ENTRY)&_ZN5S57C72v7Ev,
  (VTBL_ENTRY)&_ZN5S57C72v8Ev,
  (VTBL_ENTRY)&_ZN5S57C72v9Ev,
  (VTBL_ENTRY)&_ZN5S57C73v10Ev,
  (VTBL_ENTRY)&_ZN5S57C73v11Ev,
  (VTBL_ENTRY)&_ZN5S57C73v12Ev,
  (VTBL_ENTRY)&_ZN5S57C73v13Ev,
  (VTBL_ENTRY)&_ZN5S57C73v14Ev,
  (VTBL_ENTRY)&_ZN5S57C73v15Ev,
  (VTBL_ENTRY)&_ZN5S57C73v16Ev,
  (VTBL_ENTRY)&_ZN5S57C73v17Ev,
  (VTBL_ENTRY)&_ZN5S57C73v18Ev,
  (VTBL_ENTRY)&_ZN5S57C73v19Ev,
  (VTBL_ENTRY)&_ZN5S57C73v20Ev,
  (VTBL_ENTRY)&_ZN5S57C73v21Ev,
  (VTBL_ENTRY)&_ZN5S57C73v22Ev,
  (VTBL_ENTRY)&_ZN5S57C73v23Ev,
  (VTBL_ENTRY)&_ZN5S57C73v24Ev,
  (VTBL_ENTRY)&_ZN5S57C73v25Ev,
  (VTBL_ENTRY)&_ZN5S57C73v26Ev,
  (VTBL_ENTRY)&_ZN5S57C73v27Ev,
  (VTBL_ENTRY)&_ZN5S57C73v28Ev,
  (VTBL_ENTRY)&_ZN5S57C73v29Ev,
  (VTBL_ENTRY)&_ZN5S57C73v30Ev,
  (VTBL_ENTRY)&_ZN5S57C73v31Ev,
  (VTBL_ENTRY)&_ZN5S57C73v32Ev,
  (VTBL_ENTRY)&_ZN5S57C73v33Ev,
  (VTBL_ENTRY)&_ZN5S57C73v34Ev,
  (VTBL_ENTRY)&_ZN5S57C73v35Ev,
  (VTBL_ENTRY)&_ZN5S57C73v36Ev,
  (VTBL_ENTRY)&_ZN5S57C73v37Ev,
  (VTBL_ENTRY)&_ZN5S57C73v38Ev,
  (VTBL_ENTRY)&_ZN5S57C73v39Ev,
  (VTBL_ENTRY)&_ZN5S57C73v40Ev,
  (VTBL_ENTRY)&_ZN5S57C73v41Ev,
  (VTBL_ENTRY)&_ZN5S57C73v42Ev,
  (VTBL_ENTRY)&_ZN5S57C73v43Ev,
  (VTBL_ENTRY)&_ZN5S57C73v44Ev,
  (VTBL_ENTRY)&_ZN5S57C73v45Ev,
  (VTBL_ENTRY)&_ZN5S57C73v46Ev,
  (VTBL_ENTRY)&_ZN5S57C73v47Ev,
  (VTBL_ENTRY)&_ZN5S57C73v48Ev,
  (VTBL_ENTRY)&_ZN5S57C73v49Ev,
  (VTBL_ENTRY)&_ZN5S57C73v50Ev,
  (VTBL_ENTRY)&_ZN5S57C73v51Ev,
  (VTBL_ENTRY)&_ZN5S57C73v52Ev,
  (VTBL_ENTRY)&_ZN5S57C73v53Ev,
  (VTBL_ENTRY)&_ZN5S57C73v54Ev,
  (VTBL_ENTRY)&_ZN5S57C73v55Ev,
  (VTBL_ENTRY)&_ZN5S57C73v56Ev,
  (VTBL_ENTRY)&_ZN5S57C73v57Ev,
  (VTBL_ENTRY)&_ZN5S57C73v58Ev,
  (VTBL_ENTRY)&_ZN5S57C73v59Ev,
  (VTBL_ENTRY)&_ZN5S57C73v60Ev,
  (VTBL_ENTRY)&_ZN5S57C73v61Ev,
  (VTBL_ENTRY)&_ZN5S57C73v62Ev,
  (VTBL_ENTRY)&_ZN5S57C73v63Ev,
  (VTBL_ENTRY)&_ZN5S57C73v64Ev,
  (VTBL_ENTRY)&_ZN5S57C73v65Ev,
  (VTBL_ENTRY)&_ZN5S57C73v66Ev,
  (VTBL_ENTRY)&_ZN5S57C63v67Ev,
  (VTBL_ENTRY)&_ZN5S57C63v68Ev,
  (VTBL_ENTRY)&_ZN5S57C63v69Ev,
  (VTBL_ENTRY)&_ZN5S57C63v70Ev,
  (VTBL_ENTRY)&_ZN5S57C63v71Ev,
  (VTBL_ENTRY)&_ZN5S57C63v72Ev,
  (VTBL_ENTRY)&_ZN5S57C63v73Ev,
  (VTBL_ENTRY)&_ZN5S57C63v74Ev,
  (VTBL_ENTRY)&_ZN5S57C63v75Ev,
  (VTBL_ENTRY)&_ZN5S57C63v76Ev,
  (VTBL_ENTRY)&_ZN5S57C63v77Ev,
  (VTBL_ENTRY)&_ZN5S57C63v78Ev,
  (VTBL_ENTRY)&_ZN5S57C63v79Ev,
  (VTBL_ENTRY)&_ZN5S57C63v80Ev,
  (VTBL_ENTRY)&_ZN5S57C63v81Ev,
  (VTBL_ENTRY)&_ZN5S57C63v82Ev,
  (VTBL_ENTRY)&_ZN5S57C63v83Ev,
  (VTBL_ENTRY)&_ZN5S57C63v84Ev,
  (VTBL_ENTRY)&_ZN5S57C63v85Ev,
  (VTBL_ENTRY)&_ZN5S57C63v86Ev,
  (VTBL_ENTRY)&_ZN5S57C63v87Ev,
  (VTBL_ENTRY)&_ZN5S57C63v88Ev,
  (VTBL_ENTRY)&_ZN5S57C53v89Ev,
  (VTBL_ENTRY)&_ZN5S57C53v90Ev,
  (VTBL_ENTRY)&_ZN5S57C53v91Ev,
  (VTBL_ENTRY)&_ZN5S57C53v92Ev,
  (VTBL_ENTRY)&_ZN5S57C53v93Ev,
  (VTBL_ENTRY)&_ZN5S57C53v94Ev,
  (VTBL_ENTRY)&_ZN5S57C53v95Ev,
  (VTBL_ENTRY)&_ZN5S57C53v96Ev,
  (VTBL_ENTRY)&_ZN5S57C53v97Ev,
  (VTBL_ENTRY)&_ZN5S57C53v98Ev,
  (VTBL_ENTRY)&_ZN5S57C53v99Ev,
  (VTBL_ENTRY)&_ZN5S57C54v100Ev,
  (VTBL_ENTRY)&_ZN5S57C54v101Ev,
  (VTBL_ENTRY)&_ZN5S57C54v102Ev,
  (VTBL_ENTRY)&_ZN5S57C54v103Ev,
  (VTBL_ENTRY)&_ZN5S57C54v104Ev,
  (VTBL_ENTRY)&_ZN5S57C54v105Ev,
  (VTBL_ENTRY)&_ZN5S57C54v106Ev,
  (VTBL_ENTRY)&_ZN5S57C54v107Ev,
  (VTBL_ENTRY)&_ZN5S57C54v108Ev,
  (VTBL_ENTRY)&_ZN5S57C44v109Ev,
  (VTBL_ENTRY)&_ZN5S57C44v110Ev,
  (VTBL_ENTRY)&_ZN5S57C44v111Ev,
  (VTBL_ENTRY)&_ZN5S57C44v112Ev,
  (VTBL_ENTRY)&_ZN5S57C44v113Ev,
  (VTBL_ENTRY)&_ZN5S57C44v114Ev,
  (VTBL_ENTRY)&_ZN5S57C44v115Ev,
  (VTBL_ENTRY)&_ZN5S57C44v116Ev,
  (VTBL_ENTRY)&_ZN5S57C44v117Ev,
  (VTBL_ENTRY)&_ZN5S57C44v118Ev,
  (VTBL_ENTRY)&_ZN5S57C44v119Ev,
  (VTBL_ENTRY)&_ZN5S57C44v120Ev,
  (VTBL_ENTRY)&_ZN5S57C44v121Ev,
  (VTBL_ENTRY)&_ZN5S57C44v122Ev,
  (VTBL_ENTRY)&_ZN5S57C34v123Ev,
  (VTBL_ENTRY)&_ZN5S57C34v124Ev,
  (VTBL_ENTRY)&_ZN5S57C34v125Ev,
  (VTBL_ENTRY)&_ZN5S57C34v126Ev,
  (VTBL_ENTRY)&_ZN5S57C34v127Ev,
  (VTBL_ENTRY)&_ZN5S57C34v128Ev,
  (VTBL_ENTRY)&_ZN5S57C34v129Ev,
  (VTBL_ENTRY)&_ZN5S57C34v130Ev,
  (VTBL_ENTRY)&_ZN5S57C34v131Ev,
  (VTBL_ENTRY)&_ZN5S57C34v132Ev,
  (VTBL_ENTRY)&_ZN5S57C34v133Ev,
  (VTBL_ENTRY)&_ZN5S57C24v134Ev,
  (VTBL_ENTRY)&_ZN5S57C24v135Ev,
  (VTBL_ENTRY)&_ZN5S57C12v1Ev,
  (VTBL_ENTRY)&_ZN5S57C12v2Ev,
};
extern VTBL_ENTRY _ZTI5S57C1[];
extern  VTBL_ENTRY _ZTV5S57C1[];
Class_Descriptor cd_S57C1 = {  "S57C1", // class name
  bases_S57C1, 6,
  &(vtc_S57C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(400,288), // object size
  NSPAIRA(_ZTI5S57C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S57C1),139, //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  S55C7  {
  int s55c7f0;
  __tsi64 s55c7f1;
  void *s55c7f2[4];
  int s55c7f3[2];
  void *s55c7f4;
  ::S3350C4_nt s55c7f5;
  void *s55c7f6[2];
  virtual  ~S55C7(); // _ZN5S55C7D1Ev
  virtual void  v3(); // _ZN5S55C72v3Ev
  virtual void  v4(); // _ZN5S55C72v4Ev
  virtual void  v5(); // _ZN5S55C72v5Ev
  virtual void  v6(); // _ZN5S55C72v6Ev
  virtual void  v7(); // _ZN5S55C72v7Ev
  virtual void  v8(); // _ZN5S55C72v8Ev
  virtual void  v9(); // _ZN5S55C72v9Ev
  virtual void  v10(); // _ZN5S55C73v10Ev
  virtual void  v11(); // _ZN5S55C73v11Ev
  virtual void  v12(); // _ZN5S55C73v12Ev
  virtual void  v13(); // _ZN5S55C73v13Ev
  virtual void  v14(); // _ZN5S55C73v14Ev
  virtual void  v15(); // _ZN5S55C73v15Ev
  virtual void  v16(); // _ZN5S55C73v16Ev
  virtual void  v17(); // _ZN5S55C73v17Ev
  virtual void  v18(); // _ZN5S55C73v18Ev
  virtual void  v19(); // _ZN5S55C73v19Ev
  virtual void  v20(); // _ZN5S55C73v20Ev
  virtual void  v21(); // _ZN5S55C73v21Ev
  virtual void  v22(); // _ZN5S55C73v22Ev
  virtual void  v23(); // _ZN5S55C73v23Ev
  virtual void  v24(); // _ZN5S55C73v24Ev
  virtual void  v25(); // _ZN5S55C73v25Ev
  virtual void  v26(); // _ZN5S55C73v26Ev
  virtual void  v27(); // _ZN5S55C73v27Ev
  virtual void  v28(); // _ZN5S55C73v28Ev
  virtual void  v29(); // _ZN5S55C73v29Ev
  virtual void  v30(); // _ZN5S55C73v30Ev
  virtual void  v31(); // _ZN5S55C73v31Ev
  virtual void  v32(); // _ZN5S55C73v32Ev
  virtual void  v33(); // _ZN5S55C73v33Ev
  virtual void  v34(); // _ZN5S55C73v34Ev
  virtual void  v35(); // _ZN5S55C73v35Ev
  virtual void  v36(); // _ZN5S55C73v36Ev
  virtual void  v37(); // _ZN5S55C73v37Ev
  virtual void  v38(); // _ZN5S55C73v38Ev
  virtual void  v39(); // _ZN5S55C73v39Ev
  virtual void  v40(); // _ZN5S55C73v40Ev
  virtual void  v41(); // _ZN5S55C73v41Ev
  virtual void  v42(); // _ZN5S55C73v42Ev
  virtual void  v43(); // _ZN5S55C73v43Ev
  virtual void  v44(); // _ZN5S55C73v44Ev
  virtual void  v45(); // _ZN5S55C73v45Ev
  virtual void  v46(); // _ZN5S55C73v46Ev
  virtual void  v47(); // _ZN5S55C73v47Ev
  virtual void  v48(); // _ZN5S55C73v48Ev
  virtual void  v49(); // _ZN5S55C73v49Ev
  virtual void  v50(); // _ZN5S55C73v50Ev
  virtual void  v51(); // _ZN5S55C73v51Ev
  virtual void  v52(); // _ZN5S55C73v52Ev
  virtual void  v53(); // _ZN5S55C73v53Ev
  virtual void  v54(); // _ZN5S55C73v54Ev
  virtual void  v55(); // _ZN5S55C73v55Ev
  virtual void  v56(); // _ZN5S55C73v56Ev
  virtual void  v57(); // _ZN5S55C73v57Ev
  virtual void  v58(); // _ZN5S55C73v58Ev
  virtual void  v59(); // _ZN5S55C73v59Ev
  virtual void  v60(); // _ZN5S55C73v60Ev
  virtual void  v61(); // _ZN5S55C73v61Ev
  virtual void  v62(); // _ZN5S55C73v62Ev
  virtual void  v63(); // _ZN5S55C73v63Ev
  virtual void  v64(); // _ZN5S55C73v64Ev
  virtual void  v65(); // _ZN5S55C73v65Ev
  virtual void  v66(); // _ZN5S55C73v66Ev
  S55C7(); // tgen
};
//SIG(-1 S55C7) 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]}


 S55C7 ::~S55C7(){ note_dtor("S55C7", this);}
void  S55C7 ::v3(){vfunc_called(this, "_ZN5S55C72v3Ev");}
void  S55C7 ::v4(){vfunc_called(this, "_ZN5S55C72v4Ev");}
void  S55C7 ::v5(){vfunc_called(this, "_ZN5S55C72v5Ev");}
void  S55C7 ::v6(){vfunc_called(this, "_ZN5S55C72v6Ev");}
void  S55C7 ::v7(){vfunc_called(this, "_ZN5S55C72v7Ev");}
void  S55C7 ::v8(){vfunc_called(this, "_ZN5S55C72v8Ev");}
void  S55C7 ::v9(){vfunc_called(this, "_ZN5S55C72v9Ev");}
void  S55C7 ::v10(){vfunc_called(this, "_ZN5S55C73v10Ev");}
void  S55C7 ::v11(){vfunc_called(this, "_ZN5S55C73v11Ev");}
void  S55C7 ::v12(){vfunc_called(this, "_ZN5S55C73v12Ev");}
void  S55C7 ::v13(){vfunc_called(this, "_ZN5S55C73v13Ev");}
void  S55C7 ::v14(){vfunc_called(this, "_ZN5S55C73v14Ev");}
void  S55C7 ::v15(){vfunc_called(this, "_ZN5S55C73v15Ev");}
void  S55C7 ::v16(){vfunc_called(this, "_ZN5S55C73v16Ev");}
void  S55C7 ::v17(){vfunc_called(this, "_ZN5S55C73v17Ev");}
void  S55C7 ::v18(){vfunc_called(this, "_ZN5S55C73v18Ev");}
void  S55C7 ::v19(){vfunc_called(this, "_ZN5S55C73v19Ev");}
void  S55C7 ::v20(){vfunc_called(this, "_ZN5S55C73v20Ev");}
void  S55C7 ::v21(){vfunc_called(this, "_ZN5S55C73v21Ev");}
void  S55C7 ::v22(){vfunc_called(this, "_ZN5S55C73v22Ev");}
void  S55C7 ::v23(){vfunc_called(this, "_ZN5S55C73v23Ev");}
void  S55C7 ::v24(){vfunc_called(this, "_ZN5S55C73v24Ev");}
void  S55C7 ::v25(){vfunc_called(this, "_ZN5S55C73v25Ev");}
void  S55C7 ::v26(){vfunc_called(this, "_ZN5S55C73v26Ev");}
void  S55C7 ::v27(){vfunc_called(this, "_ZN5S55C73v27Ev");}
void  S55C7 ::v28(){vfunc_called(this, "_ZN5S55C73v28Ev");}
void  S55C7 ::v29(){vfunc_called(this, "_ZN5S55C73v29Ev");}
void  S55C7 ::v30(){vfunc_called(this, "_ZN5S55C73v30Ev");}
void  S55C7 ::v31(){vfunc_called(this, "_ZN5S55C73v31Ev");}
void  S55C7 ::v32(){vfunc_called(this, "_ZN5S55C73v32Ev");}
void  S55C7 ::v33(){vfunc_called(this, "_ZN5S55C73v33Ev");}
void  S55C7 ::v34(){vfunc_called(this, "_ZN5S55C73v34Ev");}
void  S55C7 ::v35(){vfunc_called(this, "_ZN5S55C73v35Ev");}
void  S55C7 ::v36(){vfunc_called(this, "_ZN5S55C73v36Ev");}
void  S55C7 ::v37(){vfunc_called(this, "_ZN5S55C73v37Ev");}
void  S55C7 ::v38(){vfunc_called(this, "_ZN5S55C73v38Ev");}
void  S55C7 ::v39(){vfunc_called(this, "_ZN5S55C73v39Ev");}
void  S55C7 ::v40(){vfunc_called(this, "_ZN5S55C73v40Ev");}
void  S55C7 ::v41(){vfunc_called(this, "_ZN5S55C73v41Ev");}
void  S55C7 ::v42(){vfunc_called(this, "_ZN5S55C73v42Ev");}
void  S55C7 ::v43(){vfunc_called(this, "_ZN5S55C73v43Ev");}
void  S55C7 ::v44(){vfunc_called(this, "_ZN5S55C73v44Ev");}
void  S55C7 ::v45(){vfunc_called(this, "_ZN5S55C73v45Ev");}
void  S55C7 ::v46(){vfunc_called(this, "_ZN5S55C73v46Ev");}
void  S55C7 ::v47(){vfunc_called(this, "_ZN5S55C73v47Ev");}
void  S55C7 ::v48(){vfunc_called(this, "_ZN5S55C73v48Ev");}
void  S55C7 ::v49(){vfunc_called(this, "_ZN5S55C73v49Ev");}
void  S55C7 ::v50(){vfunc_called(this, "_ZN5S55C73v50Ev");}
void  S55C7 ::v51(){vfunc_called(this, "_ZN5S55C73v51Ev");}
void  S55C7 ::v52(){vfunc_called(this, "_ZN5S55C73v52Ev");}
void  S55C7 ::v53(){vfunc_called(this, "_ZN5S55C73v53Ev");}
void  S55C7 ::v54(){vfunc_called(this, "_ZN5S55C73v54Ev");}
void  S55C7 ::v55(){vfunc_called(this, "_ZN5S55C73v55Ev");}
void  S55C7 ::v56(){vfunc_called(this, "_ZN5S55C73v56Ev");}
void  S55C7 ::v57(){vfunc_called(this, "_ZN5S55C73v57Ev");}
void  S55C7 ::v58(){vfunc_called(this, "_ZN5S55C73v58Ev");}
void  S55C7 ::v59(){vfunc_called(this, "_ZN5S55C73v59Ev");}
void  S55C7 ::v60(){vfunc_called(this, "_ZN5S55C73v60Ev");}
void  S55C7 ::v61(){vfunc_called(this, "_ZN5S55C73v61Ev");}
void  S55C7 ::v62(){vfunc_called(this, "_ZN5S55C73v62Ev");}
void  S55C7 ::v63(){vfunc_called(this, "_ZN5S55C73v63Ev");}
void  S55C7 ::v64(){vfunc_called(this, "_ZN5S55C73v64Ev");}
void  S55C7 ::v65(){vfunc_called(this, "_ZN5S55C73v65Ev");}
void  S55C7 ::v66(){vfunc_called(this, "_ZN5S55C73v66Ev");}
S55C7 ::S55C7(){ note_ctor("S55C7", this);} // tgen

static void Test_S55C7()
{
  extern Class_Descriptor cd_S55C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S55C7, buf);
    S55C7 *dp, &lv = *(dp=new (buf) S55C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S55C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S55C7)");
    check_field_offset(lv, s55c7f0, ABISELECT(8,4), "S55C7.s55c7f0");
    check_field_offset(lv, s55c7f1, ABISELECT(16,8), "S55C7.s55c7f1");
    check_field_offset(lv, s55c7f2, ABISELECT(24,16), "S55C7.s55c7f2");
    check_field_offset(lv, s55c7f3, ABISELECT(56,32), "S55C7.s55c7f3");
    check_field_offset(lv, s55c7f4, ABISELECT(64,40), "S55C7.s55c7f4");
    check_field_offset(lv, s55c7f5, ABISELECT(72,44), "S55C7.s55c7f5");
    check_field_offset(lv, s55c7f6, ABISELECT(80,52), "S55C7.s55c7f6");
    test_class_info(&lv, &cd_S55C7);
    dp->~S55C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS55C7(Test_S55C7, "S55C7", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN5S55C7C1Ev();
extern void _ZN5S55C7D1Ev();
Name_Map name_map_S55C7[] = {
  NSPAIR(_ZN5S55C7C1Ev),
  NSPAIR(_ZN5S55C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI5S55C7[];
extern void _ZN5S55C7D1Ev();
extern void _ZN5S55C7D0Ev();
extern void _ZN5S55C72v3Ev();
extern void _ZN5S55C72v4Ev();
extern void _ZN5S55C72v5Ev();
extern void _ZN5S55C72v6Ev();
extern void _ZN5S55C72v7Ev();
extern void _ZN5S55C72v8Ev();
extern void _ZN5S55C72v9Ev();
extern void _ZN5S55C73v10Ev();
extern void _ZN5S55C73v11Ev();
extern void _ZN5S55C73v12Ev();
extern void _ZN5S55C73v13Ev();
extern void _ZN5S55C73v14Ev();
extern void _ZN5S55C73v15Ev();
extern void _ZN5S55C73v16Ev();
extern void _ZN5S55C73v17Ev();
extern void _ZN5S55C73v18Ev();
extern void _ZN5S55C73v19Ev();
extern void _ZN5S55C73v20Ev();
extern void _ZN5S55C73v21Ev();
extern void _ZN5S55C73v22Ev();
extern void _ZN5S55C73v23Ev();
extern void _ZN5S55C73v24Ev();
extern void _ZN5S55C73v25Ev();
extern void _ZN5S55C73v26Ev();
extern void _ZN5S55C73v27Ev();
extern void _ZN5S55C73v28Ev();
extern void _ZN5S55C73v29Ev();
extern void _ZN5S55C73v30Ev();
extern void _ZN5S55C73v31Ev();
extern void _ZN5S55C73v32Ev();
extern void _ZN5S55C73v33Ev();
extern void _ZN5S55C73v34Ev();
extern void _ZN5S55C73v35Ev();
extern void _ZN5S55C73v36Ev();
extern void _ZN5S55C73v37Ev();
extern void _ZN5S55C73v38Ev();
extern void _ZN5S55C73v39Ev();
extern void _ZN5S55C73v40Ev();
extern void _ZN5S55C73v41Ev();
extern void _ZN5S55C73v42Ev();
extern void _ZN5S55C73v43Ev();
extern void _ZN5S55C73v44Ev();
extern void _ZN5S55C73v45Ev();
extern void _ZN5S55C73v46Ev();
extern void _ZN5S55C73v47Ev();
extern void _ZN5S55C73v48Ev();
extern void _ZN5S55C73v49Ev();
extern void _ZN5S55C73v50Ev();
extern void _ZN5S55C73v51Ev();
extern void _ZN5S55C73v52Ev();
extern void _ZN5S55C73v53Ev();
extern void _ZN5S55C73v54Ev();
extern void _ZN5S55C73v55Ev();
extern void _ZN5S55C73v56Ev();
extern void _ZN5S55C73v57Ev();
extern void _ZN5S55C73v58Ev();
extern void _ZN5S55C73v59Ev();
extern void _ZN5S55C73v60Ev();
extern void _ZN5S55C73v61Ev();
extern void _ZN5S55C73v62Ev();
extern void _ZN5S55C73v63Ev();
extern void _ZN5S55C73v64Ev();
extern void _ZN5S55C73v65Ev();
extern void _ZN5S55C73v66Ev();
static  VTBL_ENTRY vtc_S55C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S55C7[0]),
  (VTBL_ENTRY)&_ZN5S55C7D1Ev,
  (VTBL_ENTRY)&_ZN5S55C7D0Ev,
  (VTBL_ENTRY)&_ZN5S55C72v3Ev,
  (VTBL_ENTRY)&_ZN5S55C72v4Ev,
  (VTBL_ENTRY)&_ZN5S55C72v5Ev,
  (VTBL_ENTRY)&_ZN5S55C72v6Ev,
  (VTBL_ENTRY)&_ZN5S55C72v7Ev,
  (VTBL_ENTRY)&_ZN5S55C72v8Ev,
  (VTBL_ENTRY)&_ZN5S55C72v9Ev,
  (VTBL_ENTRY)&_ZN5S55C73v10Ev,
  (VTBL_ENTRY)&_ZN5S55C73v11Ev,
  (VTBL_ENTRY)&_ZN5S55C73v12Ev,
  (VTBL_ENTRY)&_ZN5S55C73v13Ev,
  (VTBL_ENTRY)&_ZN5S55C73v14Ev,
  (VTBL_ENTRY)&_ZN5S55C73v15Ev,
  (VTBL_ENTRY)&_ZN5S55C73v16Ev,
  (VTBL_ENTRY)&_ZN5S55C73v17Ev,
  (VTBL_ENTRY)&_ZN5S55C73v18Ev,
  (VTBL_ENTRY)&_ZN5S55C73v19Ev,
  (VTBL_ENTRY)&_ZN5S55C73v20Ev,
  (VTBL_ENTRY)&_ZN5S55C73v21Ev,
  (VTBL_ENTRY)&_ZN5S55C73v22Ev,
  (VTBL_ENTRY)&_ZN5S55C73v23Ev,
  (VTBL_ENTRY)&_ZN5S55C73v24Ev,
  (VTBL_ENTRY)&_ZN5S55C73v25Ev,
  (VTBL_ENTRY)&_ZN5S55C73v26Ev,
  (VTBL_ENTRY)&_ZN5S55C73v27Ev,
  (VTBL_ENTRY)&_ZN5S55C73v28Ev,
  (VTBL_ENTRY)&_ZN5S55C73v29Ev,
  (VTBL_ENTRY)&_ZN5S55C73v30Ev,
  (VTBL_ENTRY)&_ZN5S55C73v31Ev,
  (VTBL_ENTRY)&_ZN5S55C73v32Ev,
  (VTBL_ENTRY)&_ZN5S55C73v33Ev,
  (VTBL_ENTRY)&_ZN5S55C73v34Ev,
  (VTBL_ENTRY)&_ZN5S55C73v35Ev,
  (VTBL_ENTRY)&_ZN5S55C73v36Ev,
  (VTBL_ENTRY)&_ZN5S55C73v37Ev,
  (VTBL_ENTRY)&_ZN5S55C73v38Ev,
  (VTBL_ENTRY)&_ZN5S55C73v39Ev,
  (VTBL_ENTRY)&_ZN5S55C73v40Ev,
  (VTBL_ENTRY)&_ZN5S55C73v41Ev,
  (VTBL_ENTRY)&_ZN5S55C73v42Ev,
  (VTBL_ENTRY)&_ZN5S55C73v43Ev,
  (VTBL_ENTRY)&_ZN5S55C73v44Ev,
  (VTBL_ENTRY)&_ZN5S55C73v45Ev,
  (VTBL_ENTRY)&_ZN5S55C73v46Ev,
  (VTBL_ENTRY)&_ZN5S55C73v47Ev,
  (VTBL_ENTRY)&_ZN5S55C73v48Ev,
  (VTBL_ENTRY)&_ZN5S55C73v49Ev,
  (VTBL_ENTRY)&_ZN5S55C73v50Ev,
  (VTBL_ENTRY)&_ZN5S55C73v51Ev,
  (VTBL_ENTRY)&_ZN5S55C73v52Ev,
  (VTBL_ENTRY)&_ZN5S55C73v53Ev,
  (VTBL_ENTRY)&_ZN5S55C73v54Ev,
  (VTBL_ENTRY)&_ZN5S55C73v55Ev,
  (VTBL_ENTRY)&_ZN5S55C73v56Ev,
  (VTBL_ENTRY)&_ZN5S55C73v57Ev,
  (VTBL_ENTRY)&_ZN5S55C73v58Ev,
  (VTBL_ENTRY)&_ZN5S55C73v59Ev,
  (VTBL_ENTRY)&_ZN5S55C73v60Ev,
  (VTBL_ENTRY)&_ZN5S55C73v61Ev,
  (VTBL_ENTRY)&_ZN5S55C73v62Ev,
  (VTBL_ENTRY)&_ZN5S55C73v63Ev,
  (VTBL_ENTRY)&_ZN5S55C73v64Ev,
  (VTBL_ENTRY)&_ZN5S55C73v65Ev,
  (VTBL_ENTRY)&_ZN5S55C73v66Ev,
};
extern VTBL_ENTRY _ZTI5S55C7[];
extern  VTBL_ENTRY _ZTV5S55C7[];
Class_Descriptor cd_S55C7 = {  "S55C7", // class name
  0,0,//no base classes
  &(vtc_S55C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI5S55C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV5S55C7),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  S55C6  : S55C7 {
  int s55c6f0[2];
  void *s55c6f1;
  int s55c6f2[2];
  ::S287C8_nt s55c6f3;
  ::S287C8_nt s55c6f4;
  ::S2121C38 s55c6f5;
  ::S287C8_nt s55c6f6;
  unsigned int s55c6f7:1;
  unsigned int s55c6f8:1;
  unsigned int s55c6f9:1;
  unsigned int s55c6f10:1;
  unsigned int s55c6f11:1;
  int s55c6f12[2];
  virtual  ~S55C6(); // _ZN5S55C6D1Ev
  virtual void  v67(); // _ZN5S55C63v67Ev
  virtual void  v68(); // _ZN5S55C63v68Ev
  virtual void  v69(); // _ZN5S55C63v69Ev
  virtual void  v70(); // _ZN5S55C63v70Ev
  virtual void  v71(); // _ZN5S55C63v71Ev
  virtual void  v72(); // _ZN5S55C63v72Ev
  virtual void  v73(); // _ZN5S55C63v73Ev
  virtual void  v74(); // _ZN5S55C63v74Ev
  virtual void  v75(); // _ZN5S55C63v75Ev
  virtual void  v76(); // _ZN5S55C63v76Ev
  virtual void  v77(); // _ZN5S55C63v77Ev
  virtual void  v78(); // _ZN5S55C63v78Ev
  virtual void  v79(); // _ZN5S55C63v79Ev
  virtual void  v80(); // _ZN5S55C63v80Ev
  virtual void  v81(); // _ZN5S55C63v81Ev
  virtual void  v82(); // _ZN5S55C63v82Ev
  virtual void  v83(); // _ZN5S55C63v83Ev
  virtual void  v84(); // _ZN5S55C63v84Ev
  virtual void  v85(); // _ZN5S55C63v85Ev
  virtual void  v86(); // _ZN5S55C63v86Ev
  virtual void  v87(); // _ZN5S55C63v87Ev
  virtual void  v88(); // _ZN5S55C63v88Ev
  S55C6(); // tgen
};
//SIG(-1 S55C6) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S55C6 ::~S55C6(){ note_dtor("S55C6", this);}
void  S55C6 ::v67(){vfunc_called(this, "_ZN5S55C63v67Ev");}
void  S55C6 ::v68(){vfunc_called(this, "_ZN5S55C63v68Ev");}
void  S55C6 ::v69(){vfunc_called(this, "_ZN5S55C63v69Ev");}
void  S55C6 ::v70(){vfunc_called(this, "_ZN5S55C63v70Ev");}
void  S55C6 ::v71(){vfunc_called(this, "_ZN5S55C63v71Ev");}
void  S55C6 ::v72(){vfunc_called(this, "_ZN5S55C63v72Ev");}
void  S55C6 ::v73(){vfunc_called(this, "_ZN5S55C63v73Ev");}
void  S55C6 ::v74(){vfunc_called(this, "_ZN5S55C63v74Ev");}
void  S55C6 ::v75(){vfunc_called(this, "_ZN5S55C63v75Ev");}
void  S55C6 ::v76(){vfunc_called(this, "_ZN5S55C63v76Ev");}
void  S55C6 ::v77(){vfunc_called(this, "_ZN5S55C63v77Ev");}
void  S55C6 ::v78(){vfunc_called(this, "_ZN5S55C63v78Ev");}
void  S55C6 ::v79(){vfunc_called(this, "_ZN5S55C63v79Ev");}
void  S55C6 ::v80(){vfunc_called(this, "_ZN5S55C63v80Ev");}
void  S55C6 ::v81(){vfunc_called(this, "_ZN5S55C63v81Ev");}
void  S55C6 ::v82(){vfunc_called(this, "_ZN5S55C63v82Ev");}
void  S55C6 ::v83(){vfunc_called(this, "_ZN5S55C63v83Ev");}
void  S55C6 ::v84(){vfunc_called(this, "_ZN5S55C63v84Ev");}
void  S55C6 ::v85(){vfunc_called(this, "_ZN5S55C63v85Ev");}
void  S55C6 ::v86(){vfunc_called(this, "_ZN5S55C63v86Ev");}
void  S55C6 ::v87(){vfunc_called(this, "_ZN5S55C63v87Ev");}
void  S55C6 ::v88(){vfunc_called(this, "_ZN5S55C63v88Ev");}
S55C6 ::S55C6(){ note_ctor("S55C6", this);} // tgen

static void Test_S55C6()
{
  extern Class_Descriptor cd_S55C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S55C6, buf);
    S55C6 *dp, &lv = *(dp=new (buf) S55C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S55C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S55C6)");
    check_base_class_offset(lv, (S55C7*), 0, "S55C6");
    check_field_offset(lv, s55c6f0, ABISELECT(96,60), "S55C6.s55c6f0");
    check_field_offset(lv, s55c6f1, ABISELECT(104,68), "S55C6.s55c6f1");
    check_field_offset(lv, s55c6f2, ABISELECT(112,72), "S55C6.s55c6f2");
    check_field_offset(lv, s55c6f3, ABISELECT(120,80), "S55C6.s55c6f3");
    check_field_offset(lv, s55c6f4, ABISELECT(136,92), "S55C6.s55c6f4");
    check_field_offset(lv, s55c6f5, ABISELECT(152,104), "S55C6.s55c6f5");
    check_field_offset(lv, s55c6f6, ABISELECT(160,108), "S55C6.s55c6f6");
    set_bf_and_test(lv, s55c6f7, ABISELECT(176,120), 0, 1, 1, "S55C6");
    set_bf_and_test(lv, s55c6f8, ABISELECT(176,120), 1, 1, 1, "S55C6");
    set_bf_and_test(lv, s55c6f9, ABISELECT(176,120), 2, 1, 1, "S55C6");
    set_bf_and_test(lv, s55c6f10, ABISELECT(176,120), 3, 1, 1, "S55C6");
    set_bf_and_test(lv, s55c6f11, ABISELECT(176,120), 4, 1, 1, "S55C6");
    check_field_offset(lv, s55c6f12, ABISELECT(180,124), "S55C6.s55c6f12");
    test_class_info(&lv, &cd_S55C6);
    dp->~S55C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS55C6(Test_S55C6, "S55C6", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN5S55C6C1Ev();
extern void _ZN5S55C6D1Ev();
Name_Map name_map_S55C6[] = {
  NSPAIR(_ZN5S55C6C1Ev),
  NSPAIR(_ZN5S55C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S55C7;
extern VTBL_ENTRY _ZTI5S55C7[];
extern  VTBL_ENTRY _ZTV5S55C7[];
static Base_Class bases_S55C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S55C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI5S55C6[];
extern void _ZN5S55C6D1Ev();
extern void _ZN5S55C6D0Ev();
extern void _ZN5S55C72v3Ev();
extern void _ZN5S55C72v4Ev();
extern void _ZN5S55C72v5Ev();
extern void _ZN5S55C72v6Ev();
extern void _ZN5S55C72v7Ev();
extern void _ZN5S55C72v8Ev();
extern void _ZN5S55C72v9Ev();
extern void _ZN5S55C73v10Ev();
extern void _ZN5S55C73v11Ev();
extern void _ZN5S55C73v12Ev();
extern void _ZN5S55C73v13Ev();
extern void _ZN5S55C73v14Ev();
extern void _ZN5S55C73v15Ev();
extern void _ZN5S55C73v16Ev();
extern void _ZN5S55C73v17Ev();
extern void _ZN5S55C73v18Ev();
extern void _ZN5S55C73v19Ev();
extern void _ZN5S55C73v20Ev();
extern void _ZN5S55C73v21Ev();
extern void _ZN5S55C73v22Ev();
extern void _ZN5S55C73v23Ev();
extern void _ZN5S55C73v24Ev();
extern void _ZN5S55C73v25Ev();
extern void _ZN5S55C73v26Ev();
extern void _ZN5S55C73v27Ev();
extern void _ZN5S55C73v28Ev();
extern void _ZN5S55C73v29Ev();
extern void _ZN5S55C73v30Ev();
extern void _ZN5S55C73v31Ev();
extern void _ZN5S55C73v32Ev();
extern void _ZN5S55C73v33Ev();
extern void _ZN5S55C73v34Ev();
extern void _ZN5S55C73v35Ev();
extern void _ZN5S55C73v36Ev();
extern void _ZN5S55C73v37Ev();
extern void _ZN5S55C73v38Ev();
extern void _ZN5S55C73v39Ev();
extern void _ZN5S55C73v40Ev();
extern void _ZN5S55C73v41Ev();
extern void _ZN5S55C73v42Ev();
extern void _ZN5S55C73v43Ev();
extern void _ZN5S55C73v44Ev();
extern void _ZN5S55C73v45Ev();
extern void _ZN5S55C73v46Ev();
extern void _ZN5S55C73v47Ev();
extern void _ZN5S55C73v48Ev();
extern void _ZN5S55C73v49Ev();
extern void _ZN5S55C73v50Ev();
extern void _ZN5S55C73v51Ev();
extern void _ZN5S55C73v52Ev();
extern void _ZN5S55C73v53Ev();
extern void _ZN5S55C73v54Ev();
extern void _ZN5S55C73v55Ev();
extern void _ZN5S55C73v56Ev();
extern void _ZN5S55C73v57Ev();
extern void _ZN5S55C73v58Ev();
extern void _ZN5S55C73v59Ev();
extern void _ZN5S55C73v60Ev();
extern void _ZN5S55C73v61Ev();
extern void _ZN5S55C73v62Ev();
extern void _ZN5S55C73v63Ev();
extern void _ZN5S55C73v64Ev();
extern void _ZN5S55C73v65Ev();
extern void _ZN5S55C73v66Ev();
extern void _ZN5S55C63v67Ev();
extern void _ZN5S55C63v68Ev();
extern void _ZN5S55C63v69Ev();
extern void _ZN5S55C63v70Ev();
extern void _ZN5S55C63v71Ev();
extern void _ZN5S55C63v72Ev();
extern void _ZN5S55C63v73Ev();
extern void _ZN5S55C63v74Ev();
extern void _ZN5S55C63v75Ev();
extern void _ZN5S55C63v76Ev();
extern void _ZN5S55C63v77Ev();
extern void _ZN5S55C63v78Ev();
extern void _ZN5S55C63v79Ev();
extern void _ZN5S55C63v80Ev();
extern void _ZN5S55C63v81Ev();
extern void _ZN5S55C63v82Ev();
extern void _ZN5S55C63v83Ev();
extern void _ZN5S55C63v84Ev();
extern void _ZN5S55C63v85Ev();
extern void _ZN5S55C63v86Ev();
extern void _ZN5S55C63v87Ev();
extern void _ZN5S55C63v88Ev();
static  VTBL_ENTRY vtc_S55C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S55C6[0]),
  (VTBL_ENTRY)&_ZN5S55C6D1Ev,
  (VTBL_ENTRY)&_ZN5S55C6D0Ev,
  (VTBL_ENTRY)&_ZN5S55C72v3Ev,
  (VTBL_ENTRY)&_ZN5S55C72v4Ev,
  (VTBL_ENTRY)&_ZN5S55C72v5Ev,
  (VTBL_ENTRY)&_ZN5S55C72v6Ev,
  (VTBL_ENTRY)&_ZN5S55C72v7Ev,
  (VTBL_ENTRY)&_ZN5S55C72v8Ev,
  (VTBL_ENTRY)&_ZN5S55C72v9Ev,
  (VTBL_ENTRY)&_ZN5S55C73v10Ev,
  (VTBL_ENTRY)&_ZN5S55C73v11Ev,
  (VTBL_ENTRY)&_ZN5S55C73v12Ev,
  (VTBL_ENTRY)&_ZN5S55C73v13Ev,
  (VTBL_ENTRY)&_ZN5S55C73v14Ev,
  (VTBL_ENTRY)&_ZN5S55C73v15Ev,
  (VTBL_ENTRY)&_ZN5S55C73v16Ev,
  (VTBL_ENTRY)&_ZN5S55C73v17Ev,
  (VTBL_ENTRY)&_ZN5S55C73v18Ev,
  (VTBL_ENTRY)&_ZN5S55C73v19Ev,
  (VTBL_ENTRY)&_ZN5S55C73v20Ev,
  (VTBL_ENTRY)&_ZN5S55C73v21Ev,
  (VTBL_ENTRY)&_ZN5S55C73v22Ev,
  (VTBL_ENTRY)&_ZN5S55C73v23Ev,
  (VTBL_ENTRY)&_ZN5S55C73v24Ev,
  (VTBL_ENTRY)&_ZN5S55C73v25Ev,
  (VTBL_ENTRY)&_ZN5S55C73v26Ev,
  (VTBL_ENTRY)&_ZN5S55C73v27Ev,
  (VTBL_ENTRY)&_ZN5S55C73v28Ev,
  (VTBL_ENTRY)&_ZN5S55C73v29Ev,
  (VTBL_ENTRY)&_ZN5S55C73v30Ev,
  (VTBL_ENTRY)&_ZN5S55C73v31Ev,
  (VTBL_ENTRY)&_ZN5S55C73v32Ev,
  (VTBL_ENTRY)&_ZN5S55C73v33Ev,
  (VTBL_ENTRY)&_ZN5S55C73v34Ev,
  (VTBL_ENTRY)&_ZN5S55C73v35Ev,
  (VTBL_ENTRY)&_ZN5S55C73v36Ev,
  (VTBL_ENTRY)&_ZN5S55C73v37Ev,
  (VTBL_ENTRY)&_ZN5S55C73v38Ev,
  (VTBL_ENTRY)&_ZN5S55C73v39Ev,
  (VTBL_ENTRY)&_ZN5S55C73v40Ev,
  (VTBL_ENTRY)&_ZN5S55C73v41Ev,
  (VTBL_ENTRY)&_ZN5S55C73v42Ev,
  (VTBL_ENTRY)&_ZN5S55C73v43Ev,
  (VTBL_ENTRY)&_ZN5S55C73v44Ev,
  (VTBL_ENTRY)&_ZN5S55C73v45Ev,
  (VTBL_ENTRY)&_ZN5S55C73v46Ev,
  (VTBL_ENTRY)&_ZN5S55C73v47Ev,
  (VTBL_ENTRY)&_ZN5S55C73v48Ev,
  (VTBL_ENTRY)&_ZN5S55C73v49Ev,
  (VTBL_ENTRY)&_ZN5S55C73v50Ev,
  (VTBL_ENTRY)&_ZN5S55C73v51Ev,
  (VTBL_ENTRY)&_ZN5S55C73v52Ev,
  (VTBL_ENTRY)&_ZN5S55C73v53Ev,
  (VTBL_ENTRY)&_ZN5S55C73v54Ev,
  (VTBL_ENTRY)&_ZN5S55C73v55Ev,
  (VTBL_ENTRY)&_ZN5S55C73v56Ev,
  (VTBL_ENTRY)&_ZN5S55C73v57Ev,
  (VTBL_ENTRY)&_ZN5S55C73v58Ev,
  (VTBL_ENTRY)&_ZN5S55C73v59Ev,
  (VTBL_ENTRY)&_ZN5S55C73v60Ev,
  (VTBL_ENTRY)&_ZN5S55C73v61Ev,
  (VTBL_ENTRY)&_ZN5S55C73v62Ev,
  (VTBL_ENTRY)&_ZN5S55C73v63Ev,
  (VTBL_ENTRY)&_ZN5S55C73v64Ev,
  (VTBL_ENTRY)&_ZN5S55C73v65Ev,
  (VTBL_ENTRY)&_ZN5S55C73v66Ev,
  (VTBL_ENTRY)&_ZN5S55C63v67Ev,
  (VTBL_ENTRY)&_ZN5S55C63v68Ev,
  (VTBL_ENTRY)&_ZN5S55C63v69Ev,
  (VTBL_ENTRY)&_ZN5S55C63v70Ev,
  (VTBL_ENTRY)&_ZN5S55C63v71Ev,
  (VTBL_ENTRY)&_ZN5S55C63v72Ev,
  (VTBL_ENTRY)&_ZN5S55C63v73Ev,
  (VTBL_ENTRY)&_ZN5S55C63v74Ev,
  (VTBL_ENTRY)&_ZN5S55C63v75Ev,
  (VTBL_ENTRY)&_ZN5S55C63v76Ev,
  (VTBL_ENTRY)&_ZN5S55C63v77Ev,
  (VTBL_ENTRY)&_ZN5S55C63v78Ev,
  (VTBL_ENTRY)&_ZN5S55C63v79Ev,
  (VTBL_ENTRY)&_ZN5S55C63v80Ev,
  (VTBL_ENTRY)&_ZN5S55C63v81Ev,
  (VTBL_ENTRY)&_ZN5S55C63v82Ev,
  (VTBL_ENTRY)&_ZN5S55C63v83Ev,
  (VTBL_ENTRY)&_ZN5S55C63v84Ev,
  (VTBL_ENTRY)&_ZN5S55C63v85Ev,
  (VTBL_ENTRY)&_ZN5S55C63v86Ev,
  (VTBL_ENTRY)&_ZN5S55C63v87Ev,
  (VTBL_ENTRY)&_ZN5S55C63v88Ev,
};
extern VTBL_ENTRY _ZTI5S55C6[];
extern  VTBL_ENTRY _ZTV5S55C6[];
Class_Descriptor cd_S55C6 = {  "S55C6", // class name
  bases_S55C6, 1,
  &(vtc_S55C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI5S55C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S55C6),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S55C5  : S55C6 {
  unsigned int s55c5f0:1;
  unsigned int s55c5f1:1;
  unsigned int s55c5f2:1;
  ::S3350C17 s55c5f3;
  ::S3350C11 s55c5f4;
  ::S3350C5_nt s55c5f5;
  ::S287C27 s55c5f6;
  int s55c5f7[3];
  virtual  ~S55C5(); // _ZN5S55C5D1Ev
  virtual void  v89(); // _ZN5S55C53v89Ev
  virtual void  v90(); // _ZN5S55C53v90Ev
  virtual void  v91(); // _ZN5S55C53v91Ev
  virtual void  v92(); // _ZN5S55C53v92Ev
  virtual void  v93(); // _ZN5S55C53v93Ev
  virtual void  v94(); // _ZN5S55C53v94Ev
  virtual void  v95(); // _ZN5S55C53v95Ev
  virtual void  v96(); // _ZN5S55C53v96Ev
  virtual void  v97(); // _ZN5S55C53v97Ev
  virtual void  v98(); // _ZN5S55C53v98Ev
  virtual void  v99(); // _ZN5S55C53v99Ev
  virtual void  v100(); // _ZN5S55C54v100Ev
  virtual void  v101(); // _ZN5S55C54v101Ev
  virtual void  v102(); // _ZN5S55C54v102Ev
  virtual void  v103(); // _ZN5S55C54v103Ev
  virtual void  v104(); // _ZN5S55C54v104Ev
  virtual void  v105(); // _ZN5S55C54v105Ev
  virtual void  v106(); // _ZN5S55C54v106Ev
  virtual void  v107(); // _ZN5S55C54v107Ev
  virtual void  v108(); // _ZN5S55C54v108Ev
  S55C5(); // tgen
};
//SIG(-1 S55C5) C1{ BC2{ BC3{ vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 FC10{ BC11{ BC8}} FC12{ BC13{ BC8}} FC14{ BC15{ BC8}} FC16{ BC17{ BC8}} Fi[3]}


 S55C5 ::~S55C5(){ note_dtor("S55C5", this);}
void  S55C5 ::v89(){vfunc_called(this, "_ZN5S55C53v89Ev");}
void  S55C5 ::v90(){vfunc_called(this, "_ZN5S55C53v90Ev");}
void  S55C5 ::v91(){vfunc_called(this, "_ZN5S55C53v91Ev");}
void  S55C5 ::v92(){vfunc_called(this, "_ZN5S55C53v92Ev");}
void  S55C5 ::v93(){vfunc_called(this, "_ZN5S55C53v93Ev");}
void  S55C5 ::v94(){vfunc_called(this, "_ZN5S55C53v94Ev");}
void  S55C5 ::v95(){vfunc_called(this, "_ZN5S55C53v95Ev");}
void  S55C5 ::v96(){vfunc_called(this, "_ZN5S55C53v96Ev");}
void  S55C5 ::v97(){vfunc_called(this, "_ZN5S55C53v97Ev");}
void  S55C5 ::v98(){vfunc_called(this, "_ZN5S55C53v98Ev");}
void  S55C5 ::v99(){vfunc_called(this, "_ZN5S55C53v99Ev");}
void  S55C5 ::v100(){vfunc_called(this, "_ZN5S55C54v100Ev");}
void  S55C5 ::v101(){vfunc_called(this, "_ZN5S55C54v101Ev");}
void  S55C5 ::v102(){vfunc_called(this, "_ZN5S55C54v102Ev");}
void  S55C5 ::v103(){vfunc_called(this, "_ZN5S55C54v103Ev");}
void  S55C5 ::v104(){vfunc_called(this, "_ZN5S55C54v104Ev");}
void  S55C5 ::v105(){vfunc_called(this, "_ZN5S55C54v105Ev");}
void  S55C5 ::v106(){vfunc_called(this, "_ZN5S55C54v106Ev");}
void  S55C5 ::v107(){vfunc_called(this, "_ZN5S55C54v107Ev");}
void  S55C5 ::v108(){vfunc_called(this, "_ZN5S55C54v108Ev");}
S55C5 ::S55C5(){ note_ctor("S55C5", this);} // tgen

static void Test_S55C5()
{
  extern Class_Descriptor cd_S55C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S55C5, buf);
    S55C5 *dp, &lv = *(dp=new (buf) S55C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S55C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S55C5)");
    check_base_class_offset(lv, (S55C7*)(S55C6*), 0, "S55C5");
    check_base_class_offset(lv, (S55C6*), 0, "S55C5");
    set_bf_and_test(lv, s55c5f0, ABISELECT(188,132), 0, 1, 1, "S55C5");
    set_bf_and_test(lv, s55c5f1, ABISELECT(188,132), 1, 1, 1, "S55C5");
    set_bf_and_test(lv, s55c5f2, ABISELECT(188,132), 2, 1, 1, "S55C5");
    check_field_offset(lv, s55c5f3, ABISELECT(192,136), "S55C5.s55c5f3");
    check_field_offset(lv, s55c5f4, ABISELECT(208,148), "S55C5.s55c5f4");
    check_field_offset(lv, s55c5f5, ABISELECT(224,160), "S55C5.s55c5f5");
    check_field_offset(lv, s55c5f6, ABISELECT(240,172), "S55C5.s55c5f6");
    check_field_offset(lv, s55c5f7, ABISELECT(256,184), "S55C5.s55c5f7");
    test_class_info(&lv, &cd_S55C5);
    dp->~S55C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS55C5(Test_S55C5, "S55C5", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN5S55C5C1Ev();
extern void _ZN5S55C5D1Ev();
Name_Map name_map_S55C5[] = {
  NSPAIR(_ZN5S55C5C1Ev),
  NSPAIR(_ZN5S55C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S55C7;
extern VTBL_ENTRY _ZTI5S55C7[];
extern  VTBL_ENTRY _ZTV5S55C7[];
extern Class_Descriptor cd_S55C6;
extern VTBL_ENTRY _ZTI5S55C6[];
extern  VTBL_ENTRY _ZTV5S55C6[];
static Base_Class bases_S55C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S55C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S55C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S55C5[];
extern void _ZN5S55C5D1Ev();
extern void _ZN5S55C5D0Ev();
extern void _ZN5S55C72v3Ev();
extern void _ZN5S55C72v4Ev();
extern void _ZN5S55C72v5Ev();
extern void _ZN5S55C72v6Ev();
extern void _ZN5S55C72v7Ev();
extern void _ZN5S55C72v8Ev();
extern void _ZN5S55C72v9Ev();
extern void _ZN5S55C73v10Ev();
extern void _ZN5S55C73v11Ev();
extern void _ZN5S55C73v12Ev();
extern void _ZN5S55C73v13Ev();
extern void _ZN5S55C73v14Ev();
extern void _ZN5S55C73v15Ev();
extern void _ZN5S55C73v16Ev();
extern void _ZN5S55C73v17Ev();
extern void _ZN5S55C73v18Ev();
extern void _ZN5S55C73v19Ev();
extern void _ZN5S55C73v20Ev();
extern void _ZN5S55C73v21Ev();
extern void _ZN5S55C73v22Ev();
extern void _ZN5S55C73v23Ev();
extern void _ZN5S55C73v24Ev();
extern void _ZN5S55C73v25Ev();
extern void _ZN5S55C73v26Ev();
extern void _ZN5S55C73v27Ev();
extern void _ZN5S55C73v28Ev();
extern void _ZN5S55C73v29Ev();
extern void _ZN5S55C73v30Ev();
extern void _ZN5S55C73v31Ev();
extern void _ZN5S55C73v32Ev();
extern void _ZN5S55C73v33Ev();
extern void _ZN5S55C73v34Ev();
extern void _ZN5S55C73v35Ev();
extern void _ZN5S55C73v36Ev();
extern void _ZN5S55C73v37Ev();
extern void _ZN5S55C73v38Ev();
extern void _ZN5S55C73v39Ev();
extern void _ZN5S55C73v40Ev();
extern void _ZN5S55C73v41Ev();
extern void _ZN5S55C73v42Ev();
extern void _ZN5S55C73v43Ev();
extern void _ZN5S55C73v44Ev();
extern void _ZN5S55C73v45Ev();
extern void _ZN5S55C73v46Ev();
extern void _ZN5S55C73v47Ev();
extern void _ZN5S55C73v48Ev();
extern void _ZN5S55C73v49Ev();
extern void _ZN5S55C73v50Ev();
extern void _ZN5S55C73v51Ev();
extern void _ZN5S55C73v52Ev();
extern void _ZN5S55C73v53Ev();
extern void _ZN5S55C73v54Ev();
extern void _ZN5S55C73v55Ev();
extern void _ZN5S55C73v56Ev();
extern void _ZN5S55C73v57Ev();
extern void _ZN5S55C73v58Ev();
extern void _ZN5S55C73v59Ev();
extern void _ZN5S55C73v60Ev();
extern void _ZN5S55C73v61Ev();
extern void _ZN5S55C73v62Ev();
extern void _ZN5S55C73v63Ev();
extern void _ZN5S55C73v64Ev();
extern void _ZN5S55C73v65Ev();
extern void _ZN5S55C73v66Ev();
extern void _ZN5S55C63v67Ev();
extern void _ZN5S55C63v68Ev();
extern void _ZN5S55C63v69Ev();
extern void _ZN5S55C63v70Ev();
extern void _ZN5S55C63v71Ev();
extern void _ZN5S55C63v72Ev();
extern void _ZN5S55C63v73Ev();
extern void _ZN5S55C63v74Ev();
extern void _ZN5S55C63v75Ev();
extern void _ZN5S55C63v76Ev();
extern void _ZN5S55C63v77Ev();
extern void _ZN5S55C63v78Ev();
extern void _ZN5S55C63v79Ev();
extern void _ZN5S55C63v80Ev();
extern void _ZN5S55C63v81Ev();
extern void _ZN5S55C63v82Ev();
extern void _ZN5S55C63v83Ev();
extern void _ZN5S55C63v84Ev();
extern void _ZN5S55C63v85Ev();
extern void _ZN5S55C63v86Ev();
extern void _ZN5S55C63v87Ev();
extern void _ZN5S55C63v88Ev();
extern void _ZN5S55C53v89Ev();
extern void _ZN5S55C53v90Ev();
extern void _ZN5S55C53v91Ev();
extern void _ZN5S55C53v92Ev();
extern void _ZN5S55C53v93Ev();
extern void _ZN5S55C53v94Ev();
extern void _ZN5S55C53v95Ev();
extern void _ZN5S55C53v96Ev();
extern void _ZN5S55C53v97Ev();
extern void _ZN5S55C53v98Ev();
extern void _ZN5S55C53v99Ev();
extern void _ZN5S55C54v100Ev();
extern void _ZN5S55C54v101Ev();
extern void _ZN5S55C54v102Ev();
extern void _ZN5S55C54v103Ev();
extern void _ZN5S55C54v104Ev();
extern void _ZN5S55C54v105Ev();
extern void _ZN5S55C54v106Ev();
extern void _ZN5S55C54v107Ev();
extern void _ZN5S55C54v108Ev();
static  VTBL_ENTRY vtc_S55C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S55C5[0]),
  (VTBL_ENTRY)&_ZN5S55C5D1Ev,
  (VTBL_ENTRY)&_ZN5S55C5D0Ev,
  (VTBL_ENTRY)&_ZN5S55C72v3Ev,
  (VTBL_ENTRY)&_ZN5S55C72v4Ev,
  (VTBL_ENTRY)&_ZN5S55C72v5Ev,
  (VTBL_ENTRY)&_ZN5S55C72v6Ev,
  (VTBL_ENTRY)&_ZN5S55C72v7Ev,
  (VTBL_ENTRY)&_ZN5S55C72v8Ev,
  (VTBL_ENTRY)&_ZN5S55C72v9Ev,
  (VTBL_ENTRY)&_ZN5S55C73v10Ev,
  (VTBL_ENTRY)&_ZN5S55C73v11Ev,
  (VTBL_ENTRY)&_ZN5S55C73v12Ev,
  (VTBL_ENTRY)&_ZN5S55C73v13Ev,
  (VTBL_ENTRY)&_ZN5S55C73v14Ev,
  (VTBL_ENTRY)&_ZN5S55C73v15Ev,
  (VTBL_ENTRY)&_ZN5S55C73v16Ev,
  (VTBL_ENTRY)&_ZN5S55C73v17Ev,
  (VTBL_ENTRY)&_ZN5S55C73v18Ev,
  (VTBL_ENTRY)&_ZN5S55C73v19Ev,
  (VTBL_ENTRY)&_ZN5S55C73v20Ev,
  (VTBL_ENTRY)&_ZN5S55C73v21Ev,
  (VTBL_ENTRY)&_ZN5S55C73v22Ev,
  (VTBL_ENTRY)&_ZN5S55C73v23Ev,
  (VTBL_ENTRY)&_ZN5S55C73v24Ev,
  (VTBL_ENTRY)&_ZN5S55C73v25Ev,
  (VTBL_ENTRY)&_ZN5S55C73v26Ev,
  (VTBL_ENTRY)&_ZN5S55C73v27Ev,
  (VTBL_ENTRY)&_ZN5S55C73v28Ev,
  (VTBL_ENTRY)&_ZN5S55C73v29Ev,
  (VTBL_ENTRY)&_ZN5S55C73v30Ev,
  (VTBL_ENTRY)&_ZN5S55C73v31Ev,
  (VTBL_ENTRY)&_ZN5S55C73v32Ev,
  (VTBL_ENTRY)&_ZN5S55C73v33Ev,
  (VTBL_ENTRY)&_ZN5S55C73v34Ev,
  (VTBL_ENTRY)&_ZN5S55C73v35Ev,
  (VTBL_ENTRY)&_ZN5S55C73v36Ev,
  (VTBL_ENTRY)&_ZN5S55C73v37Ev,
  (VTBL_ENTRY)&_ZN5S55C73v38Ev,
  (VTBL_ENTRY)&_ZN5S55C73v39Ev,
  (VTBL_ENTRY)&_ZN5S55C73v40Ev,
  (VTBL_ENTRY)&_ZN5S55C73v41Ev,
  (VTBL_ENTRY)&_ZN5S55C73v42Ev,
  (VTBL_ENTRY)&_ZN5S55C73v43Ev,
  (VTBL_ENTRY)&_ZN5S55C73v44Ev,
  (VTBL_ENTRY)&_ZN5S55C73v45Ev,
  (VTBL_ENTRY)&_ZN5S55C73v46Ev,
  (VTBL_ENTRY)&_ZN5S55C73v47Ev,
  (VTBL_ENTRY)&_ZN5S55C73v48Ev,
  (VTBL_ENTRY)&_ZN5S55C73v49Ev,
  (VTBL_ENTRY)&_ZN5S55C73v50Ev,
  (VTBL_ENTRY)&_ZN5S55C73v51Ev,
  (VTBL_ENTRY)&_ZN5S55C73v52Ev,
  (VTBL_ENTRY)&_ZN5S55C73v53Ev,
  (VTBL_ENTRY)&_ZN5S55C73v54Ev,
  (VTBL_ENTRY)&_ZN5S55C73v55Ev,
  (VTBL_ENTRY)&_ZN5S55C73v56Ev,
  (VTBL_ENTRY)&_ZN5S55C73v57Ev,
  (VTBL_ENTRY)&_ZN5S55C73v58Ev,
  (VTBL_ENTRY)&_ZN5S55C73v59Ev,
  (VTBL_ENTRY)&_ZN5S55C73v60Ev,
  (VTBL_ENTRY)&_ZN5S55C73v61Ev,
  (VTBL_ENTRY)&_ZN5S55C73v62Ev,
  (VTBL_ENTRY)&_ZN5S55C73v63Ev,
  (VTBL_ENTRY)&_ZN5S55C73v64Ev,
  (VTBL_ENTRY)&_ZN5S55C73v65Ev,
  (VTBL_ENTRY)&_ZN5S55C73v66Ev,
  (VTBL_ENTRY)&_ZN5S55C63v67Ev,
  (VTBL_ENTRY)&_ZN5S55C63v68Ev,
  (VTBL_ENTRY)&_ZN5S55C63v69Ev,
  (VTBL_ENTRY)&_ZN5S55C63v70Ev,
  (VTBL_ENTRY)&_ZN5S55C63v71Ev,
  (VTBL_ENTRY)&_ZN5S55C63v72Ev,
  (VTBL_ENTRY)&_ZN5S55C63v73Ev,
  (VTBL_ENTRY)&_ZN5S55C63v74Ev,
  (VTBL_ENTRY)&_ZN5S55C63v75Ev,
  (VTBL_ENTRY)&_ZN5S55C63v76Ev,
  (VTBL_ENTRY)&_ZN5S55C63v77Ev,
  (VTBL_ENTRY)&_ZN5S55C63v78Ev,
  (VTBL_ENTRY)&_ZN5S55C63v79Ev,
  (VTBL_ENTRY)&_ZN5S55C63v80Ev,
  (VTBL_ENTRY)&_ZN5S55C63v81Ev,
  (VTBL_ENTRY)&_ZN5S55C63v82Ev,
  (VTBL_ENTRY)&_ZN5S55C63v83Ev,
  (VTBL_ENTRY)&_ZN5S55C63v84Ev,
  (VTBL_ENTRY)&_ZN5S55C63v85Ev,
  (VTBL_ENTRY)&_ZN5S55C63v86Ev,
  (VTBL_ENTRY)&_ZN5S55C63v87Ev,
  (VTBL_ENTRY)&_ZN5S55C63v88Ev,
  (VTBL_ENTRY)&_ZN5S55C53v89Ev,
  (VTBL_ENTRY)&_ZN5S55C53v90Ev,
  (VTBL_ENTRY)&_ZN5S55C53v91Ev,
  (VTBL_ENTRY)&_ZN5S55C53v92Ev,
  (VTBL_ENTRY)&_ZN5S55C53v93Ev,
  (VTBL_ENTRY)&_ZN5S55C53v94Ev,
  (VTBL_ENTRY)&_ZN5S55C53v95Ev,
  (VTBL_ENTRY)&_ZN5S55C53v96Ev,
  (VTBL_ENTRY)&_ZN5S55C53v97Ev,
  (VTBL_ENTRY)&_ZN5S55C53v98Ev,
  (VTBL_ENTRY)&_ZN5S55C53v99Ev,
  (VTBL_ENTRY)&_ZN5S55C54v100Ev,
  (VTBL_ENTRY)&_ZN5S55C54v101Ev,
  (VTBL_ENTRY)&_ZN5S55C54v102Ev,
  (VTBL_ENTRY)&_ZN5S55C54v103Ev,
  (VTBL_ENTRY)&_ZN5S55C54v104Ev,
  (VTBL_ENTRY)&_ZN5S55C54v105Ev,
  (VTBL_ENTRY)&_ZN5S55C54v106Ev,
  (VTBL_ENTRY)&_ZN5S55C54v107Ev,
  (VTBL_ENTRY)&_ZN5S55C54v108Ev,
};
extern VTBL_ENTRY _ZTI5S55C5[];
extern  VTBL_ENTRY _ZTV5S55C5[];
Class_Descriptor cd_S55C5 = {  "S55C5", // class name
  bases_S55C5, 2,
  &(vtc_S55C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI5S55C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S55C5),110, //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  S55C4  : S55C5 {
  void *s55c4f0[2];
  int s55c4f1[4];
  unsigned int s55c4f2:1;
  unsigned int s55c4f3:1;
  unsigned int s55c4f4:1;
  char s55c4f5;
  int s55c4f6;
  unsigned int s55c4f7:1;
  ::S287C23 s55c4f8;
  virtual  ~S55C4(); // _ZN5S55C4D1Ev
  virtual void  v109(); // _ZN5S55C44v109Ev
  virtual void  v110(); // _ZN5S55C44v110Ev
  virtual void  v111(); // _ZN5S55C44v111Ev
  virtual void  v112(); // _ZN5S55C44v112Ev
  virtual void  v113(); // _ZN5S55C44v113Ev
  virtual void  v114(); // _ZN5S55C44v114Ev
  virtual void  v115(); // _ZN5S55C44v115Ev
  virtual void  v116(); // _ZN5S55C44v116Ev
  virtual void  v117(); // _ZN5S55C44v117Ev
  virtual void  v118(); // _ZN5S55C44v118Ev
  virtual void  v119(); // _ZN5S55C44v119Ev
  virtual void  v120(); // _ZN5S55C44v120Ev
  virtual void  v121(); // _ZN5S55C44v121Ev
  virtual void  v122(); // _ZN5S55C44v122Ev
  S55C4(); // tgen
};
//SIG(-1 S55C4) C1{ BC2{ BC3{ BC4{ 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 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 Fi:1 Fi:1 Fi:1 FC11{ BC12{ BC9}} FC13{ BC14{ BC9}} FC15{ BC16{ BC9}} FC17{ BC18{ BC9}} Fi[3]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC19{ BC20{ BC9}}}


 S55C4 ::~S55C4(){ note_dtor("S55C4", this);}
void  S55C4 ::v109(){vfunc_called(this, "_ZN5S55C44v109Ev");}
void  S55C4 ::v110(){vfunc_called(this, "_ZN5S55C44v110Ev");}
void  S55C4 ::v111(){vfunc_called(this, "_ZN5S55C44v111Ev");}
void  S55C4 ::v112(){vfunc_called(this, "_ZN5S55C44v112Ev");}
void  S55C4 ::v113(){vfunc_called(this, "_ZN5S55C44v113Ev");}
void  S55C4 ::v114(){vfunc_called(this, "_ZN5S55C44v114Ev");}
void  S55C4 ::v115(){vfunc_called(this, "_ZN5S55C44v115Ev");}
void  S55C4 ::v116(){vfunc_called(this, "_ZN5S55C44v116Ev");}
void  S55C4 ::v117(){vfunc_called(this, "_ZN5S55C44v117Ev");}
void  S55C4 ::v118(){vfunc_called(this, "_ZN5S55C44v118Ev");}
void  S55C4 ::v119(){vfunc_called(this, "_ZN5S55C44v119Ev");}
void  S55C4 ::v120(){vfunc_called(this, "_ZN5S55C44v120Ev");}
void  S55C4 ::v121(){vfunc_called(this, "_ZN5S55C44v121Ev");}
void  S55C4 ::v122(){vfunc_called(this, "_ZN5S55C44v122Ev");}
S55C4 ::S55C4(){ note_ctor("S55C4", this);} // tgen

static void Test_S55C4()
{
  extern Class_Descriptor cd_S55C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(43,62)];
    init_test(&cd_S55C4, buf);
    S55C4 *dp, &lv = *(dp=new (buf) S55C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,244), "sizeof(S55C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S55C4)");
    check_base_class_offset(lv, (S55C7*)(S55C6*)(S55C5*), 0, "S55C4");
    check_base_class_offset(lv, (S55C6*)(S55C5*), 0, "S55C4");
    check_base_class_offset(lv, (S55C5*), 0, "S55C4");
    check_field_offset(lv, s55c4f0, ABISELECT(272,196), "S55C4.s55c4f0");
    check_field_offset(lv, s55c4f1, ABISELECT(288,204), "S55C4.s55c4f1");
    set_bf_and_test(lv, s55c4f2, ABISELECT(304,220), 0, 1, 1, "S55C4");
    set_bf_and_test(lv, s55c4f3, ABISELECT(304,220), 1, 1, 1, "S55C4");
    set_bf_and_test(lv, s55c4f4, ABISELECT(304,220), 2, 1, 1, "S55C4");
    check_field_offset(lv, s55c4f5, ABISELECT(305,221), "S55C4.s55c4f5");
    check_field_offset(lv, s55c4f6, ABISELECT(308,224), "S55C4.s55c4f6");
    set_bf_and_test(lv, s55c4f7, ABISELECT(312,228), 0, 1, 1, "S55C4");
    check_field_offset(lv, s55c4f8, ABISELECT(320,232), "S55C4.s55c4f8");
    test_class_info(&lv, &cd_S55C4);
    dp->~S55C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS55C4(Test_S55C4, "S55C4", ABISELECT(336,244));

#else // __cplusplus

extern void _ZN5S55C4C1Ev();
extern void _ZN5S55C4D1Ev();
Name_Map name_map_S55C4[] = {
  NSPAIR(_ZN5S55C4C1Ev),
  NSPAIR(_ZN5S55C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S55C7;
extern VTBL_ENTRY _ZTI5S55C7[];
extern  VTBL_ENTRY _ZTV5S55C7[];
extern Class_Descriptor cd_S55C6;
extern VTBL_ENTRY _ZTI5S55C6[];
extern  VTBL_ENTRY _ZTV5S55C6[];
extern Class_Descriptor cd_S55C5;
extern VTBL_ENTRY _ZTI5S55C5[];
extern  VTBL_ENTRY _ZTV5S55C5[];
static Base_Class bases_S55C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S55C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S55C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S55C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S55C4[];
extern void _ZN5S55C4D1Ev();
extern void _ZN5S55C4D0Ev();
extern void _ZN5S55C72v3Ev();
extern void _ZN5S55C72v4Ev();
extern void _ZN5S55C72v5Ev();
extern void _ZN5S55C72v6Ev();
extern void _ZN5S55C72v7Ev();
extern void _ZN5S55C72v8Ev();
extern void _ZN5S55C72v9Ev();
extern void _ZN5S55C73v10Ev();
extern void _ZN5S55C73v11Ev();
extern void _ZN5S55C73v12Ev();
extern void _ZN5S55C73v13Ev();
extern void _ZN5S55C73v14Ev();
extern void _ZN5S55C73v15Ev();
extern void _ZN5S55C73v16Ev();
extern void _ZN5S55C73v17Ev();
extern void _ZN5S55C73v18Ev();
extern void _ZN5S55C73v19Ev();
extern void _ZN5S55C73v20Ev();
extern void _ZN5S55C73v21Ev();
extern void _ZN5S55C73v22Ev();
extern void _ZN5S55C73v23Ev();
extern void _ZN5S55C73v24Ev();
extern void _ZN5S55C73v25Ev();
extern void _ZN5S55C73v26Ev();
extern void _ZN5S55C73v27Ev();
extern void _ZN5S55C73v28Ev();
extern void _ZN5S55C73v29Ev();
extern void _ZN5S55C73v30Ev();
extern void _ZN5S55C73v31Ev();
extern void _ZN5S55C73v32Ev();
extern void _ZN5S55C73v33Ev();
extern void _ZN5S55C73v34Ev();
extern void _ZN5S55C73v35Ev();
extern void _ZN5S55C73v36Ev();
extern void _ZN5S55C73v37Ev();
extern void _ZN5S55C73v38Ev();
extern void _ZN5S55C73v39Ev();
extern void _ZN5S55C73v40Ev();
extern void _ZN5S55C73v41Ev();
extern void _ZN5S55C73v42Ev();
extern void _ZN5S55C73v43Ev();
extern void _ZN5S55C73v44Ev();
extern void _ZN5S55C73v45Ev();
extern void _ZN5S55C73v46Ev();
extern void _ZN5S55C73v47Ev();
extern void _ZN5S55C73v48Ev();
extern void _ZN5S55C73v49Ev();
extern void _ZN5S55C73v50Ev();
extern void _ZN5S55C73v51Ev();
extern void _ZN5S55C73v52Ev();
extern void _ZN5S55C73v53Ev();
extern void _ZN5S55C73v54Ev();
extern void _ZN5S55C73v55Ev();
extern void _ZN5S55C73v56Ev();
extern void _ZN5S55C73v57Ev();
extern void _ZN5S55C73v58Ev();
extern void _ZN5S55C73v59Ev();
extern void _ZN5S55C73v60Ev();
extern void _ZN5S55C73v61Ev();
extern void _ZN5S55C73v62Ev();
extern void _ZN5S55C73v63Ev();
extern void _ZN5S55C73v64Ev();
extern void _ZN5S55C73v65Ev();
extern void _ZN5S55C73v66Ev();
extern void _ZN5S55C63v67Ev();
extern void _ZN5S55C63v68Ev();
extern void _ZN5S55C63v69Ev();
extern void _ZN5S55C63v70Ev();
extern void _ZN5S55C63v71Ev();
extern void _ZN5S55C63v72Ev();
extern void _ZN5S55C63v73Ev();
extern void _ZN5S55C63v74Ev();
extern void _ZN5S55C63v75Ev();
extern void _ZN5S55C63v76Ev();
extern void _ZN5S55C63v77Ev();
extern void _ZN5S55C63v78Ev();
extern void _ZN5S55C63v79Ev();
extern void _ZN5S55C63v80Ev();
extern void _ZN5S55C63v81Ev();
extern void _ZN5S55C63v82Ev();
extern void _ZN5S55C63v83Ev();
extern void _ZN5S55C63v84Ev();
extern void _ZN5S55C63v85Ev();
extern void _ZN5S55C63v86Ev();
extern void _ZN5S55C63v87Ev();
extern void _ZN5S55C63v88Ev();
extern void _ZN5S55C53v89Ev();
extern void _ZN5S55C53v90Ev();
extern void _ZN5S55C53v91Ev();
extern void _ZN5S55C53v92Ev();
extern void _ZN5S55C53v93Ev();
extern void _ZN5S55C53v94Ev();
extern void _ZN5S55C53v95Ev();
extern void _ZN5S55C53v96Ev();
extern void _ZN5S55C53v97Ev();
extern void _ZN5S55C53v98Ev();
extern void _ZN5S55C53v99Ev();
extern void _ZN5S55C54v100Ev();
extern void _ZN5S55C54v101Ev();
extern void _ZN5S55C54v102Ev();
extern void _ZN5S55C54v103Ev();
extern void _ZN5S55C54v104Ev();
extern void _ZN5S55C54v105Ev();
extern void _ZN5S55C54v106Ev();
extern void _ZN5S55C54v107Ev();
extern void _ZN5S55C54v108Ev();
extern void _ZN5S55C44v109Ev();
extern void _ZN5S55C44v110Ev();
extern void _ZN5S55C44v111Ev();
extern void _ZN5S55C44v112Ev();
extern void _ZN5S55C44v113Ev();
extern void _ZN5S55C44v114Ev();
extern void _ZN5S55C44v115Ev();
extern void _ZN5S55C44v116Ev();
extern void _ZN5S55C44v117Ev();
extern void _ZN5S55C44v118Ev();
extern void _ZN5S55C44v119Ev();
extern void _ZN5S55C44v120Ev();
extern void _ZN5S55C44v121Ev();
extern void _ZN5S55C44v122Ev();
static  VTBL_ENTRY vtc_S55C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S55C4[0]),
  (VTBL_ENTRY)&_ZN5S55C4D1Ev,
  (VTBL_ENTRY)&_ZN5S55C4D0Ev,
  (VTBL_ENTRY)&_ZN5S55C72v3Ev,
  (VTBL_ENTRY)&_ZN5S55C72v4Ev,
  (VTBL_ENTRY)&_ZN5S55C72v5Ev,
  (VTBL_ENTRY)&_ZN5S55C72v6Ev,
  (VTBL_ENTRY)&_ZN5S55C72v7Ev,
  (VTBL_ENTRY)&_ZN5S55C72v8Ev,
  (VTBL_ENTRY)&_ZN5S55C72v9Ev,
  (VTBL_ENTRY)&_ZN5S55C73v10Ev,
  (VTBL_ENTRY)&_ZN5S55C73v11Ev,
  (VTBL_ENTRY)&_ZN5S55C73v12Ev,
  (VTBL_ENTRY)&_ZN5S55C73v13Ev,
  (VTBL_ENTRY)&_ZN5S55C73v14Ev,
  (VTBL_ENTRY)&_ZN5S55C73v15Ev,
  (VTBL_ENTRY)&_ZN5S55C73v16Ev,
  (VTBL_ENTRY)&_ZN5S55C73v17Ev,
  (VTBL_ENTRY)&_ZN5S55C73v18Ev,
  (VTBL_ENTRY)&_ZN5S55C73v19Ev,
  (VTBL_ENTRY)&_ZN5S55C73v20Ev,
  (VTBL_ENTRY)&_ZN5S55C73v21Ev,
  (VTBL_ENTRY)&_ZN5S55C73v22Ev,
  (VTBL_ENTRY)&_ZN5S55C73v23Ev,
  (VTBL_ENTRY)&_ZN5S55C73v24Ev,
  (VTBL_ENTRY)&_ZN5S55C73v25Ev,
  (VTBL_ENTRY)&_ZN5S55C73v26Ev,
  (VTBL_ENTRY)&_ZN5S55C73v27Ev,
  (VTBL_ENTRY)&_ZN5S55C73v28Ev,
  (VTBL_ENTRY)&_ZN5S55C73v29Ev,
  (VTBL_ENTRY)&_ZN5S55C73v30Ev,
  (VTBL_ENTRY)&_ZN5S55C73v31Ev,
  (VTBL_ENTRY)&_ZN5S55C73v32Ev,
  (VTBL_ENTRY)&_ZN5S55C73v33Ev,
  (VTBL_ENTRY)&_ZN5S55C73v34Ev,
  (VTBL_ENTRY)&_ZN5S55C73v35Ev,
  (VTBL_ENTRY)&_ZN5S55C73v36Ev,
  (VTBL_ENTRY)&_ZN5S55C73v37Ev,
  (VTBL_ENTRY)&_ZN5S55C73v38Ev,
  (VTBL_ENTRY)&_ZN5S55C73v39Ev,
  (VTBL_ENTRY)&_ZN5S55C73v40Ev,
  (VTBL_ENTRY)&_ZN5S55C73v41Ev,
  (VTBL_ENTRY)&_ZN5S55C73v42Ev,
  (VTBL_ENTRY)&_ZN5S55C73v43Ev,
  (VTBL_ENTRY)&_ZN5S55C73v44Ev,
  (VTBL_ENTRY)&_ZN5S55C73v45Ev,
  (VTBL_ENTRY)&_ZN5S55C73v46Ev,
  (VTBL_ENTRY)&_ZN5S55C73v47Ev,
  (VTBL_ENTRY)&_ZN5S55C73v48Ev,
  (VTBL_ENTRY)&_ZN5S55C73v49Ev,
  (VTBL_ENTRY)&_ZN5S55C73v50Ev,
  (VTBL_ENTRY)&_ZN5S55C73v51Ev,
  (VTBL_ENTRY)&_ZN5S55C73v52Ev,
  (VTBL_ENTRY)&_ZN5S55C73v53Ev,
  (VTBL_ENTRY)&_ZN5S55C73v54Ev,
  (VTBL_ENTRY)&_ZN5S55C73v55Ev,
  (VTBL_ENTRY)&_ZN5S55C73v56Ev,
  (VTBL_ENTRY)&_ZN5S55C73v57Ev,
  (VTBL_ENTRY)&_ZN5S55C73v58Ev,
  (VTBL_ENTRY)&_ZN5S55C73v59Ev,
  (VTBL_ENTRY)&_ZN5S55C73v60Ev,
  (VTBL_ENTRY)&_ZN5S55C73v61Ev,
  (VTBL_ENTRY)&_ZN5S55C73v62Ev,
  (VTBL_ENTRY)&_ZN5S55C73v63Ev,
  (VTBL_ENTRY)&_ZN5S55C73v64Ev,
  (VTBL_ENTRY)&_ZN5S55C73v65Ev,
  (VTBL_ENTRY)&_ZN5S55C73v66Ev,
  (VTBL_ENTRY)&_ZN5S55C63v67Ev,
  (VTBL_ENTRY)&_ZN5S55C63v68Ev,
  (VTBL_ENTRY)&_ZN5S55C63v69Ev,
  (VTBL_ENTRY)&_ZN5S55C63v70Ev,
  (VTBL_ENTRY)&_ZN5S55C63v71Ev,
  (VTBL_ENTRY)&_ZN5S55C63v72Ev,
  (VTBL_ENTRY)&_ZN5S55C63v73Ev,
  (VTBL_ENTRY)&_ZN5S55C63v74Ev,
  (VTBL_ENTRY)&_ZN5S55C63v75Ev,
  (VTBL_ENTRY)&_ZN5S55C63v76Ev,
  (VTBL_ENTRY)&_ZN5S55C63v77Ev,
  (VTBL_ENTRY)&_ZN5S55C63v78Ev,
  (VTBL_ENTRY)&_ZN5S55C63v79Ev,
  (VTBL_ENTRY)&_ZN5S55C63v80Ev,
  (VTBL_ENTRY)&_ZN5S55C63v81Ev,
  (VTBL_ENTRY)&_ZN5S55C63v82Ev,
  (VTBL_ENTRY)&_ZN5S55C63v83Ev,
  (VTBL_ENTRY)&_ZN5S55C63v84Ev,
  (VTBL_ENTRY)&_ZN5S55C63v85Ev,
  (VTBL_ENTRY)&_ZN5S55C63v86Ev,
  (VTBL_ENTRY)&_ZN5S55C63v87Ev,
  (VTBL_ENTRY)&_ZN5S55C63v88Ev,
  (VTBL_ENTRY)&_ZN5S55C53v89Ev,
  (VTBL_ENTRY)&_ZN5S55C53v90Ev,
  (VTBL_ENTRY)&_ZN5S55C53v91Ev,
  (VTBL_ENTRY)&_ZN5S55C53v92Ev,
  (VTBL_ENTRY)&_ZN5S55C53v93Ev,
  (VTBL_ENTRY)&_ZN5S55C53v94Ev,
  (VTBL_ENTRY)&_ZN5S55C53v95Ev,
  (VTBL_ENTRY)&_ZN5S55C53v96Ev,
  (VTBL_ENTRY)&_ZN5S55C53v97Ev,
  (VTBL_ENTRY)&_ZN5S55C53v98Ev,
  (VTBL_ENTRY)&_ZN5S55C53v99Ev,
  (VTBL_ENTRY)&_ZN5S55C54v100Ev,
  (VTBL_ENTRY)&_ZN5S55C54v101Ev,
  (VTBL_ENTRY)&_ZN5S55C54v102Ev,
  (VTBL_ENTRY)&_ZN5S55C54v103Ev,
  (VTBL_ENTRY)&_ZN5S55C54v104Ev,
  (VTBL_ENTRY)&_ZN5S55C54v105Ev,
  (VTBL_ENTRY)&_ZN5S55C54v106Ev,
  (VTBL_ENTRY)&_ZN5S55C54v107Ev,
  (VTBL_ENTRY)&_ZN5S55C54v108Ev,
  (VTBL_ENTRY)&_ZN5S55C44v109Ev,
  (VTBL_ENTRY)&_ZN5S55C44v110Ev,
  (VTBL_ENTRY)&_ZN5S55C44v111Ev,
  (VTBL_ENTRY)&_ZN5S55C44v112Ev,
  (VTBL_ENTRY)&_ZN5S55C44v113Ev,
  (VTBL_ENTRY)&_ZN5S55C44v114Ev,
  (VTBL_ENTRY)&_ZN5S55C44v115Ev,
  (VTBL_ENTRY)&_ZN5S55C44v116Ev,
  (VTBL_ENTRY)&_ZN5S55C44v117Ev,
  (VTBL_ENTRY)&_ZN5S55C44v118Ev,
  (VTBL_ENTRY)&_ZN5S55C44v119Ev,
  (VTBL_ENTRY)&_ZN5S55C44v120Ev,
  (VTBL_ENTRY)&_ZN5S55C44v121Ev,
  (VTBL_ENTRY)&_ZN5S55C44v122Ev,
};
extern VTBL_ENTRY _ZTI5S55C4[];
extern  VTBL_ENTRY _ZTV5S55C4[];
Class_Descriptor cd_S55C4 = {  "S55C4", // class name
  bases_S55C4, 3,
  &(vtc_S55C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(336,244), // object size
  NSPAIRA(_ZTI5S55C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S55C4),124, //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  S55C3  : S55C4 {
  void *s55c3f0[2];
  ::S287C8_nt s55c3f1;
  unsigned int s55c3f2:1;
  unsigned int s55c3f3:1;
  ::S3350C21_nt s55c3f4;
  virtual  ~S55C3(); // _ZN5S55C3D1Ev
  virtual void  v123(); // _ZN5S55C34v123Ev
  virtual void  v124(); // _ZN5S55C34v124Ev
  virtual void  v125(); // _ZN5S55C34v125Ev
  virtual void  v126(); // _ZN5S55C34v126Ev
  virtual void  v127(); // _ZN5S55C34v127Ev
  virtual void  v128(); // _ZN5S55C34v128Ev
  virtual void  v129(); // _ZN5S55C34v129Ev
  virtual void  v130(); // _ZN5S55C34v130Ev
  virtual void  v131(); // _ZN5S55C34v131Ev
  virtual void  v132(); // _ZN5S55C34v132Ev
  virtual void  v133(); // _ZN5S55C34v133Ev
  S55C3(); // tgen
};
//SIG(-1 S55C3) C1{ BC2{ BC3{ BC4{ BC5{ vd v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 Fi[2] Fp Fi[2] FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} FC7 FC11{ m} FC7 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 Fi:1 Fi:1 Fi:1 FC12{ BC13{ BC10}} FC14{ BC15{ BC10}} FC16{ BC17{ BC10}} FC18{ BC19{ BC10}} Fi[3]} vd v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC20{ BC21{ BC10}}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[2] FC7 Fi:1 Fi:1 FC22{ m Fp FC6}}


 S55C3 ::~S55C3(){ note_dtor("S55C3", this);}
void  S55C3 ::v123(){vfunc_called(this, "_ZN5S55C34v123Ev");}
void  S55C3 ::v124(){vfunc_called(this, "_ZN5S55C34v124Ev");}
void  S55C3 ::v125(){vfunc_called(this, "_ZN5S55C34v125Ev");}
void  S55C3 ::v126(){vfunc_called(this, "_ZN5S55C34v126Ev");}
void  S55C3 ::v127(){vfunc_called(this, "_ZN5S55C34v127Ev");}
void  S55C3 ::v128(){vfunc_called(this, "_ZN5S55C34v128Ev");}
void  S55C3 ::v129(){vfunc_called(this, "_ZN5S55C34v129Ev");}
void  S55C3 ::v130(){vfunc_called(this, "_ZN5S55C34v130Ev");}
void  S55C3 ::v131(){vfunc_called(this, "_ZN5S55C34v131Ev");}
void  S55C3 ::v132(){vfunc_called(this, "_ZN5S55C34v132Ev");}
void  S55C3 ::v133(){vfunc_called(this, "_ZN5S55C34v133Ev");}
S55C3 ::S55C3(){ note_ctor("S55C3", this);} // tgen

static void Test_S55C3()
{
  extern Class_Descriptor cd_S55C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(50,71)];
    init_test(&cd_S55C3, buf);
    S55C3 *dp, &lv = *(dp=new (buf) S55C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(392,280), "sizeof(S55C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S55C3)");
    check_base_class_offset(lv, (S55C7*)(S55C6*)(S55C5*)(S55C4*), 0, "S55C3");
    check_base_class_offset(lv, (S55C6*)(S55C5*)(S55C4*), 0, "S55C3");
    check_base_class_offset(lv, (S55C5*)(S55C4*), 0, "S55C3");
    check_base_class_offset(lv, (S55C4*), 0, "S55C3");
    check_field_offset(lv, s55c3f0, ABISELECT(336,244), "S55C3.s55c3f0");
    check_field_offset(lv, s55c3f1, ABISELECT(352,252), "S55C3.s55c3f1");
    set_bf_and_test(lv, s55c3f2, ABISELECT(368,264), 0, 1, 1, "S55C3");
    set_bf_and_test(lv, s55c3f3, ABISELECT(368,264), 1, 1, 1, "S55C3");
    check_field_offset(lv, s55c3f4, ABISELECT(376,268), "S55C3.s55c3f4");
    test_class_info(&lv, &cd_S55C3);
    dp->~S55C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS55C3(Test_S55C3, "S55C3", ABISELECT(392,280));

#else // __cplusplus

extern void _ZN5S55C3C1Ev();
extern void _ZN5S55C3D1Ev();
Name_Map name_map_S55C3[] = {
  NSPAIR(_ZN5S55C3C1Ev),
  NSPAIR(_ZN5S55C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S55C7;
extern VTBL_ENTRY _ZTI5S55C7[];
extern  VTBL_ENTRY _ZTV5S55C7[];
extern Class_Descriptor cd_S55C6;
extern VTBL_ENTRY _ZTI5S55C6[];
extern  VTBL_ENTRY _ZTV5S55C6[];
extern Class_Descriptor cd_S55C5;
extern VTBL_ENTRY _ZTI5S55C5[];
extern  VTBL_ENTRY _ZTV5S55C5[];
extern Class_Descriptor cd_S55C4;
extern VTBL_ENTRY _ZTI5S55C4[];
extern  VTBL_ENTRY _ZTV5S55C4[];
static Base_Class bases_S55C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S55C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S55C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S55C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S55C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S55C3[];
extern void _ZN5S55C3D1Ev();
extern void _ZN5S55C3D0Ev();
extern void _ZN5S55C72v3Ev();
extern void _ZN5S55C72v4Ev();
extern void _ZN5S55C72v5Ev();
extern void _ZN5S55C72v6Ev();
extern void _ZN5S55C72v7Ev();
extern void _ZN5S55C72v8Ev();
extern void _ZN5S55C72v9Ev();
extern void _ZN5S55C73v10Ev();
extern void _ZN5S55C73v11Ev();
extern void _ZN5S55C73v12Ev();
extern void _ZN5S55C73v13Ev();
extern void _ZN5S55C73v14Ev();
extern void _ZN5S55C73v15Ev();
extern void _ZN5S55C73v16Ev();
extern void _ZN5S55C73v17Ev();
extern void _ZN5S55C73v18Ev();
extern void _ZN5S55C73v19Ev();
extern void _ZN5S55C73v20Ev();
extern void _ZN5S55C73v21Ev();
extern void _ZN5S55C73v22Ev();
extern void _ZN5S55C73v23Ev();
extern void _ZN5S55C73v24Ev();
extern void _ZN5S55C73v25Ev();
extern void _ZN5S55C73v26Ev();
extern void _ZN5S55C73v27Ev();
extern void _ZN5S55C73v28Ev();
extern void _ZN5S55C73v29Ev();
extern void _ZN5S55C73v30Ev();
extern void _ZN5S55C73v31Ev();
extern void _ZN5S55C73v32Ev();
extern void _ZN5S55C73v33Ev();
extern void _ZN5S55C73v34Ev();
extern void _ZN5S55C73v35Ev();
extern void _ZN5S55C73v36Ev();
extern void _ZN5S55C73v37Ev();
extern void _ZN5S55C73v38Ev();
extern void _ZN5S55C73v39Ev();
extern void _ZN5S55C73v40Ev();
extern void _ZN5S55C73v41Ev();
extern void _ZN5S55C73v42Ev();
extern void _ZN5S55C73v43Ev();
extern void _ZN5S55C73v44Ev();
extern void _ZN5S55C73v45Ev();
extern void _ZN5S55C73v46Ev();
extern void _ZN5S55C73v47Ev();
extern void _ZN5S55C73v48Ev();
extern void _ZN5S55C73v49Ev();
extern void _ZN5S55C73v50Ev();
extern void _ZN5S55C73v51Ev();
extern void _ZN5S55C73v52Ev();
extern void _ZN5S55C73v53Ev();
extern void _ZN5S55C73v54Ev();
extern void _ZN5S55C73v55Ev();
extern void _ZN5S55C73v56Ev();
extern void _ZN5S55C73v57Ev();
extern void _ZN5S55C73v58Ev();
extern void _ZN5S55C73v59Ev();
extern void _ZN5S55C73v60Ev();
extern void _ZN5S55C73v61Ev();
extern void _ZN5S55C73v62Ev();
extern void _ZN5S55C73v63Ev();
extern void _ZN5S55C73v64Ev();
extern void _ZN5S55C73v65Ev();
extern void _ZN5S55C73v66Ev();
extern void _ZN5S55C63v67Ev();
extern void _ZN5S55C63v68Ev();
extern void _ZN5S55C63v69Ev();
extern void _ZN5S55C63v70Ev();
extern void _ZN5S55C63v71Ev();
extern void _ZN5S55C63v72Ev();
extern void _ZN5S55C63v73Ev();
extern void _ZN5S55C63v74Ev();
extern void _ZN5S55C63v75Ev();
extern void _ZN5S55C63v76Ev();
extern void _ZN5S55C63v77Ev();
extern void _ZN5S55C63v78Ev();
extern void _ZN5S55C63v79Ev();
extern void _ZN5S55C63v80Ev();
extern void _ZN5S55C63v81Ev();
extern void _ZN5S55C63v82Ev();
extern void _ZN5S55C63v83Ev();
extern void _ZN5S55C63v84Ev();
extern void _ZN5S55C63v85Ev();
extern void _ZN5S55C63v86Ev();
extern void _ZN5S55C63v87Ev();
extern void _ZN5S55C63v88Ev();
extern void _ZN5S55C53v89Ev();
extern void _ZN5S55C53v90Ev();
extern void _ZN5S55C53v91Ev();
extern void _ZN5S55C53v92Ev();
extern void _ZN5S55C53v93Ev();
extern void _ZN5S55C53v94Ev();
extern void _ZN5S55C53v95Ev();
extern void _ZN5S55C53v96Ev();
extern void _ZN5S55C53v97Ev();
extern void _ZN5S55C53v98Ev();
extern void _ZN5S55C53v99Ev();
extern void _ZN5S55C54v100Ev();
extern void _ZN5S55C54v101Ev();
extern void _ZN5S55C54v102Ev();
extern void _ZN5S55C54v103Ev();
extern void _ZN5S55C54v104Ev();
extern void _ZN5S55C54v105Ev();
extern void _ZN5S55C54v106Ev();
extern void _ZN5S55C54v107Ev();
extern void _ZN5S55C54v108Ev();
extern void _ZN5S55C44v109Ev();
extern void _ZN5S55C44v110Ev();
extern void _ZN5S55C44v111Ev();
extern void _ZN5S55C44v112Ev();
extern void _ZN5S55C44v113Ev();
extern void _ZN5S55C44v114Ev();
extern void _ZN5S55C44v115Ev();
extern void _ZN5S55C44v116Ev();
extern void _ZN5S55C44v117Ev();
extern void _ZN5S55C44v118Ev();
extern void _ZN5S55C44v119Ev();
extern void _ZN5S55C44v120Ev();
extern void _ZN5S55C44v121Ev();
extern void _ZN5S55C44v122Ev();
extern void _ZN5S55C34v123Ev();
extern void _ZN5S55C34v124Ev();
extern void _ZN5S55C34v125Ev();
extern void _ZN5S55C34v126Ev();
extern void _ZN5S55C34v127Ev();
extern void _ZN5S55C34v128Ev();
extern void _ZN5S55C34v129Ev();
extern void _ZN5S55C34v130Ev();
extern void _ZN5S55C34v131Ev();
extern void _ZN5S55C34v132Ev();
extern void _ZN5S55C34v133Ev();
static  VTBL_ENTRY vtc_S55C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S55C3[0]),
  (VTBL_ENTRY)&_ZN5S55C3D1Ev,
  (VTBL_ENTRY)&_ZN5S55C3D0Ev,
  (VTBL_ENTRY)&_ZN5S55C72v3Ev,
  (VTBL_ENTRY)&_ZN5S55C72v4Ev,
  (VTBL_ENTRY)&_ZN5S55C72v5Ev,
  (VTBL_ENTRY)&_ZN5S55C72v6Ev,
  (VTBL_ENTRY)&_ZN5S55C72v7Ev,
  (VTBL_ENTRY)&_ZN5S55C72v8Ev,
  (VTBL_ENTRY)&_ZN5S55C72v9Ev,
  (VTBL_ENTRY)&_ZN5S55C73v10Ev,
  (VTBL_ENTRY)&_ZN5S55C73v11Ev,
  (VTBL_ENTRY)&_ZN5S55C73v12Ev,
  (VTBL_ENTRY)&_ZN5S55C73v13Ev,
  (VTBL_ENTRY)&_ZN5S55C73v14Ev,
  (VTBL_ENTRY)&_ZN5S55C73v15Ev,
  (VTBL_ENTRY)&_ZN5S55C73v16Ev,
  (VTBL_ENTRY)&_ZN5S55C73v17Ev,
  (VTBL_ENTRY)&_ZN5S55C73v18Ev,
  (VTBL_ENTRY)&_ZN5S55C73v19Ev,
  (VTBL_ENTRY)&_ZN5S55C73v20Ev,
  (VTBL_ENTRY)&_ZN5S55C73v21Ev,
  (VTBL_ENTRY)&_ZN5S55C73v22Ev,
  (VTBL_ENTRY)&_ZN5S55C73v23Ev,
  (VTBL_ENTRY)&_ZN5S55C73v24Ev,
  (VTBL_ENTRY)&_ZN5S55C73v25Ev,
  (VTBL_ENTRY)&_ZN5S55C73v26Ev,
  (VTBL_ENTRY)&_ZN5S55C73v27Ev,
  (VTBL_ENTRY)&_ZN5S55C73v28Ev,
  (VTBL_ENTRY)&_ZN5S55C73v29Ev,
  (VTBL_ENTRY)&_ZN5S55C73v30Ev,
  (VTBL_ENTRY)&_ZN5S55C73v31Ev,
  (VTBL_ENTRY)&_ZN5S55C73v32Ev,
  (VTBL_ENTRY)&_ZN5S55C73v33Ev,
  (VTBL_ENTRY)&_ZN5S55C73v34Ev,
  (VTBL_ENTRY)&_ZN5S55C73v35Ev,
  (VTBL_ENTRY)&_ZN5S55C73v36Ev,
  (VTBL_ENTRY)&_ZN5S55C73v37Ev,
  (VTBL_ENTRY)&_ZN5S55C73v38Ev,
  (VTBL_ENTRY)&_ZN5S55C73v39Ev,
  (VTBL_ENTRY)&_ZN5S55C73v40Ev,
  (VTBL_ENTRY)&_ZN5S55C73v41Ev,
  (VTBL_ENTRY)&_ZN5S55C73v42Ev,
  (VTBL_ENTRY)&_ZN5S55C73v43Ev,
  (VTBL_ENTRY)&_ZN5S55C73v44Ev,
  (VTBL_ENTRY)&_ZN5S55C73v45Ev,
  (VTBL_ENTRY)&_ZN5S55C73v46Ev,
  (VTBL_ENTRY)&_ZN5S55C73v47Ev,
  (VTBL_ENTRY)&_ZN5S55C73v48Ev,
  (VTBL_ENTRY)&_ZN5S55C73v49Ev,
  (VTBL_ENTRY)&_ZN5S55C73v50Ev,
  (VTBL_ENTRY)&_ZN5S55C73v51Ev,
  (VTBL_ENTRY)&_ZN5S55C73v52Ev,
  (VTBL_ENTRY)&_ZN5S55C73v53Ev,
  (VTBL_ENTRY)&_ZN5S55C73v54Ev,
  (VTBL_ENTRY)&_ZN5S55C73v55Ev,
  (VTBL_ENTRY)&_ZN5S55C73v56Ev,
  (VTBL_ENTRY)&_ZN5S55C73v57Ev,
  (VTBL_ENTRY)&_ZN5S55C73v58Ev,
  (VTBL_ENTRY)&_ZN5S55C73v59Ev,
  (VTBL_ENTRY)&_ZN5S55C73v60Ev,
  (VTBL_ENTRY)&_ZN5S55C73v61Ev,
  (VTBL_ENTRY)&_ZN5S55C73v62Ev,
  (VTBL_ENTRY)&_ZN5S55C73v63Ev,
  (VTBL_ENTRY)&_ZN5S55C73v64Ev,
  (VTBL_ENTRY)&_ZN5S55C73v65Ev,
  (VTBL_ENTRY)&_ZN5S55C73v66Ev,
  (VTBL_ENTRY)&_ZN5S55C63v67Ev,
  (VTBL_ENTRY)&_ZN5S55C63v68Ev,
  (VTBL_ENTRY)&_ZN5S55C63v69Ev,
  (VTBL_ENTRY)&_ZN5S55C63v70Ev,
  (VTBL_ENTRY)&_ZN5S55C63v71Ev,
  (VTBL_ENTRY)&_ZN5S55C63v72Ev,
  (VTBL_ENTRY)&_ZN5S55C63v73Ev,
  (VTBL_ENTRY)&_ZN5S55C63v74Ev,
  (VTBL_ENTRY)&_ZN5S55C63v75Ev,
  (VTBL_ENTRY)&_ZN5S55C63v76Ev,
  (VTBL_ENTRY)&_ZN5S55C63v77Ev,
  (VTBL_ENTRY)&_ZN5S55C63v78Ev,
  (VTBL_ENTRY)&_ZN5S55C63v79Ev,
  (VTBL_ENTRY)&_ZN5S55C63v80Ev,
  (VTBL_ENTRY)&_ZN5S55C63v81Ev,
  (VTBL_ENTRY)&_ZN5S55C63v82Ev,
  (VTBL_ENTRY)&_ZN5S55C63v83Ev,
  (VTBL_ENTRY)&_ZN5S55C63v84Ev,
  (VTBL_ENTRY)&_ZN5S55C63v85Ev,
  (VTBL_ENTRY)&_ZN5S55C63v86Ev,
  (VTBL_ENTRY)&_ZN5S55C63v87Ev,
  (VTBL_ENTRY)&_ZN5S55C63v88Ev,
  (VTBL_ENTRY)&_ZN5S55C53v89Ev,
  (VTBL_ENTRY)&_ZN5S55C53v90Ev,
  (VTBL_ENTRY)&_ZN5S55C53v91Ev,
  (VTBL_ENTRY)&_ZN5S55C53v92Ev,
  (VTBL_ENTRY)&_ZN5S55C53v93Ev,
  (VTBL_ENTRY)&_ZN5S55C53v94Ev,
  (VTBL_ENTRY)&_ZN5S55C53v95Ev,
  (VTBL_ENTRY)&_ZN5S55C53v96Ev,
  (VTBL_ENTRY)&_ZN5S55C53v97Ev,
  (VTBL_ENTRY)&_ZN5S55C53v98Ev,
  (VTBL_ENTRY)&_ZN5S55C53v99Ev,
  (VTBL_ENTRY)&_ZN5S55C54v100Ev,
  (VTBL_ENTRY)&_ZN5S55C54v101Ev,
  (VTBL_ENTRY)&_ZN5S55C54v102Ev,
  (VTBL_ENTRY)&_ZN5S55C54v103Ev,
  (VTBL_ENTRY)&_ZN5S55C54v104Ev,
  (VTBL_ENTRY)&_ZN5S55C54v105Ev,
  (VTBL_ENTRY)&_ZN5S55C54v106Ev,
  (VTBL_ENTRY)&_ZN5S55C54v107Ev,
  (VTBL_ENTRY)&_ZN5S55C54v108Ev,
  (VTBL_ENTRY)&_ZN5S55C44v109Ev,
  (VTBL_ENTRY)&_ZN5S55C44v110Ev,
  (VTBL_ENTRY)&_ZN5S55C44v111Ev,
  (VTBL_ENTRY)&_ZN5S55C44v112Ev,
  (VTBL_ENTRY)&_ZN5S55C44v113Ev,
  (VTBL_ENTRY)&_ZN5S55C44v114Ev,
  (VTBL_ENTRY)&_ZN5S55C44v115Ev,
  (VTBL_ENTRY)&_ZN5S55C44v116Ev,
  (VTBL_ENTRY)&_ZN5S55C44v117Ev,
  (VTBL_ENTRY)&_ZN5S55C44v118Ev,
  (VTBL_ENTRY)&_ZN5S55C44v119Ev,
  (VTBL_ENTRY)&_ZN5S55C44v120Ev,
  (VTBL_ENTRY)&_ZN5S55C44v121Ev,
  (VTBL_ENTRY)&_ZN5S55C44v122Ev,
  (VTBL_ENTRY)&_ZN5S55C34v123Ev,
  (VTBL_ENTRY)&_ZN5S55C34v124Ev,
  (VTBL_ENTRY)&_ZN5S55C34v125Ev,
  (VTBL_ENTRY)&_ZN5S55C34v126Ev,
  (VTBL_ENTRY)&_ZN5S55C34v127Ev,
  (VTBL_ENTRY)&_ZN5S55C34v128Ev,
  (VTBL_ENTRY)&_ZN5S55C34v129Ev,
  (VTBL_ENTRY)&_ZN5S55C34v130Ev,
  (VTBL_ENTRY)&_ZN5S55C34v131Ev,
  (VTBL_ENTRY)&_ZN5S55C34v132Ev,
  (VTBL_ENTRY)&_ZN5S55C34v133Ev,
};
extern VTBL_ENTRY _ZTI5S55C3[];
extern  VTBL_ENTRY _ZTV5S55C3[];
Class_Descriptor cd_S55C3 = {  "S55C3", // class name
  bases_S55C3, 4,
  &(vtc_S55C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(392,280), // object size
  NSPAIRA(_ZTI5S55C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S55C3),135, //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  S55C2  : S55C3 {
  virtual  ~S55C2(); // _ZN5S55C2D1Ev
  virtual void  v134(); // _ZN5S55C24v134Ev
  virtual void  v135(); // _ZN5S55C24v135Ev
  virtual void  v136(); // _ZN5S55C24v136Ev
  S55C2(); // tgen
};
//SIG(-1 S55C2) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 Fi FL Fp[4] Fi[2] Fp FC7{ m Fi[2]} Fp[2]} vd v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 Fi[2] Fp Fi[2] FC8{ BC9{ BC10{ BC11{ m Fp Fi[2]}}}} FC8 FC12{ m} FC8 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 Fi:1 Fi:1 Fi:1 FC13{ BC14{ BC11}} FC15{ BC16{ BC11}} FC17{ BC18{ BC11}} FC19{ BC20{ BC11}} Fi[3]} vd v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC21{ BC22{ BC11}}} vd v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 v134 Fp[2] FC8 Fi:1 Fi:1 FC23{ m Fp FC7}} vd v1 v2 v3}


 S55C2 ::~S55C2(){ note_dtor("S55C2", this);}
void  S55C2 ::v134(){vfunc_called(this, "_ZN5S55C24v134Ev");}
void  S55C2 ::v135(){vfunc_called(this, "_ZN5S55C24v135Ev");}
void  S55C2 ::v136(){vfunc_called(this, "_ZN5S55C24v136Ev");}
S55C2 ::S55C2(){ note_ctor("S55C2", this);} // tgen

static void Test_S55C2()
{
  extern Class_Descriptor cd_S55C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(50,71)];
    init_test(&cd_S55C2, buf);
    S55C2 *dp, &lv = *(dp=new (buf) S55C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(392,280), "sizeof(S55C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S55C2)");
    check_base_class_offset(lv, (S55C7*)(S55C6*)(S55C5*)(S55C4*)(S55C3*), 0, "S55C2");
    check_base_class_offset(lv, (S55C6*)(S55C5*)(S55C4*)(S55C3*), 0, "S55C2");
    check_base_class_offset(lv, (S55C5*)(S55C4*)(S55C3*), 0, "S55C2");
    check_base_class_offset(lv, (S55C4*)(S55C3*), 0, "S55C2");
    check_base_class_offset(lv, (S55C3*), 0, "S55C2");
    test_class_info(&lv, &cd_S55C2);
    dp->~S55C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS55C2(Test_S55C2, "S55C2", ABISELECT(392,280));

#else // __cplusplus

extern void _ZN5S55C2C1Ev();
extern void _ZN5S55C2D1Ev();
Name_Map name_map_S55C2[] = {
  NSPAIR(_ZN5S55C2C1Ev),
  NSPAIR(_ZN5S55C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S55C7;
extern VTBL_ENTRY _ZTI5S55C7[];
extern  VTBL_ENTRY _ZTV5S55C7[];
extern Class_Descriptor cd_S55C6;
extern VTBL_ENTRY _ZTI5S55C6[];
extern  VTBL_ENTRY _ZTV5S55C6[];
extern Class_Descriptor cd_S55C5;
extern VTBL_ENTRY _ZTI5S55C5[];
extern  VTBL_ENTRY _ZTV5S55C5[];
extern Class_Descriptor cd_S55C4;
extern VTBL_ENTRY _ZTI5S55C4[];
extern  VTBL_ENTRY _ZTV5S55C4[];
extern Class_Descriptor cd_S55C3;
extern VTBL_ENTRY _ZTI5S55C3[];
extern  VTBL_ENTRY _ZTV5S55C3[];
static Base_Class bases_S55C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S55C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S55C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S55C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S55C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S55C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S55C2[];
extern void _ZN5S55C2D1Ev();
extern void _ZN5S55C2D0Ev();
extern void _ZN5S55C72v3Ev();
extern void _ZN5S55C72v4Ev();
extern void _ZN5S55C72v5Ev();
extern void _ZN5S55C72v6Ev();
extern void _ZN5S55C72v7Ev();
extern void _ZN5S55C72v8Ev();
extern void _ZN5S55C72v9Ev();
extern void _ZN5S55C73v10Ev();
extern void _ZN5S55C73v11Ev();
extern void _ZN5S55C73v12Ev();
extern void _ZN5S55C73v13Ev();
extern void _ZN5S55C73v14Ev();
extern void _ZN5S55C73v15Ev();
extern void _ZN5S55C73v16Ev();
extern void _ZN5S55C73v17Ev();
extern void _ZN5S55C73v18Ev();
extern void _ZN5S55C73v19Ev();
extern void _ZN5S55C73v20Ev();
extern void _ZN5S55C73v21Ev();
extern void _ZN5S55C73v22Ev();
extern void _ZN5S55C73v23Ev();
extern void _ZN5S55C73v24Ev();
extern void _ZN5S55C73v25Ev();
extern void _ZN5S55C73v26Ev();
extern void _ZN5S55C73v27Ev();
extern void _ZN5S55C73v28Ev();
extern void _ZN5S55C73v29Ev();
extern void _ZN5S55C73v30Ev();
extern void _ZN5S55C73v31Ev();
extern void _ZN5S55C73v32Ev();
extern void _ZN5S55C73v33Ev();
extern void _ZN5S55C73v34Ev();
extern void _ZN5S55C73v35Ev();
extern void _ZN5S55C73v36Ev();
extern void _ZN5S55C73v37Ev();
extern void _ZN5S55C73v38Ev();
extern void _ZN5S55C73v39Ev();
extern void _ZN5S55C73v40Ev();
extern void _ZN5S55C73v41Ev();
extern void _ZN5S55C73v42Ev();
extern void _ZN5S55C73v43Ev();
extern void _ZN5S55C73v44Ev();
extern void _ZN5S55C73v45Ev();
extern void _ZN5S55C73v46Ev();
extern void _ZN5S55C73v47Ev();
extern void _ZN5S55C73v48Ev();
extern void _ZN5S55C73v49Ev();
extern void _ZN5S55C73v50Ev();
extern void _ZN5S55C73v51Ev();
extern void _ZN5S55C73v52Ev();
extern void _ZN5S55C73v53Ev();
extern void _ZN5S55C73v54Ev();
extern void _ZN5S55C73v55Ev();
extern void _ZN5S55C73v56Ev();
extern void _ZN5S55C73v57Ev();
extern void _ZN5S55C73v58Ev();
extern void _ZN5S55C73v59Ev();
extern void _ZN5S55C73v60Ev();
extern void _ZN5S55C73v61Ev();
extern void _ZN5S55C73v62Ev();
extern void _ZN5S55C73v63Ev();
extern void _ZN5S55C73v64Ev();
extern void _ZN5S55C73v65Ev();
extern void _ZN5S55C73v66Ev();
extern void _ZN5S55C63v67Ev();
extern void _ZN5S55C63v68Ev();
extern void _ZN5S55C63v69Ev();
extern void _ZN5S55C63v70Ev();
extern void _ZN5S55C63v71Ev();
extern void _ZN5S55C63v72Ev();
extern void _ZN5S55C63v73Ev();
extern void _ZN5S55C63v74Ev();
extern void _ZN5S55C63v75Ev();
extern void _ZN5S55C63v76Ev();
extern void _ZN5S55C63v77Ev();
extern void _ZN5S55C63v78Ev();
extern void _ZN5S55C63v79Ev();
extern void _ZN5S55C63v80Ev();
extern void _ZN5S55C63v81Ev();
extern void _ZN5S55C63v82Ev();
extern void _ZN5S55C63v83Ev();
extern void _ZN5S55C63v84Ev();
extern void _ZN5S55C63v85Ev();
extern void _ZN5S55C63v86Ev();
extern void _ZN5S55C63v87Ev();
extern void _ZN5S55C63v88Ev();
extern void _ZN5S55C53v89Ev();
extern void _ZN5S55C53v90Ev();
extern void _ZN5S55C53v91Ev();
extern void _ZN5S55C53v92Ev();
extern void _ZN5S55C53v93Ev();
extern void _ZN5S55C53v94Ev();
extern void _ZN5S55C53v95Ev();
extern void _ZN5S55C53v96Ev();
extern void _ZN5S55C53v97Ev();
extern void _ZN5S55C53v98Ev();
extern void _ZN5S55C53v99Ev();
extern void _ZN5S55C54v100Ev();
extern void _ZN5S55C54v101Ev();
extern void _ZN5S55C54v102Ev();
extern void _ZN5S55C54v103Ev();
extern void _ZN5S55C54v104Ev();
extern void _ZN5S55C54v105Ev();
extern void _ZN5S55C54v106Ev();
extern void _ZN5S55C54v107Ev();
extern void _ZN5S55C54v108Ev();
extern void _ZN5S55C44v109Ev();
extern void _ZN5S55C44v110Ev();
extern void _ZN5S55C44v111Ev();
extern void _ZN5S55C44v112Ev();
extern void _ZN5S55C44v113Ev();
extern void _ZN5S55C44v114Ev();
extern void _ZN5S55C44v115Ev();
extern void _ZN5S55C44v116Ev();
extern void _ZN5S55C44v117Ev();
extern void _ZN5S55C44v118Ev();
extern void _ZN5S55C44v119Ev();
extern void _ZN5S55C44v120Ev();
extern void _ZN5S55C44v121Ev();
extern void _ZN5S55C44v122Ev();
extern void _ZN5S55C34v123Ev();
extern void _ZN5S55C34v124Ev();
extern void _ZN5S55C34v125Ev();
extern void _ZN5S55C34v126Ev();
extern void _ZN5S55C34v127Ev();
extern void _ZN5S55C34v128Ev();
extern void _ZN5S55C34v129Ev();
extern void _ZN5S55C34v130Ev();
extern void _ZN5S55C34v131Ev();
extern void _ZN5S55C34v132Ev();
extern void _ZN5S55C34v133Ev();
extern void _ZN5S55C24v134Ev();
extern void _ZN5S55C24v135Ev();
extern void _ZN5S55C24v136Ev();
static  VTBL_ENTRY vtc_S55C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S55C2[0]),
  (VTBL_ENTRY)&_ZN5S55C2D1Ev,
  (VTBL_ENTRY)&_ZN5S55C2D0Ev,
  (VTBL_ENTRY)&_ZN5S55C72v3Ev,
  (VTBL_ENTRY)&_ZN5S55C72v4Ev,
  (VTBL_ENTRY)&_ZN5S55C72v5Ev,
  (VTBL_ENTRY)&_ZN5S55C72v6Ev,
  (VTBL_ENTRY)&_ZN5S55C72v7Ev,
  (VTBL_ENTRY)&_ZN5S55C72v8Ev,
  (VTBL_ENTRY)&_ZN5S55C72v9Ev,
  (VTBL_ENTRY)&_ZN5S55C73v10Ev,
  (VTBL_ENTRY)&_ZN5S55C73v11Ev,
  (VTBL_ENTRY)&_ZN5S55C73v12Ev,
  (VTBL_ENTRY)&_ZN5S55C73v13Ev,
  (VTBL_ENTRY)&_ZN5S55C73v14Ev,
  (VTBL_ENTRY)&_ZN5S55C73v15Ev,
  (VTBL_ENTRY)&_ZN5S55C73v16Ev,
  (VTBL_ENTRY)&_ZN5S55C73v17Ev,
  (VTBL_ENTRY)&_ZN5S55C73v18Ev,
  (VTBL_ENTRY)&_ZN5S55C73v19Ev,
  (VTBL_ENTRY)&_ZN5S55C73v20Ev,
  (VTBL_ENTRY)&_ZN5S55C73v21Ev,
  (VTBL_ENTRY)&_ZN5S55C73v22Ev,
  (VTBL_ENTRY)&_ZN5S55C73v23Ev,
  (VTBL_ENTRY)&_ZN5S55C73v24Ev,
  (VTBL_ENTRY)&_ZN5S55C73v25Ev,
  (VTBL_ENTRY)&_ZN5S55C73v26Ev,
  (VTBL_ENTRY)&_ZN5S55C73v27Ev,
  (VTBL_ENTRY)&_ZN5S55C73v28Ev,
  (VTBL_ENTRY)&_ZN5S55C73v29Ev,
  (VTBL_ENTRY)&_ZN5S55C73v30Ev,
  (VTBL_ENTRY)&_ZN5S55C73v31Ev,
  (VTBL_ENTRY)&_ZN5S55C73v32Ev,
  (VTBL_ENTRY)&_ZN5S55C73v33Ev,
  (VTBL_ENTRY)&_ZN5S55C73v34Ev,
  (VTBL_ENTRY)&_ZN5S55C73v35Ev,
  (VTBL_ENTRY)&_ZN5S55C73v36Ev,
  (VTBL_ENTRY)&_ZN5S55C73v37Ev,
  (VTBL_ENTRY)&_ZN5S55C73v38Ev,
  (VTBL_ENTRY)&_ZN5S55C73v39Ev,
  (VTBL_ENTRY)&_ZN5S55C73v40Ev,
  (VTBL_ENTRY)&_ZN5S55C73v41Ev,
  (VTBL_ENTRY)&_ZN5S55C73v42Ev,
  (VTBL_ENTRY)&_ZN5S55C73v43Ev,
  (VTBL_ENTRY)&_ZN5S55C73v44Ev,
  (VTBL_ENTRY)&_ZN5S55C73v45Ev,
  (VTBL_ENTRY)&_ZN5S55C73v46Ev,
  (VTBL_ENTRY)&_ZN5S55C73v47Ev,
  (VTBL_ENTRY)&_ZN5S55C73v48Ev,
  (VTBL_ENTRY)&_ZN5S55C73v49Ev,
  (VTBL_ENTRY)&_ZN5S55C73v50Ev,
  (VTBL_ENTRY)&_ZN5S55C73v51Ev,
  (VTBL_ENTRY)&_ZN5S55C73v52Ev,
  (VTBL_ENTRY)&_ZN5S55C73v53Ev,
  (VTBL_ENTRY)&_ZN5S55C73v54Ev,
  (VTBL_ENTRY)&_ZN5S55C73v55Ev,
  (VTBL_ENTRY)&_ZN5S55C73v56Ev,
  (VTBL_ENTRY)&_ZN5S55C73v57Ev,
  (VTBL_ENTRY)&_ZN5S55C73v58Ev,
  (VTBL_ENTRY)&_ZN5S55C73v59Ev,
  (VTBL_ENTRY)&_ZN5S55C73v60Ev,
  (VTBL_ENTRY)&_ZN5S55C73v61Ev,
  (VTBL_ENTRY)&_ZN5S55C73v62Ev,
  (VTBL_ENTRY)&_ZN5S55C73v63Ev,
  (VTBL_ENTRY)&_ZN5S55C73v64Ev,
  (VTBL_ENTRY)&_ZN5S55C73v65Ev,
  (VTBL_ENTRY)&_ZN5S55C73v66Ev,
  (VTBL_ENTRY)&_ZN5S55C63v67Ev,
  (VTBL_ENTRY)&_ZN5S55C63v68Ev,
  (VTBL_ENTRY)&_ZN5S55C63v69Ev,
  (VTBL_ENTRY)&_ZN5S55C63v70Ev,
  (VTBL_ENTRY)&_ZN5S55C63v71Ev,
  (VTBL_ENTRY)&_ZN5S55C63v72Ev,
  (VTBL_ENTRY)&_ZN5S55C63v73Ev,
  (VTBL_ENTRY)&_ZN5S55C63v74Ev,
  (VTBL_ENTRY)&_ZN5S55C63v75Ev,
  (VTBL_ENTRY)&_ZN5S55C63v76Ev,
  (VTBL_ENTRY)&_ZN5S55C63v77Ev,
  (VTBL_ENTRY)&_ZN5S55C63v78Ev,
  (VTBL_ENTRY)&_ZN5S55C63v79Ev,
  (VTBL_ENTRY)&_ZN5S55C63v80Ev,
  (VTBL_ENTRY)&_ZN5S55C63v81Ev,
  (VTBL_ENTRY)&_ZN5S55C63v82Ev,
  (VTBL_ENTRY)&_ZN5S55C63v83Ev,
  (VTBL_ENTRY)&_ZN5S55C63v84Ev,
  (VTBL_ENTRY)&_ZN5S55C63v85Ev,
  (VTBL_ENTRY)&_ZN5S55C63v86Ev,
  (VTBL_ENTRY)&_ZN5S55C63v87Ev,
  (VTBL_ENTRY)&_ZN5S55C63v88Ev,
  (VTBL_ENTRY)&_ZN5S55C53v89Ev,
  (VTBL_ENTRY)&_ZN5S55C53v90Ev,
  (VTBL_ENTRY)&_ZN5S55C53v91Ev,
  (VTBL_ENTRY)&_ZN5S55C53v92Ev,
  (VTBL_ENTRY)&_ZN5S55C53v93Ev,
  (VTBL_ENTRY)&_ZN5S55C53v94Ev,
  (VTBL_ENTRY)&_ZN5S55C53v95Ev,
  (VTBL_ENTRY)&_ZN5S55C53v96Ev,
  (VTBL_ENTRY)&_ZN5S55C53v97Ev,
  (VTBL_ENTRY)&_ZN5S55C53v98Ev,
  (VTBL_ENTRY)&_ZN5S55C53v99Ev,
  (VTBL_ENTRY)&_ZN5S55C54v100Ev,
  (VTBL_ENTRY)&_ZN5S55C54v101Ev,
  (VTBL_ENTRY)&_ZN5S55C54v102Ev,
  (VTBL_ENTRY)&_ZN5S55C54v103Ev,
  (VTBL_ENTRY)&_ZN5S55C54v104Ev,
  (VTBL_ENTRY)&_ZN5S55C54v105Ev,
  (VTBL_ENTRY)&_ZN5S55C54v106Ev,
  (VTBL_ENTRY)&_ZN5S55C54v107Ev,
  (VTBL_ENTRY)&_ZN5S55C54v108Ev,
  (VTBL_ENTRY)&_ZN5S55C44v109Ev,
  (VTBL_ENTRY)&_ZN5S55C44v110Ev,
  (VTBL_ENTRY)&_ZN5S55C44v111Ev,
  (VTBL_ENTRY)&_ZN5S55C44v112Ev,
  (VTBL_ENTRY)&_ZN5S55C44v113Ev,
  (VTBL_ENTRY)&_ZN5S55C44v114Ev,
  (VTBL_ENTRY)&_ZN5S55C44v115Ev,
  (VTBL_ENTRY)&_ZN5S55C44v116Ev,
  (VTBL_ENTRY)&_ZN5S55C44v117Ev,
  (VTBL_ENTRY)&_ZN5S55C44v118Ev,
  (VTBL_ENTRY)&_ZN5S55C44v119Ev,
  (VTBL_ENTRY)&_ZN5S55C44v120Ev,
  (VTBL_ENTRY)&_ZN5S55C44v121Ev,
  (VTBL_ENTRY)&_ZN5S55C44v122Ev,
  (VTBL_ENTRY)&_ZN5S55C34v123Ev,
  (VTBL_ENTRY)&_ZN5S55C34v124Ev,
  (VTBL_ENTRY)&_ZN5S55C34v125Ev,
  (VTBL_ENTRY)&_ZN5S55C34v126Ev,
  (VTBL_ENTRY)&_ZN5S55C34v127Ev,
  (VTBL_ENTRY)&_ZN5S55C34v128Ev,
  (VTBL_ENTRY)&_ZN5S55C34v129Ev,
  (VTBL_ENTRY)&_ZN5S55C34v130Ev,
  (VTBL_ENTRY)&_ZN5S55C34v131Ev,
  (VTBL_ENTRY)&_ZN5S55C34v132Ev,
  (VTBL_ENTRY)&_ZN5S55C34v133Ev,
  (VTBL_ENTRY)&_ZN5S55C24v134Ev,
  (VTBL_ENTRY)&_ZN5S55C24v135Ev,
  (VTBL_ENTRY)&_ZN5S55C24v136Ev,
};
extern VTBL_ENTRY _ZTI5S55C2[];
extern  VTBL_ENTRY _ZTV5S55C2[];
Class_Descriptor cd_S55C2 = {  "S55C2", // class name
  bases_S55C2, 5,
  &(vtc_S55C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(392,280), // object size
  NSPAIRA(_ZTI5S55C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S55C2),138, //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  S55C1  : S55C2 {
  virtual  ~S55C1(); // _ZN5S55C1D1Ev
  virtual void  v1(); // _ZN5S55C12v1Ev
  virtual void  v2(); // _ZN5S55C12v2Ev
  S55C1(); // tgen
};
//SIG(1 S55C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ 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 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 Fi FL Fp[4] Fi[2] Fp FC8{ m Fi[2]} Fp[2]} vd v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fi[2] Fp Fi[2] FC9{ BC10{ BC11{ BC12{ m Fp Fi[2]}}}} FC9 FC13{ m} FC9 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 Fi:1 Fi:1 Fi:1 FC14{ BC15{ BC12}} FC16{ BC17{ BC12}} FC18{ BC19{ BC12}} FC20{ BC21{ BC12}} Fi[3]} vd v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC22{ BC23{ BC12}}} vd v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 Fp[2] FC9 Fi:1 Fi:1 FC24{ m Fp FC8}} vd v134 v135 v136} vd v1 v2}


 S55C1 ::~S55C1(){ note_dtor("S55C1", this);}
void  S55C1 ::v1(){vfunc_called(this, "_ZN5S55C12v1Ev");}
void  S55C1 ::v2(){vfunc_called(this, "_ZN5S55C12v2Ev");}
S55C1 ::S55C1(){ note_ctor("S55C1", this);} // tgen

static void Test_S55C1()
{
  extern Class_Descriptor cd_S55C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(50,71)];
    init_test(&cd_S55C1, buf);
    S55C1 *dp, &lv = *(dp=new (buf) S55C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(392,280), "sizeof(S55C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S55C1)");
    check_base_class_offset(lv, (S55C7*)(S55C6*)(S55C5*)(S55C4*)(S55C3*)(S55C2*), 0, "S55C1");
    check_base_class_offset(lv, (S55C6*)(S55C5*)(S55C4*)(S55C3*)(S55C2*), 0, "S55C1");
    check_base_class_offset(lv, (S55C5*)(S55C4*)(S55C3*)(S55C2*), 0, "S55C1");
    check_base_class_offset(lv, (S55C4*)(S55C3*)(S55C2*), 0, "S55C1");
    check_base_class_offset(lv, (S55C3*)(S55C2*), 0, "S55C1");
    check_base_class_offset(lv, (S55C2*), 0, "S55C1");
    test_class_info(&lv, &cd_S55C1);
    dp->~S55C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS55C1(Test_S55C1, "S55C1", ABISELECT(392,280));

#else // __cplusplus

extern void _ZN5S55C1C1Ev();
extern void _ZN5S55C1D1Ev();
Name_Map name_map_S55C1[] = {
  NSPAIR(_ZN5S55C1C1Ev),
  NSPAIR(_ZN5S55C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S55C7;
extern VTBL_ENTRY _ZTI5S55C7[];
extern  VTBL_ENTRY _ZTV5S55C7[];
extern Class_Descriptor cd_S55C6;
extern VTBL_ENTRY _ZTI5S55C6[];
extern  VTBL_ENTRY _ZTV5S55C6[];
extern Class_Descriptor cd_S55C5;
extern VTBL_ENTRY _ZTI5S55C5[];
extern  VTBL_ENTRY _ZTV5S55C5[];
extern Class_Descriptor cd_S55C4;
extern VTBL_ENTRY _ZTI5S55C4[];
extern  VTBL_ENTRY _ZTV5S55C4[];
extern Class_Descriptor cd_S55C3;
extern VTBL_ENTRY _ZTI5S55C3[];
extern  VTBL_ENTRY _ZTV5S55C3[];
extern Class_Descriptor cd_S55C2;
extern VTBL_ENTRY _ZTI5S55C2[];
extern  VTBL_ENTRY _ZTV5S55C2[];
static Base_Class bases_S55C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S55C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S55C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S55C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S55C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S55C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S55C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S55C1[];
extern void _ZN5S55C1D1Ev();
extern void _ZN5S55C1D0Ev();
extern void _ZN5S55C72v3Ev();
extern void _ZN5S55C72v4Ev();
extern void _ZN5S55C72v5Ev();
extern void _ZN5S55C72v6Ev();
extern void _ZN5S55C72v7Ev();
extern void _ZN5S55C72v8Ev();
extern void _ZN5S55C72v9Ev();
extern void _ZN5S55C73v10Ev();
extern void _ZN5S55C73v11Ev();
extern void _ZN5S55C73v12Ev();
extern void _ZN5S55C73v13Ev();
extern void _ZN5S55C73v14Ev();
extern void _ZN5S55C73v15Ev();
extern void _ZN5S55C73v16Ev();
extern void _ZN5S55C73v17Ev();
extern void _ZN5S55C73v18Ev();
extern void _ZN5S55C73v19Ev();
extern void _ZN5S55C73v20Ev();
extern void _ZN5S55C73v21Ev();
extern void _ZN5S55C73v22Ev();
extern void _ZN5S55C73v23Ev();
extern void _ZN5S55C73v24Ev();
extern void _ZN5S55C73v25Ev();
extern void _ZN5S55C73v26Ev();
extern void _ZN5S55C73v27Ev();
extern void _ZN5S55C73v28Ev();
extern void _ZN5S55C73v29Ev();
extern void _ZN5S55C73v30Ev();
extern void _ZN5S55C73v31Ev();
extern void _ZN5S55C73v32Ev();
extern void _ZN5S55C73v33Ev();
extern void _ZN5S55C73v34Ev();
extern void _ZN5S55C73v35Ev();
extern void _ZN5S55C73v36Ev();
extern void _ZN5S55C73v37Ev();
extern void _ZN5S55C73v38Ev();
extern void _ZN5S55C73v39Ev();
extern void _ZN5S55C73v40Ev();
extern void _ZN5S55C73v41Ev();
extern void _ZN5S55C73v42Ev();
extern void _ZN5S55C73v43Ev();
extern void _ZN5S55C73v44Ev();
extern void _ZN5S55C73v45Ev();
extern void _ZN5S55C73v46Ev();
extern void _ZN5S55C73v47Ev();
extern void _ZN5S55C73v48Ev();
extern void _ZN5S55C73v49Ev();
extern void _ZN5S55C73v50Ev();
extern void _ZN5S55C73v51Ev();
extern void _ZN5S55C73v52Ev();
extern void _ZN5S55C73v53Ev();
extern void _ZN5S55C73v54Ev();
extern void _ZN5S55C73v55Ev();
extern void _ZN5S55C73v56Ev();
extern void _ZN5S55C73v57Ev();
extern void _ZN5S55C73v58Ev();
extern void _ZN5S55C73v59Ev();
extern void _ZN5S55C73v60Ev();
extern void _ZN5S55C73v61Ev();
extern void _ZN5S55C73v62Ev();
extern void _ZN5S55C73v63Ev();
extern void _ZN5S55C73v64Ev();
extern void _ZN5S55C73v65Ev();
extern void _ZN5S55C73v66Ev();
extern void _ZN5S55C63v67Ev();
extern void _ZN5S55C63v68Ev();
extern void _ZN5S55C63v69Ev();
extern void _ZN5S55C63v70Ev();
extern void _ZN5S55C63v71Ev();
extern void _ZN5S55C63v72Ev();
extern void _ZN5S55C63v73Ev();
extern void _ZN5S55C63v74Ev();
extern void _ZN5S55C63v75Ev();
extern void _ZN5S55C63v76Ev();
extern void _ZN5S55C63v77Ev();
extern void _ZN5S55C63v78Ev();
extern void _ZN5S55C63v79Ev();
extern void _ZN5S55C63v80Ev();
extern void _ZN5S55C63v81Ev();
extern void _ZN5S55C63v82Ev();
extern void _ZN5S55C63v83Ev();
extern void _ZN5S55C63v84Ev();
extern void _ZN5S55C63v85Ev();
extern void _ZN5S55C63v86Ev();
extern void _ZN5S55C63v87Ev();
extern void _ZN5S55C63v88Ev();
extern void _ZN5S55C53v89Ev();
extern void _ZN5S55C53v90Ev();
extern void _ZN5S55C53v91Ev();
extern void _ZN5S55C53v92Ev();
extern void _ZN5S55C53v93Ev();
extern void _ZN5S55C53v94Ev();
extern void _ZN5S55C53v95Ev();
extern void _ZN5S55C53v96Ev();
extern void _ZN5S55C53v97Ev();
extern void _ZN5S55C53v98Ev();
extern void _ZN5S55C53v99Ev();
extern void _ZN5S55C54v100Ev();
extern void _ZN5S55C54v101Ev();
extern void _ZN5S55C54v102Ev();
extern void _ZN5S55C54v103Ev();
extern void _ZN5S55C54v104Ev();
extern void _ZN5S55C54v105Ev();
extern void _ZN5S55C54v106Ev();
extern void _ZN5S55C54v107Ev();
extern void _ZN5S55C54v108Ev();
extern void _ZN5S55C44v109Ev();
extern void _ZN5S55C44v110Ev();
extern void _ZN5S55C44v111Ev();
extern void _ZN5S55C44v112Ev();
extern void _ZN5S55C44v113Ev();
extern void _ZN5S55C44v114Ev();
extern void _ZN5S55C44v115Ev();
extern void _ZN5S55C44v116Ev();
extern void _ZN5S55C44v117Ev();
extern void _ZN5S55C44v118Ev();
extern void _ZN5S55C44v119Ev();
extern void _ZN5S55C44v120Ev();
extern void _ZN5S55C44v121Ev();
extern void _ZN5S55C44v122Ev();
extern void _ZN5S55C34v123Ev();
extern void _ZN5S55C34v124Ev();
extern void _ZN5S55C34v125Ev();
extern void _ZN5S55C34v126Ev();
extern void _ZN5S55C34v127Ev();
extern void _ZN5S55C34v128Ev();
extern void _ZN5S55C34v129Ev();
extern void _ZN5S55C34v130Ev();
extern void _ZN5S55C34v131Ev();
extern void _ZN5S55C34v132Ev();
extern void _ZN5S55C34v133Ev();
extern void _ZN5S55C24v134Ev();
extern void _ZN5S55C24v135Ev();
extern void _ZN5S55C24v136Ev();
extern void _ZN5S55C12v1Ev();
extern void _ZN5S55C12v2Ev();
static  VTBL_ENTRY vtc_S55C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S55C1[0]),
  (VTBL_ENTRY)&_ZN5S55C1D1Ev,
  (VTBL_ENTRY)&_ZN5S55C1D0Ev,
  (VTBL_ENTRY)&_ZN5S55C72v3Ev,
  (VTBL_ENTRY)&_ZN5S55C72v4Ev,
  (VTBL_ENTRY)&_ZN5S55C72v5Ev,
  (VTBL_ENTRY)&_ZN5S55C72v6Ev,
  (VTBL_ENTRY)&_ZN5S55C72v7Ev,
  (VTBL_ENTRY)&_ZN5S55C72v8Ev,
  (VTBL_ENTRY)&_ZN5S55C72v9Ev,
  (VTBL_ENTRY)&_ZN5S55C73v10Ev,
  (VTBL_ENTRY)&_ZN5S55C73v11Ev,
  (VTBL_ENTRY)&_ZN5S55C73v12Ev,
  (VTBL_ENTRY)&_ZN5S55C73v13Ev,
  (VTBL_ENTRY)&_ZN5S55C73v14Ev,
  (VTBL_ENTRY)&_ZN5S55C73v15Ev,
  (VTBL_ENTRY)&_ZN5S55C73v16Ev,
  (VTBL_ENTRY)&_ZN5S55C73v17Ev,
  (VTBL_ENTRY)&_ZN5S55C73v18Ev,
  (VTBL_ENTRY)&_ZN5S55C73v19Ev,
  (VTBL_ENTRY)&_ZN5S55C73v20Ev,
  (VTBL_ENTRY)&_ZN5S55C73v21Ev,
  (VTBL_ENTRY)&_ZN5S55C73v22Ev,
  (VTBL_ENTRY)&_ZN5S55C73v23Ev,
  (VTBL_ENTRY)&_ZN5S55C73v24Ev,
  (VTBL_ENTRY)&_ZN5S55C73v25Ev,
  (VTBL_ENTRY)&_ZN5S55C73v26Ev,
  (VTBL_ENTRY)&_ZN5S55C73v27Ev,
  (VTBL_ENTRY)&_ZN5S55C73v28Ev,
  (VTBL_ENTRY)&_ZN5S55C73v29Ev,
  (VTBL_ENTRY)&_ZN5S55C73v30Ev,
  (VTBL_ENTRY)&_ZN5S55C73v31Ev,
  (VTBL_ENTRY)&_ZN5S55C73v32Ev,
  (VTBL_ENTRY)&_ZN5S55C73v33Ev,
  (VTBL_ENTRY)&_ZN5S55C73v34Ev,
  (VTBL_ENTRY)&_ZN5S55C73v35Ev,
  (VTBL_ENTRY)&_ZN5S55C73v36Ev,
  (VTBL_ENTRY)&_ZN5S55C73v37Ev,
  (VTBL_ENTRY)&_ZN5S55C73v38Ev,
  (VTBL_ENTRY)&_ZN5S55C73v39Ev,
  (VTBL_ENTRY)&_ZN5S55C73v40Ev,
  (VTBL_ENTRY)&_ZN5S55C73v41Ev,
  (VTBL_ENTRY)&_ZN5S55C73v42Ev,
  (VTBL_ENTRY)&_ZN5S55C73v43Ev,
  (VTBL_ENTRY)&_ZN5S55C73v44Ev,
  (VTBL_ENTRY)&_ZN5S55C73v45Ev,
  (VTBL_ENTRY)&_ZN5S55C73v46Ev,
  (VTBL_ENTRY)&_ZN5S55C73v47Ev,
  (VTBL_ENTRY)&_ZN5S55C73v48Ev,
  (VTBL_ENTRY)&_ZN5S55C73v49Ev,
  (VTBL_ENTRY)&_ZN5S55C73v50Ev,
  (VTBL_ENTRY)&_ZN5S55C73v51Ev,
  (VTBL_ENTRY)&_ZN5S55C73v52Ev,
  (VTBL_ENTRY)&_ZN5S55C73v53Ev,
  (VTBL_ENTRY)&_ZN5S55C73v54Ev,
  (VTBL_ENTRY)&_ZN5S55C73v55Ev,
  (VTBL_ENTRY)&_ZN5S55C73v56Ev,
  (VTBL_ENTRY)&_ZN5S55C73v57Ev,
  (VTBL_ENTRY)&_ZN5S55C73v58Ev,
  (VTBL_ENTRY)&_ZN5S55C73v59Ev,
  (VTBL_ENTRY)&_ZN5S55C73v60Ev,
  (VTBL_ENTRY)&_ZN5S55C73v61Ev,
  (VTBL_ENTRY)&_ZN5S55C73v62Ev,
  (VTBL_ENTRY)&_ZN5S55C73v63Ev,
  (VTBL_ENTRY)&_ZN5S55C73v64Ev,
  (VTBL_ENTRY)&_ZN5S55C73v65Ev,
  (VTBL_ENTRY)&_ZN5S55C73v66Ev,
  (VTBL_ENTRY)&_ZN5S55C63v67Ev,
  (VTBL_ENTRY)&_ZN5S55C63v68Ev,
  (VTBL_ENTRY)&_ZN5S55C63v69Ev,
  (VTBL_ENTRY)&_ZN5S55C63v70Ev,
  (VTBL_ENTRY)&_ZN5S55C63v71Ev,
  (VTBL_ENTRY)&_ZN5S55C63v72Ev,
  (VTBL_ENTRY)&_ZN5S55C63v73Ev,
  (VTBL_ENTRY)&_ZN5S55C63v74Ev,
  (VTBL_ENTRY)&_ZN5S55C63v75Ev,
  (VTBL_ENTRY)&_ZN5S55C63v76Ev,
  (VTBL_ENTRY)&_ZN5S55C63v77Ev,
  (VTBL_ENTRY)&_ZN5S55C63v78Ev,
  (VTBL_ENTRY)&_ZN5S55C63v79Ev,
  (VTBL_ENTRY)&_ZN5S55C63v80Ev,
  (VTBL_ENTRY)&_ZN5S55C63v81Ev,
  (VTBL_ENTRY)&_ZN5S55C63v82Ev,
  (VTBL_ENTRY)&_ZN5S55C63v83Ev,
  (VTBL_ENTRY)&_ZN5S55C63v84Ev,
  (VTBL_ENTRY)&_ZN5S55C63v85Ev,
  (VTBL_ENTRY)&_ZN5S55C63v86Ev,
  (VTBL_ENTRY)&_ZN5S55C63v87Ev,
  (VTBL_ENTRY)&_ZN5S55C63v88Ev,
  (VTBL_ENTRY)&_ZN5S55C53v89Ev,
  (VTBL_ENTRY)&_ZN5S55C53v90Ev,
  (VTBL_ENTRY)&_ZN5S55C53v91Ev,
  (VTBL_ENTRY)&_ZN5S55C53v92Ev,
  (VTBL_ENTRY)&_ZN5S55C53v93Ev,
  (VTBL_ENTRY)&_ZN5S55C53v94Ev,
  (VTBL_ENTRY)&_ZN5S55C53v95Ev,
  (VTBL_ENTRY)&_ZN5S55C53v96Ev,
  (VTBL_ENTRY)&_ZN5S55C53v97Ev,
  (VTBL_ENTRY)&_ZN5S55C53v98Ev,
  (VTBL_ENTRY)&_ZN5S55C53v99Ev,
  (VTBL_ENTRY)&_ZN5S55C54v100Ev,
  (VTBL_ENTRY)&_ZN5S55C54v101Ev,
  (VTBL_ENTRY)&_ZN5S55C54v102Ev,
  (VTBL_ENTRY)&_ZN5S55C54v103Ev,
  (VTBL_ENTRY)&_ZN5S55C54v104Ev,
  (VTBL_ENTRY)&_ZN5S55C54v105Ev,
  (VTBL_ENTRY)&_ZN5S55C54v106Ev,
  (VTBL_ENTRY)&_ZN5S55C54v107Ev,
  (VTBL_ENTRY)&_ZN5S55C54v108Ev,
  (VTBL_ENTRY)&_ZN5S55C44v109Ev,
  (VTBL_ENTRY)&_ZN5S55C44v110Ev,
  (VTBL_ENTRY)&_ZN5S55C44v111Ev,
  (VTBL_ENTRY)&_ZN5S55C44v112Ev,
  (VTBL_ENTRY)&_ZN5S55C44v113Ev,
  (VTBL_ENTRY)&_ZN5S55C44v114Ev,
  (VTBL_ENTRY)&_ZN5S55C44v115Ev,
  (VTBL_ENTRY)&_ZN5S55C44v116Ev,
  (VTBL_ENTRY)&_ZN5S55C44v117Ev,
  (VTBL_ENTRY)&_ZN5S55C44v118Ev,
  (VTBL_ENTRY)&_ZN5S55C44v119Ev,
  (VTBL_ENTRY)&_ZN5S55C44v120Ev,
  (VTBL_ENTRY)&_ZN5S55C44v121Ev,
  (VTBL_ENTRY)&_ZN5S55C44v122Ev,
  (VTBL_ENTRY)&_ZN5S55C34v123Ev,
  (VTBL_ENTRY)&_ZN5S55C34v124Ev,
  (VTBL_ENTRY)&_ZN5S55C34v125Ev,
  (VTBL_ENTRY)&_ZN5S55C34v126Ev,
  (VTBL_ENTRY)&_ZN5S55C34v127Ev,
  (VTBL_ENTRY)&_ZN5S55C34v128Ev,
  (VTBL_ENTRY)&_ZN5S55C34v129Ev,
  (VTBL_ENTRY)&_ZN5S55C34v130Ev,
  (VTBL_ENTRY)&_ZN5S55C34v131Ev,
  (VTBL_ENTRY)&_ZN5S55C34v132Ev,
  (VTBL_ENTRY)&_ZN5S55C34v133Ev,
  (VTBL_ENTRY)&_ZN5S55C24v134Ev,
  (VTBL_ENTRY)&_ZN5S55C24v135Ev,
  (VTBL_ENTRY)&_ZN5S55C24v136Ev,
  (VTBL_ENTRY)&_ZN5S55C12v1Ev,
  (VTBL_ENTRY)&_ZN5S55C12v2Ev,
};
extern VTBL_ENTRY _ZTI5S55C1[];
extern  VTBL_ENTRY _ZTV5S55C1[];
Class_Descriptor cd_S55C1 = {  "S55C1", // class name
  bases_S55C1, 6,
  &(vtc_S55C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(392,280), // object size
  NSPAIRA(_ZTI5S55C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S55C1),140, //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  S58C7  {
  int s58c7f0;
  __tsi64 s58c7f1;
  void *s58c7f2[4];
  int s58c7f3[2];
  void *s58c7f4;
  ::S3350C4_nt s58c7f5;
  void *s58c7f6[2];
  virtual  ~S58C7(); // _ZN5S58C7D1Ev
  virtual void  v3(); // _ZN5S58C72v3Ev
  virtual void  v4(); // _ZN5S58C72v4Ev
  virtual void  v5(); // _ZN5S58C72v5Ev
  virtual void  v6(); // _ZN5S58C72v6Ev
  virtual void  v7(); // _ZN5S58C72v7Ev
  virtual void  v8(); // _ZN5S58C72v8Ev
  virtual void  v9(); // _ZN5S58C72v9Ev
  virtual void  v10(); // _ZN5S58C73v10Ev
  virtual void  v11(); // _ZN5S58C73v11Ev
  virtual void  v12(); // _ZN5S58C73v12Ev
  virtual void  v13(); // _ZN5S58C73v13Ev
  virtual void  v14(); // _ZN5S58C73v14Ev
  virtual void  v15(); // _ZN5S58C73v15Ev
  virtual void  v16(); // _ZN5S58C73v16Ev
  virtual void  v17(); // _ZN5S58C73v17Ev
  virtual void  v18(); // _ZN5S58C73v18Ev
  virtual void  v19(); // _ZN5S58C73v19Ev
  virtual void  v20(); // _ZN5S58C73v20Ev
  virtual void  v21(); // _ZN5S58C73v21Ev
  virtual void  v22(); // _ZN5S58C73v22Ev
  virtual void  v23(); // _ZN5S58C73v23Ev
  virtual void  v24(); // _ZN5S58C73v24Ev
  virtual void  v25(); // _ZN5S58C73v25Ev
  virtual void  v26(); // _ZN5S58C73v26Ev
  virtual void  v27(); // _ZN5S58C73v27Ev
  virtual void  v28(); // _ZN5S58C73v28Ev
  virtual void  v29(); // _ZN5S58C73v29Ev
  virtual void  v30(); // _ZN5S58C73v30Ev
  virtual void  v31(); // _ZN5S58C73v31Ev
  virtual void  v32(); // _ZN5S58C73v32Ev
  virtual void  v33(); // _ZN5S58C73v33Ev
  virtual void  v34(); // _ZN5S58C73v34Ev
  virtual void  v35(); // _ZN5S58C73v35Ev
  virtual void  v36(); // _ZN5S58C73v36Ev
  virtual void  v37(); // _ZN5S58C73v37Ev
  virtual void  v38(); // _ZN5S58C73v38Ev
  virtual void  v39(); // _ZN5S58C73v39Ev
  virtual void  v40(); // _ZN5S58C73v40Ev
  virtual void  v41(); // _ZN5S58C73v41Ev
  virtual void  v42(); // _ZN5S58C73v42Ev
  virtual void  v43(); // _ZN5S58C73v43Ev
  virtual void  v44(); // _ZN5S58C73v44Ev
  virtual void  v45(); // _ZN5S58C73v45Ev
  virtual void  v46(); // _ZN5S58C73v46Ev
  virtual void  v47(); // _ZN5S58C73v47Ev
  virtual void  v48(); // _ZN5S58C73v48Ev
  virtual void  v49(); // _ZN5S58C73v49Ev
  virtual void  v50(); // _ZN5S58C73v50Ev
  virtual void  v51(); // _ZN5S58C73v51Ev
  virtual void  v52(); // _ZN5S58C73v52Ev
  virtual void  v53(); // _ZN5S58C73v53Ev
  virtual void  v54(); // _ZN5S58C73v54Ev
  virtual void  v55(); // _ZN5S58C73v55Ev
  virtual void  v56(); // _ZN5S58C73v56Ev
  virtual void  v57(); // _ZN5S58C73v57Ev
  virtual void  v58(); // _ZN5S58C73v58Ev
  virtual void  v59(); // _ZN5S58C73v59Ev
  virtual void  v60(); // _ZN5S58C73v60Ev
  virtual void  v61(); // _ZN5S58C73v61Ev
  virtual void  v62(); // _ZN5S58C73v62Ev
  virtual void  v63(); // _ZN5S58C73v63Ev
  virtual void  v64(); // _ZN5S58C73v64Ev
  virtual void  v65(); // _ZN5S58C73v65Ev
  virtual void  v66(); // _ZN5S58C73v66Ev
  S58C7(); // tgen
};
//SIG(-1 S58C7) 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]}


 S58C7 ::~S58C7(){ note_dtor("S58C7", this);}
void  S58C7 ::v3(){vfunc_called(this, "_ZN5S58C72v3Ev");}
void  S58C7 ::v4(){vfunc_called(this, "_ZN5S58C72v4Ev");}
void  S58C7 ::v5(){vfunc_called(this, "_ZN5S58C72v5Ev");}
void  S58C7 ::v6(){vfunc_called(this, "_ZN5S58C72v6Ev");}
void  S58C7 ::v7(){vfunc_called(this, "_ZN5S58C72v7Ev");}
void  S58C7 ::v8(){vfunc_called(this, "_ZN5S58C72v8Ev");}
void  S58C7 ::v9(){vfunc_called(this, "_ZN5S58C72v9Ev");}
void  S58C7 ::v10(){vfunc_called(this, "_ZN5S58C73v10Ev");}
void  S58C7 ::v11(){vfunc_called(this, "_ZN5S58C73v11Ev");}
void  S58C7 ::v12(){vfunc_called(this, "_ZN5S58C73v12Ev");}
void  S58C7 ::v13(){vfunc_called(this, "_ZN5S58C73v13Ev");}
void  S58C7 ::v14(){vfunc_called(this, "_ZN5S58C73v14Ev");}
void  S58C7 ::v15(){vfunc_called(this, "_ZN5S58C73v15Ev");}
void  S58C7 ::v16(){vfunc_called(this, "_ZN5S58C73v16Ev");}
void  S58C7 ::v17(){vfunc_called(this, "_ZN5S58C73v17Ev");}
void  S58C7 ::v18(){vfunc_called(this, "_ZN5S58C73v18Ev");}
void  S58C7 ::v19(){vfunc_called(this, "_ZN5S58C73v19Ev");}
void  S58C7 ::v20(){vfunc_called(this, "_ZN5S58C73v20Ev");}
void  S58C7 ::v21(){vfunc_called(this, "_ZN5S58C73v21Ev");}
void  S58C7 ::v22(){vfunc_called(this, "_ZN5S58C73v22Ev");}
void  S58C7 ::v23(){vfunc_called(this, "_ZN5S58C73v23Ev");}
void  S58C7 ::v24(){vfunc_called(this, "_ZN5S58C73v24Ev");}
void  S58C7 ::v25(){vfunc_called(this, "_ZN5S58C73v25Ev");}
void  S58C7 ::v26(){vfunc_called(this, "_ZN5S58C73v26Ev");}
void  S58C7 ::v27(){vfunc_called(this, "_ZN5S58C73v27Ev");}
void  S58C7 ::v28(){vfunc_called(this, "_ZN5S58C73v28Ev");}
void  S58C7 ::v29(){vfunc_called(this, "_ZN5S58C73v29Ev");}
void  S58C7 ::v30(){vfunc_called(this, "_ZN5S58C73v30Ev");}
void  S58C7 ::v31(){vfunc_called(this, "_ZN5S58C73v31Ev");}
void  S58C7 ::v32(){vfunc_called(this, "_ZN5S58C73v32Ev");}
void  S58C7 ::v33(){vfunc_called(this, "_ZN5S58C73v33Ev");}
void  S58C7 ::v34(){vfunc_called(this, "_ZN5S58C73v34Ev");}
void  S58C7 ::v35(){vfunc_called(this, "_ZN5S58C73v35Ev");}
void  S58C7 ::v36(){vfunc_called(this, "_ZN5S58C73v36Ev");}
void  S58C7 ::v37(){vfunc_called(this, "_ZN5S58C73v37Ev");}
void  S58C7 ::v38(){vfunc_called(this, "_ZN5S58C73v38Ev");}
void  S58C7 ::v39(){vfunc_called(this, "_ZN5S58C73v39Ev");}
void  S58C7 ::v40(){vfunc_called(this, "_ZN5S58C73v40Ev");}
void  S58C7 ::v41(){vfunc_called(this, "_ZN5S58C73v41Ev");}
void  S58C7 ::v42(){vfunc_called(this, "_ZN5S58C73v42Ev");}
void  S58C7 ::v43(){vfunc_called(this, "_ZN5S58C73v43Ev");}
void  S58C7 ::v44(){vfunc_called(this, "_ZN5S58C73v44Ev");}
void  S58C7 ::v45(){vfunc_called(this, "_ZN5S58C73v45Ev");}
void  S58C7 ::v46(){vfunc_called(this, "_ZN5S58C73v46Ev");}
void  S58C7 ::v47(){vfunc_called(this, "_ZN5S58C73v47Ev");}
void  S58C7 ::v48(){vfunc_called(this, "_ZN5S58C73v48Ev");}
void  S58C7 ::v49(){vfunc_called(this, "_ZN5S58C73v49Ev");}
void  S58C7 ::v50(){vfunc_called(this, "_ZN5S58C73v50Ev");}
void  S58C7 ::v51(){vfunc_called(this, "_ZN5S58C73v51Ev");}
void  S58C7 ::v52(){vfunc_called(this, "_ZN5S58C73v52Ev");}
void  S58C7 ::v53(){vfunc_called(this, "_ZN5S58C73v53Ev");}
void  S58C7 ::v54(){vfunc_called(this, "_ZN5S58C73v54Ev");}
void  S58C7 ::v55(){vfunc_called(this, "_ZN5S58C73v55Ev");}
void  S58C7 ::v56(){vfunc_called(this, "_ZN5S58C73v56Ev");}
void  S58C7 ::v57(){vfunc_called(this, "_ZN5S58C73v57Ev");}
void  S58C7 ::v58(){vfunc_called(this, "_ZN5S58C73v58Ev");}
void  S58C7 ::v59(){vfunc_called(this, "_ZN5S58C73v59Ev");}
void  S58C7 ::v60(){vfunc_called(this, "_ZN5S58C73v60Ev");}
void  S58C7 ::v61(){vfunc_called(this, "_ZN5S58C73v61Ev");}
void  S58C7 ::v62(){vfunc_called(this, "_ZN5S58C73v62Ev");}
void  S58C7 ::v63(){vfunc_called(this, "_ZN5S58C73v63Ev");}
void  S58C7 ::v64(){vfunc_called(this, "_ZN5S58C73v64Ev");}
void  S58C7 ::v65(){vfunc_called(this, "_ZN5S58C73v65Ev");}
void  S58C7 ::v66(){vfunc_called(this, "_ZN5S58C73v66Ev");}
S58C7 ::S58C7(){ note_ctor("S58C7", this);} // tgen

static void Test_S58C7()
{
  extern Class_Descriptor cd_S58C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S58C7, buf);
    S58C7 *dp, &lv = *(dp=new (buf) S58C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S58C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S58C7)");
    check_field_offset(lv, s58c7f0, ABISELECT(8,4), "S58C7.s58c7f0");
    check_field_offset(lv, s58c7f1, ABISELECT(16,8), "S58C7.s58c7f1");
    check_field_offset(lv, s58c7f2, ABISELECT(24,16), "S58C7.s58c7f2");
    check_field_offset(lv, s58c7f3, ABISELECT(56,32), "S58C7.s58c7f3");
    check_field_offset(lv, s58c7f4, ABISELECT(64,40), "S58C7.s58c7f4");
    check_field_offset(lv, s58c7f5, ABISELECT(72,44), "S58C7.s58c7f5");
    check_field_offset(lv, s58c7f6, ABISELECT(80,52), "S58C7.s58c7f6");
    test_class_info(&lv, &cd_S58C7);
    dp->~S58C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS58C7(Test_S58C7, "S58C7", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN5S58C7C1Ev();
extern void _ZN5S58C7D1Ev();
Name_Map name_map_S58C7[] = {
  NSPAIR(_ZN5S58C7C1Ev),
  NSPAIR(_ZN5S58C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI5S58C7[];
extern void _ZN5S58C7D1Ev();
extern void _ZN5S58C7D0Ev();
extern void _ZN5S58C72v3Ev();
extern void _ZN5S58C72v4Ev();
extern void _ZN5S58C72v5Ev();
extern void _ZN5S58C72v6Ev();
extern void _ZN5S58C72v7Ev();
extern void _ZN5S58C72v8Ev();
extern void _ZN5S58C72v9Ev();
extern void _ZN5S58C73v10Ev();
extern void _ZN5S58C73v11Ev();
extern void _ZN5S58C73v12Ev();
extern void _ZN5S58C73v13Ev();
extern void _ZN5S58C73v14Ev();
extern void _ZN5S58C73v15Ev();
extern void _ZN5S58C73v16Ev();
extern void _ZN5S58C73v17Ev();
extern void _ZN5S58C73v18Ev();
extern void _ZN5S58C73v19Ev();
extern void _ZN5S58C73v20Ev();
extern void _ZN5S58C73v21Ev();
extern void _ZN5S58C73v22Ev();
extern void _ZN5S58C73v23Ev();
extern void _ZN5S58C73v24Ev();
extern void _ZN5S58C73v25Ev();
extern void _ZN5S58C73v26Ev();
extern void _ZN5S58C73v27Ev();
extern void _ZN5S58C73v28Ev();
extern void _ZN5S58C73v29Ev();
extern void _ZN5S58C73v30Ev();
extern void _ZN5S58C73v31Ev();
extern void _ZN5S58C73v32Ev();
extern void _ZN5S58C73v33Ev();
extern void _ZN5S58C73v34Ev();
extern void _ZN5S58C73v35Ev();
extern void _ZN5S58C73v36Ev();
extern void _ZN5S58C73v37Ev();
extern void _ZN5S58C73v38Ev();
extern void _ZN5S58C73v39Ev();
extern void _ZN5S58C73v40Ev();
extern void _ZN5S58C73v41Ev();
extern void _ZN5S58C73v42Ev();
extern void _ZN5S58C73v43Ev();
extern void _ZN5S58C73v44Ev();
extern void _ZN5S58C73v45Ev();
extern void _ZN5S58C73v46Ev();
extern void _ZN5S58C73v47Ev();
extern void _ZN5S58C73v48Ev();
extern void _ZN5S58C73v49Ev();
extern void _ZN5S58C73v50Ev();
extern void _ZN5S58C73v51Ev();
extern void _ZN5S58C73v52Ev();
extern void _ZN5S58C73v53Ev();
extern void _ZN5S58C73v54Ev();
extern void _ZN5S58C73v55Ev();
extern void _ZN5S58C73v56Ev();
extern void _ZN5S58C73v57Ev();
extern void _ZN5S58C73v58Ev();
extern void _ZN5S58C73v59Ev();
extern void _ZN5S58C73v60Ev();
extern void _ZN5S58C73v61Ev();
extern void _ZN5S58C73v62Ev();
extern void _ZN5S58C73v63Ev();
extern void _ZN5S58C73v64Ev();
extern void _ZN5S58C73v65Ev();
extern void _ZN5S58C73v66Ev();
static  VTBL_ENTRY vtc_S58C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S58C7[0]),
  (VTBL_ENTRY)&_ZN5S58C7D1Ev,
  (VTBL_ENTRY)&_ZN5S58C7D0Ev,
  (VTBL_ENTRY)&_ZN5S58C72v3Ev,
  (VTBL_ENTRY)&_ZN5S58C72v4Ev,
  (VTBL_ENTRY)&_ZN5S58C72v5Ev,
  (VTBL_ENTRY)&_ZN5S58C72v6Ev,
  (VTBL_ENTRY)&_ZN5S58C72v7Ev,
  (VTBL_ENTRY)&_ZN5S58C72v8Ev,
  (VTBL_ENTRY)&_ZN5S58C72v9Ev,
  (VTBL_ENTRY)&_ZN5S58C73v10Ev,
  (VTBL_ENTRY)&_ZN5S58C73v11Ev,
  (VTBL_ENTRY)&_ZN5S58C73v12Ev,
  (VTBL_ENTRY)&_ZN5S58C73v13Ev,
  (VTBL_ENTRY)&_ZN5S58C73v14Ev,
  (VTBL_ENTRY)&_ZN5S58C73v15Ev,
  (VTBL_ENTRY)&_ZN5S58C73v16Ev,
  (VTBL_ENTRY)&_ZN5S58C73v17Ev,
  (VTBL_ENTRY)&_ZN5S58C73v18Ev,
  (VTBL_ENTRY)&_ZN5S58C73v19Ev,
  (VTBL_ENTRY)&_ZN5S58C73v20Ev,
  (VTBL_ENTRY)&_ZN5S58C73v21Ev,
  (VTBL_ENTRY)&_ZN5S58C73v22Ev,
  (VTBL_ENTRY)&_ZN5S58C73v23Ev,
  (VTBL_ENTRY)&_ZN5S58C73v24Ev,
  (VTBL_ENTRY)&_ZN5S58C73v25Ev,
  (VTBL_ENTRY)&_ZN5S58C73v26Ev,
  (VTBL_ENTRY)&_ZN5S58C73v27Ev,
  (VTBL_ENTRY)&_ZN5S58C73v28Ev,
  (VTBL_ENTRY)&_ZN5S58C73v29Ev,
  (VTBL_ENTRY)&_ZN5S58C73v30Ev,
  (VTBL_ENTRY)&_ZN5S58C73v31Ev,
  (VTBL_ENTRY)&_ZN5S58C73v32Ev,
  (VTBL_ENTRY)&_ZN5S58C73v33Ev,
  (VTBL_ENTRY)&_ZN5S58C73v34Ev,
  (VTBL_ENTRY)&_ZN5S58C73v35Ev,
  (VTBL_ENTRY)&_ZN5S58C73v36Ev,
  (VTBL_ENTRY)&_ZN5S58C73v37Ev,
  (VTBL_ENTRY)&_ZN5S58C73v38Ev,
  (VTBL_ENTRY)&_ZN5S58C73v39Ev,
  (VTBL_ENTRY)&_ZN5S58C73v40Ev,
  (VTBL_ENTRY)&_ZN5S58C73v41Ev,
  (VTBL_ENTRY)&_ZN5S58C73v42Ev,
  (VTBL_ENTRY)&_ZN5S58C73v43Ev,
  (VTBL_ENTRY)&_ZN5S58C73v44Ev,
  (VTBL_ENTRY)&_ZN5S58C73v45Ev,
  (VTBL_ENTRY)&_ZN5S58C73v46Ev,
  (VTBL_ENTRY)&_ZN5S58C73v47Ev,
  (VTBL_ENTRY)&_ZN5S58C73v48Ev,
  (VTBL_ENTRY)&_ZN5S58C73v49Ev,
  (VTBL_ENTRY)&_ZN5S58C73v50Ev,
  (VTBL_ENTRY)&_ZN5S58C73v51Ev,
  (VTBL_ENTRY)&_ZN5S58C73v52Ev,
  (VTBL_ENTRY)&_ZN5S58C73v53Ev,
  (VTBL_ENTRY)&_ZN5S58C73v54Ev,
  (VTBL_ENTRY)&_ZN5S58C73v55Ev,
  (VTBL_ENTRY)&_ZN5S58C73v56Ev,
  (VTBL_ENTRY)&_ZN5S58C73v57Ev,
  (VTBL_ENTRY)&_ZN5S58C73v58Ev,
  (VTBL_ENTRY)&_ZN5S58C73v59Ev,
  (VTBL_ENTRY)&_ZN5S58C73v60Ev,
  (VTBL_ENTRY)&_ZN5S58C73v61Ev,
  (VTBL_ENTRY)&_ZN5S58C73v62Ev,
  (VTBL_ENTRY)&_ZN5S58C73v63Ev,
  (VTBL_ENTRY)&_ZN5S58C73v64Ev,
  (VTBL_ENTRY)&_ZN5S58C73v65Ev,
  (VTBL_ENTRY)&_ZN5S58C73v66Ev,
};
extern VTBL_ENTRY _ZTI5S58C7[];
extern  VTBL_ENTRY _ZTV5S58C7[];
Class_Descriptor cd_S58C7 = {  "S58C7", // class name
  0,0,//no base classes
  &(vtc_S58C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI5S58C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV5S58C7),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  S58C6  : S58C7 {
  int s58c6f0[2];
  void *s58c6f1;
  int s58c6f2[2];
  ::S287C8_nt s58c6f3;
  ::S287C8_nt s58c6f4;
  ::S2121C38 s58c6f5;
  ::S287C8_nt s58c6f6;
  unsigned int s58c6f7:1;
  unsigned int s58c6f8:1;
  unsigned int s58c6f9:1;
  unsigned int s58c6f10:1;
  unsigned int s58c6f11:1;
  int s58c6f12[2];
  virtual  ~S58C6(); // _ZN5S58C6D1Ev
  virtual void  v67(); // _ZN5S58C63v67Ev
  virtual void  v68(); // _ZN5S58C63v68Ev
  virtual void  v69(); // _ZN5S58C63v69Ev
  virtual void  v70(); // _ZN5S58C63v70Ev
  virtual void  v71(); // _ZN5S58C63v71Ev
  virtual void  v72(); // _ZN5S58C63v72Ev
  virtual void  v73(); // _ZN5S58C63v73Ev
  virtual void  v74(); // _ZN5S58C63v74Ev
  virtual void  v75(); // _ZN5S58C63v75Ev
  virtual void  v76(); // _ZN5S58C63v76Ev
  virtual void  v77(); // _ZN5S58C63v77Ev
  virtual void  v78(); // _ZN5S58C63v78Ev
  virtual void  v79(); // _ZN5S58C63v79Ev
  virtual void  v80(); // _ZN5S58C63v80Ev
  virtual void  v81(); // _ZN5S58C63v81Ev
  virtual void  v82(); // _ZN5S58C63v82Ev
  virtual void  v83(); // _ZN5S58C63v83Ev
  virtual void  v84(); // _ZN5S58C63v84Ev
  virtual void  v85(); // _ZN5S58C63v85Ev
  virtual void  v86(); // _ZN5S58C63v86Ev
  virtual void  v87(); // _ZN5S58C63v87Ev
  virtual void  v88(); // _ZN5S58C63v88Ev
  S58C6(); // tgen
};
//SIG(-1 S58C6) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S58C6 ::~S58C6(){ note_dtor("S58C6", this);}
void  S58C6 ::v67(){vfunc_called(this, "_ZN5S58C63v67Ev");}
void  S58C6 ::v68(){vfunc_called(this, "_ZN5S58C63v68Ev");}
void  S58C6 ::v69(){vfunc_called(this, "_ZN5S58C63v69Ev");}
void  S58C6 ::v70(){vfunc_called(this, "_ZN5S58C63v70Ev");}
void  S58C6 ::v71(){vfunc_called(this, "_ZN5S58C63v71Ev");}
void  S58C6 ::v72(){vfunc_called(this, "_ZN5S58C63v72Ev");}
void  S58C6 ::v73(){vfunc_called(this, "_ZN5S58C63v73Ev");}
void  S58C6 ::v74(){vfunc_called(this, "_ZN5S58C63v74Ev");}
void  S58C6 ::v75(){vfunc_called(this, "_ZN5S58C63v75Ev");}
void  S58C6 ::v76(){vfunc_called(this, "_ZN5S58C63v76Ev");}
void  S58C6 ::v77(){vfunc_called(this, "_ZN5S58C63v77Ev");}
void  S58C6 ::v78(){vfunc_called(this, "_ZN5S58C63v78Ev");}
void  S58C6 ::v79(){vfunc_called(this, "_ZN5S58C63v79Ev");}
void  S58C6 ::v80(){vfunc_called(this, "_ZN5S58C63v80Ev");}
void  S58C6 ::v81(){vfunc_called(this, "_ZN5S58C63v81Ev");}
void  S58C6 ::v82(){vfunc_called(this, "_ZN5S58C63v82Ev");}
void  S58C6 ::v83(){vfunc_called(this, "_ZN5S58C63v83Ev");}
void  S58C6 ::v84(){vfunc_called(this, "_ZN5S58C63v84Ev");}
void  S58C6 ::v85(){vfunc_called(this, "_ZN5S58C63v85Ev");}
void  S58C6 ::v86(){vfunc_called(this, "_ZN5S58C63v86Ev");}
void  S58C6 ::v87(){vfunc_called(this, "_ZN5S58C63v87Ev");}
void  S58C6 ::v88(){vfunc_called(this, "_ZN5S58C63v88Ev");}
S58C6 ::S58C6(){ note_ctor("S58C6", this);} // tgen

static void Test_S58C6()
{
  extern Class_Descriptor cd_S58C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S58C6, buf);
    S58C6 *dp, &lv = *(dp=new (buf) S58C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S58C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S58C6)");
    check_base_class_offset(lv, (S58C7*), 0, "S58C6");
    check_field_offset(lv, s58c6f0, ABISELECT(96,60), "S58C6.s58c6f0");
    check_field_offset(lv, s58c6f1, ABISELECT(104,68), "S58C6.s58c6f1");
    check_field_offset(lv, s58c6f2, ABISELECT(112,72), "S58C6.s58c6f2");
    check_field_offset(lv, s58c6f3, ABISELECT(120,80), "S58C6.s58c6f3");
    check_field_offset(lv, s58c6f4, ABISELECT(136,92), "S58C6.s58c6f4");
    check_field_offset(lv, s58c6f5, ABISELECT(152,104), "S58C6.s58c6f5");
    check_field_offset(lv, s58c6f6, ABISELECT(160,108), "S58C6.s58c6f6");
    set_bf_and_test(lv, s58c6f7, ABISELECT(176,120), 0, 1, 1, "S58C6");
    set_bf_and_test(lv, s58c6f8, ABISELECT(176,120), 1, 1, 1, "S58C6");
    set_bf_and_test(lv, s58c6f9, ABISELECT(176,120), 2, 1, 1, "S58C6");
    set_bf_and_test(lv, s58c6f10, ABISELECT(176,120), 3, 1, 1, "S58C6");
    set_bf_and_test(lv, s58c6f11, ABISELECT(176,120), 4, 1, 1, "S58C6");
    check_field_offset(lv, s58c6f12, ABISELECT(180,124), "S58C6.s58c6f12");
    test_class_info(&lv, &cd_S58C6);
    dp->~S58C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS58C6(Test_S58C6, "S58C6", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN5S58C6C1Ev();
extern void _ZN5S58C6D1Ev();
Name_Map name_map_S58C6[] = {
  NSPAIR(_ZN5S58C6C1Ev),
  NSPAIR(_ZN5S58C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S58C7;
extern VTBL_ENTRY _ZTI5S58C7[];
extern  VTBL_ENTRY _ZTV5S58C7[];
static Base_Class bases_S58C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S58C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI5S58C6[];
extern void _ZN5S58C6D1Ev();
extern void _ZN5S58C6D0Ev();
extern void _ZN5S58C72v3Ev();
extern void _ZN5S58C72v4Ev();
extern void _ZN5S58C72v5Ev();
extern void _ZN5S58C72v6Ev();
extern void _ZN5S58C72v7Ev();
extern void _ZN5S58C72v8Ev();
extern void _ZN5S58C72v9Ev();
extern void _ZN5S58C73v10Ev();
extern void _ZN5S58C73v11Ev();
extern void _ZN5S58C73v12Ev();
extern void _ZN5S58C73v13Ev();
extern void _ZN5S58C73v14Ev();
extern void _ZN5S58C73v15Ev();
extern void _ZN5S58C73v16Ev();
extern void _ZN5S58C73v17Ev();
extern void _ZN5S58C73v18Ev();
extern void _ZN5S58C73v19Ev();
extern void _ZN5S58C73v20Ev();
extern void _ZN5S58C73v21Ev();
extern void _ZN5S58C73v22Ev();
extern void _ZN5S58C73v23Ev();
extern void _ZN5S58C73v24Ev();
extern void _ZN5S58C73v25Ev();
extern void _ZN5S58C73v26Ev();
extern void _ZN5S58C73v27Ev();
extern void _ZN5S58C73v28Ev();
extern void _ZN5S58C73v29Ev();
extern void _ZN5S58C73v30Ev();
extern void _ZN5S58C73v31Ev();
extern void _ZN5S58C73v32Ev();
extern void _ZN5S58C73v33Ev();
extern void _ZN5S58C73v34Ev();
extern void _ZN5S58C73v35Ev();
extern void _ZN5S58C73v36Ev();
extern void _ZN5S58C73v37Ev();
extern void _ZN5S58C73v38Ev();
extern void _ZN5S58C73v39Ev();
extern void _ZN5S58C73v40Ev();
extern void _ZN5S58C73v41Ev();
extern void _ZN5S58C73v42Ev();
extern void _ZN5S58C73v43Ev();
extern void _ZN5S58C73v44Ev();
extern void _ZN5S58C73v45Ev();
extern void _ZN5S58C73v46Ev();
extern void _ZN5S58C73v47Ev();
extern void _ZN5S58C73v48Ev();
extern void _ZN5S58C73v49Ev();
extern void _ZN5S58C73v50Ev();
extern void _ZN5S58C73v51Ev();
extern void _ZN5S58C73v52Ev();
extern void _ZN5S58C73v53Ev();
extern void _ZN5S58C73v54Ev();
extern void _ZN5S58C73v55Ev();
extern void _ZN5S58C73v56Ev();
extern void _ZN5S58C73v57Ev();
extern void _ZN5S58C73v58Ev();
extern void _ZN5S58C73v59Ev();
extern void _ZN5S58C73v60Ev();
extern void _ZN5S58C73v61Ev();
extern void _ZN5S58C73v62Ev();
extern void _ZN5S58C73v63Ev();
extern void _ZN5S58C73v64Ev();
extern void _ZN5S58C73v65Ev();
extern void _ZN5S58C73v66Ev();
extern void _ZN5S58C63v67Ev();
extern void _ZN5S58C63v68Ev();
extern void _ZN5S58C63v69Ev();
extern void _ZN5S58C63v70Ev();
extern void _ZN5S58C63v71Ev();
extern void _ZN5S58C63v72Ev();
extern void _ZN5S58C63v73Ev();
extern void _ZN5S58C63v74Ev();
extern void _ZN5S58C63v75Ev();
extern void _ZN5S58C63v76Ev();
extern void _ZN5S58C63v77Ev();
extern void _ZN5S58C63v78Ev();
extern void _ZN5S58C63v79Ev();
extern void _ZN5S58C63v80Ev();
extern void _ZN5S58C63v81Ev();
extern void _ZN5S58C63v82Ev();
extern void _ZN5S58C63v83Ev();
extern void _ZN5S58C63v84Ev();
extern void _ZN5S58C63v85Ev();
extern void _ZN5S58C63v86Ev();
extern void _ZN5S58C63v87Ev();
extern void _ZN5S58C63v88Ev();
static  VTBL_ENTRY vtc_S58C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S58C6[0]),
  (VTBL_ENTRY)&_ZN5S58C6D1Ev,
  (VTBL_ENTRY)&_ZN5S58C6D0Ev,
  (VTBL_ENTRY)&_ZN5S58C72v3Ev,
  (VTBL_ENTRY)&_ZN5S58C72v4Ev,
  (VTBL_ENTRY)&_ZN5S58C72v5Ev,
  (VTBL_ENTRY)&_ZN5S58C72v6Ev,
  (VTBL_ENTRY)&_ZN5S58C72v7Ev,
  (VTBL_ENTRY)&_ZN5S58C72v8Ev,
  (VTBL_ENTRY)&_ZN5S58C72v9Ev,
  (VTBL_ENTRY)&_ZN5S58C73v10Ev,
  (VTBL_ENTRY)&_ZN5S58C73v11Ev,
  (VTBL_ENTRY)&_ZN5S58C73v12Ev,
  (VTBL_ENTRY)&_ZN5S58C73v13Ev,
  (VTBL_ENTRY)&_ZN5S58C73v14Ev,
  (VTBL_ENTRY)&_ZN5S58C73v15Ev,
  (VTBL_ENTRY)&_ZN5S58C73v16Ev,
  (VTBL_ENTRY)&_ZN5S58C73v17Ev,
  (VTBL_ENTRY)&_ZN5S58C73v18Ev,
  (VTBL_ENTRY)&_ZN5S58C73v19Ev,
  (VTBL_ENTRY)&_ZN5S58C73v20Ev,
  (VTBL_ENTRY)&_ZN5S58C73v21Ev,
  (VTBL_ENTRY)&_ZN5S58C73v22Ev,
  (VTBL_ENTRY)&_ZN5S58C73v23Ev,
  (VTBL_ENTRY)&_ZN5S58C73v24Ev,
  (VTBL_ENTRY)&_ZN5S58C73v25Ev,
  (VTBL_ENTRY)&_ZN5S58C73v26Ev,
  (VTBL_ENTRY)&_ZN5S58C73v27Ev,
  (VTBL_ENTRY)&_ZN5S58C73v28Ev,
  (VTBL_ENTRY)&_ZN5S58C73v29Ev,
  (VTBL_ENTRY)&_ZN5S58C73v30Ev,
  (VTBL_ENTRY)&_ZN5S58C73v31Ev,
  (VTBL_ENTRY)&_ZN5S58C73v32Ev,
  (VTBL_ENTRY)&_ZN5S58C73v33Ev,
  (VTBL_ENTRY)&_ZN5S58C73v34Ev,
  (VTBL_ENTRY)&_ZN5S58C73v35Ev,
  (VTBL_ENTRY)&_ZN5S58C73v36Ev,
  (VTBL_ENTRY)&_ZN5S58C73v37Ev,
  (VTBL_ENTRY)&_ZN5S58C73v38Ev,
  (VTBL_ENTRY)&_ZN5S58C73v39Ev,
  (VTBL_ENTRY)&_ZN5S58C73v40Ev,
  (VTBL_ENTRY)&_ZN5S58C73v41Ev,
  (VTBL_ENTRY)&_ZN5S58C73v42Ev,
  (VTBL_ENTRY)&_ZN5S58C73v43Ev,
  (VTBL_ENTRY)&_ZN5S58C73v44Ev,
  (VTBL_ENTRY)&_ZN5S58C73v45Ev,
  (VTBL_ENTRY)&_ZN5S58C73v46Ev,
  (VTBL_ENTRY)&_ZN5S58C73v47Ev,
  (VTBL_ENTRY)&_ZN5S58C73v48Ev,
  (VTBL_ENTRY)&_ZN5S58C73v49Ev,
  (VTBL_ENTRY)&_ZN5S58C73v50Ev,
  (VTBL_ENTRY)&_ZN5S58C73v51Ev,
  (VTBL_ENTRY)&_ZN5S58C73v52Ev,
  (VTBL_ENTRY)&_ZN5S58C73v53Ev,
  (VTBL_ENTRY)&_ZN5S58C73v54Ev,
  (VTBL_ENTRY)&_ZN5S58C73v55Ev,
  (VTBL_ENTRY)&_ZN5S58C73v56Ev,
  (VTBL_ENTRY)&_ZN5S58C73v57Ev,
  (VTBL_ENTRY)&_ZN5S58C73v58Ev,
  (VTBL_ENTRY)&_ZN5S58C73v59Ev,
  (VTBL_ENTRY)&_ZN5S58C73v60Ev,
  (VTBL_ENTRY)&_ZN5S58C73v61Ev,
  (VTBL_ENTRY)&_ZN5S58C73v62Ev,
  (VTBL_ENTRY)&_ZN5S58C73v63Ev,
  (VTBL_ENTRY)&_ZN5S58C73v64Ev,
  (VTBL_ENTRY)&_ZN5S58C73v65Ev,
  (VTBL_ENTRY)&_ZN5S58C73v66Ev,
  (VTBL_ENTRY)&_ZN5S58C63v67Ev,
  (VTBL_ENTRY)&_ZN5S58C63v68Ev,
  (VTBL_ENTRY)&_ZN5S58C63v69Ev,
  (VTBL_ENTRY)&_ZN5S58C63v70Ev,
  (VTBL_ENTRY)&_ZN5S58C63v71Ev,
  (VTBL_ENTRY)&_ZN5S58C63v72Ev,
  (VTBL_ENTRY)&_ZN5S58C63v73Ev,
  (VTBL_ENTRY)&_ZN5S58C63v74Ev,
  (VTBL_ENTRY)&_ZN5S58C63v75Ev,
  (VTBL_ENTRY)&_ZN5S58C63v76Ev,
  (VTBL_ENTRY)&_ZN5S58C63v77Ev,
  (VTBL_ENTRY)&_ZN5S58C63v78Ev,
  (VTBL_ENTRY)&_ZN5S58C63v79Ev,
  (VTBL_ENTRY)&_ZN5S58C63v80Ev,
  (VTBL_ENTRY)&_ZN5S58C63v81Ev,
  (VTBL_ENTRY)&_ZN5S58C63v82Ev,
  (VTBL_ENTRY)&_ZN5S58C63v83Ev,
  (VTBL_ENTRY)&_ZN5S58C63v84Ev,
  (VTBL_ENTRY)&_ZN5S58C63v85Ev,
  (VTBL_ENTRY)&_ZN5S58C63v86Ev,
  (VTBL_ENTRY)&_ZN5S58C63v87Ev,
  (VTBL_ENTRY)&_ZN5S58C63v88Ev,
};
extern VTBL_ENTRY _ZTI5S58C6[];
extern  VTBL_ENTRY _ZTV5S58C6[];
Class_Descriptor cd_S58C6 = {  "S58C6", // class name
  bases_S58C6, 1,
  &(vtc_S58C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI5S58C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S58C6),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S58C5  : S58C6 {
  unsigned int s58c5f0:1;
  unsigned int s58c5f1:1;
  unsigned int s58c5f2:1;
  ::S3350C17 s58c5f3;
  ::S3350C11 s58c5f4;
  ::S3350C5_nt s58c5f5;
  ::S287C27 s58c5f6;
  int s58c5f7[3];
  virtual  ~S58C5(); // _ZN5S58C5D1Ev
  virtual void  v89(); // _ZN5S58C53v89Ev
  virtual void  v90(); // _ZN5S58C53v90Ev
  virtual void  v91(); // _ZN5S58C53v91Ev
  virtual void  v92(); // _ZN5S58C53v92Ev
  virtual void  v93(); // _ZN5S58C53v93Ev
  virtual void  v94(); // _ZN5S58C53v94Ev
  virtual void  v95(); // _ZN5S58C53v95Ev
  virtual void  v96(); // _ZN5S58C53v96Ev
  virtual void  v97(); // _ZN5S58C53v97Ev
  virtual void  v98(); // _ZN5S58C53v98Ev
  virtual void  v99(); // _ZN5S58C53v99Ev
  virtual void  v100(); // _ZN5S58C54v100Ev
  virtual void  v101(); // _ZN5S58C54v101Ev
  virtual void  v102(); // _ZN5S58C54v102Ev
  virtual void  v103(); // _ZN5S58C54v103Ev
  virtual void  v104(); // _ZN5S58C54v104Ev
  virtual void  v105(); // _ZN5S58C54v105Ev
  virtual void  v106(); // _ZN5S58C54v106Ev
  virtual void  v107(); // _ZN5S58C54v107Ev
  virtual void  v108(); // _ZN5S58C54v108Ev
  S58C5(); // tgen
};
//SIG(-1 S58C5) C1{ BC2{ BC3{ vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 FC10{ BC11{ BC8}} FC12{ BC13{ BC8}} FC14{ BC15{ BC8}} FC16{ BC17{ BC8}} Fi[3]}


 S58C5 ::~S58C5(){ note_dtor("S58C5", this);}
void  S58C5 ::v89(){vfunc_called(this, "_ZN5S58C53v89Ev");}
void  S58C5 ::v90(){vfunc_called(this, "_ZN5S58C53v90Ev");}
void  S58C5 ::v91(){vfunc_called(this, "_ZN5S58C53v91Ev");}
void  S58C5 ::v92(){vfunc_called(this, "_ZN5S58C53v92Ev");}
void  S58C5 ::v93(){vfunc_called(this, "_ZN5S58C53v93Ev");}
void  S58C5 ::v94(){vfunc_called(this, "_ZN5S58C53v94Ev");}
void  S58C5 ::v95(){vfunc_called(this, "_ZN5S58C53v95Ev");}
void  S58C5 ::v96(){vfunc_called(this, "_ZN5S58C53v96Ev");}
void  S58C5 ::v97(){vfunc_called(this, "_ZN5S58C53v97Ev");}
void  S58C5 ::v98(){vfunc_called(this, "_ZN5S58C53v98Ev");}
void  S58C5 ::v99(){vfunc_called(this, "_ZN5S58C53v99Ev");}
void  S58C5 ::v100(){vfunc_called(this, "_ZN5S58C54v100Ev");}
void  S58C5 ::v101(){vfunc_called(this, "_ZN5S58C54v101Ev");}
void  S58C5 ::v102(){vfunc_called(this, "_ZN5S58C54v102Ev");}
void  S58C5 ::v103(){vfunc_called(this, "_ZN5S58C54v103Ev");}
void  S58C5 ::v104(){vfunc_called(this, "_ZN5S58C54v104Ev");}
void  S58C5 ::v105(){vfunc_called(this, "_ZN5S58C54v105Ev");}
void  S58C5 ::v106(){vfunc_called(this, "_ZN5S58C54v106Ev");}
void  S58C5 ::v107(){vfunc_called(this, "_ZN5S58C54v107Ev");}
void  S58C5 ::v108(){vfunc_called(this, "_ZN5S58C54v108Ev");}
S58C5 ::S58C5(){ note_ctor("S58C5", this);} // tgen

static void Test_S58C5()
{
  extern Class_Descriptor cd_S58C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S58C5, buf);
    S58C5 *dp, &lv = *(dp=new (buf) S58C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S58C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S58C5)");
    check_base_class_offset(lv, (S58C7*)(S58C6*), 0, "S58C5");
    check_base_class_offset(lv, (S58C6*), 0, "S58C5");
    set_bf_and_test(lv, s58c5f0, ABISELECT(188,132), 0, 1, 1, "S58C5");
    set_bf_and_test(lv, s58c5f1, ABISELECT(188,132), 1, 1, 1, "S58C5");
    set_bf_and_test(lv, s58c5f2, ABISELECT(188,132), 2, 1, 1, "S58C5");
    check_field_offset(lv, s58c5f3, ABISELECT(192,136), "S58C5.s58c5f3");
    check_field_offset(lv, s58c5f4, ABISELECT(208,148), "S58C5.s58c5f4");
    check_field_offset(lv, s58c5f5, ABISELECT(224,160), "S58C5.s58c5f5");
    check_field_offset(lv, s58c5f6, ABISELECT(240,172), "S58C5.s58c5f6");
    check_field_offset(lv, s58c5f7, ABISELECT(256,184), "S58C5.s58c5f7");
    test_class_info(&lv, &cd_S58C5);
    dp->~S58C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS58C5(Test_S58C5, "S58C5", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN5S58C5C1Ev();
extern void _ZN5S58C5D1Ev();
Name_Map name_map_S58C5[] = {
  NSPAIR(_ZN5S58C5C1Ev),
  NSPAIR(_ZN5S58C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S58C7;
extern VTBL_ENTRY _ZTI5S58C7[];
extern  VTBL_ENTRY _ZTV5S58C7[];
extern Class_Descriptor cd_S58C6;
extern VTBL_ENTRY _ZTI5S58C6[];
extern  VTBL_ENTRY _ZTV5S58C6[];
static Base_Class bases_S58C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S58C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S58C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S58C5[];
extern void _ZN5S58C5D1Ev();
extern void _ZN5S58C5D0Ev();
extern void _ZN5S58C72v3Ev();
extern void _ZN5S58C72v4Ev();
extern void _ZN5S58C72v5Ev();
extern void _ZN5S58C72v6Ev();
extern void _ZN5S58C72v7Ev();
extern void _ZN5S58C72v8Ev();
extern void _ZN5S58C72v9Ev();
extern void _ZN5S58C73v10Ev();
extern void _ZN5S58C73v11Ev();
extern void _ZN5S58C73v12Ev();
extern void _ZN5S58C73v13Ev();
extern void _ZN5S58C73v14Ev();
extern void _ZN5S58C73v15Ev();
extern void _ZN5S58C73v16Ev();
extern void _ZN5S58C73v17Ev();
extern void _ZN5S58C73v18Ev();
extern void _ZN5S58C73v19Ev();
extern void _ZN5S58C73v20Ev();
extern void _ZN5S58C73v21Ev();
extern void _ZN5S58C73v22Ev();
extern void _ZN5S58C73v23Ev();
extern void _ZN5S58C73v24Ev();
extern void _ZN5S58C73v25Ev();
extern void _ZN5S58C73v26Ev();
extern void _ZN5S58C73v27Ev();
extern void _ZN5S58C73v28Ev();
extern void _ZN5S58C73v29Ev();
extern void _ZN5S58C73v30Ev();
extern void _ZN5S58C73v31Ev();
extern void _ZN5S58C73v32Ev();
extern void _ZN5S58C73v33Ev();
extern void _ZN5S58C73v34Ev();
extern void _ZN5S58C73v35Ev();
extern void _ZN5S58C73v36Ev();
extern void _ZN5S58C73v37Ev();
extern void _ZN5S58C73v38Ev();
extern void _ZN5S58C73v39Ev();
extern void _ZN5S58C73v40Ev();
extern void _ZN5S58C73v41Ev();
extern void _ZN5S58C73v42Ev();
extern void _ZN5S58C73v43Ev();
extern void _ZN5S58C73v44Ev();
extern void _ZN5S58C73v45Ev();
extern void _ZN5S58C73v46Ev();
extern void _ZN5S58C73v47Ev();
extern void _ZN5S58C73v48Ev();
extern void _ZN5S58C73v49Ev();
extern void _ZN5S58C73v50Ev();
extern void _ZN5S58C73v51Ev();
extern void _ZN5S58C73v52Ev();
extern void _ZN5S58C73v53Ev();
extern void _ZN5S58C73v54Ev();
extern void _ZN5S58C73v55Ev();
extern void _ZN5S58C73v56Ev();
extern void _ZN5S58C73v57Ev();
extern void _ZN5S58C73v58Ev();
extern void _ZN5S58C73v59Ev();
extern void _ZN5S58C73v60Ev();
extern void _ZN5S58C73v61Ev();
extern void _ZN5S58C73v62Ev();
extern void _ZN5S58C73v63Ev();
extern void _ZN5S58C73v64Ev();
extern void _ZN5S58C73v65Ev();
extern void _ZN5S58C73v66Ev();
extern void _ZN5S58C63v67Ev();
extern void _ZN5S58C63v68Ev();
extern void _ZN5S58C63v69Ev();
extern void _ZN5S58C63v70Ev();
extern void _ZN5S58C63v71Ev();
extern void _ZN5S58C63v72Ev();
extern void _ZN5S58C63v73Ev();
extern void _ZN5S58C63v74Ev();
extern void _ZN5S58C63v75Ev();
extern void _ZN5S58C63v76Ev();
extern void _ZN5S58C63v77Ev();
extern void _ZN5S58C63v78Ev();
extern void _ZN5S58C63v79Ev();
extern void _ZN5S58C63v80Ev();
extern void _ZN5S58C63v81Ev();
extern void _ZN5S58C63v82Ev();
extern void _ZN5S58C63v83Ev();
extern void _ZN5S58C63v84Ev();
extern void _ZN5S58C63v85Ev();
extern void _ZN5S58C63v86Ev();
extern void _ZN5S58C63v87Ev();
extern void _ZN5S58C63v88Ev();
extern void _ZN5S58C53v89Ev();
extern void _ZN5S58C53v90Ev();
extern void _ZN5S58C53v91Ev();
extern void _ZN5S58C53v92Ev();
extern void _ZN5S58C53v93Ev();
extern void _ZN5S58C53v94Ev();
extern void _ZN5S58C53v95Ev();
extern void _ZN5S58C53v96Ev();
extern void _ZN5S58C53v97Ev();
extern void _ZN5S58C53v98Ev();
extern void _ZN5S58C53v99Ev();
extern void _ZN5S58C54v100Ev();
extern void _ZN5S58C54v101Ev();
extern void _ZN5S58C54v102Ev();
extern void _ZN5S58C54v103Ev();
extern void _ZN5S58C54v104Ev();
extern void _ZN5S58C54v105Ev();
extern void _ZN5S58C54v106Ev();
extern void _ZN5S58C54v107Ev();
extern void _ZN5S58C54v108Ev();
static  VTBL_ENTRY vtc_S58C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S58C5[0]),
  (VTBL_ENTRY)&_ZN5S58C5D1Ev,
  (VTBL_ENTRY)&_ZN5S58C5D0Ev,
  (VTBL_ENTRY)&_ZN5S58C72v3Ev,
  (VTBL_ENTRY)&_ZN5S58C72v4Ev,
  (VTBL_ENTRY)&_ZN5S58C72v5Ev,
  (VTBL_ENTRY)&_ZN5S58C72v6Ev,
  (VTBL_ENTRY)&_ZN5S58C72v7Ev,
  (VTBL_ENTRY)&_ZN5S58C72v8Ev,
  (VTBL_ENTRY)&_ZN5S58C72v9Ev,
  (VTBL_ENTRY)&_ZN5S58C73v10Ev,
  (VTBL_ENTRY)&_ZN5S58C73v11Ev,
  (VTBL_ENTRY)&_ZN5S58C73v12Ev,
  (VTBL_ENTRY)&_ZN5S58C73v13Ev,
  (VTBL_ENTRY)&_ZN5S58C73v14Ev,
  (VTBL_ENTRY)&_ZN5S58C73v15Ev,
  (VTBL_ENTRY)&_ZN5S58C73v16Ev,
  (VTBL_ENTRY)&_ZN5S58C73v17Ev,
  (VTBL_ENTRY)&_ZN5S58C73v18Ev,
  (VTBL_ENTRY)&_ZN5S58C73v19Ev,
  (VTBL_ENTRY)&_ZN5S58C73v20Ev,
  (VTBL_ENTRY)&_ZN5S58C73v21Ev,
  (VTBL_ENTRY)&_ZN5S58C73v22Ev,
  (VTBL_ENTRY)&_ZN5S58C73v23Ev,
  (VTBL_ENTRY)&_ZN5S58C73v24Ev,
  (VTBL_ENTRY)&_ZN5S58C73v25Ev,
  (VTBL_ENTRY)&_ZN5S58C73v26Ev,
  (VTBL_ENTRY)&_ZN5S58C73v27Ev,
  (VTBL_ENTRY)&_ZN5S58C73v28Ev,
  (VTBL_ENTRY)&_ZN5S58C73v29Ev,
  (VTBL_ENTRY)&_ZN5S58C73v30Ev,
  (VTBL_ENTRY)&_ZN5S58C73v31Ev,
  (VTBL_ENTRY)&_ZN5S58C73v32Ev,
  (VTBL_ENTRY)&_ZN5S58C73v33Ev,
  (VTBL_ENTRY)&_ZN5S58C73v34Ev,
  (VTBL_ENTRY)&_ZN5S58C73v35Ev,
  (VTBL_ENTRY)&_ZN5S58C73v36Ev,
  (VTBL_ENTRY)&_ZN5S58C73v37Ev,
  (VTBL_ENTRY)&_ZN5S58C73v38Ev,
  (VTBL_ENTRY)&_ZN5S58C73v39Ev,
  (VTBL_ENTRY)&_ZN5S58C73v40Ev,
  (VTBL_ENTRY)&_ZN5S58C73v41Ev,
  (VTBL_ENTRY)&_ZN5S58C73v42Ev,
  (VTBL_ENTRY)&_ZN5S58C73v43Ev,
  (VTBL_ENTRY)&_ZN5S58C73v44Ev,
  (VTBL_ENTRY)&_ZN5S58C73v45Ev,
  (VTBL_ENTRY)&_ZN5S58C73v46Ev,
  (VTBL_ENTRY)&_ZN5S58C73v47Ev,
  (VTBL_ENTRY)&_ZN5S58C73v48Ev,
  (VTBL_ENTRY)&_ZN5S58C73v49Ev,
  (VTBL_ENTRY)&_ZN5S58C73v50Ev,
  (VTBL_ENTRY)&_ZN5S58C73v51Ev,
  (VTBL_ENTRY)&_ZN5S58C73v52Ev,
  (VTBL_ENTRY)&_ZN5S58C73v53Ev,
  (VTBL_ENTRY)&_ZN5S58C73v54Ev,
  (VTBL_ENTRY)&_ZN5S58C73v55Ev,
  (VTBL_ENTRY)&_ZN5S58C73v56Ev,
  (VTBL_ENTRY)&_ZN5S58C73v57Ev,
  (VTBL_ENTRY)&_ZN5S58C73v58Ev,
  (VTBL_ENTRY)&_ZN5S58C73v59Ev,
  (VTBL_ENTRY)&_ZN5S58C73v60Ev,
  (VTBL_ENTRY)&_ZN5S58C73v61Ev,
  (VTBL_ENTRY)&_ZN5S58C73v62Ev,
  (VTBL_ENTRY)&_ZN5S58C73v63Ev,
  (VTBL_ENTRY)&_ZN5S58C73v64Ev,
  (VTBL_ENTRY)&_ZN5S58C73v65Ev,
  (VTBL_ENTRY)&_ZN5S58C73v66Ev,
  (VTBL_ENTRY)&_ZN5S58C63v67Ev,
  (VTBL_ENTRY)&_ZN5S58C63v68Ev,
  (VTBL_ENTRY)&_ZN5S58C63v69Ev,
  (VTBL_ENTRY)&_ZN5S58C63v70Ev,
  (VTBL_ENTRY)&_ZN5S58C63v71Ev,
  (VTBL_ENTRY)&_ZN5S58C63v72Ev,
  (VTBL_ENTRY)&_ZN5S58C63v73Ev,
  (VTBL_ENTRY)&_ZN5S58C63v74Ev,
  (VTBL_ENTRY)&_ZN5S58C63v75Ev,
  (VTBL_ENTRY)&_ZN5S58C63v76Ev,
  (VTBL_ENTRY)&_ZN5S58C63v77Ev,
  (VTBL_ENTRY)&_ZN5S58C63v78Ev,
  (VTBL_ENTRY)&_ZN5S58C63v79Ev,
  (VTBL_ENTRY)&_ZN5S58C63v80Ev,
  (VTBL_ENTRY)&_ZN5S58C63v81Ev,
  (VTBL_ENTRY)&_ZN5S58C63v82Ev,
  (VTBL_ENTRY)&_ZN5S58C63v83Ev,
  (VTBL_ENTRY)&_ZN5S58C63v84Ev,
  (VTBL_ENTRY)&_ZN5S58C63v85Ev,
  (VTBL_ENTRY)&_ZN5S58C63v86Ev,
  (VTBL_ENTRY)&_ZN5S58C63v87Ev,
  (VTBL_ENTRY)&_ZN5S58C63v88Ev,
  (VTBL_ENTRY)&_ZN5S58C53v89Ev,
  (VTBL_ENTRY)&_ZN5S58C53v90Ev,
  (VTBL_ENTRY)&_ZN5S58C53v91Ev,
  (VTBL_ENTRY)&_ZN5S58C53v92Ev,
  (VTBL_ENTRY)&_ZN5S58C53v93Ev,
  (VTBL_ENTRY)&_ZN5S58C53v94Ev,
  (VTBL_ENTRY)&_ZN5S58C53v95Ev,
  (VTBL_ENTRY)&_ZN5S58C53v96Ev,
  (VTBL_ENTRY)&_ZN5S58C53v97Ev,
  (VTBL_ENTRY)&_ZN5S58C53v98Ev,
  (VTBL_ENTRY)&_ZN5S58C53v99Ev,
  (VTBL_ENTRY)&_ZN5S58C54v100Ev,
  (VTBL_ENTRY)&_ZN5S58C54v101Ev,
  (VTBL_ENTRY)&_ZN5S58C54v102Ev,
  (VTBL_ENTRY)&_ZN5S58C54v103Ev,
  (VTBL_ENTRY)&_ZN5S58C54v104Ev,
  (VTBL_ENTRY)&_ZN5S58C54v105Ev,
  (VTBL_ENTRY)&_ZN5S58C54v106Ev,
  (VTBL_ENTRY)&_ZN5S58C54v107Ev,
  (VTBL_ENTRY)&_ZN5S58C54v108Ev,
};
extern VTBL_ENTRY _ZTI5S58C5[];
extern  VTBL_ENTRY _ZTV5S58C5[];
Class_Descriptor cd_S58C5 = {  "S58C5", // class name
  bases_S58C5, 2,
  &(vtc_S58C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI5S58C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S58C5),110, //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  S58C4  : S58C5 {
  void *s58c4f0[2];
  int s58c4f1[4];
  unsigned int s58c4f2:1;
  unsigned int s58c4f3:1;
  unsigned int s58c4f4:1;
  char s58c4f5;
  int s58c4f6;
  unsigned int s58c4f7:1;
  ::S287C23 s58c4f8;
  virtual  ~S58C4(); // _ZN5S58C4D1Ev
  virtual void  v109(); // _ZN5S58C44v109Ev
  virtual void  v110(); // _ZN5S58C44v110Ev
  virtual void  v111(); // _ZN5S58C44v111Ev
  virtual void  v112(); // _ZN5S58C44v112Ev
  virtual void  v113(); // _ZN5S58C44v113Ev
  virtual void  v114(); // _ZN5S58C44v114Ev
  virtual void  v115(); // _ZN5S58C44v115Ev
  virtual void  v116(); // _ZN5S58C44v116Ev
  virtual void  v117(); // _ZN5S58C44v117Ev
  virtual void  v118(); // _ZN5S58C44v118Ev
  virtual void  v119(); // _ZN5S58C44v119Ev
  virtual void  v120(); // _ZN5S58C44v120Ev
  virtual void  v121(); // _ZN5S58C44v121Ev
  virtual void  v122(); // _ZN5S58C44v122Ev
  S58C4(); // tgen
};
//SIG(-1 S58C4) C1{ BC2{ BC3{ BC4{ 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 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 Fi:1 Fi:1 Fi:1 FC11{ BC12{ BC9}} FC13{ BC14{ BC9}} FC15{ BC16{ BC9}} FC17{ BC18{ BC9}} Fi[3]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC19{ BC20{ BC9}}}


 S58C4 ::~S58C4(){ note_dtor("S58C4", this);}
void  S58C4 ::v109(){vfunc_called(this, "_ZN5S58C44v109Ev");}
void  S58C4 ::v110(){vfunc_called(this, "_ZN5S58C44v110Ev");}
void  S58C4 ::v111(){vfunc_called(this, "_ZN5S58C44v111Ev");}
void  S58C4 ::v112(){vfunc_called(this, "_ZN5S58C44v112Ev");}
void  S58C4 ::v113(){vfunc_called(this, "_ZN5S58C44v113Ev");}
void  S58C4 ::v114(){vfunc_called(this, "_ZN5S58C44v114Ev");}
void  S58C4 ::v115(){vfunc_called(this, "_ZN5S58C44v115Ev");}
void  S58C4 ::v116(){vfunc_called(this, "_ZN5S58C44v116Ev");}
void  S58C4 ::v117(){vfunc_called(this, "_ZN5S58C44v117Ev");}
void  S58C4 ::v118(){vfunc_called(this, "_ZN5S58C44v118Ev");}
void  S58C4 ::v119(){vfunc_called(this, "_ZN5S58C44v119Ev");}
void  S58C4 ::v120(){vfunc_called(this, "_ZN5S58C44v120Ev");}
void  S58C4 ::v121(){vfunc_called(this, "_ZN5S58C44v121Ev");}
void  S58C4 ::v122(){vfunc_called(this, "_ZN5S58C44v122Ev");}
S58C4 ::S58C4(){ note_ctor("S58C4", this);} // tgen

static void Test_S58C4()
{
  extern Class_Descriptor cd_S58C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(43,62)];
    init_test(&cd_S58C4, buf);
    S58C4 *dp, &lv = *(dp=new (buf) S58C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,244), "sizeof(S58C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S58C4)");
    check_base_class_offset(lv, (S58C7*)(S58C6*)(S58C5*), 0, "S58C4");
    check_base_class_offset(lv, (S58C6*)(S58C5*), 0, "S58C4");
    check_base_class_offset(lv, (S58C5*), 0, "S58C4");
    check_field_offset(lv, s58c4f0, ABISELECT(272,196), "S58C4.s58c4f0");
    check_field_offset(lv, s58c4f1, ABISELECT(288,204), "S58C4.s58c4f1");
    set_bf_and_test(lv, s58c4f2, ABISELECT(304,220), 0, 1, 1, "S58C4");
    set_bf_and_test(lv, s58c4f3, ABISELECT(304,220), 1, 1, 1, "S58C4");
    set_bf_and_test(lv, s58c4f4, ABISELECT(304,220), 2, 1, 1, "S58C4");
    check_field_offset(lv, s58c4f5, ABISELECT(305,221), "S58C4.s58c4f5");
    check_field_offset(lv, s58c4f6, ABISELECT(308,224), "S58C4.s58c4f6");
    set_bf_and_test(lv, s58c4f7, ABISELECT(312,228), 0, 1, 1, "S58C4");
    check_field_offset(lv, s58c4f8, ABISELECT(320,232), "S58C4.s58c4f8");
    test_class_info(&lv, &cd_S58C4);
    dp->~S58C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS58C4(Test_S58C4, "S58C4", ABISELECT(336,244));

#else // __cplusplus

extern void _ZN5S58C4C1Ev();
extern void _ZN5S58C4D1Ev();
Name_Map name_map_S58C4[] = {
  NSPAIR(_ZN5S58C4C1Ev),
  NSPAIR(_ZN5S58C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S58C7;
extern VTBL_ENTRY _ZTI5S58C7[];
extern  VTBL_ENTRY _ZTV5S58C7[];
extern Class_Descriptor cd_S58C6;
extern VTBL_ENTRY _ZTI5S58C6[];
extern  VTBL_ENTRY _ZTV5S58C6[];
extern Class_Descriptor cd_S58C5;
extern VTBL_ENTRY _ZTI5S58C5[];
extern  VTBL_ENTRY _ZTV5S58C5[];
static Base_Class bases_S58C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S58C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S58C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S58C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S58C4[];
extern void _ZN5S58C4D1Ev();
extern void _ZN5S58C4D0Ev();
extern void _ZN5S58C72v3Ev();
extern void _ZN5S58C72v4Ev();
extern void _ZN5S58C72v5Ev();
extern void _ZN5S58C72v6Ev();
extern void _ZN5S58C72v7Ev();
extern void _ZN5S58C72v8Ev();
extern void _ZN5S58C72v9Ev();
extern void _ZN5S58C73v10Ev();
extern void _ZN5S58C73v11Ev();
extern void _ZN5S58C73v12Ev();
extern void _ZN5S58C73v13Ev();
extern void _ZN5S58C73v14Ev();
extern void _ZN5S58C73v15Ev();
extern void _ZN5S58C73v16Ev();
extern void _ZN5S58C73v17Ev();
extern void _ZN5S58C73v18Ev();
extern void _ZN5S58C73v19Ev();
extern void _ZN5S58C73v20Ev();
extern void _ZN5S58C73v21Ev();
extern void _ZN5S58C73v22Ev();
extern void _ZN5S58C73v23Ev();
extern void _ZN5S58C73v24Ev();
extern void _ZN5S58C73v25Ev();
extern void _ZN5S58C73v26Ev();
extern void _ZN5S58C73v27Ev();
extern void _ZN5S58C73v28Ev();
extern void _ZN5S58C73v29Ev();
extern void _ZN5S58C73v30Ev();
extern void _ZN5S58C73v31Ev();
extern void _ZN5S58C73v32Ev();
extern void _ZN5S58C73v33Ev();
extern void _ZN5S58C73v34Ev();
extern void _ZN5S58C73v35Ev();
extern void _ZN5S58C73v36Ev();
extern void _ZN5S58C73v37Ev();
extern void _ZN5S58C73v38Ev();
extern void _ZN5S58C73v39Ev();
extern void _ZN5S58C73v40Ev();
extern void _ZN5S58C73v41Ev();
extern void _ZN5S58C73v42Ev();
extern void _ZN5S58C73v43Ev();
extern void _ZN5S58C73v44Ev();
extern void _ZN5S58C73v45Ev();
extern void _ZN5S58C73v46Ev();
extern void _ZN5S58C73v47Ev();
extern void _ZN5S58C73v48Ev();
extern void _ZN5S58C73v49Ev();
extern void _ZN5S58C73v50Ev();
extern void _ZN5S58C73v51Ev();
extern void _ZN5S58C73v52Ev();
extern void _ZN5S58C73v53Ev();
extern void _ZN5S58C73v54Ev();
extern void _ZN5S58C73v55Ev();
extern void _ZN5S58C73v56Ev();
extern void _ZN5S58C73v57Ev();
extern void _ZN5S58C73v58Ev();
extern void _ZN5S58C73v59Ev();
extern void _ZN5S58C73v60Ev();
extern void _ZN5S58C73v61Ev();
extern void _ZN5S58C73v62Ev();
extern void _ZN5S58C73v63Ev();
extern void _ZN5S58C73v64Ev();
extern void _ZN5S58C73v65Ev();
extern void _ZN5S58C73v66Ev();
extern void _ZN5S58C63v67Ev();
extern void _ZN5S58C63v68Ev();
extern void _ZN5S58C63v69Ev();
extern void _ZN5S58C63v70Ev();
extern void _ZN5S58C63v71Ev();
extern void _ZN5S58C63v72Ev();
extern void _ZN5S58C63v73Ev();
extern void _ZN5S58C63v74Ev();
extern void _ZN5S58C63v75Ev();
extern void _ZN5S58C63v76Ev();
extern void _ZN5S58C63v77Ev();
extern void _ZN5S58C63v78Ev();
extern void _ZN5S58C63v79Ev();
extern void _ZN5S58C63v80Ev();
extern void _ZN5S58C63v81Ev();
extern void _ZN5S58C63v82Ev();
extern void _ZN5S58C63v83Ev();
extern void _ZN5S58C63v84Ev();
extern void _ZN5S58C63v85Ev();
extern void _ZN5S58C63v86Ev();
extern void _ZN5S58C63v87Ev();
extern void _ZN5S58C63v88Ev();
extern void _ZN5S58C53v89Ev();
extern void _ZN5S58C53v90Ev();
extern void _ZN5S58C53v91Ev();
extern void _ZN5S58C53v92Ev();
extern void _ZN5S58C53v93Ev();
extern void _ZN5S58C53v94Ev();
extern void _ZN5S58C53v95Ev();
extern void _ZN5S58C53v96Ev();
extern void _ZN5S58C53v97Ev();
extern void _ZN5S58C53v98Ev();
extern void _ZN5S58C53v99Ev();
extern void _ZN5S58C54v100Ev();
extern void _ZN5S58C54v101Ev();
extern void _ZN5S58C54v102Ev();
extern void _ZN5S58C54v103Ev();
extern void _ZN5S58C54v104Ev();
extern void _ZN5S58C54v105Ev();
extern void _ZN5S58C54v106Ev();
extern void _ZN5S58C54v107Ev();
extern void _ZN5S58C54v108Ev();
extern void _ZN5S58C44v109Ev();
extern void _ZN5S58C44v110Ev();
extern void _ZN5S58C44v111Ev();
extern void _ZN5S58C44v112Ev();
extern void _ZN5S58C44v113Ev();
extern void _ZN5S58C44v114Ev();
extern void _ZN5S58C44v115Ev();
extern void _ZN5S58C44v116Ev();
extern void _ZN5S58C44v117Ev();
extern void _ZN5S58C44v118Ev();
extern void _ZN5S58C44v119Ev();
extern void _ZN5S58C44v120Ev();
extern void _ZN5S58C44v121Ev();
extern void _ZN5S58C44v122Ev();
static  VTBL_ENTRY vtc_S58C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S58C4[0]),
  (VTBL_ENTRY)&_ZN5S58C4D1Ev,
  (VTBL_ENTRY)&_ZN5S58C4D0Ev,
  (VTBL_ENTRY)&_ZN5S58C72v3Ev,
  (VTBL_ENTRY)&_ZN5S58C72v4Ev,
  (VTBL_ENTRY)&_ZN5S58C72v5Ev,
  (VTBL_ENTRY)&_ZN5S58C72v6Ev,
  (VTBL_ENTRY)&_ZN5S58C72v7Ev,
  (VTBL_ENTRY)&_ZN5S58C72v8Ev,
  (VTBL_ENTRY)&_ZN5S58C72v9Ev,
  (VTBL_ENTRY)&_ZN5S58C73v10Ev,
  (VTBL_ENTRY)&_ZN5S58C73v11Ev,
  (VTBL_ENTRY)&_ZN5S58C73v12Ev,
  (VTBL_ENTRY)&_ZN5S58C73v13Ev,
  (VTBL_ENTRY)&_ZN5S58C73v14Ev,
  (VTBL_ENTRY)&_ZN5S58C73v15Ev,
  (VTBL_ENTRY)&_ZN5S58C73v16Ev,
  (VTBL_ENTRY)&_ZN5S58C73v17Ev,
  (VTBL_ENTRY)&_ZN5S58C73v18Ev,
  (VTBL_ENTRY)&_ZN5S58C73v19Ev,
  (VTBL_ENTRY)&_ZN5S58C73v20Ev,
  (VTBL_ENTRY)&_ZN5S58C73v21Ev,
  (VTBL_ENTRY)&_ZN5S58C73v22Ev,
  (VTBL_ENTRY)&_ZN5S58C73v23Ev,
  (VTBL_ENTRY)&_ZN5S58C73v24Ev,
  (VTBL_ENTRY)&_ZN5S58C73v25Ev,
  (VTBL_ENTRY)&_ZN5S58C73v26Ev,
  (VTBL_ENTRY)&_ZN5S58C73v27Ev,
  (VTBL_ENTRY)&_ZN5S58C73v28Ev,
  (VTBL_ENTRY)&_ZN5S58C73v29Ev,
  (VTBL_ENTRY)&_ZN5S58C73v30Ev,
  (VTBL_ENTRY)&_ZN5S58C73v31Ev,
  (VTBL_ENTRY)&_ZN5S58C73v32Ev,
  (VTBL_ENTRY)&_ZN5S58C73v33Ev,
  (VTBL_ENTRY)&_ZN5S58C73v34Ev,
  (VTBL_ENTRY)&_ZN5S58C73v35Ev,
  (VTBL_ENTRY)&_ZN5S58C73v36Ev,
  (VTBL_ENTRY)&_ZN5S58C73v37Ev,
  (VTBL_ENTRY)&_ZN5S58C73v38Ev,
  (VTBL_ENTRY)&_ZN5S58C73v39Ev,
  (VTBL_ENTRY)&_ZN5S58C73v40Ev,
  (VTBL_ENTRY)&_ZN5S58C73v41Ev,
  (VTBL_ENTRY)&_ZN5S58C73v42Ev,
  (VTBL_ENTRY)&_ZN5S58C73v43Ev,
  (VTBL_ENTRY)&_ZN5S58C73v44Ev,
  (VTBL_ENTRY)&_ZN5S58C73v45Ev,
  (VTBL_ENTRY)&_ZN5S58C73v46Ev,
  (VTBL_ENTRY)&_ZN5S58C73v47Ev,
  (VTBL_ENTRY)&_ZN5S58C73v48Ev,
  (VTBL_ENTRY)&_ZN5S58C73v49Ev,
  (VTBL_ENTRY)&_ZN5S58C73v50Ev,
  (VTBL_ENTRY)&_ZN5S58C73v51Ev,
  (VTBL_ENTRY)&_ZN5S58C73v52Ev,
  (VTBL_ENTRY)&_ZN5S58C73v53Ev,
  (VTBL_ENTRY)&_ZN5S58C73v54Ev,
  (VTBL_ENTRY)&_ZN5S58C73v55Ev,
  (VTBL_ENTRY)&_ZN5S58C73v56Ev,
  (VTBL_ENTRY)&_ZN5S58C73v57Ev,
  (VTBL_ENTRY)&_ZN5S58C73v58Ev,
  (VTBL_ENTRY)&_ZN5S58C73v59Ev,
  (VTBL_ENTRY)&_ZN5S58C73v60Ev,
  (VTBL_ENTRY)&_ZN5S58C73v61Ev,
  (VTBL_ENTRY)&_ZN5S58C73v62Ev,
  (VTBL_ENTRY)&_ZN5S58C73v63Ev,
  (VTBL_ENTRY)&_ZN5S58C73v64Ev,
  (VTBL_ENTRY)&_ZN5S58C73v65Ev,
  (VTBL_ENTRY)&_ZN5S58C73v66Ev,
  (VTBL_ENTRY)&_ZN5S58C63v67Ev,
  (VTBL_ENTRY)&_ZN5S58C63v68Ev,
  (VTBL_ENTRY)&_ZN5S58C63v69Ev,
  (VTBL_ENTRY)&_ZN5S58C63v70Ev,
  (VTBL_ENTRY)&_ZN5S58C63v71Ev,
  (VTBL_ENTRY)&_ZN5S58C63v72Ev,
  (VTBL_ENTRY)&_ZN5S58C63v73Ev,
  (VTBL_ENTRY)&_ZN5S58C63v74Ev,
  (VTBL_ENTRY)&_ZN5S58C63v75Ev,
  (VTBL_ENTRY)&_ZN5S58C63v76Ev,
  (VTBL_ENTRY)&_ZN5S58C63v77Ev,
  (VTBL_ENTRY)&_ZN5S58C63v78Ev,
  (VTBL_ENTRY)&_ZN5S58C63v79Ev,
  (VTBL_ENTRY)&_ZN5S58C63v80Ev,
  (VTBL_ENTRY)&_ZN5S58C63v81Ev,
  (VTBL_ENTRY)&_ZN5S58C63v82Ev,
  (VTBL_ENTRY)&_ZN5S58C63v83Ev,
  (VTBL_ENTRY)&_ZN5S58C63v84Ev,
  (VTBL_ENTRY)&_ZN5S58C63v85Ev,
  (VTBL_ENTRY)&_ZN5S58C63v86Ev,
  (VTBL_ENTRY)&_ZN5S58C63v87Ev,
  (VTBL_ENTRY)&_ZN5S58C63v88Ev,
  (VTBL_ENTRY)&_ZN5S58C53v89Ev,
  (VTBL_ENTRY)&_ZN5S58C53v90Ev,
  (VTBL_ENTRY)&_ZN5S58C53v91Ev,
  (VTBL_ENTRY)&_ZN5S58C53v92Ev,
  (VTBL_ENTRY)&_ZN5S58C53v93Ev,
  (VTBL_ENTRY)&_ZN5S58C53v94Ev,
  (VTBL_ENTRY)&_ZN5S58C53v95Ev,
  (VTBL_ENTRY)&_ZN5S58C53v96Ev,
  (VTBL_ENTRY)&_ZN5S58C53v97Ev,
  (VTBL_ENTRY)&_ZN5S58C53v98Ev,
  (VTBL_ENTRY)&_ZN5S58C53v99Ev,
  (VTBL_ENTRY)&_ZN5S58C54v100Ev,
  (VTBL_ENTRY)&_ZN5S58C54v101Ev,
  (VTBL_ENTRY)&_ZN5S58C54v102Ev,
  (VTBL_ENTRY)&_ZN5S58C54v103Ev,
  (VTBL_ENTRY)&_ZN5S58C54v104Ev,
  (VTBL_ENTRY)&_ZN5S58C54v105Ev,
  (VTBL_ENTRY)&_ZN5S58C54v106Ev,
  (VTBL_ENTRY)&_ZN5S58C54v107Ev,
  (VTBL_ENTRY)&_ZN5S58C54v108Ev,
  (VTBL_ENTRY)&_ZN5S58C44v109Ev,
  (VTBL_ENTRY)&_ZN5S58C44v110Ev,
  (VTBL_ENTRY)&_ZN5S58C44v111Ev,
  (VTBL_ENTRY)&_ZN5S58C44v112Ev,
  (VTBL_ENTRY)&_ZN5S58C44v113Ev,
  (VTBL_ENTRY)&_ZN5S58C44v114Ev,
  (VTBL_ENTRY)&_ZN5S58C44v115Ev,
  (VTBL_ENTRY)&_ZN5S58C44v116Ev,
  (VTBL_ENTRY)&_ZN5S58C44v117Ev,
  (VTBL_ENTRY)&_ZN5S58C44v118Ev,
  (VTBL_ENTRY)&_ZN5S58C44v119Ev,
  (VTBL_ENTRY)&_ZN5S58C44v120Ev,
  (VTBL_ENTRY)&_ZN5S58C44v121Ev,
  (VTBL_ENTRY)&_ZN5S58C44v122Ev,
};
extern VTBL_ENTRY _ZTI5S58C4[];
extern  VTBL_ENTRY _ZTV5S58C4[];
Class_Descriptor cd_S58C4 = {  "S58C4", // class name
  bases_S58C4, 3,
  &(vtc_S58C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(336,244), // object size
  NSPAIRA(_ZTI5S58C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S58C4),124, //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  S58C3  : S58C4 {
  void *s58c3f0[2];
  ::S287C8_nt s58c3f1;
  unsigned int s58c3f2:1;
  unsigned int s58c3f3:1;
  ::S3350C21_nt s58c3f4;
  virtual  ~S58C3(); // _ZN5S58C3D1Ev
  virtual void  v123(); // _ZN5S58C34v123Ev
  virtual void  v124(); // _ZN5S58C34v124Ev
  virtual void  v125(); // _ZN5S58C34v125Ev
  virtual void  v126(); // _ZN5S58C34v126Ev
  virtual void  v127(); // _ZN5S58C34v127Ev
  virtual void  v128(); // _ZN5S58C34v128Ev
  virtual void  v129(); // _ZN5S58C34v129Ev
  virtual void  v130(); // _ZN5S58C34v130Ev
  virtual void  v131(); // _ZN5S58C34v131Ev
  virtual void  v132(); // _ZN5S58C34v132Ev
  virtual void  v133(); // _ZN5S58C34v133Ev
  S58C3(); // tgen
};
//SIG(-1 S58C3) C1{ BC2{ BC3{ BC4{ BC5{ vd v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 Fi[2] Fp Fi[2] FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} FC7 FC11{ m} FC7 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 Fi:1 Fi:1 Fi:1 FC12{ BC13{ BC10}} FC14{ BC15{ BC10}} FC16{ BC17{ BC10}} FC18{ BC19{ BC10}} Fi[3]} vd v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC20{ BC21{ BC10}}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[2] FC7 Fi:1 Fi:1 FC22{ m Fp FC6}}


 S58C3 ::~S58C3(){ note_dtor("S58C3", this);}
void  S58C3 ::v123(){vfunc_called(this, "_ZN5S58C34v123Ev");}
void  S58C3 ::v124(){vfunc_called(this, "_ZN5S58C34v124Ev");}
void  S58C3 ::v125(){vfunc_called(this, "_ZN5S58C34v125Ev");}
void  S58C3 ::v126(){vfunc_called(this, "_ZN5S58C34v126Ev");}
void  S58C3 ::v127(){vfunc_called(this, "_ZN5S58C34v127Ev");}
void  S58C3 ::v128(){vfunc_called(this, "_ZN5S58C34v128Ev");}
void  S58C3 ::v129(){vfunc_called(this, "_ZN5S58C34v129Ev");}
void  S58C3 ::v130(){vfunc_called(this, "_ZN5S58C34v130Ev");}
void  S58C3 ::v131(){vfunc_called(this, "_ZN5S58C34v131Ev");}
void  S58C3 ::v132(){vfunc_called(this, "_ZN5S58C34v132Ev");}
void  S58C3 ::v133(){vfunc_called(this, "_ZN5S58C34v133Ev");}
S58C3 ::S58C3(){ note_ctor("S58C3", this);} // tgen

static void Test_S58C3()
{
  extern Class_Descriptor cd_S58C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(50,71)];
    init_test(&cd_S58C3, buf);
    S58C3 *dp, &lv = *(dp=new (buf) S58C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(392,280), "sizeof(S58C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S58C3)");
    check_base_class_offset(lv, (S58C7*)(S58C6*)(S58C5*)(S58C4*), 0, "S58C3");
    check_base_class_offset(lv, (S58C6*)(S58C5*)(S58C4*), 0, "S58C3");
    check_base_class_offset(lv, (S58C5*)(S58C4*), 0, "S58C3");
    check_base_class_offset(lv, (S58C4*), 0, "S58C3");
    check_field_offset(lv, s58c3f0, ABISELECT(336,244), "S58C3.s58c3f0");
    check_field_offset(lv, s58c3f1, ABISELECT(352,252), "S58C3.s58c3f1");
    set_bf_and_test(lv, s58c3f2, ABISELECT(368,264), 0, 1, 1, "S58C3");
    set_bf_and_test(lv, s58c3f3, ABISELECT(368,264), 1, 1, 1, "S58C3");
    check_field_offset(lv, s58c3f4, ABISELECT(376,268), "S58C3.s58c3f4");
    test_class_info(&lv, &cd_S58C3);
    dp->~S58C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS58C3(Test_S58C3, "S58C3", ABISELECT(392,280));

#else // __cplusplus

extern void _ZN5S58C3C1Ev();
extern void _ZN5S58C3D1Ev();
Name_Map name_map_S58C3[] = {
  NSPAIR(_ZN5S58C3C1Ev),
  NSPAIR(_ZN5S58C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S58C7;
extern VTBL_ENTRY _ZTI5S58C7[];
extern  VTBL_ENTRY _ZTV5S58C7[];
extern Class_Descriptor cd_S58C6;
extern VTBL_ENTRY _ZTI5S58C6[];
extern  VTBL_ENTRY _ZTV5S58C6[];
extern Class_Descriptor cd_S58C5;
extern VTBL_ENTRY _ZTI5S58C5[];
extern  VTBL_ENTRY _ZTV5S58C5[];
extern Class_Descriptor cd_S58C4;
extern VTBL_ENTRY _ZTI5S58C4[];
extern  VTBL_ENTRY _ZTV5S58C4[];
static Base_Class bases_S58C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S58C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S58C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S58C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S58C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S58C3[];
extern void _ZN5S58C3D1Ev();
extern void _ZN5S58C3D0Ev();
extern void _ZN5S58C72v3Ev();
extern void _ZN5S58C72v4Ev();
extern void _ZN5S58C72v5Ev();
extern void _ZN5S58C72v6Ev();
extern void _ZN5S58C72v7Ev();
extern void _ZN5S58C72v8Ev();
extern void _ZN5S58C72v9Ev();
extern void _ZN5S58C73v10Ev();
extern void _ZN5S58C73v11Ev();
extern void _ZN5S58C73v12Ev();
extern void _ZN5S58C73v13Ev();
extern void _ZN5S58C73v14Ev();
extern void _ZN5S58C73v15Ev();
extern void _ZN5S58C73v16Ev();
extern void _ZN5S58C73v17Ev();
extern void _ZN5S58C73v18Ev();
extern void _ZN5S58C73v19Ev();
extern void _ZN5S58C73v20Ev();
extern void _ZN5S58C73v21Ev();
extern void _ZN5S58C73v22Ev();
extern void _ZN5S58C73v23Ev();
extern void _ZN5S58C73v24Ev();
extern void _ZN5S58C73v25Ev();
extern void _ZN5S58C73v26Ev();
extern void _ZN5S58C73v27Ev();
extern void _ZN5S58C73v28Ev();
extern void _ZN5S58C73v29Ev();
extern void _ZN5S58C73v30Ev();
extern void _ZN5S58C73v31Ev();
extern void _ZN5S58C73v32Ev();
extern void _ZN5S58C73v33Ev();
extern void _ZN5S58C73v34Ev();
extern void _ZN5S58C73v35Ev();
extern void _ZN5S58C73v36Ev();
extern void _ZN5S58C73v37Ev();
extern void _ZN5S58C73v38Ev();
extern void _ZN5S58C73v39Ev();
extern void _ZN5S58C73v40Ev();
extern void _ZN5S58C73v41Ev();
extern void _ZN5S58C73v42Ev();
extern void _ZN5S58C73v43Ev();
extern void _ZN5S58C73v44Ev();
extern void _ZN5S58C73v45Ev();
extern void _ZN5S58C73v46Ev();
extern void _ZN5S58C73v47Ev();
extern void _ZN5S58C73v48Ev();
extern void _ZN5S58C73v49Ev();
extern void _ZN5S58C73v50Ev();
extern void _ZN5S58C73v51Ev();
extern void _ZN5S58C73v52Ev();
extern void _ZN5S58C73v53Ev();
extern void _ZN5S58C73v54Ev();
extern void _ZN5S58C73v55Ev();
extern void _ZN5S58C73v56Ev();
extern void _ZN5S58C73v57Ev();
extern void _ZN5S58C73v58Ev();
extern void _ZN5S58C73v59Ev();
extern void _ZN5S58C73v60Ev();
extern void _ZN5S58C73v61Ev();
extern void _ZN5S58C73v62Ev();
extern void _ZN5S58C73v63Ev();
extern void _ZN5S58C73v64Ev();
extern void _ZN5S58C73v65Ev();
extern void _ZN5S58C73v66Ev();
extern void _ZN5S58C63v67Ev();
extern void _ZN5S58C63v68Ev();
extern void _ZN5S58C63v69Ev();
extern void _ZN5S58C63v70Ev();
extern void _ZN5S58C63v71Ev();
extern void _ZN5S58C63v72Ev();
extern void _ZN5S58C63v73Ev();
extern void _ZN5S58C63v74Ev();
extern void _ZN5S58C63v75Ev();
extern void _ZN5S58C63v76Ev();
extern void _ZN5S58C63v77Ev();
extern void _ZN5S58C63v78Ev();
extern void _ZN5S58C63v79Ev();
extern void _ZN5S58C63v80Ev();
extern void _ZN5S58C63v81Ev();
extern void _ZN5S58C63v82Ev();
extern void _ZN5S58C63v83Ev();
extern void _ZN5S58C63v84Ev();
extern void _ZN5S58C63v85Ev();
extern void _ZN5S58C63v86Ev();
extern void _ZN5S58C63v87Ev();
extern void _ZN5S58C63v88Ev();
extern void _ZN5S58C53v89Ev();
extern void _ZN5S58C53v90Ev();
extern void _ZN5S58C53v91Ev();
extern void _ZN5S58C53v92Ev();
extern void _ZN5S58C53v93Ev();
extern void _ZN5S58C53v94Ev();
extern void _ZN5S58C53v95Ev();
extern void _ZN5S58C53v96Ev();
extern void _ZN5S58C53v97Ev();
extern void _ZN5S58C53v98Ev();
extern void _ZN5S58C53v99Ev();
extern void _ZN5S58C54v100Ev();
extern void _ZN5S58C54v101Ev();
extern void _ZN5S58C54v102Ev();
extern void _ZN5S58C54v103Ev();
extern void _ZN5S58C54v104Ev();
extern void _ZN5S58C54v105Ev();
extern void _ZN5S58C54v106Ev();
extern void _ZN5S58C54v107Ev();
extern void _ZN5S58C54v108Ev();
extern void _ZN5S58C44v109Ev();
extern void _ZN5S58C44v110Ev();
extern void _ZN5S58C44v111Ev();
extern void _ZN5S58C44v112Ev();
extern void _ZN5S58C44v113Ev();
extern void _ZN5S58C44v114Ev();
extern void _ZN5S58C44v115Ev();
extern void _ZN5S58C44v116Ev();
extern void _ZN5S58C44v117Ev();
extern void _ZN5S58C44v118Ev();
extern void _ZN5S58C44v119Ev();
extern void _ZN5S58C44v120Ev();
extern void _ZN5S58C44v121Ev();
extern void _ZN5S58C44v122Ev();
extern void _ZN5S58C34v123Ev();
extern void _ZN5S58C34v124Ev();
extern void _ZN5S58C34v125Ev();
extern void _ZN5S58C34v126Ev();
extern void _ZN5S58C34v127Ev();
extern void _ZN5S58C34v128Ev();
extern void _ZN5S58C34v129Ev();
extern void _ZN5S58C34v130Ev();
extern void _ZN5S58C34v131Ev();
extern void _ZN5S58C34v132Ev();
extern void _ZN5S58C34v133Ev();
static  VTBL_ENTRY vtc_S58C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S58C3[0]),
  (VTBL_ENTRY)&_ZN5S58C3D1Ev,
  (VTBL_ENTRY)&_ZN5S58C3D0Ev,
  (VTBL_ENTRY)&_ZN5S58C72v3Ev,
  (VTBL_ENTRY)&_ZN5S58C72v4Ev,
  (VTBL_ENTRY)&_ZN5S58C72v5Ev,
  (VTBL_ENTRY)&_ZN5S58C72v6Ev,
  (VTBL_ENTRY)&_ZN5S58C72v7Ev,
  (VTBL_ENTRY)&_ZN5S58C72v8Ev,
  (VTBL_ENTRY)&_ZN5S58C72v9Ev,
  (VTBL_ENTRY)&_ZN5S58C73v10Ev,
  (VTBL_ENTRY)&_ZN5S58C73v11Ev,
  (VTBL_ENTRY)&_ZN5S58C73v12Ev,
  (VTBL_ENTRY)&_ZN5S58C73v13Ev,
  (VTBL_ENTRY)&_ZN5S58C73v14Ev,
  (VTBL_ENTRY)&_ZN5S58C73v15Ev,
  (VTBL_ENTRY)&_ZN5S58C73v16Ev,
  (VTBL_ENTRY)&_ZN5S58C73v17Ev,
  (VTBL_ENTRY)&_ZN5S58C73v18Ev,
  (VTBL_ENTRY)&_ZN5S58C73v19Ev,
  (VTBL_ENTRY)&_ZN5S58C73v20Ev,
  (VTBL_ENTRY)&_ZN5S58C73v21Ev,
  (VTBL_ENTRY)&_ZN5S58C73v22Ev,
  (VTBL_ENTRY)&_ZN5S58C73v23Ev,
  (VTBL_ENTRY)&_ZN5S58C73v24Ev,
  (VTBL_ENTRY)&_ZN5S58C73v25Ev,
  (VTBL_ENTRY)&_ZN5S58C73v26Ev,
  (VTBL_ENTRY)&_ZN5S58C73v27Ev,
  (VTBL_ENTRY)&_ZN5S58C73v28Ev,
  (VTBL_ENTRY)&_ZN5S58C73v29Ev,
  (VTBL_ENTRY)&_ZN5S58C73v30Ev,
  (VTBL_ENTRY)&_ZN5S58C73v31Ev,
  (VTBL_ENTRY)&_ZN5S58C73v32Ev,
  (VTBL_ENTRY)&_ZN5S58C73v33Ev,
  (VTBL_ENTRY)&_ZN5S58C73v34Ev,
  (VTBL_ENTRY)&_ZN5S58C73v35Ev,
  (VTBL_ENTRY)&_ZN5S58C73v36Ev,
  (VTBL_ENTRY)&_ZN5S58C73v37Ev,
  (VTBL_ENTRY)&_ZN5S58C73v38Ev,
  (VTBL_ENTRY)&_ZN5S58C73v39Ev,
  (VTBL_ENTRY)&_ZN5S58C73v40Ev,
  (VTBL_ENTRY)&_ZN5S58C73v41Ev,
  (VTBL_ENTRY)&_ZN5S58C73v42Ev,
  (VTBL_ENTRY)&_ZN5S58C73v43Ev,
  (VTBL_ENTRY)&_ZN5S58C73v44Ev,
  (VTBL_ENTRY)&_ZN5S58C73v45Ev,
  (VTBL_ENTRY)&_ZN5S58C73v46Ev,
  (VTBL_ENTRY)&_ZN5S58C73v47Ev,
  (VTBL_ENTRY)&_ZN5S58C73v48Ev,
  (VTBL_ENTRY)&_ZN5S58C73v49Ev,
  (VTBL_ENTRY)&_ZN5S58C73v50Ev,
  (VTBL_ENTRY)&_ZN5S58C73v51Ev,
  (VTBL_ENTRY)&_ZN5S58C73v52Ev,
  (VTBL_ENTRY)&_ZN5S58C73v53Ev,
  (VTBL_ENTRY)&_ZN5S58C73v54Ev,
  (VTBL_ENTRY)&_ZN5S58C73v55Ev,
  (VTBL_ENTRY)&_ZN5S58C73v56Ev,
  (VTBL_ENTRY)&_ZN5S58C73v57Ev,
  (VTBL_ENTRY)&_ZN5S58C73v58Ev,
  (VTBL_ENTRY)&_ZN5S58C73v59Ev,
  (VTBL_ENTRY)&_ZN5S58C73v60Ev,
  (VTBL_ENTRY)&_ZN5S58C73v61Ev,
  (VTBL_ENTRY)&_ZN5S58C73v62Ev,
  (VTBL_ENTRY)&_ZN5S58C73v63Ev,
  (VTBL_ENTRY)&_ZN5S58C73v64Ev,
  (VTBL_ENTRY)&_ZN5S58C73v65Ev,
  (VTBL_ENTRY)&_ZN5S58C73v66Ev,
  (VTBL_ENTRY)&_ZN5S58C63v67Ev,
  (VTBL_ENTRY)&_ZN5S58C63v68Ev,
  (VTBL_ENTRY)&_ZN5S58C63v69Ev,
  (VTBL_ENTRY)&_ZN5S58C63v70Ev,
  (VTBL_ENTRY)&_ZN5S58C63v71Ev,
  (VTBL_ENTRY)&_ZN5S58C63v72Ev,
  (VTBL_ENTRY)&_ZN5S58C63v73Ev,
  (VTBL_ENTRY)&_ZN5S58C63v74Ev,
  (VTBL_ENTRY)&_ZN5S58C63v75Ev,
  (VTBL_ENTRY)&_ZN5S58C63v76Ev,
  (VTBL_ENTRY)&_ZN5S58C63v77Ev,
  (VTBL_ENTRY)&_ZN5S58C63v78Ev,
  (VTBL_ENTRY)&_ZN5S58C63v79Ev,
  (VTBL_ENTRY)&_ZN5S58C63v80Ev,
  (VTBL_ENTRY)&_ZN5S58C63v81Ev,
  (VTBL_ENTRY)&_ZN5S58C63v82Ev,
  (VTBL_ENTRY)&_ZN5S58C63v83Ev,
  (VTBL_ENTRY)&_ZN5S58C63v84Ev,
  (VTBL_ENTRY)&_ZN5S58C63v85Ev,
  (VTBL_ENTRY)&_ZN5S58C63v86Ev,
  (VTBL_ENTRY)&_ZN5S58C63v87Ev,
  (VTBL_ENTRY)&_ZN5S58C63v88Ev,
  (VTBL_ENTRY)&_ZN5S58C53v89Ev,
  (VTBL_ENTRY)&_ZN5S58C53v90Ev,
  (VTBL_ENTRY)&_ZN5S58C53v91Ev,
  (VTBL_ENTRY)&_ZN5S58C53v92Ev,
  (VTBL_ENTRY)&_ZN5S58C53v93Ev,
  (VTBL_ENTRY)&_ZN5S58C53v94Ev,
  (VTBL_ENTRY)&_ZN5S58C53v95Ev,
  (VTBL_ENTRY)&_ZN5S58C53v96Ev,
  (VTBL_ENTRY)&_ZN5S58C53v97Ev,
  (VTBL_ENTRY)&_ZN5S58C53v98Ev,
  (VTBL_ENTRY)&_ZN5S58C53v99Ev,
  (VTBL_ENTRY)&_ZN5S58C54v100Ev,
  (VTBL_ENTRY)&_ZN5S58C54v101Ev,
  (VTBL_ENTRY)&_ZN5S58C54v102Ev,
  (VTBL_ENTRY)&_ZN5S58C54v103Ev,
  (VTBL_ENTRY)&_ZN5S58C54v104Ev,
  (VTBL_ENTRY)&_ZN5S58C54v105Ev,
  (VTBL_ENTRY)&_ZN5S58C54v106Ev,
  (VTBL_ENTRY)&_ZN5S58C54v107Ev,
  (VTBL_ENTRY)&_ZN5S58C54v108Ev,
  (VTBL_ENTRY)&_ZN5S58C44v109Ev,
  (VTBL_ENTRY)&_ZN5S58C44v110Ev,
  (VTBL_ENTRY)&_ZN5S58C44v111Ev,
  (VTBL_ENTRY)&_ZN5S58C44v112Ev,
  (VTBL_ENTRY)&_ZN5S58C44v113Ev,
  (VTBL_ENTRY)&_ZN5S58C44v114Ev,
  (VTBL_ENTRY)&_ZN5S58C44v115Ev,
  (VTBL_ENTRY)&_ZN5S58C44v116Ev,
  (VTBL_ENTRY)&_ZN5S58C44v117Ev,
  (VTBL_ENTRY)&_ZN5S58C44v118Ev,
  (VTBL_ENTRY)&_ZN5S58C44v119Ev,
  (VTBL_ENTRY)&_ZN5S58C44v120Ev,
  (VTBL_ENTRY)&_ZN5S58C44v121Ev,
  (VTBL_ENTRY)&_ZN5S58C44v122Ev,
  (VTBL_ENTRY)&_ZN5S58C34v123Ev,
  (VTBL_ENTRY)&_ZN5S58C34v124Ev,
  (VTBL_ENTRY)&_ZN5S58C34v125Ev,
  (VTBL_ENTRY)&_ZN5S58C34v126Ev,
  (VTBL_ENTRY)&_ZN5S58C34v127Ev,
  (VTBL_ENTRY)&_ZN5S58C34v128Ev,
  (VTBL_ENTRY)&_ZN5S58C34v129Ev,
  (VTBL_ENTRY)&_ZN5S58C34v130Ev,
  (VTBL_ENTRY)&_ZN5S58C34v131Ev,
  (VTBL_ENTRY)&_ZN5S58C34v132Ev,
  (VTBL_ENTRY)&_ZN5S58C34v133Ev,
};
extern VTBL_ENTRY _ZTI5S58C3[];
extern  VTBL_ENTRY _ZTV5S58C3[];
Class_Descriptor cd_S58C3 = {  "S58C3", // class name
  bases_S58C3, 4,
  &(vtc_S58C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(392,280), // object size
  NSPAIRA(_ZTI5S58C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S58C3),135, //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  S58C2  : S58C3 {
  virtual  ~S58C2(); // _ZN5S58C2D1Ev
  virtual void  v134(); // _ZN5S58C24v134Ev
  virtual void  v135(); // _ZN5S58C24v135Ev
  S58C2(); // tgen
};
//SIG(-1 S58C2) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ 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 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 Fi FL Fp[4] Fi[2] Fp FC7{ m Fi[2]} Fp[2]} vd v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fi[2] Fp Fi[2] FC8{ BC9{ BC10{ BC11{ m Fp Fi[2]}}}} FC8 FC12{ m} FC8 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 Fi:1 Fi:1 Fi:1 FC13{ BC14{ BC11}} FC15{ BC16{ BC11}} FC17{ BC18{ BC11}} FC19{ BC20{ BC11}} Fi[3]} vd v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC21{ BC22{ BC11}}} vd v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 Fp[2] FC8 Fi:1 Fi:1 FC23{ m Fp FC7}} vd v1 v2}


 S58C2 ::~S58C2(){ note_dtor("S58C2", this);}
void  S58C2 ::v134(){vfunc_called(this, "_ZN5S58C24v134Ev");}
void  S58C2 ::v135(){vfunc_called(this, "_ZN5S58C24v135Ev");}
S58C2 ::S58C2(){ note_ctor("S58C2", this);} // tgen

static void Test_S58C2()
{
  extern Class_Descriptor cd_S58C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(50,71)];
    init_test(&cd_S58C2, buf);
    S58C2 *dp, &lv = *(dp=new (buf) S58C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(392,280), "sizeof(S58C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S58C2)");
    check_base_class_offset(lv, (S58C7*)(S58C6*)(S58C5*)(S58C4*)(S58C3*), 0, "S58C2");
    check_base_class_offset(lv, (S58C6*)(S58C5*)(S58C4*)(S58C3*), 0, "S58C2");
    check_base_class_offset(lv, (S58C5*)(S58C4*)(S58C3*), 0, "S58C2");
    check_base_class_offset(lv, (S58C4*)(S58C3*), 0, "S58C2");
    check_base_class_offset(lv, (S58C3*), 0, "S58C2");
    test_class_info(&lv, &cd_S58C2);
    dp->~S58C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS58C2(Test_S58C2, "S58C2", ABISELECT(392,280));

#else // __cplusplus

extern void _ZN5S58C2C1Ev();
extern void _ZN5S58C2D1Ev();
Name_Map name_map_S58C2[] = {
  NSPAIR(_ZN5S58C2C1Ev),
  NSPAIR(_ZN5S58C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S58C7;
extern VTBL_ENTRY _ZTI5S58C7[];
extern  VTBL_ENTRY _ZTV5S58C7[];
extern Class_Descriptor cd_S58C6;
extern VTBL_ENTRY _ZTI5S58C6[];
extern  VTBL_ENTRY _ZTV5S58C6[];
extern Class_Descriptor cd_S58C5;
extern VTBL_ENTRY _ZTI5S58C5[];
extern  VTBL_ENTRY _ZTV5S58C5[];
extern Class_Descriptor cd_S58C4;
extern VTBL_ENTRY _ZTI5S58C4[];
extern  VTBL_ENTRY _ZTV5S58C4[];
extern Class_Descriptor cd_S58C3;
extern VTBL_ENTRY _ZTI5S58C3[];
extern  VTBL_ENTRY _ZTV5S58C3[];
static Base_Class bases_S58C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S58C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S58C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S58C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S58C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S58C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S58C2[];
extern void _ZN5S58C2D1Ev();
extern void _ZN5S58C2D0Ev();
extern void _ZN5S58C72v3Ev();
extern void _ZN5S58C72v4Ev();
extern void _ZN5S58C72v5Ev();
extern void _ZN5S58C72v6Ev();
extern void _ZN5S58C72v7Ev();
extern void _ZN5S58C72v8Ev();
extern void _ZN5S58C72v9Ev();
extern void _ZN5S58C73v10Ev();
extern void _ZN5S58C73v11Ev();
extern void _ZN5S58C73v12Ev();
extern void _ZN5S58C73v13Ev();
extern void _ZN5S58C73v14Ev();
extern void _ZN5S58C73v15Ev();
extern void _ZN5S58C73v16Ev();
extern void _ZN5S58C73v17Ev();
extern void _ZN5S58C73v18Ev();
extern void _ZN5S58C73v19Ev();
extern void _ZN5S58C73v20Ev();
extern void _ZN5S58C73v21Ev();
extern void _ZN5S58C73v22Ev();
extern void _ZN5S58C73v23Ev();
extern void _ZN5S58C73v24Ev();
extern void _ZN5S58C73v25Ev();
extern void _ZN5S58C73v26Ev();
extern void _ZN5S58C73v27Ev();
extern void _ZN5S58C73v28Ev();
extern void _ZN5S58C73v29Ev();
extern void _ZN5S58C73v30Ev();
extern void _ZN5S58C73v31Ev();
extern void _ZN5S58C73v32Ev();
extern void _ZN5S58C73v33Ev();
extern void _ZN5S58C73v34Ev();
extern void _ZN5S58C73v35Ev();
extern void _ZN5S58C73v36Ev();
extern void _ZN5S58C73v37Ev();
extern void _ZN5S58C73v38Ev();
extern void _ZN5S58C73v39Ev();
extern void _ZN5S58C73v40Ev();
extern void _ZN5S58C73v41Ev();
extern void _ZN5S58C73v42Ev();
extern void _ZN5S58C73v43Ev();
extern void _ZN5S58C73v44Ev();
extern void _ZN5S58C73v45Ev();
extern void _ZN5S58C73v46Ev();
extern void _ZN5S58C73v47Ev();
extern void _ZN5S58C73v48Ev();
extern void _ZN5S58C73v49Ev();
extern void _ZN5S58C73v50Ev();
extern void _ZN5S58C73v51Ev();
extern void _ZN5S58C73v52Ev();
extern void _ZN5S58C73v53Ev();
extern void _ZN5S58C73v54Ev();
extern void _ZN5S58C73v55Ev();
extern void _ZN5S58C73v56Ev();
extern void _ZN5S58C73v57Ev();
extern void _ZN5S58C73v58Ev();
extern void _ZN5S58C73v59Ev();
extern void _ZN5S58C73v60Ev();
extern void _ZN5S58C73v61Ev();
extern void _ZN5S58C73v62Ev();
extern void _ZN5S58C73v63Ev();
extern void _ZN5S58C73v64Ev();
extern void _ZN5S58C73v65Ev();
extern void _ZN5S58C73v66Ev();
extern void _ZN5S58C63v67Ev();
extern void _ZN5S58C63v68Ev();
extern void _ZN5S58C63v69Ev();
extern void _ZN5S58C63v70Ev();
extern void _ZN5S58C63v71Ev();
extern void _ZN5S58C63v72Ev();
extern void _ZN5S58C63v73Ev();
extern void _ZN5S58C63v74Ev();
extern void _ZN5S58C63v75Ev();
extern void _ZN5S58C63v76Ev();
extern void _ZN5S58C63v77Ev();
extern void _ZN5S58C63v78Ev();
extern void _ZN5S58C63v79Ev();
extern void _ZN5S58C63v80Ev();
extern void _ZN5S58C63v81Ev();
extern void _ZN5S58C63v82Ev();
extern void _ZN5S58C63v83Ev();
extern void _ZN5S58C63v84Ev();
extern void _ZN5S58C63v85Ev();
extern void _ZN5S58C63v86Ev();
extern void _ZN5S58C63v87Ev();
extern void _ZN5S58C63v88Ev();
extern void _ZN5S58C53v89Ev();
extern void _ZN5S58C53v90Ev();
extern void _ZN5S58C53v91Ev();
extern void _ZN5S58C53v92Ev();
extern void _ZN5S58C53v93Ev();
extern void _ZN5S58C53v94Ev();
extern void _ZN5S58C53v95Ev();
extern void _ZN5S58C53v96Ev();
extern void _ZN5S58C53v97Ev();
extern void _ZN5S58C53v98Ev();
extern void _ZN5S58C53v99Ev();
extern void _ZN5S58C54v100Ev();
extern void _ZN5S58C54v101Ev();
extern void _ZN5S58C54v102Ev();
extern void _ZN5S58C54v103Ev();
extern void _ZN5S58C54v104Ev();
extern void _ZN5S58C54v105Ev();
extern void _ZN5S58C54v106Ev();
extern void _ZN5S58C54v107Ev();
extern void _ZN5S58C54v108Ev();
extern void _ZN5S58C44v109Ev();
extern void _ZN5S58C44v110Ev();
extern void _ZN5S58C44v111Ev();
extern void _ZN5S58C44v112Ev();
extern void _ZN5S58C44v113Ev();
extern void _ZN5S58C44v114Ev();
extern void _ZN5S58C44v115Ev();
extern void _ZN5S58C44v116Ev();
extern void _ZN5S58C44v117Ev();
extern void _ZN5S58C44v118Ev();
extern void _ZN5S58C44v119Ev();
extern void _ZN5S58C44v120Ev();
extern void _ZN5S58C44v121Ev();
extern void _ZN5S58C44v122Ev();
extern void _ZN5S58C34v123Ev();
extern void _ZN5S58C34v124Ev();
extern void _ZN5S58C34v125Ev();
extern void _ZN5S58C34v126Ev();
extern void _ZN5S58C34v127Ev();
extern void _ZN5S58C34v128Ev();
extern void _ZN5S58C34v129Ev();
extern void _ZN5S58C34v130Ev();
extern void _ZN5S58C34v131Ev();
extern void _ZN5S58C34v132Ev();
extern void _ZN5S58C34v133Ev();
extern void _ZN5S58C24v134Ev();
extern void _ZN5S58C24v135Ev();
static  VTBL_ENTRY vtc_S58C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S58C2[0]),
  (VTBL_ENTRY)&_ZN5S58C2D1Ev,
  (VTBL_ENTRY)&_ZN5S58C2D0Ev,
  (VTBL_ENTRY)&_ZN5S58C72v3Ev,
  (VTBL_ENTRY)&_ZN5S58C72v4Ev,
  (VTBL_ENTRY)&_ZN5S58C72v5Ev,
  (VTBL_ENTRY)&_ZN5S58C72v6Ev,
  (VTBL_ENTRY)&_ZN5S58C72v7Ev,
  (VTBL_ENTRY)&_ZN5S58C72v8Ev,
  (VTBL_ENTRY)&_ZN5S58C72v9Ev,
  (VTBL_ENTRY)&_ZN5S58C73v10Ev,
  (VTBL_ENTRY)&_ZN5S58C73v11Ev,
  (VTBL_ENTRY)&_ZN5S58C73v12Ev,
  (VTBL_ENTRY)&_ZN5S58C73v13Ev,
  (VTBL_ENTRY)&_ZN5S58C73v14Ev,
  (VTBL_ENTRY)&_ZN5S58C73v15Ev,
  (VTBL_ENTRY)&_ZN5S58C73v16Ev,
  (VTBL_ENTRY)&_ZN5S58C73v17Ev,
  (VTBL_ENTRY)&_ZN5S58C73v18Ev,
  (VTBL_ENTRY)&_ZN5S58C73v19Ev,
  (VTBL_ENTRY)&_ZN5S58C73v20Ev,
  (VTBL_ENTRY)&_ZN5S58C73v21Ev,
  (VTBL_ENTRY)&_ZN5S58C73v22Ev,
  (VTBL_ENTRY)&_ZN5S58C73v23Ev,
  (VTBL_ENTRY)&_ZN5S58C73v24Ev,
  (VTBL_ENTRY)&_ZN5S58C73v25Ev,
  (VTBL_ENTRY)&_ZN5S58C73v26Ev,
  (VTBL_ENTRY)&_ZN5S58C73v27Ev,
  (VTBL_ENTRY)&_ZN5S58C73v28Ev,
  (VTBL_ENTRY)&_ZN5S58C73v29Ev,
  (VTBL_ENTRY)&_ZN5S58C73v30Ev,
  (VTBL_ENTRY)&_ZN5S58C73v31Ev,
  (VTBL_ENTRY)&_ZN5S58C73v32Ev,
  (VTBL_ENTRY)&_ZN5S58C73v33Ev,
  (VTBL_ENTRY)&_ZN5S58C73v34Ev,
  (VTBL_ENTRY)&_ZN5S58C73v35Ev,
  (VTBL_ENTRY)&_ZN5S58C73v36Ev,
  (VTBL_ENTRY)&_ZN5S58C73v37Ev,
  (VTBL_ENTRY)&_ZN5S58C73v38Ev,
  (VTBL_ENTRY)&_ZN5S58C73v39Ev,
  (VTBL_ENTRY)&_ZN5S58C73v40Ev,
  (VTBL_ENTRY)&_ZN5S58C73v41Ev,
  (VTBL_ENTRY)&_ZN5S58C73v42Ev,
  (VTBL_ENTRY)&_ZN5S58C73v43Ev,
  (VTBL_ENTRY)&_ZN5S58C73v44Ev,
  (VTBL_ENTRY)&_ZN5S58C73v45Ev,
  (VTBL_ENTRY)&_ZN5S58C73v46Ev,
  (VTBL_ENTRY)&_ZN5S58C73v47Ev,
  (VTBL_ENTRY)&_ZN5S58C73v48Ev,
  (VTBL_ENTRY)&_ZN5S58C73v49Ev,
  (VTBL_ENTRY)&_ZN5S58C73v50Ev,
  (VTBL_ENTRY)&_ZN5S58C73v51Ev,
  (VTBL_ENTRY)&_ZN5S58C73v52Ev,
  (VTBL_ENTRY)&_ZN5S58C73v53Ev,
  (VTBL_ENTRY)&_ZN5S58C73v54Ev,
  (VTBL_ENTRY)&_ZN5S58C73v55Ev,
  (VTBL_ENTRY)&_ZN5S58C73v56Ev,
  (VTBL_ENTRY)&_ZN5S58C73v57Ev,
  (VTBL_ENTRY)&_ZN5S58C73v58Ev,
  (VTBL_ENTRY)&_ZN5S58C73v59Ev,
  (VTBL_ENTRY)&_ZN5S58C73v60Ev,
  (VTBL_ENTRY)&_ZN5S58C73v61Ev,
  (VTBL_ENTRY)&_ZN5S58C73v62Ev,
  (VTBL_ENTRY)&_ZN5S58C73v63Ev,
  (VTBL_ENTRY)&_ZN5S58C73v64Ev,
  (VTBL_ENTRY)&_ZN5S58C73v65Ev,
  (VTBL_ENTRY)&_ZN5S58C73v66Ev,
  (VTBL_ENTRY)&_ZN5S58C63v67Ev,
  (VTBL_ENTRY)&_ZN5S58C63v68Ev,
  (VTBL_ENTRY)&_ZN5S58C63v69Ev,
  (VTBL_ENTRY)&_ZN5S58C63v70Ev,
  (VTBL_ENTRY)&_ZN5S58C63v71Ev,
  (VTBL_ENTRY)&_ZN5S58C63v72Ev,
  (VTBL_ENTRY)&_ZN5S58C63v73Ev,
  (VTBL_ENTRY)&_ZN5S58C63v74Ev,
  (VTBL_ENTRY)&_ZN5S58C63v75Ev,
  (VTBL_ENTRY)&_ZN5S58C63v76Ev,
  (VTBL_ENTRY)&_ZN5S58C63v77Ev,
  (VTBL_ENTRY)&_ZN5S58C63v78Ev,
  (VTBL_ENTRY)&_ZN5S58C63v79Ev,
  (VTBL_ENTRY)&_ZN5S58C63v80Ev,
  (VTBL_ENTRY)&_ZN5S58C63v81Ev,
  (VTBL_ENTRY)&_ZN5S58C63v82Ev,
  (VTBL_ENTRY)&_ZN5S58C63v83Ev,
  (VTBL_ENTRY)&_ZN5S58C63v84Ev,
  (VTBL_ENTRY)&_ZN5S58C63v85Ev,
  (VTBL_ENTRY)&_ZN5S58C63v86Ev,
  (VTBL_ENTRY)&_ZN5S58C63v87Ev,
  (VTBL_ENTRY)&_ZN5S58C63v88Ev,
  (VTBL_ENTRY)&_ZN5S58C53v89Ev,
  (VTBL_ENTRY)&_ZN5S58C53v90Ev,
  (VTBL_ENTRY)&_ZN5S58C53v91Ev,
  (VTBL_ENTRY)&_ZN5S58C53v92Ev,
  (VTBL_ENTRY)&_ZN5S58C53v93Ev,
  (VTBL_ENTRY)&_ZN5S58C53v94Ev,
  (VTBL_ENTRY)&_ZN5S58C53v95Ev,
  (VTBL_ENTRY)&_ZN5S58C53v96Ev,
  (VTBL_ENTRY)&_ZN5S58C53v97Ev,
  (VTBL_ENTRY)&_ZN5S58C53v98Ev,
  (VTBL_ENTRY)&_ZN5S58C53v99Ev,
  (VTBL_ENTRY)&_ZN5S58C54v100Ev,
  (VTBL_ENTRY)&_ZN5S58C54v101Ev,
  (VTBL_ENTRY)&_ZN5S58C54v102Ev,
  (VTBL_ENTRY)&_ZN5S58C54v103Ev,
  (VTBL_ENTRY)&_ZN5S58C54v104Ev,
  (VTBL_ENTRY)&_ZN5S58C54v105Ev,
  (VTBL_ENTRY)&_ZN5S58C54v106Ev,
  (VTBL_ENTRY)&_ZN5S58C54v107Ev,
  (VTBL_ENTRY)&_ZN5S58C54v108Ev,
  (VTBL_ENTRY)&_ZN5S58C44v109Ev,
  (VTBL_ENTRY)&_ZN5S58C44v110Ev,
  (VTBL_ENTRY)&_ZN5S58C44v111Ev,
  (VTBL_ENTRY)&_ZN5S58C44v112Ev,
  (VTBL_ENTRY)&_ZN5S58C44v113Ev,
  (VTBL_ENTRY)&_ZN5S58C44v114Ev,
  (VTBL_ENTRY)&_ZN5S58C44v115Ev,
  (VTBL_ENTRY)&_ZN5S58C44v116Ev,
  (VTBL_ENTRY)&_ZN5S58C44v117Ev,
  (VTBL_ENTRY)&_ZN5S58C44v118Ev,
  (VTBL_ENTRY)&_ZN5S58C44v119Ev,
  (VTBL_ENTRY)&_ZN5S58C44v120Ev,
  (VTBL_ENTRY)&_ZN5S58C44v121Ev,
  (VTBL_ENTRY)&_ZN5S58C44v122Ev,
  (VTBL_ENTRY)&_ZN5S58C34v123Ev,
  (VTBL_ENTRY)&_ZN5S58C34v124Ev,
  (VTBL_ENTRY)&_ZN5S58C34v125Ev,
  (VTBL_ENTRY)&_ZN5S58C34v126Ev,
  (VTBL_ENTRY)&_ZN5S58C34v127Ev,
  (VTBL_ENTRY)&_ZN5S58C34v128Ev,
  (VTBL_ENTRY)&_ZN5S58C34v129Ev,
  (VTBL_ENTRY)&_ZN5S58C34v130Ev,
  (VTBL_ENTRY)&_ZN5S58C34v131Ev,
  (VTBL_ENTRY)&_ZN5S58C34v132Ev,
  (VTBL_ENTRY)&_ZN5S58C34v133Ev,
  (VTBL_ENTRY)&_ZN5S58C24v134Ev,
  (VTBL_ENTRY)&_ZN5S58C24v135Ev,
};
extern VTBL_ENTRY _ZTI5S58C2[];
extern  VTBL_ENTRY _ZTV5S58C2[];
Class_Descriptor cd_S58C2 = {  "S58C2", // class name
  bases_S58C2, 5,
  &(vtc_S58C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(392,280), // object size
  NSPAIRA(_ZTI5S58C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S58C2),137, //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  S58C1  : S58C2 {
  int s58c1f0;
  virtual  ~S58C1(); // _ZN5S58C1D1Ev
  virtual void  v1(); // _ZN5S58C12v1Ev
  virtual void  v2(); // _ZN5S58C12v2Ev
  S58C1(); // tgen
};
//SIG(1 S58C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ 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 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 Fi FL Fp[4] Fi[2] Fp FC8{ m Fi[2]} Fp[2]} vd v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fi[2] Fp Fi[2] FC9{ BC10{ BC11{ BC12{ m Fp Fi[2]}}}} FC9 FC13{ m} FC9 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 Fi:1 Fi:1 Fi:1 FC14{ BC15{ BC12}} FC16{ BC17{ BC12}} FC18{ BC19{ BC12}} FC20{ BC21{ BC12}} Fi[3]} vd v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC22{ BC23{ BC12}}} vd v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 Fp[2] FC9 Fi:1 Fi:1 FC24{ m Fp FC8}} vd v134 v135} vd v1 v2 Fi}


 S58C1 ::~S58C1(){ note_dtor("S58C1", this);}
void  S58C1 ::v1(){vfunc_called(this, "_ZN5S58C12v1Ev");}
void  S58C1 ::v2(){vfunc_called(this, "_ZN5S58C12v2Ev");}
S58C1 ::S58C1(){ note_ctor("S58C1", this);} // tgen

static void Test_S58C1()
{
  extern Class_Descriptor cd_S58C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(51,72)];
    init_test(&cd_S58C1, buf);
    S58C1 *dp, &lv = *(dp=new (buf) S58C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(400,284), "sizeof(S58C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S58C1)");
    check_base_class_offset(lv, (S58C7*)(S58C6*)(S58C5*)(S58C4*)(S58C3*)(S58C2*), 0, "S58C1");
    check_base_class_offset(lv, (S58C6*)(S58C5*)(S58C4*)(S58C3*)(S58C2*), 0, "S58C1");
    check_base_class_offset(lv, (S58C5*)(S58C4*)(S58C3*)(S58C2*), 0, "S58C1");
    check_base_class_offset(lv, (S58C4*)(S58C3*)(S58C2*), 0, "S58C1");
    check_base_class_offset(lv, (S58C3*)(S58C2*), 0, "S58C1");
    check_base_class_offset(lv, (S58C2*), 0, "S58C1");
    check_field_offset(lv, s58c1f0, ABISELECT(392,280), "S58C1.s58c1f0");
    test_class_info(&lv, &cd_S58C1);
    dp->~S58C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS58C1(Test_S58C1, "S58C1", ABISELECT(400,284));

#else // __cplusplus

extern void _ZN5S58C1C1Ev();
extern void _ZN5S58C1D1Ev();
Name_Map name_map_S58C1[] = {
  NSPAIR(_ZN5S58C1C1Ev),
  NSPAIR(_ZN5S58C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S58C7;
extern VTBL_ENTRY _ZTI5S58C7[];
extern  VTBL_ENTRY _ZTV5S58C7[];
extern Class_Descriptor cd_S58C6;
extern VTBL_ENTRY _ZTI5S58C6[];
extern  VTBL_ENTRY _ZTV5S58C6[];
extern Class_Descriptor cd_S58C5;
extern VTBL_ENTRY _ZTI5S58C5[];
extern  VTBL_ENTRY _ZTV5S58C5[];
extern Class_Descriptor cd_S58C4;
extern VTBL_ENTRY _ZTI5S58C4[];
extern  VTBL_ENTRY _ZTV5S58C4[];
extern Class_Descriptor cd_S58C3;
extern VTBL_ENTRY _ZTI5S58C3[];
extern  VTBL_ENTRY _ZTV5S58C3[];
extern Class_Descriptor cd_S58C2;
extern VTBL_ENTRY _ZTI5S58C2[];
extern  VTBL_ENTRY _ZTV5S58C2[];
static Base_Class bases_S58C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S58C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S58C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S58C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S58C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S58C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S58C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S58C1[];
extern void _ZN5S58C1D1Ev();
extern void _ZN5S58C1D0Ev();
extern void _ZN5S58C72v3Ev();
extern void _ZN5S58C72v4Ev();
extern void _ZN5S58C72v5Ev();
extern void _ZN5S58C72v6Ev();
extern void _ZN5S58C72v7Ev();
extern void _ZN5S58C72v8Ev();
extern void _ZN5S58C72v9Ev();
extern void _ZN5S58C73v10Ev();
extern void _ZN5S58C73v11Ev();
extern void _ZN5S58C73v12Ev();
extern void _ZN5S58C73v13Ev();
extern void _ZN5S58C73v14Ev();
extern void _ZN5S58C73v15Ev();
extern void _ZN5S58C73v16Ev();
extern void _ZN5S58C73v17Ev();
extern void _ZN5S58C73v18Ev();
extern void _ZN5S58C73v19Ev();
extern void _ZN5S58C73v20Ev();
extern void _ZN5S58C73v21Ev();
extern void _ZN5S58C73v22Ev();
extern void _ZN5S58C73v23Ev();
extern void _ZN5S58C73v24Ev();
extern void _ZN5S58C73v25Ev();
extern void _ZN5S58C73v26Ev();
extern void _ZN5S58C73v27Ev();
extern void _ZN5S58C73v28Ev();
extern void _ZN5S58C73v29Ev();
extern void _ZN5S58C73v30Ev();
extern void _ZN5S58C73v31Ev();
extern void _ZN5S58C73v32Ev();
extern void _ZN5S58C73v33Ev();
extern void _ZN5S58C73v34Ev();
extern void _ZN5S58C73v35Ev();
extern void _ZN5S58C73v36Ev();
extern void _ZN5S58C73v37Ev();
extern void _ZN5S58C73v38Ev();
extern void _ZN5S58C73v39Ev();
extern void _ZN5S58C73v40Ev();
extern void _ZN5S58C73v41Ev();
extern void _ZN5S58C73v42Ev();
extern void _ZN5S58C73v43Ev();
extern void _ZN5S58C73v44Ev();
extern void _ZN5S58C73v45Ev();
extern void _ZN5S58C73v46Ev();
extern void _ZN5S58C73v47Ev();
extern void _ZN5S58C73v48Ev();
extern void _ZN5S58C73v49Ev();
extern void _ZN5S58C73v50Ev();
extern void _ZN5S58C73v51Ev();
extern void _ZN5S58C73v52Ev();
extern void _ZN5S58C73v53Ev();
extern void _ZN5S58C73v54Ev();
extern void _ZN5S58C73v55Ev();
extern void _ZN5S58C73v56Ev();
extern void _ZN5S58C73v57Ev();
extern void _ZN5S58C73v58Ev();
extern void _ZN5S58C73v59Ev();
extern void _ZN5S58C73v60Ev();
extern void _ZN5S58C73v61Ev();
extern void _ZN5S58C73v62Ev();
extern void _ZN5S58C73v63Ev();
extern void _ZN5S58C73v64Ev();
extern void _ZN5S58C73v65Ev();
extern void _ZN5S58C73v66Ev();
extern void _ZN5S58C63v67Ev();
extern void _ZN5S58C63v68Ev();
extern void _ZN5S58C63v69Ev();
extern void _ZN5S58C63v70Ev();
extern void _ZN5S58C63v71Ev();
extern void _ZN5S58C63v72Ev();
extern void _ZN5S58C63v73Ev();
extern void _ZN5S58C63v74Ev();
extern void _ZN5S58C63v75Ev();
extern void _ZN5S58C63v76Ev();
extern void _ZN5S58C63v77Ev();
extern void _ZN5S58C63v78Ev();
extern void _ZN5S58C63v79Ev();
extern void _ZN5S58C63v80Ev();
extern void _ZN5S58C63v81Ev();
extern void _ZN5S58C63v82Ev();
extern void _ZN5S58C63v83Ev();
extern void _ZN5S58C63v84Ev();
extern void _ZN5S58C63v85Ev();
extern void _ZN5S58C63v86Ev();
extern void _ZN5S58C63v87Ev();
extern void _ZN5S58C63v88Ev();
extern void _ZN5S58C53v89Ev();
extern void _ZN5S58C53v90Ev();
extern void _ZN5S58C53v91Ev();
extern void _ZN5S58C53v92Ev();
extern void _ZN5S58C53v93Ev();
extern void _ZN5S58C53v94Ev();
extern void _ZN5S58C53v95Ev();
extern void _ZN5S58C53v96Ev();
extern void _ZN5S58C53v97Ev();
extern void _ZN5S58C53v98Ev();
extern void _ZN5S58C53v99Ev();
extern void _ZN5S58C54v100Ev();
extern void _ZN5S58C54v101Ev();
extern void _ZN5S58C54v102Ev();
extern void _ZN5S58C54v103Ev();
extern void _ZN5S58C54v104Ev();
extern void _ZN5S58C54v105Ev();
extern void _ZN5S58C54v106Ev();
extern void _ZN5S58C54v107Ev();
extern void _ZN5S58C54v108Ev();
extern void _ZN5S58C44v109Ev();
extern void _ZN5S58C44v110Ev();
extern void _ZN5S58C44v111Ev();
extern void _ZN5S58C44v112Ev();
extern void _ZN5S58C44v113Ev();
extern void _ZN5S58C44v114Ev();
extern void _ZN5S58C44v115Ev();
extern void _ZN5S58C44v116Ev();
extern void _ZN5S58C44v117Ev();
extern void _ZN5S58C44v118Ev();
extern void _ZN5S58C44v119Ev();
extern void _ZN5S58C44v120Ev();
extern void _ZN5S58C44v121Ev();
extern void _ZN5S58C44v122Ev();
extern void _ZN5S58C34v123Ev();
extern void _ZN5S58C34v124Ev();
extern void _ZN5S58C34v125Ev();
extern void _ZN5S58C34v126Ev();
extern void _ZN5S58C34v127Ev();
extern void _ZN5S58C34v128Ev();
extern void _ZN5S58C34v129Ev();
extern void _ZN5S58C34v130Ev();
extern void _ZN5S58C34v131Ev();
extern void _ZN5S58C34v132Ev();
extern void _ZN5S58C34v133Ev();
extern void _ZN5S58C24v134Ev();
extern void _ZN5S58C24v135Ev();
extern void _ZN5S58C12v1Ev();
extern void _ZN5S58C12v2Ev();
static  VTBL_ENTRY vtc_S58C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S58C1[0]),
  (VTBL_ENTRY)&_ZN5S58C1D1Ev,
  (VTBL_ENTRY)&_ZN5S58C1D0Ev,
  (VTBL_ENTRY)&_ZN5S58C72v3Ev,
  (VTBL_ENTRY)&_ZN5S58C72v4Ev,
  (VTBL_ENTRY)&_ZN5S58C72v5Ev,
  (VTBL_ENTRY)&_ZN5S58C72v6Ev,
  (VTBL_ENTRY)&_ZN5S58C72v7Ev,
  (VTBL_ENTRY)&_ZN5S58C72v8Ev,
  (VTBL_ENTRY)&_ZN5S58C72v9Ev,
  (VTBL_ENTRY)&_ZN5S58C73v10Ev,
  (VTBL_ENTRY)&_ZN5S58C73v11Ev,
  (VTBL_ENTRY)&_ZN5S58C73v12Ev,
  (VTBL_ENTRY)&_ZN5S58C73v13Ev,
  (VTBL_ENTRY)&_ZN5S58C73v14Ev,
  (VTBL_ENTRY)&_ZN5S58C73v15Ev,
  (VTBL_ENTRY)&_ZN5S58C73v16Ev,
  (VTBL_ENTRY)&_ZN5S58C73v17Ev,
  (VTBL_ENTRY)&_ZN5S58C73v18Ev,
  (VTBL_ENTRY)&_ZN5S58C73v19Ev,
  (VTBL_ENTRY)&_ZN5S58C73v20Ev,
  (VTBL_ENTRY)&_ZN5S58C73v21Ev,
  (VTBL_ENTRY)&_ZN5S58C73v22Ev,
  (VTBL_ENTRY)&_ZN5S58C73v23Ev,
  (VTBL_ENTRY)&_ZN5S58C73v24Ev,
  (VTBL_ENTRY)&_ZN5S58C73v25Ev,
  (VTBL_ENTRY)&_ZN5S58C73v26Ev,
  (VTBL_ENTRY)&_ZN5S58C73v27Ev,
  (VTBL_ENTRY)&_ZN5S58C73v28Ev,
  (VTBL_ENTRY)&_ZN5S58C73v29Ev,
  (VTBL_ENTRY)&_ZN5S58C73v30Ev,
  (VTBL_ENTRY)&_ZN5S58C73v31Ev,
  (VTBL_ENTRY)&_ZN5S58C73v32Ev,
  (VTBL_ENTRY)&_ZN5S58C73v33Ev,
  (VTBL_ENTRY)&_ZN5S58C73v34Ev,
  (VTBL_ENTRY)&_ZN5S58C73v35Ev,
  (VTBL_ENTRY)&_ZN5S58C73v36Ev,
  (VTBL_ENTRY)&_ZN5S58C73v37Ev,
  (VTBL_ENTRY)&_ZN5S58C73v38Ev,
  (VTBL_ENTRY)&_ZN5S58C73v39Ev,
  (VTBL_ENTRY)&_ZN5S58C73v40Ev,
  (VTBL_ENTRY)&_ZN5S58C73v41Ev,
  (VTBL_ENTRY)&_ZN5S58C73v42Ev,
  (VTBL_ENTRY)&_ZN5S58C73v43Ev,
  (VTBL_ENTRY)&_ZN5S58C73v44Ev,
  (VTBL_ENTRY)&_ZN5S58C73v45Ev,
  (VTBL_ENTRY)&_ZN5S58C73v46Ev,
  (VTBL_ENTRY)&_ZN5S58C73v47Ev,
  (VTBL_ENTRY)&_ZN5S58C73v48Ev,
  (VTBL_ENTRY)&_ZN5S58C73v49Ev,
  (VTBL_ENTRY)&_ZN5S58C73v50Ev,
  (VTBL_ENTRY)&_ZN5S58C73v51Ev,
  (VTBL_ENTRY)&_ZN5S58C73v52Ev,
  (VTBL_ENTRY)&_ZN5S58C73v53Ev,
  (VTBL_ENTRY)&_ZN5S58C73v54Ev,
  (VTBL_ENTRY)&_ZN5S58C73v55Ev,
  (VTBL_ENTRY)&_ZN5S58C73v56Ev,
  (VTBL_ENTRY)&_ZN5S58C73v57Ev,
  (VTBL_ENTRY)&_ZN5S58C73v58Ev,
  (VTBL_ENTRY)&_ZN5S58C73v59Ev,
  (VTBL_ENTRY)&_ZN5S58C73v60Ev,
  (VTBL_ENTRY)&_ZN5S58C73v61Ev,
  (VTBL_ENTRY)&_ZN5S58C73v62Ev,
  (VTBL_ENTRY)&_ZN5S58C73v63Ev,
  (VTBL_ENTRY)&_ZN5S58C73v64Ev,
  (VTBL_ENTRY)&_ZN5S58C73v65Ev,
  (VTBL_ENTRY)&_ZN5S58C73v66Ev,
  (VTBL_ENTRY)&_ZN5S58C63v67Ev,
  (VTBL_ENTRY)&_ZN5S58C63v68Ev,
  (VTBL_ENTRY)&_ZN5S58C63v69Ev,
  (VTBL_ENTRY)&_ZN5S58C63v70Ev,
  (VTBL_ENTRY)&_ZN5S58C63v71Ev,
  (VTBL_ENTRY)&_ZN5S58C63v72Ev,
  (VTBL_ENTRY)&_ZN5S58C63v73Ev,
  (VTBL_ENTRY)&_ZN5S58C63v74Ev,
  (VTBL_ENTRY)&_ZN5S58C63v75Ev,
  (VTBL_ENTRY)&_ZN5S58C63v76Ev,
  (VTBL_ENTRY)&_ZN5S58C63v77Ev,
  (VTBL_ENTRY)&_ZN5S58C63v78Ev,
  (VTBL_ENTRY)&_ZN5S58C63v79Ev,
  (VTBL_ENTRY)&_ZN5S58C63v80Ev,
  (VTBL_ENTRY)&_ZN5S58C63v81Ev,
  (VTBL_ENTRY)&_ZN5S58C63v82Ev,
  (VTBL_ENTRY)&_ZN5S58C63v83Ev,
  (VTBL_ENTRY)&_ZN5S58C63v84Ev,
  (VTBL_ENTRY)&_ZN5S58C63v85Ev,
  (VTBL_ENTRY)&_ZN5S58C63v86Ev,
  (VTBL_ENTRY)&_ZN5S58C63v87Ev,
  (VTBL_ENTRY)&_ZN5S58C63v88Ev,
  (VTBL_ENTRY)&_ZN5S58C53v89Ev,
  (VTBL_ENTRY)&_ZN5S58C53v90Ev,
  (VTBL_ENTRY)&_ZN5S58C53v91Ev,
  (VTBL_ENTRY)&_ZN5S58C53v92Ev,
  (VTBL_ENTRY)&_ZN5S58C53v93Ev,
  (VTBL_ENTRY)&_ZN5S58C53v94Ev,
  (VTBL_ENTRY)&_ZN5S58C53v95Ev,
  (VTBL_ENTRY)&_ZN5S58C53v96Ev,
  (VTBL_ENTRY)&_ZN5S58C53v97Ev,
  (VTBL_ENTRY)&_ZN5S58C53v98Ev,
  (VTBL_ENTRY)&_ZN5S58C53v99Ev,
  (VTBL_ENTRY)&_ZN5S58C54v100Ev,
  (VTBL_ENTRY)&_ZN5S58C54v101Ev,
  (VTBL_ENTRY)&_ZN5S58C54v102Ev,
  (VTBL_ENTRY)&_ZN5S58C54v103Ev,
  (VTBL_ENTRY)&_ZN5S58C54v104Ev,
  (VTBL_ENTRY)&_ZN5S58C54v105Ev,
  (VTBL_ENTRY)&_ZN5S58C54v106Ev,
  (VTBL_ENTRY)&_ZN5S58C54v107Ev,
  (VTBL_ENTRY)&_ZN5S58C54v108Ev,
  (VTBL_ENTRY)&_ZN5S58C44v109Ev,
  (VTBL_ENTRY)&_ZN5S58C44v110Ev,
  (VTBL_ENTRY)&_ZN5S58C44v111Ev,
  (VTBL_ENTRY)&_ZN5S58C44v112Ev,
  (VTBL_ENTRY)&_ZN5S58C44v113Ev,
  (VTBL_ENTRY)&_ZN5S58C44v114Ev,
  (VTBL_ENTRY)&_ZN5S58C44v115Ev,
  (VTBL_ENTRY)&_ZN5S58C44v116Ev,
  (VTBL_ENTRY)&_ZN5S58C44v117Ev,
  (VTBL_ENTRY)&_ZN5S58C44v118Ev,
  (VTBL_ENTRY)&_ZN5S58C44v119Ev,
  (VTBL_ENTRY)&_ZN5S58C44v120Ev,
  (VTBL_ENTRY)&_ZN5S58C44v121Ev,
  (VTBL_ENTRY)&_ZN5S58C44v122Ev,
  (VTBL_ENTRY)&_ZN5S58C34v123Ev,
  (VTBL_ENTRY)&_ZN5S58C34v124Ev,
  (VTBL_ENTRY)&_ZN5S58C34v125Ev,
  (VTBL_ENTRY)&_ZN5S58C34v126Ev,
  (VTBL_ENTRY)&_ZN5S58C34v127Ev,
  (VTBL_ENTRY)&_ZN5S58C34v128Ev,
  (VTBL_ENTRY)&_ZN5S58C34v129Ev,
  (VTBL_ENTRY)&_ZN5S58C34v130Ev,
  (VTBL_ENTRY)&_ZN5S58C34v131Ev,
  (VTBL_ENTRY)&_ZN5S58C34v132Ev,
  (VTBL_ENTRY)&_ZN5S58C34v133Ev,
  (VTBL_ENTRY)&_ZN5S58C24v134Ev,
  (VTBL_ENTRY)&_ZN5S58C24v135Ev,
  (VTBL_ENTRY)&_ZN5S58C12v1Ev,
  (VTBL_ENTRY)&_ZN5S58C12v2Ev,
};
extern VTBL_ENTRY _ZTI5S58C1[];
extern  VTBL_ENTRY _ZTV5S58C1[];
Class_Descriptor cd_S58C1 = {  "S58C1", // class name
  bases_S58C1, 6,
  &(vtc_S58C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(400,284), // object size
  NSPAIRA(_ZTI5S58C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S58C1),139, //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  S59C7  {
  int s59c7f0;
  __tsi64 s59c7f1;
  void *s59c7f2[4];
  int s59c7f3[2];
  void *s59c7f4;
  ::S3350C4_nt s59c7f5;
  void *s59c7f6[2];
  virtual  ~S59C7(); // _ZN5S59C7D1Ev
  virtual void  v3(); // _ZN5S59C72v3Ev
  virtual void  v4(); // _ZN5S59C72v4Ev
  virtual void  v5(); // _ZN5S59C72v5Ev
  virtual void  v6(); // _ZN5S59C72v6Ev
  virtual void  v7(); // _ZN5S59C72v7Ev
  virtual void  v8(); // _ZN5S59C72v8Ev
  virtual void  v9(); // _ZN5S59C72v9Ev
  virtual void  v10(); // _ZN5S59C73v10Ev
  virtual void  v11(); // _ZN5S59C73v11Ev
  virtual void  v12(); // _ZN5S59C73v12Ev
  virtual void  v13(); // _ZN5S59C73v13Ev
  virtual void  v14(); // _ZN5S59C73v14Ev
  virtual void  v15(); // _ZN5S59C73v15Ev
  virtual void  v16(); // _ZN5S59C73v16Ev
  virtual void  v17(); // _ZN5S59C73v17Ev
  virtual void  v18(); // _ZN5S59C73v18Ev
  virtual void  v19(); // _ZN5S59C73v19Ev
  virtual void  v20(); // _ZN5S59C73v20Ev
  virtual void  v21(); // _ZN5S59C73v21Ev
  virtual void  v22(); // _ZN5S59C73v22Ev
  virtual void  v23(); // _ZN5S59C73v23Ev
  virtual void  v24(); // _ZN5S59C73v24Ev
  virtual void  v25(); // _ZN5S59C73v25Ev
  virtual void  v26(); // _ZN5S59C73v26Ev
  virtual void  v27(); // _ZN5S59C73v27Ev
  virtual void  v28(); // _ZN5S59C73v28Ev
  virtual void  v29(); // _ZN5S59C73v29Ev
  virtual void  v30(); // _ZN5S59C73v30Ev
  virtual void  v31(); // _ZN5S59C73v31Ev
  virtual void  v32(); // _ZN5S59C73v32Ev
  virtual void  v33(); // _ZN5S59C73v33Ev
  virtual void  v34(); // _ZN5S59C73v34Ev
  virtual void  v35(); // _ZN5S59C73v35Ev
  virtual void  v36(); // _ZN5S59C73v36Ev
  virtual void  v37(); // _ZN5S59C73v37Ev
  virtual void  v38(); // _ZN5S59C73v38Ev
  virtual void  v39(); // _ZN5S59C73v39Ev
  virtual void  v40(); // _ZN5S59C73v40Ev
  virtual void  v41(); // _ZN5S59C73v41Ev
  virtual void  v42(); // _ZN5S59C73v42Ev
  virtual void  v43(); // _ZN5S59C73v43Ev
  virtual void  v44(); // _ZN5S59C73v44Ev
  virtual void  v45(); // _ZN5S59C73v45Ev
  virtual void  v46(); // _ZN5S59C73v46Ev
  virtual void  v47(); // _ZN5S59C73v47Ev
  virtual void  v48(); // _ZN5S59C73v48Ev
  virtual void  v49(); // _ZN5S59C73v49Ev
  virtual void  v50(); // _ZN5S59C73v50Ev
  virtual void  v51(); // _ZN5S59C73v51Ev
  virtual void  v52(); // _ZN5S59C73v52Ev
  virtual void  v53(); // _ZN5S59C73v53Ev
  virtual void  v54(); // _ZN5S59C73v54Ev
  virtual void  v55(); // _ZN5S59C73v55Ev
  virtual void  v56(); // _ZN5S59C73v56Ev
  virtual void  v57(); // _ZN5S59C73v57Ev
  virtual void  v58(); // _ZN5S59C73v58Ev
  virtual void  v59(); // _ZN5S59C73v59Ev
  virtual void  v60(); // _ZN5S59C73v60Ev
  virtual void  v61(); // _ZN5S59C73v61Ev
  virtual void  v62(); // _ZN5S59C73v62Ev
  virtual void  v63(); // _ZN5S59C73v63Ev
  virtual void  v64(); // _ZN5S59C73v64Ev
  virtual void  v65(); // _ZN5S59C73v65Ev
  virtual void  v66(); // _ZN5S59C73v66Ev
  S59C7(); // tgen
};
//SIG(-1 S59C7) 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]}


 S59C7 ::~S59C7(){ note_dtor("S59C7", this);}
void  S59C7 ::v3(){vfunc_called(this, "_ZN5S59C72v3Ev");}
void  S59C7 ::v4(){vfunc_called(this, "_ZN5S59C72v4Ev");}
void  S59C7 ::v5(){vfunc_called(this, "_ZN5S59C72v5Ev");}
void  S59C7 ::v6(){vfunc_called(this, "_ZN5S59C72v6Ev");}
void  S59C7 ::v7(){vfunc_called(this, "_ZN5S59C72v7Ev");}
void  S59C7 ::v8(){vfunc_called(this, "_ZN5S59C72v8Ev");}
void  S59C7 ::v9(){vfunc_called(this, "_ZN5S59C72v9Ev");}
void  S59C7 ::v10(){vfunc_called(this, "_ZN5S59C73v10Ev");}
void  S59C7 ::v11(){vfunc_called(this, "_ZN5S59C73v11Ev");}
void  S59C7 ::v12(){vfunc_called(this, "_ZN5S59C73v12Ev");}
void  S59C7 ::v13(){vfunc_called(this, "_ZN5S59C73v13Ev");}
void  S59C7 ::v14(){vfunc_called(this, "_ZN5S59C73v14Ev");}
void  S59C7 ::v15(){vfunc_called(this, "_ZN5S59C73v15Ev");}
void  S59C7 ::v16(){vfunc_called(this, "_ZN5S59C73v16Ev");}
void  S59C7 ::v17(){vfunc_called(this, "_ZN5S59C73v17Ev");}
void  S59C7 ::v18(){vfunc_called(this, "_ZN5S59C73v18Ev");}
void  S59C7 ::v19(){vfunc_called(this, "_ZN5S59C73v19Ev");}
void  S59C7 ::v20(){vfunc_called(this, "_ZN5S59C73v20Ev");}
void  S59C7 ::v21(){vfunc_called(this, "_ZN5S59C73v21Ev");}
void  S59C7 ::v22(){vfunc_called(this, "_ZN5S59C73v22Ev");}
void  S59C7 ::v23(){vfunc_called(this, "_ZN5S59C73v23Ev");}
void  S59C7 ::v24(){vfunc_called(this, "_ZN5S59C73v24Ev");}
void  S59C7 ::v25(){vfunc_called(this, "_ZN5S59C73v25Ev");}
void  S59C7 ::v26(){vfunc_called(this, "_ZN5S59C73v26Ev");}
void  S59C7 ::v27(){vfunc_called(this, "_ZN5S59C73v27Ev");}
void  S59C7 ::v28(){vfunc_called(this, "_ZN5S59C73v28Ev");}
void  S59C7 ::v29(){vfunc_called(this, "_ZN5S59C73v29Ev");}
void  S59C7 ::v30(){vfunc_called(this, "_ZN5S59C73v30Ev");}
void  S59C7 ::v31(){vfunc_called(this, "_ZN5S59C73v31Ev");}
void  S59C7 ::v32(){vfunc_called(this, "_ZN5S59C73v32Ev");}
void  S59C7 ::v33(){vfunc_called(this, "_ZN5S59C73v33Ev");}
void  S59C7 ::v34(){vfunc_called(this, "_ZN5S59C73v34Ev");}
void  S59C7 ::v35(){vfunc_called(this, "_ZN5S59C73v35Ev");}
void  S59C7 ::v36(){vfunc_called(this, "_ZN5S59C73v36Ev");}
void  S59C7 ::v37(){vfunc_called(this, "_ZN5S59C73v37Ev");}
void  S59C7 ::v38(){vfunc_called(this, "_ZN5S59C73v38Ev");}
void  S59C7 ::v39(){vfunc_called(this, "_ZN5S59C73v39Ev");}
void  S59C7 ::v40(){vfunc_called(this, "_ZN5S59C73v40Ev");}
void  S59C7 ::v41(){vfunc_called(this, "_ZN5S59C73v41Ev");}
void  S59C7 ::v42(){vfunc_called(this, "_ZN5S59C73v42Ev");}
void  S59C7 ::v43(){vfunc_called(this, "_ZN5S59C73v43Ev");}
void  S59C7 ::v44(){vfunc_called(this, "_ZN5S59C73v44Ev");}
void  S59C7 ::v45(){vfunc_called(this, "_ZN5S59C73v45Ev");}
void  S59C7 ::v46(){vfunc_called(this, "_ZN5S59C73v46Ev");}
void  S59C7 ::v47(){vfunc_called(this, "_ZN5S59C73v47Ev");}
void  S59C7 ::v48(){vfunc_called(this, "_ZN5S59C73v48Ev");}
void  S59C7 ::v49(){vfunc_called(this, "_ZN5S59C73v49Ev");}
void  S59C7 ::v50(){vfunc_called(this, "_ZN5S59C73v50Ev");}
void  S59C7 ::v51(){vfunc_called(this, "_ZN5S59C73v51Ev");}
void  S59C7 ::v52(){vfunc_called(this, "_ZN5S59C73v52Ev");}
void  S59C7 ::v53(){vfunc_called(this, "_ZN5S59C73v53Ev");}
void  S59C7 ::v54(){vfunc_called(this, "_ZN5S59C73v54Ev");}
void  S59C7 ::v55(){vfunc_called(this, "_ZN5S59C73v55Ev");}
void  S59C7 ::v56(){vfunc_called(this, "_ZN5S59C73v56Ev");}
void  S59C7 ::v57(){vfunc_called(this, "_ZN5S59C73v57Ev");}
void  S59C7 ::v58(){vfunc_called(this, "_ZN5S59C73v58Ev");}
void  S59C7 ::v59(){vfunc_called(this, "_ZN5S59C73v59Ev");}
void  S59C7 ::v60(){vfunc_called(this, "_ZN5S59C73v60Ev");}
void  S59C7 ::v61(){vfunc_called(this, "_ZN5S59C73v61Ev");}
void  S59C7 ::v62(){vfunc_called(this, "_ZN5S59C73v62Ev");}
void  S59C7 ::v63(){vfunc_called(this, "_ZN5S59C73v63Ev");}
void  S59C7 ::v64(){vfunc_called(this, "_ZN5S59C73v64Ev");}
void  S59C7 ::v65(){vfunc_called(this, "_ZN5S59C73v65Ev");}
void  S59C7 ::v66(){vfunc_called(this, "_ZN5S59C73v66Ev");}
S59C7 ::S59C7(){ note_ctor("S59C7", this);} // tgen

static void Test_S59C7()
{
  extern Class_Descriptor cd_S59C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S59C7, buf);
    S59C7 *dp, &lv = *(dp=new (buf) S59C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S59C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S59C7)");
    check_field_offset(lv, s59c7f0, ABISELECT(8,4), "S59C7.s59c7f0");
    check_field_offset(lv, s59c7f1, ABISELECT(16,8), "S59C7.s59c7f1");
    check_field_offset(lv, s59c7f2, ABISELECT(24,16), "S59C7.s59c7f2");
    check_field_offset(lv, s59c7f3, ABISELECT(56,32), "S59C7.s59c7f3");
    check_field_offset(lv, s59c7f4, ABISELECT(64,40), "S59C7.s59c7f4");
    check_field_offset(lv, s59c7f5, ABISELECT(72,44), "S59C7.s59c7f5");
    check_field_offset(lv, s59c7f6, ABISELECT(80,52), "S59C7.s59c7f6");
    test_class_info(&lv, &cd_S59C7);
    dp->~S59C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS59C7(Test_S59C7, "S59C7", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN5S59C7C1Ev();
extern void _ZN5S59C7D1Ev();
Name_Map name_map_S59C7[] = {
  NSPAIR(_ZN5S59C7C1Ev),
  NSPAIR(_ZN5S59C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI5S59C7[];
extern void _ZN5S59C7D1Ev();
extern void _ZN5S59C7D0Ev();
extern void _ZN5S59C72v3Ev();
extern void _ZN5S59C72v4Ev();
extern void _ZN5S59C72v5Ev();
extern void _ZN5S59C72v6Ev();
extern void _ZN5S59C72v7Ev();
extern void _ZN5S59C72v8Ev();
extern void _ZN5S59C72v9Ev();
extern void _ZN5S59C73v10Ev();
extern void _ZN5S59C73v11Ev();
extern void _ZN5S59C73v12Ev();
extern void _ZN5S59C73v13Ev();
extern void _ZN5S59C73v14Ev();
extern void _ZN5S59C73v15Ev();
extern void _ZN5S59C73v16Ev();
extern void _ZN5S59C73v17Ev();
extern void _ZN5S59C73v18Ev();
extern void _ZN5S59C73v19Ev();
extern void _ZN5S59C73v20Ev();
extern void _ZN5S59C73v21Ev();
extern void _ZN5S59C73v22Ev();
extern void _ZN5S59C73v23Ev();
extern void _ZN5S59C73v24Ev();
extern void _ZN5S59C73v25Ev();
extern void _ZN5S59C73v26Ev();
extern void _ZN5S59C73v27Ev();
extern void _ZN5S59C73v28Ev();
extern void _ZN5S59C73v29Ev();
extern void _ZN5S59C73v30Ev();
extern void _ZN5S59C73v31Ev();
extern void _ZN5S59C73v32Ev();
extern void _ZN5S59C73v33Ev();
extern void _ZN5S59C73v34Ev();
extern void _ZN5S59C73v35Ev();
extern void _ZN5S59C73v36Ev();
extern void _ZN5S59C73v37Ev();
extern void _ZN5S59C73v38Ev();
extern void _ZN5S59C73v39Ev();
extern void _ZN5S59C73v40Ev();
extern void _ZN5S59C73v41Ev();
extern void _ZN5S59C73v42Ev();
extern void _ZN5S59C73v43Ev();
extern void _ZN5S59C73v44Ev();
extern void _ZN5S59C73v45Ev();
extern void _ZN5S59C73v46Ev();
extern void _ZN5S59C73v47Ev();
extern void _ZN5S59C73v48Ev();
extern void _ZN5S59C73v49Ev();
extern void _ZN5S59C73v50Ev();
extern void _ZN5S59C73v51Ev();
extern void _ZN5S59C73v52Ev();
extern void _ZN5S59C73v53Ev();
extern void _ZN5S59C73v54Ev();
extern void _ZN5S59C73v55Ev();
extern void _ZN5S59C73v56Ev();
extern void _ZN5S59C73v57Ev();
extern void _ZN5S59C73v58Ev();
extern void _ZN5S59C73v59Ev();
extern void _ZN5S59C73v60Ev();
extern void _ZN5S59C73v61Ev();
extern void _ZN5S59C73v62Ev();
extern void _ZN5S59C73v63Ev();
extern void _ZN5S59C73v64Ev();
extern void _ZN5S59C73v65Ev();
extern void _ZN5S59C73v66Ev();
static  VTBL_ENTRY vtc_S59C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S59C7[0]),
  (VTBL_ENTRY)&_ZN5S59C7D1Ev,
  (VTBL_ENTRY)&_ZN5S59C7D0Ev,
  (VTBL_ENTRY)&_ZN5S59C72v3Ev,
  (VTBL_ENTRY)&_ZN5S59C72v4Ev,
  (VTBL_ENTRY)&_ZN5S59C72v5Ev,
  (VTBL_ENTRY)&_ZN5S59C72v6Ev,
  (VTBL_ENTRY)&_ZN5S59C72v7Ev,
  (VTBL_ENTRY)&_ZN5S59C72v8Ev,
  (VTBL_ENTRY)&_ZN5S59C72v9Ev,
  (VTBL_ENTRY)&_ZN5S59C73v10Ev,
  (VTBL_ENTRY)&_ZN5S59C73v11Ev,
  (VTBL_ENTRY)&_ZN5S59C73v12Ev,
  (VTBL_ENTRY)&_ZN5S59C73v13Ev,
  (VTBL_ENTRY)&_ZN5S59C73v14Ev,
  (VTBL_ENTRY)&_ZN5S59C73v15Ev,
  (VTBL_ENTRY)&_ZN5S59C73v16Ev,
  (VTBL_ENTRY)&_ZN5S59C73v17Ev,
  (VTBL_ENTRY)&_ZN5S59C73v18Ev,
  (VTBL_ENTRY)&_ZN5S59C73v19Ev,
  (VTBL_ENTRY)&_ZN5S59C73v20Ev,
  (VTBL_ENTRY)&_ZN5S59C73v21Ev,
  (VTBL_ENTRY)&_ZN5S59C73v22Ev,
  (VTBL_ENTRY)&_ZN5S59C73v23Ev,
  (VTBL_ENTRY)&_ZN5S59C73v24Ev,
  (VTBL_ENTRY)&_ZN5S59C73v25Ev,
  (VTBL_ENTRY)&_ZN5S59C73v26Ev,
  (VTBL_ENTRY)&_ZN5S59C73v27Ev,
  (VTBL_ENTRY)&_ZN5S59C73v28Ev,
  (VTBL_ENTRY)&_ZN5S59C73v29Ev,
  (VTBL_ENTRY)&_ZN5S59C73v30Ev,
  (VTBL_ENTRY)&_ZN5S59C73v31Ev,
  (VTBL_ENTRY)&_ZN5S59C73v32Ev,
  (VTBL_ENTRY)&_ZN5S59C73v33Ev,
  (VTBL_ENTRY)&_ZN5S59C73v34Ev,
  (VTBL_ENTRY)&_ZN5S59C73v35Ev,
  (VTBL_ENTRY)&_ZN5S59C73v36Ev,
  (VTBL_ENTRY)&_ZN5S59C73v37Ev,
  (VTBL_ENTRY)&_ZN5S59C73v38Ev,
  (VTBL_ENTRY)&_ZN5S59C73v39Ev,
  (VTBL_ENTRY)&_ZN5S59C73v40Ev,
  (VTBL_ENTRY)&_ZN5S59C73v41Ev,
  (VTBL_ENTRY)&_ZN5S59C73v42Ev,
  (VTBL_ENTRY)&_ZN5S59C73v43Ev,
  (VTBL_ENTRY)&_ZN5S59C73v44Ev,
  (VTBL_ENTRY)&_ZN5S59C73v45Ev,
  (VTBL_ENTRY)&_ZN5S59C73v46Ev,
  (VTBL_ENTRY)&_ZN5S59C73v47Ev,
  (VTBL_ENTRY)&_ZN5S59C73v48Ev,
  (VTBL_ENTRY)&_ZN5S59C73v49Ev,
  (VTBL_ENTRY)&_ZN5S59C73v50Ev,
  (VTBL_ENTRY)&_ZN5S59C73v51Ev,
  (VTBL_ENTRY)&_ZN5S59C73v52Ev,
  (VTBL_ENTRY)&_ZN5S59C73v53Ev,
  (VTBL_ENTRY)&_ZN5S59C73v54Ev,
  (VTBL_ENTRY)&_ZN5S59C73v55Ev,
  (VTBL_ENTRY)&_ZN5S59C73v56Ev,
  (VTBL_ENTRY)&_ZN5S59C73v57Ev,
  (VTBL_ENTRY)&_ZN5S59C73v58Ev,
  (VTBL_ENTRY)&_ZN5S59C73v59Ev,
  (VTBL_ENTRY)&_ZN5S59C73v60Ev,
  (VTBL_ENTRY)&_ZN5S59C73v61Ev,
  (VTBL_ENTRY)&_ZN5S59C73v62Ev,
  (VTBL_ENTRY)&_ZN5S59C73v63Ev,
  (VTBL_ENTRY)&_ZN5S59C73v64Ev,
  (VTBL_ENTRY)&_ZN5S59C73v65Ev,
  (VTBL_ENTRY)&_ZN5S59C73v66Ev,
};
extern VTBL_ENTRY _ZTI5S59C7[];
extern  VTBL_ENTRY _ZTV5S59C7[];
Class_Descriptor cd_S59C7 = {  "S59C7", // class name
  0,0,//no base classes
  &(vtc_S59C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI5S59C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV5S59C7),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  S59C6  : S59C7 {
  int s59c6f0[2];
  void *s59c6f1;
  int s59c6f2[2];
  ::S287C8_nt s59c6f3;
  ::S287C8_nt s59c6f4;
  ::S2121C38 s59c6f5;
  ::S287C8_nt s59c6f6;
  unsigned int s59c6f7:1;
  unsigned int s59c6f8:1;
  unsigned int s59c6f9:1;
  unsigned int s59c6f10:1;
  unsigned int s59c6f11:1;
  int s59c6f12[2];
  virtual  ~S59C6(); // _ZN5S59C6D1Ev
  virtual void  v67(); // _ZN5S59C63v67Ev
  virtual void  v68(); // _ZN5S59C63v68Ev
  virtual void  v69(); // _ZN5S59C63v69Ev
  virtual void  v70(); // _ZN5S59C63v70Ev
  virtual void  v71(); // _ZN5S59C63v71Ev
  virtual void  v72(); // _ZN5S59C63v72Ev
  virtual void  v73(); // _ZN5S59C63v73Ev
  virtual void  v74(); // _ZN5S59C63v74Ev
  virtual void  v75(); // _ZN5S59C63v75Ev
  virtual void  v76(); // _ZN5S59C63v76Ev
  virtual void  v77(); // _ZN5S59C63v77Ev
  virtual void  v78(); // _ZN5S59C63v78Ev
  virtual void  v79(); // _ZN5S59C63v79Ev
  virtual void  v80(); // _ZN5S59C63v80Ev
  virtual void  v81(); // _ZN5S59C63v81Ev
  virtual void  v82(); // _ZN5S59C63v82Ev
  virtual void  v83(); // _ZN5S59C63v83Ev
  virtual void  v84(); // _ZN5S59C63v84Ev
  virtual void  v85(); // _ZN5S59C63v85Ev
  virtual void  v86(); // _ZN5S59C63v86Ev
  virtual void  v87(); // _ZN5S59C63v87Ev
  virtual void  v88(); // _ZN5S59C63v88Ev
  S59C6(); // tgen
};
//SIG(-1 S59C6) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S59C6 ::~S59C6(){ note_dtor("S59C6", this);}
void  S59C6 ::v67(){vfunc_called(this, "_ZN5S59C63v67Ev");}
void  S59C6 ::v68(){vfunc_called(this, "_ZN5S59C63v68Ev");}
void  S59C6 ::v69(){vfunc_called(this, "_ZN5S59C63v69Ev");}
void  S59C6 ::v70(){vfunc_called(this, "_ZN5S59C63v70Ev");}
void  S59C6 ::v71(){vfunc_called(this, "_ZN5S59C63v71Ev");}
void  S59C6 ::v72(){vfunc_called(this, "_ZN5S59C63v72Ev");}
void  S59C6 ::v73(){vfunc_called(this, "_ZN5S59C63v73Ev");}
void  S59C6 ::v74(){vfunc_called(this, "_ZN5S59C63v74Ev");}
void  S59C6 ::v75(){vfunc_called(this, "_ZN5S59C63v75Ev");}
void  S59C6 ::v76(){vfunc_called(this, "_ZN5S59C63v76Ev");}
void  S59C6 ::v77(){vfunc_called(this, "_ZN5S59C63v77Ev");}
void  S59C6 ::v78(){vfunc_called(this, "_ZN5S59C63v78Ev");}
void  S59C6 ::v79(){vfunc_called(this, "_ZN5S59C63v79Ev");}
void  S59C6 ::v80(){vfunc_called(this, "_ZN5S59C63v80Ev");}
void  S59C6 ::v81(){vfunc_called(this, "_ZN5S59C63v81Ev");}
void  S59C6 ::v82(){vfunc_called(this, "_ZN5S59C63v82Ev");}
void  S59C6 ::v83(){vfunc_called(this, "_ZN5S59C63v83Ev");}
void  S59C6 ::v84(){vfunc_called(this, "_ZN5S59C63v84Ev");}
void  S59C6 ::v85(){vfunc_called(this, "_ZN5S59C63v85Ev");}
void  S59C6 ::v86(){vfunc_called(this, "_ZN5S59C63v86Ev");}
void  S59C6 ::v87(){vfunc_called(this, "_ZN5S59C63v87Ev");}
void  S59C6 ::v88(){vfunc_called(this, "_ZN5S59C63v88Ev");}
S59C6 ::S59C6(){ note_ctor("S59C6", this);} // tgen

static void Test_S59C6()
{
  extern Class_Descriptor cd_S59C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S59C6, buf);
    S59C6 *dp, &lv = *(dp=new (buf) S59C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S59C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S59C6)");
    check_base_class_offset(lv, (S59C7*), 0, "S59C6");
    check_field_offset(lv, s59c6f0, ABISELECT(96,60), "S59C6.s59c6f0");
    check_field_offset(lv, s59c6f1, ABISELECT(104,68), "S59C6.s59c6f1");
    check_field_offset(lv, s59c6f2, ABISELECT(112,72), "S59C6.s59c6f2");
    check_field_offset(lv, s59c6f3, ABISELECT(120,80), "S59C6.s59c6f3");
    check_field_offset(lv, s59c6f4, ABISELECT(136,92), "S59C6.s59c6f4");
    check_field_offset(lv, s59c6f5, ABISELECT(152,104), "S59C6.s59c6f5");
    check_field_offset(lv, s59c6f6, ABISELECT(160,108), "S59C6.s59c6f6");
    set_bf_and_test(lv, s59c6f7, ABISELECT(176,120), 0, 1, 1, "S59C6");
    set_bf_and_test(lv, s59c6f8, ABISELECT(176,120), 1, 1, 1, "S59C6");
    set_bf_and_test(lv, s59c6f9, ABISELECT(176,120), 2, 1, 1, "S59C6");
    set_bf_and_test(lv, s59c6f10, ABISELECT(176,120), 3, 1, 1, "S59C6");
    set_bf_and_test(lv, s59c6f11, ABISELECT(176,120), 4, 1, 1, "S59C6");
    check_field_offset(lv, s59c6f12, ABISELECT(180,124), "S59C6.s59c6f12");
    test_class_info(&lv, &cd_S59C6);
    dp->~S59C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS59C6(Test_S59C6, "S59C6", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN5S59C6C1Ev();
extern void _ZN5S59C6D1Ev();
Name_Map name_map_S59C6[] = {
  NSPAIR(_ZN5S59C6C1Ev),
  NSPAIR(_ZN5S59C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S59C7;
extern VTBL_ENTRY _ZTI5S59C7[];
extern  VTBL_ENTRY _ZTV5S59C7[];
static Base_Class bases_S59C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S59C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI5S59C6[];
extern void _ZN5S59C6D1Ev();
extern void _ZN5S59C6D0Ev();
extern void _ZN5S59C72v3Ev();
extern void _ZN5S59C72v4Ev();
extern void _ZN5S59C72v5Ev();
extern void _ZN5S59C72v6Ev();
extern void _ZN5S59C72v7Ev();
extern void _ZN5S59C72v8Ev();
extern void _ZN5S59C72v9Ev();
extern void _ZN5S59C73v10Ev();
extern void _ZN5S59C73v11Ev();
extern void _ZN5S59C73v12Ev();
extern void _ZN5S59C73v13Ev();
extern void _ZN5S59C73v14Ev();
extern void _ZN5S59C73v15Ev();
extern void _ZN5S59C73v16Ev();
extern void _ZN5S59C73v17Ev();
extern void _ZN5S59C73v18Ev();
extern void _ZN5S59C73v19Ev();
extern void _ZN5S59C73v20Ev();
extern void _ZN5S59C73v21Ev();
extern void _ZN5S59C73v22Ev();
extern void _ZN5S59C73v23Ev();
extern void _ZN5S59C73v24Ev();
extern void _ZN5S59C73v25Ev();
extern void _ZN5S59C73v26Ev();
extern void _ZN5S59C73v27Ev();
extern void _ZN5S59C73v28Ev();
extern void _ZN5S59C73v29Ev();
extern void _ZN5S59C73v30Ev();
extern void _ZN5S59C73v31Ev();
extern void _ZN5S59C73v32Ev();
extern void _ZN5S59C73v33Ev();
extern void _ZN5S59C73v34Ev();
extern void _ZN5S59C73v35Ev();
extern void _ZN5S59C73v36Ev();
extern void _ZN5S59C73v37Ev();
extern void _ZN5S59C73v38Ev();
extern void _ZN5S59C73v39Ev();
extern void _ZN5S59C73v40Ev();
extern void _ZN5S59C73v41Ev();
extern void _ZN5S59C73v42Ev();
extern void _ZN5S59C73v43Ev();
extern void _ZN5S59C73v44Ev();
extern void _ZN5S59C73v45Ev();
extern void _ZN5S59C73v46Ev();
extern void _ZN5S59C73v47Ev();
extern void _ZN5S59C73v48Ev();
extern void _ZN5S59C73v49Ev();
extern void _ZN5S59C73v50Ev();
extern void _ZN5S59C73v51Ev();
extern void _ZN5S59C73v52Ev();
extern void _ZN5S59C73v53Ev();
extern void _ZN5S59C73v54Ev();
extern void _ZN5S59C73v55Ev();
extern void _ZN5S59C73v56Ev();
extern void _ZN5S59C73v57Ev();
extern void _ZN5S59C73v58Ev();
extern void _ZN5S59C73v59Ev();
extern void _ZN5S59C73v60Ev();
extern void _ZN5S59C73v61Ev();
extern void _ZN5S59C73v62Ev();
extern void _ZN5S59C73v63Ev();
extern void _ZN5S59C73v64Ev();
extern void _ZN5S59C73v65Ev();
extern void _ZN5S59C73v66Ev();
extern void _ZN5S59C63v67Ev();
extern void _ZN5S59C63v68Ev();
extern void _ZN5S59C63v69Ev();
extern void _ZN5S59C63v70Ev();
extern void _ZN5S59C63v71Ev();
extern void _ZN5S59C63v72Ev();
extern void _ZN5S59C63v73Ev();
extern void _ZN5S59C63v74Ev();
extern void _ZN5S59C63v75Ev();
extern void _ZN5S59C63v76Ev();
extern void _ZN5S59C63v77Ev();
extern void _ZN5S59C63v78Ev();
extern void _ZN5S59C63v79Ev();
extern void _ZN5S59C63v80Ev();
extern void _ZN5S59C63v81Ev();
extern void _ZN5S59C63v82Ev();
extern void _ZN5S59C63v83Ev();
extern void _ZN5S59C63v84Ev();
extern void _ZN5S59C63v85Ev();
extern void _ZN5S59C63v86Ev();
extern void _ZN5S59C63v87Ev();
extern void _ZN5S59C63v88Ev();
static  VTBL_ENTRY vtc_S59C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S59C6[0]),
  (VTBL_ENTRY)&_ZN5S59C6D1Ev,
  (VTBL_ENTRY)&_ZN5S59C6D0Ev,
  (VTBL_ENTRY)&_ZN5S59C72v3Ev,
  (VTBL_ENTRY)&_ZN5S59C72v4Ev,
  (VTBL_ENTRY)&_ZN5S59C72v5Ev,
  (VTBL_ENTRY)&_ZN5S59C72v6Ev,
  (VTBL_ENTRY)&_ZN5S59C72v7Ev,
  (VTBL_ENTRY)&_ZN5S59C72v8Ev,
  (VTBL_ENTRY)&_ZN5S59C72v9Ev,
  (VTBL_ENTRY)&_ZN5S59C73v10Ev,
  (VTBL_ENTRY)&_ZN5S59C73v11Ev,
  (VTBL_ENTRY)&_ZN5S59C73v12Ev,
  (VTBL_ENTRY)&_ZN5S59C73v13Ev,
  (VTBL_ENTRY)&_ZN5S59C73v14Ev,
  (VTBL_ENTRY)&_ZN5S59C73v15Ev,
  (VTBL_ENTRY)&_ZN5S59C73v16Ev,
  (VTBL_ENTRY)&_ZN5S59C73v17Ev,
  (VTBL_ENTRY)&_ZN5S59C73v18Ev,
  (VTBL_ENTRY)&_ZN5S59C73v19Ev,
  (VTBL_ENTRY)&_ZN5S59C73v20Ev,
  (VTBL_ENTRY)&_ZN5S59C73v21Ev,
  (VTBL_ENTRY)&_ZN5S59C73v22Ev,
  (VTBL_ENTRY)&_ZN5S59C73v23Ev,
  (VTBL_ENTRY)&_ZN5S59C73v24Ev,
  (VTBL_ENTRY)&_ZN5S59C73v25Ev,
  (VTBL_ENTRY)&_ZN5S59C73v26Ev,
  (VTBL_ENTRY)&_ZN5S59C73v27Ev,
  (VTBL_ENTRY)&_ZN5S59C73v28Ev,
  (VTBL_ENTRY)&_ZN5S59C73v29Ev,
  (VTBL_ENTRY)&_ZN5S59C73v30Ev,
  (VTBL_ENTRY)&_ZN5S59C73v31Ev,
  (VTBL_ENTRY)&_ZN5S59C73v32Ev,
  (VTBL_ENTRY)&_ZN5S59C73v33Ev,
  (VTBL_ENTRY)&_ZN5S59C73v34Ev,
  (VTBL_ENTRY)&_ZN5S59C73v35Ev,
  (VTBL_ENTRY)&_ZN5S59C73v36Ev,
  (VTBL_ENTRY)&_ZN5S59C73v37Ev,
  (VTBL_ENTRY)&_ZN5S59C73v38Ev,
  (VTBL_ENTRY)&_ZN5S59C73v39Ev,
  (VTBL_ENTRY)&_ZN5S59C73v40Ev,
  (VTBL_ENTRY)&_ZN5S59C73v41Ev,
  (VTBL_ENTRY)&_ZN5S59C73v42Ev,
  (VTBL_ENTRY)&_ZN5S59C73v43Ev,
  (VTBL_ENTRY)&_ZN5S59C73v44Ev,
  (VTBL_ENTRY)&_ZN5S59C73v45Ev,
  (VTBL_ENTRY)&_ZN5S59C73v46Ev,
  (VTBL_ENTRY)&_ZN5S59C73v47Ev,
  (VTBL_ENTRY)&_ZN5S59C73v48Ev,
  (VTBL_ENTRY)&_ZN5S59C73v49Ev,
  (VTBL_ENTRY)&_ZN5S59C73v50Ev,
  (VTBL_ENTRY)&_ZN5S59C73v51Ev,
  (VTBL_ENTRY)&_ZN5S59C73v52Ev,
  (VTBL_ENTRY)&_ZN5S59C73v53Ev,
  (VTBL_ENTRY)&_ZN5S59C73v54Ev,
  (VTBL_ENTRY)&_ZN5S59C73v55Ev,
  (VTBL_ENTRY)&_ZN5S59C73v56Ev,
  (VTBL_ENTRY)&_ZN5S59C73v57Ev,
  (VTBL_ENTRY)&_ZN5S59C73v58Ev,
  (VTBL_ENTRY)&_ZN5S59C73v59Ev,
  (VTBL_ENTRY)&_ZN5S59C73v60Ev,
  (VTBL_ENTRY)&_ZN5S59C73v61Ev,
  (VTBL_ENTRY)&_ZN5S59C73v62Ev,
  (VTBL_ENTRY)&_ZN5S59C73v63Ev,
  (VTBL_ENTRY)&_ZN5S59C73v64Ev,
  (VTBL_ENTRY)&_ZN5S59C73v65Ev,
  (VTBL_ENTRY)&_ZN5S59C73v66Ev,
  (VTBL_ENTRY)&_ZN5S59C63v67Ev,
  (VTBL_ENTRY)&_ZN5S59C63v68Ev,
  (VTBL_ENTRY)&_ZN5S59C63v69Ev,
  (VTBL_ENTRY)&_ZN5S59C63v70Ev,
  (VTBL_ENTRY)&_ZN5S59C63v71Ev,
  (VTBL_ENTRY)&_ZN5S59C63v72Ev,
  (VTBL_ENTRY)&_ZN5S59C63v73Ev,
  (VTBL_ENTRY)&_ZN5S59C63v74Ev,
  (VTBL_ENTRY)&_ZN5S59C63v75Ev,
  (VTBL_ENTRY)&_ZN5S59C63v76Ev,
  (VTBL_ENTRY)&_ZN5S59C63v77Ev,
  (VTBL_ENTRY)&_ZN5S59C63v78Ev,
  (VTBL_ENTRY)&_ZN5S59C63v79Ev,
  (VTBL_ENTRY)&_ZN5S59C63v80Ev,
  (VTBL_ENTRY)&_ZN5S59C63v81Ev,
  (VTBL_ENTRY)&_ZN5S59C63v82Ev,
  (VTBL_ENTRY)&_ZN5S59C63v83Ev,
  (VTBL_ENTRY)&_ZN5S59C63v84Ev,
  (VTBL_ENTRY)&_ZN5S59C63v85Ev,
  (VTBL_ENTRY)&_ZN5S59C63v86Ev,
  (VTBL_ENTRY)&_ZN5S59C63v87Ev,
  (VTBL_ENTRY)&_ZN5S59C63v88Ev,
};
extern VTBL_ENTRY _ZTI5S59C6[];
extern  VTBL_ENTRY _ZTV5S59C6[];
Class_Descriptor cd_S59C6 = {  "S59C6", // class name
  bases_S59C6, 1,
  &(vtc_S59C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI5S59C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S59C6),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S59C5  : S59C6 {
  unsigned int s59c5f0:1;
  unsigned int s59c5f1:1;
  unsigned int s59c5f2:1;
  ::S3350C17 s59c5f3;
  ::S3350C11 s59c5f4;
  ::S3350C5_nt s59c5f5;
  ::S287C27 s59c5f6;
  int s59c5f7[3];
  virtual  ~S59C5(); // _ZN5S59C5D1Ev
  virtual void  v89(); // _ZN5S59C53v89Ev
  virtual void  v90(); // _ZN5S59C53v90Ev
  virtual void  v91(); // _ZN5S59C53v91Ev
  virtual void  v92(); // _ZN5S59C53v92Ev
  virtual void  v93(); // _ZN5S59C53v93Ev
  virtual void  v94(); // _ZN5S59C53v94Ev
  virtual void  v95(); // _ZN5S59C53v95Ev
  virtual void  v96(); // _ZN5S59C53v96Ev
  virtual void  v97(); // _ZN5S59C53v97Ev
  virtual void  v98(); // _ZN5S59C53v98Ev
  virtual void  v99(); // _ZN5S59C53v99Ev
  virtual void  v100(); // _ZN5S59C54v100Ev
  virtual void  v101(); // _ZN5S59C54v101Ev
  virtual void  v102(); // _ZN5S59C54v102Ev
  virtual void  v103(); // _ZN5S59C54v103Ev
  virtual void  v104(); // _ZN5S59C54v104Ev
  virtual void  v105(); // _ZN5S59C54v105Ev
  virtual void  v106(); // _ZN5S59C54v106Ev
  virtual void  v107(); // _ZN5S59C54v107Ev
  virtual void  v108(); // _ZN5S59C54v108Ev
  S59C5(); // tgen
};
//SIG(-1 S59C5) C1{ BC2{ BC3{ vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 FC10{ BC11{ BC8}} FC12{ BC13{ BC8}} FC14{ BC15{ BC8}} FC16{ BC17{ BC8}} Fi[3]}


 S59C5 ::~S59C5(){ note_dtor("S59C5", this);}
void  S59C5 ::v89(){vfunc_called(this, "_ZN5S59C53v89Ev");}
void  S59C5 ::v90(){vfunc_called(this, "_ZN5S59C53v90Ev");}
void  S59C5 ::v91(){vfunc_called(this, "_ZN5S59C53v91Ev");}
void  S59C5 ::v92(){vfunc_called(this, "_ZN5S59C53v92Ev");}
void  S59C5 ::v93(){vfunc_called(this, "_ZN5S59C53v93Ev");}
void  S59C5 ::v94(){vfunc_called(this, "_ZN5S59C53v94Ev");}
void  S59C5 ::v95(){vfunc_called(this, "_ZN5S59C53v95Ev");}
void  S59C5 ::v96(){vfunc_called(this, "_ZN5S59C53v96Ev");}
void  S59C5 ::v97(){vfunc_called(this, "_ZN5S59C53v97Ev");}
void  S59C5 ::v98(){vfunc_called(this, "_ZN5S59C53v98Ev");}
void  S59C5 ::v99(){vfunc_called(this, "_ZN5S59C53v99Ev");}
void  S59C5 ::v100(){vfunc_called(this, "_ZN5S59C54v100Ev");}
void  S59C5 ::v101(){vfunc_called(this, "_ZN5S59C54v101Ev");}
void  S59C5 ::v102(){vfunc_called(this, "_ZN5S59C54v102Ev");}
void  S59C5 ::v103(){vfunc_called(this, "_ZN5S59C54v103Ev");}
void  S59C5 ::v104(){vfunc_called(this, "_ZN5S59C54v104Ev");}
void  S59C5 ::v105(){vfunc_called(this, "_ZN5S59C54v105Ev");}
void  S59C5 ::v106(){vfunc_called(this, "_ZN5S59C54v106Ev");}
void  S59C5 ::v107(){vfunc_called(this, "_ZN5S59C54v107Ev");}
void  S59C5 ::v108(){vfunc_called(this, "_ZN5S59C54v108Ev");}
S59C5 ::S59C5(){ note_ctor("S59C5", this);} // tgen

static void Test_S59C5()
{
  extern Class_Descriptor cd_S59C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S59C5, buf);
    S59C5 *dp, &lv = *(dp=new (buf) S59C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S59C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S59C5)");
    check_base_class_offset(lv, (S59C7*)(S59C6*), 0, "S59C5");
    check_base_class_offset(lv, (S59C6*), 0, "S59C5");
    set_bf_and_test(lv, s59c5f0, ABISELECT(188,132), 0, 1, 1, "S59C5");
    set_bf_and_test(lv, s59c5f1, ABISELECT(188,132), 1, 1, 1, "S59C5");
    set_bf_and_test(lv, s59c5f2, ABISELECT(188,132), 2, 1, 1, "S59C5");
    check_field_offset(lv, s59c5f3, ABISELECT(192,136), "S59C5.s59c5f3");
    check_field_offset(lv, s59c5f4, ABISELECT(208,148), "S59C5.s59c5f4");
    check_field_offset(lv, s59c5f5, ABISELECT(224,160), "S59C5.s59c5f5");
    check_field_offset(lv, s59c5f6, ABISELECT(240,172), "S59C5.s59c5f6");
    check_field_offset(lv, s59c5f7, ABISELECT(256,184), "S59C5.s59c5f7");
    test_class_info(&lv, &cd_S59C5);
    dp->~S59C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS59C5(Test_S59C5, "S59C5", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN5S59C5C1Ev();
extern void _ZN5S59C5D1Ev();
Name_Map name_map_S59C5[] = {
  NSPAIR(_ZN5S59C5C1Ev),
  NSPAIR(_ZN5S59C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S59C7;
extern VTBL_ENTRY _ZTI5S59C7[];
extern  VTBL_ENTRY _ZTV5S59C7[];
extern Class_Descriptor cd_S59C6;
extern VTBL_ENTRY _ZTI5S59C6[];
extern  VTBL_ENTRY _ZTV5S59C6[];
static Base_Class bases_S59C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S59C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S59C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S59C5[];
extern void _ZN5S59C5D1Ev();
extern void _ZN5S59C5D0Ev();
extern void _ZN5S59C72v3Ev();
extern void _ZN5S59C72v4Ev();
extern void _ZN5S59C72v5Ev();
extern void _ZN5S59C72v6Ev();
extern void _ZN5S59C72v7Ev();
extern void _ZN5S59C72v8Ev();
extern void _ZN5S59C72v9Ev();
extern void _ZN5S59C73v10Ev();
extern void _ZN5S59C73v11Ev();
extern void _ZN5S59C73v12Ev();
extern void _ZN5S59C73v13Ev();
extern void _ZN5S59C73v14Ev();
extern void _ZN5S59C73v15Ev();
extern void _ZN5S59C73v16Ev();
extern void _ZN5S59C73v17Ev();
extern void _ZN5S59C73v18Ev();
extern void _ZN5S59C73v19Ev();
extern void _ZN5S59C73v20Ev();
extern void _ZN5S59C73v21Ev();
extern void _ZN5S59C73v22Ev();
extern void _ZN5S59C73v23Ev();
extern void _ZN5S59C73v24Ev();
extern void _ZN5S59C73v25Ev();
extern void _ZN5S59C73v26Ev();
extern void _ZN5S59C73v27Ev();
extern void _ZN5S59C73v28Ev();
extern void _ZN5S59C73v29Ev();
extern void _ZN5S59C73v30Ev();
extern void _ZN5S59C73v31Ev();
extern void _ZN5S59C73v32Ev();
extern void _ZN5S59C73v33Ev();
extern void _ZN5S59C73v34Ev();
extern void _ZN5S59C73v35Ev();
extern void _ZN5S59C73v36Ev();
extern void _ZN5S59C73v37Ev();
extern void _ZN5S59C73v38Ev();
extern void _ZN5S59C73v39Ev();
extern void _ZN5S59C73v40Ev();
extern void _ZN5S59C73v41Ev();
extern void _ZN5S59C73v42Ev();
extern void _ZN5S59C73v43Ev();
extern void _ZN5S59C73v44Ev();
extern void _ZN5S59C73v45Ev();
extern void _ZN5S59C73v46Ev();
extern void _ZN5S59C73v47Ev();
extern void _ZN5S59C73v48Ev();
extern void _ZN5S59C73v49Ev();
extern void _ZN5S59C73v50Ev();
extern void _ZN5S59C73v51Ev();
extern void _ZN5S59C73v52Ev();
extern void _ZN5S59C73v53Ev();
extern void _ZN5S59C73v54Ev();
extern void _ZN5S59C73v55Ev();
extern void _ZN5S59C73v56Ev();
extern void _ZN5S59C73v57Ev();
extern void _ZN5S59C73v58Ev();
extern void _ZN5S59C73v59Ev();
extern void _ZN5S59C73v60Ev();
extern void _ZN5S59C73v61Ev();
extern void _ZN5S59C73v62Ev();
extern void _ZN5S59C73v63Ev();
extern void _ZN5S59C73v64Ev();
extern void _ZN5S59C73v65Ev();
extern void _ZN5S59C73v66Ev();
extern void _ZN5S59C63v67Ev();
extern void _ZN5S59C63v68Ev();
extern void _ZN5S59C63v69Ev();
extern void _ZN5S59C63v70Ev();
extern void _ZN5S59C63v71Ev();
extern void _ZN5S59C63v72Ev();
extern void _ZN5S59C63v73Ev();
extern void _ZN5S59C63v74Ev();
extern void _ZN5S59C63v75Ev();
extern void _ZN5S59C63v76Ev();
extern void _ZN5S59C63v77Ev();
extern void _ZN5S59C63v78Ev();
extern void _ZN5S59C63v79Ev();
extern void _ZN5S59C63v80Ev();
extern void _ZN5S59C63v81Ev();
extern void _ZN5S59C63v82Ev();
extern void _ZN5S59C63v83Ev();
extern void _ZN5S59C63v84Ev();
extern void _ZN5S59C63v85Ev();
extern void _ZN5S59C63v86Ev();
extern void _ZN5S59C63v87Ev();
extern void _ZN5S59C63v88Ev();
extern void _ZN5S59C53v89Ev();
extern void _ZN5S59C53v90Ev();
extern void _ZN5S59C53v91Ev();
extern void _ZN5S59C53v92Ev();
extern void _ZN5S59C53v93Ev();
extern void _ZN5S59C53v94Ev();
extern void _ZN5S59C53v95Ev();
extern void _ZN5S59C53v96Ev();
extern void _ZN5S59C53v97Ev();
extern void _ZN5S59C53v98Ev();
extern void _ZN5S59C53v99Ev();
extern void _ZN5S59C54v100Ev();
extern void _ZN5S59C54v101Ev();
extern void _ZN5S59C54v102Ev();
extern void _ZN5S59C54v103Ev();
extern void _ZN5S59C54v104Ev();
extern void _ZN5S59C54v105Ev();
extern void _ZN5S59C54v106Ev();
extern void _ZN5S59C54v107Ev();
extern void _ZN5S59C54v108Ev();
static  VTBL_ENTRY vtc_S59C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S59C5[0]),
  (VTBL_ENTRY)&_ZN5S59C5D1Ev,
  (VTBL_ENTRY)&_ZN5S59C5D0Ev,
  (VTBL_ENTRY)&_ZN5S59C72v3Ev,
  (VTBL_ENTRY)&_ZN5S59C72v4Ev,
  (VTBL_ENTRY)&_ZN5S59C72v5Ev,
  (VTBL_ENTRY)&_ZN5S59C72v6Ev,
  (VTBL_ENTRY)&_ZN5S59C72v7Ev,
  (VTBL_ENTRY)&_ZN5S59C72v8Ev,
  (VTBL_ENTRY)&_ZN5S59C72v9Ev,
  (VTBL_ENTRY)&_ZN5S59C73v10Ev,
  (VTBL_ENTRY)&_ZN5S59C73v11Ev,
  (VTBL_ENTRY)&_ZN5S59C73v12Ev,
  (VTBL_ENTRY)&_ZN5S59C73v13Ev,
  (VTBL_ENTRY)&_ZN5S59C73v14Ev,
  (VTBL_ENTRY)&_ZN5S59C73v15Ev,
  (VTBL_ENTRY)&_ZN5S59C73v16Ev,
  (VTBL_ENTRY)&_ZN5S59C73v17Ev,
  (VTBL_ENTRY)&_ZN5S59C73v18Ev,
  (VTBL_ENTRY)&_ZN5S59C73v19Ev,
  (VTBL_ENTRY)&_ZN5S59C73v20Ev,
  (VTBL_ENTRY)&_ZN5S59C73v21Ev,
  (VTBL_ENTRY)&_ZN5S59C73v22Ev,
  (VTBL_ENTRY)&_ZN5S59C73v23Ev,
  (VTBL_ENTRY)&_ZN5S59C73v24Ev,
  (VTBL_ENTRY)&_ZN5S59C73v25Ev,
  (VTBL_ENTRY)&_ZN5S59C73v26Ev,
  (VTBL_ENTRY)&_ZN5S59C73v27Ev,
  (VTBL_ENTRY)&_ZN5S59C73v28Ev,
  (VTBL_ENTRY)&_ZN5S59C73v29Ev,
  (VTBL_ENTRY)&_ZN5S59C73v30Ev,
  (VTBL_ENTRY)&_ZN5S59C73v31Ev,
  (VTBL_ENTRY)&_ZN5S59C73v32Ev,
  (VTBL_ENTRY)&_ZN5S59C73v33Ev,
  (VTBL_ENTRY)&_ZN5S59C73v34Ev,
  (VTBL_ENTRY)&_ZN5S59C73v35Ev,
  (VTBL_ENTRY)&_ZN5S59C73v36Ev,
  (VTBL_ENTRY)&_ZN5S59C73v37Ev,
  (VTBL_ENTRY)&_ZN5S59C73v38Ev,
  (VTBL_ENTRY)&_ZN5S59C73v39Ev,
  (VTBL_ENTRY)&_ZN5S59C73v40Ev,
  (VTBL_ENTRY)&_ZN5S59C73v41Ev,
  (VTBL_ENTRY)&_ZN5S59C73v42Ev,
  (VTBL_ENTRY)&_ZN5S59C73v43Ev,
  (VTBL_ENTRY)&_ZN5S59C73v44Ev,
  (VTBL_ENTRY)&_ZN5S59C73v45Ev,
  (VTBL_ENTRY)&_ZN5S59C73v46Ev,
  (VTBL_ENTRY)&_ZN5S59C73v47Ev,
  (VTBL_ENTRY)&_ZN5S59C73v48Ev,
  (VTBL_ENTRY)&_ZN5S59C73v49Ev,
  (VTBL_ENTRY)&_ZN5S59C73v50Ev,
  (VTBL_ENTRY)&_ZN5S59C73v51Ev,
  (VTBL_ENTRY)&_ZN5S59C73v52Ev,
  (VTBL_ENTRY)&_ZN5S59C73v53Ev,
  (VTBL_ENTRY)&_ZN5S59C73v54Ev,
  (VTBL_ENTRY)&_ZN5S59C73v55Ev,
  (VTBL_ENTRY)&_ZN5S59C73v56Ev,
  (VTBL_ENTRY)&_ZN5S59C73v57Ev,
  (VTBL_ENTRY)&_ZN5S59C73v58Ev,
  (VTBL_ENTRY)&_ZN5S59C73v59Ev,
  (VTBL_ENTRY)&_ZN5S59C73v60Ev,
  (VTBL_ENTRY)&_ZN5S59C73v61Ev,
  (VTBL_ENTRY)&_ZN5S59C73v62Ev,
  (VTBL_ENTRY)&_ZN5S59C73v63Ev,
  (VTBL_ENTRY)&_ZN5S59C73v64Ev,
  (VTBL_ENTRY)&_ZN5S59C73v65Ev,
  (VTBL_ENTRY)&_ZN5S59C73v66Ev,
  (VTBL_ENTRY)&_ZN5S59C63v67Ev,
  (VTBL_ENTRY)&_ZN5S59C63v68Ev,
  (VTBL_ENTRY)&_ZN5S59C63v69Ev,
  (VTBL_ENTRY)&_ZN5S59C63v70Ev,
  (VTBL_ENTRY)&_ZN5S59C63v71Ev,
  (VTBL_ENTRY)&_ZN5S59C63v72Ev,
  (VTBL_ENTRY)&_ZN5S59C63v73Ev,
  (VTBL_ENTRY)&_ZN5S59C63v74Ev,
  (VTBL_ENTRY)&_ZN5S59C63v75Ev,
  (VTBL_ENTRY)&_ZN5S59C63v76Ev,
  (VTBL_ENTRY)&_ZN5S59C63v77Ev,
  (VTBL_ENTRY)&_ZN5S59C63v78Ev,
  (VTBL_ENTRY)&_ZN5S59C63v79Ev,
  (VTBL_ENTRY)&_ZN5S59C63v80Ev,
  (VTBL_ENTRY)&_ZN5S59C63v81Ev,
  (VTBL_ENTRY)&_ZN5S59C63v82Ev,
  (VTBL_ENTRY)&_ZN5S59C63v83Ev,
  (VTBL_ENTRY)&_ZN5S59C63v84Ev,
  (VTBL_ENTRY)&_ZN5S59C63v85Ev,
  (VTBL_ENTRY)&_ZN5S59C63v86Ev,
  (VTBL_ENTRY)&_ZN5S59C63v87Ev,
  (VTBL_ENTRY)&_ZN5S59C63v88Ev,
  (VTBL_ENTRY)&_ZN5S59C53v89Ev,
  (VTBL_ENTRY)&_ZN5S59C53v90Ev,
  (VTBL_ENTRY)&_ZN5S59C53v91Ev,
  (VTBL_ENTRY)&_ZN5S59C53v92Ev,
  (VTBL_ENTRY)&_ZN5S59C53v93Ev,
  (VTBL_ENTRY)&_ZN5S59C53v94Ev,
  (VTBL_ENTRY)&_ZN5S59C53v95Ev,
  (VTBL_ENTRY)&_ZN5S59C53v96Ev,
  (VTBL_ENTRY)&_ZN5S59C53v97Ev,
  (VTBL_ENTRY)&_ZN5S59C53v98Ev,
  (VTBL_ENTRY)&_ZN5S59C53v99Ev,
  (VTBL_ENTRY)&_ZN5S59C54v100Ev,
  (VTBL_ENTRY)&_ZN5S59C54v101Ev,
  (VTBL_ENTRY)&_ZN5S59C54v102Ev,
  (VTBL_ENTRY)&_ZN5S59C54v103Ev,
  (VTBL_ENTRY)&_ZN5S59C54v104Ev,
  (VTBL_ENTRY)&_ZN5S59C54v105Ev,
  (VTBL_ENTRY)&_ZN5S59C54v106Ev,
  (VTBL_ENTRY)&_ZN5S59C54v107Ev,
  (VTBL_ENTRY)&_ZN5S59C54v108Ev,
};
extern VTBL_ENTRY _ZTI5S59C5[];
extern  VTBL_ENTRY _ZTV5S59C5[];
Class_Descriptor cd_S59C5 = {  "S59C5", // class name
  bases_S59C5, 2,
  &(vtc_S59C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI5S59C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S59C5),110, //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  S59C4  : S59C5 {
  void *s59c4f0[2];
  int s59c4f1[4];
  unsigned int s59c4f2:1;
  unsigned int s59c4f3:1;
  unsigned int s59c4f4:1;
  char s59c4f5;
  int s59c4f6;
  unsigned int s59c4f7:1;
  ::S287C23 s59c4f8;
  virtual  ~S59C4(); // _ZN5S59C4D1Ev
  virtual void  v109(); // _ZN5S59C44v109Ev
  virtual void  v110(); // _ZN5S59C44v110Ev
  virtual void  v111(); // _ZN5S59C44v111Ev
  virtual void  v112(); // _ZN5S59C44v112Ev
  virtual void  v113(); // _ZN5S59C44v113Ev
  virtual void  v114(); // _ZN5S59C44v114Ev
  virtual void  v115(); // _ZN5S59C44v115Ev
  virtual void  v116(); // _ZN5S59C44v116Ev
  virtual void  v117(); // _ZN5S59C44v117Ev
  virtual void  v118(); // _ZN5S59C44v118Ev
  virtual void  v119(); // _ZN5S59C44v119Ev
  virtual void  v120(); // _ZN5S59C44v120Ev
  virtual void  v121(); // _ZN5S59C44v121Ev
  virtual void  v122(); // _ZN5S59C44v122Ev
  S59C4(); // tgen
};
//SIG(-1 S59C4) C1{ BC2{ BC3{ BC4{ 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 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 Fi:1 Fi:1 Fi:1 FC11{ BC12{ BC9}} FC13{ BC14{ BC9}} FC15{ BC16{ BC9}} FC17{ BC18{ BC9}} Fi[3]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC19{ BC20{ BC9}}}


 S59C4 ::~S59C4(){ note_dtor("S59C4", this);}
void  S59C4 ::v109(){vfunc_called(this, "_ZN5S59C44v109Ev");}
void  S59C4 ::v110(){vfunc_called(this, "_ZN5S59C44v110Ev");}
void  S59C4 ::v111(){vfunc_called(this, "_ZN5S59C44v111Ev");}
void  S59C4 ::v112(){vfunc_called(this, "_ZN5S59C44v112Ev");}
void  S59C4 ::v113(){vfunc_called(this, "_ZN5S59C44v113Ev");}
void  S59C4 ::v114(){vfunc_called(this, "_ZN5S59C44v114Ev");}
void  S59C4 ::v115(){vfunc_called(this, "_ZN5S59C44v115Ev");}
void  S59C4 ::v116(){vfunc_called(this, "_ZN5S59C44v116Ev");}
void  S59C4 ::v117(){vfunc_called(this, "_ZN5S59C44v117Ev");}
void  S59C4 ::v118(){vfunc_called(this, "_ZN5S59C44v118Ev");}
void  S59C4 ::v119(){vfunc_called(this, "_ZN5S59C44v119Ev");}
void  S59C4 ::v120(){vfunc_called(this, "_ZN5S59C44v120Ev");}
void  S59C4 ::v121(){vfunc_called(this, "_ZN5S59C44v121Ev");}
void  S59C4 ::v122(){vfunc_called(this, "_ZN5S59C44v122Ev");}
S59C4 ::S59C4(){ note_ctor("S59C4", this);} // tgen

static void Test_S59C4()
{
  extern Class_Descriptor cd_S59C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(43,62)];
    init_test(&cd_S59C4, buf);
    S59C4 *dp, &lv = *(dp=new (buf) S59C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,244), "sizeof(S59C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S59C4)");
    check_base_class_offset(lv, (S59C7*)(S59C6*)(S59C5*), 0, "S59C4");
    check_base_class_offset(lv, (S59C6*)(S59C5*), 0, "S59C4");
    check_base_class_offset(lv, (S59C5*), 0, "S59C4");
    check_field_offset(lv, s59c4f0, ABISELECT(272,196), "S59C4.s59c4f0");
    check_field_offset(lv, s59c4f1, ABISELECT(288,204), "S59C4.s59c4f1");
    set_bf_and_test(lv, s59c4f2, ABISELECT(304,220), 0, 1, 1, "S59C4");
    set_bf_and_test(lv, s59c4f3, ABISELECT(304,220), 1, 1, 1, "S59C4");
    set_bf_and_test(lv, s59c4f4, ABISELECT(304,220), 2, 1, 1, "S59C4");
    check_field_offset(lv, s59c4f5, ABISELECT(305,221), "S59C4.s59c4f5");
    check_field_offset(lv, s59c4f6, ABISELECT(308,224), "S59C4.s59c4f6");
    set_bf_and_test(lv, s59c4f7, ABISELECT(312,228), 0, 1, 1, "S59C4");
    check_field_offset(lv, s59c4f8, ABISELECT(320,232), "S59C4.s59c4f8");
    test_class_info(&lv, &cd_S59C4);
    dp->~S59C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS59C4(Test_S59C4, "S59C4", ABISELECT(336,244));

#else // __cplusplus

extern void _ZN5S59C4C1Ev();
extern void _ZN5S59C4D1Ev();
Name_Map name_map_S59C4[] = {
  NSPAIR(_ZN5S59C4C1Ev),
  NSPAIR(_ZN5S59C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S59C7;
extern VTBL_ENTRY _ZTI5S59C7[];
extern  VTBL_ENTRY _ZTV5S59C7[];
extern Class_Descriptor cd_S59C6;
extern VTBL_ENTRY _ZTI5S59C6[];
extern  VTBL_ENTRY _ZTV5S59C6[];
extern Class_Descriptor cd_S59C5;
extern VTBL_ENTRY _ZTI5S59C5[];
extern  VTBL_ENTRY _ZTV5S59C5[];
static Base_Class bases_S59C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S59C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S59C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S59C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S59C4[];
extern void _ZN5S59C4D1Ev();
extern void _ZN5S59C4D0Ev();
extern void _ZN5S59C72v3Ev();
extern void _ZN5S59C72v4Ev();
extern void _ZN5S59C72v5Ev();
extern void _ZN5S59C72v6Ev();
extern void _ZN5S59C72v7Ev();
extern void _ZN5S59C72v8Ev();
extern void _ZN5S59C72v9Ev();
extern void _ZN5S59C73v10Ev();
extern void _ZN5S59C73v11Ev();
extern void _ZN5S59C73v12Ev();
extern void _ZN5S59C73v13Ev();
extern void _ZN5S59C73v14Ev();
extern void _ZN5S59C73v15Ev();
extern void _ZN5S59C73v16Ev();
extern void _ZN5S59C73v17Ev();
extern void _ZN5S59C73v18Ev();
extern void _ZN5S59C73v19Ev();
extern void _ZN5S59C73v20Ev();
extern void _ZN5S59C73v21Ev();
extern void _ZN5S59C73v22Ev();
extern void _ZN5S59C73v23Ev();
extern void _ZN5S59C73v24Ev();
extern void _ZN5S59C73v25Ev();
extern void _ZN5S59C73v26Ev();
extern void _ZN5S59C73v27Ev();
extern void _ZN5S59C73v28Ev();
extern void _ZN5S59C73v29Ev();
extern void _ZN5S59C73v30Ev();
extern void _ZN5S59C73v31Ev();
extern void _ZN5S59C73v32Ev();
extern void _ZN5S59C73v33Ev();
extern void _ZN5S59C73v34Ev();
extern void _ZN5S59C73v35Ev();
extern void _ZN5S59C73v36Ev();
extern void _ZN5S59C73v37Ev();
extern void _ZN5S59C73v38Ev();
extern void _ZN5S59C73v39Ev();
extern void _ZN5S59C73v40Ev();
extern void _ZN5S59C73v41Ev();
extern void _ZN5S59C73v42Ev();
extern void _ZN5S59C73v43Ev();
extern void _ZN5S59C73v44Ev();
extern void _ZN5S59C73v45Ev();
extern void _ZN5S59C73v46Ev();
extern void _ZN5S59C73v47Ev();
extern void _ZN5S59C73v48Ev();
extern void _ZN5S59C73v49Ev();
extern void _ZN5S59C73v50Ev();
extern void _ZN5S59C73v51Ev();
extern void _ZN5S59C73v52Ev();
extern void _ZN5S59C73v53Ev();
extern void _ZN5S59C73v54Ev();
extern void _ZN5S59C73v55Ev();
extern void _ZN5S59C73v56Ev();
extern void _ZN5S59C73v57Ev();
extern void _ZN5S59C73v58Ev();
extern void _ZN5S59C73v59Ev();
extern void _ZN5S59C73v60Ev();
extern void _ZN5S59C73v61Ev();
extern void _ZN5S59C73v62Ev();
extern void _ZN5S59C73v63Ev();
extern void _ZN5S59C73v64Ev();
extern void _ZN5S59C73v65Ev();
extern void _ZN5S59C73v66Ev();
extern void _ZN5S59C63v67Ev();
extern void _ZN5S59C63v68Ev();
extern void _ZN5S59C63v69Ev();
extern void _ZN5S59C63v70Ev();
extern void _ZN5S59C63v71Ev();
extern void _ZN5S59C63v72Ev();
extern void _ZN5S59C63v73Ev();
extern void _ZN5S59C63v74Ev();
extern void _ZN5S59C63v75Ev();
extern void _ZN5S59C63v76Ev();
extern void _ZN5S59C63v77Ev();
extern void _ZN5S59C63v78Ev();
extern void _ZN5S59C63v79Ev();
extern void _ZN5S59C63v80Ev();
extern void _ZN5S59C63v81Ev();
extern void _ZN5S59C63v82Ev();
extern void _ZN5S59C63v83Ev();
extern void _ZN5S59C63v84Ev();
extern void _ZN5S59C63v85Ev();
extern void _ZN5S59C63v86Ev();
extern void _ZN5S59C63v87Ev();
extern void _ZN5S59C63v88Ev();
extern void _ZN5S59C53v89Ev();
extern void _ZN5S59C53v90Ev();
extern void _ZN5S59C53v91Ev();
extern void _ZN5S59C53v92Ev();
extern void _ZN5S59C53v93Ev();
extern void _ZN5S59C53v94Ev();
extern void _ZN5S59C53v95Ev();
extern void _ZN5S59C53v96Ev();
extern void _ZN5S59C53v97Ev();
extern void _ZN5S59C53v98Ev();
extern void _ZN5S59C53v99Ev();
extern void _ZN5S59C54v100Ev();
extern void _ZN5S59C54v101Ev();
extern void _ZN5S59C54v102Ev();
extern void _ZN5S59C54v103Ev();
extern void _ZN5S59C54v104Ev();
extern void _ZN5S59C54v105Ev();
extern void _ZN5S59C54v106Ev();
extern void _ZN5S59C54v107Ev();
extern void _ZN5S59C54v108Ev();
extern void _ZN5S59C44v109Ev();
extern void _ZN5S59C44v110Ev();
extern void _ZN5S59C44v111Ev();
extern void _ZN5S59C44v112Ev();
extern void _ZN5S59C44v113Ev();
extern void _ZN5S59C44v114Ev();
extern void _ZN5S59C44v115Ev();
extern void _ZN5S59C44v116Ev();
extern void _ZN5S59C44v117Ev();
extern void _ZN5S59C44v118Ev();
extern void _ZN5S59C44v119Ev();
extern void _ZN5S59C44v120Ev();
extern void _ZN5S59C44v121Ev();
extern void _ZN5S59C44v122Ev();
static  VTBL_ENTRY vtc_S59C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S59C4[0]),
  (VTBL_ENTRY)&_ZN5S59C4D1Ev,
  (VTBL_ENTRY)&_ZN5S59C4D0Ev,
  (VTBL_ENTRY)&_ZN5S59C72v3Ev,
  (VTBL_ENTRY)&_ZN5S59C72v4Ev,
  (VTBL_ENTRY)&_ZN5S59C72v5Ev,
  (VTBL_ENTRY)&_ZN5S59C72v6Ev,
  (VTBL_ENTRY)&_ZN5S59C72v7Ev,
  (VTBL_ENTRY)&_ZN5S59C72v8Ev,
  (VTBL_ENTRY)&_ZN5S59C72v9Ev,
  (VTBL_ENTRY)&_ZN5S59C73v10Ev,
  (VTBL_ENTRY)&_ZN5S59C73v11Ev,
  (VTBL_ENTRY)&_ZN5S59C73v12Ev,
  (VTBL_ENTRY)&_ZN5S59C73v13Ev,
  (VTBL_ENTRY)&_ZN5S59C73v14Ev,
  (VTBL_ENTRY)&_ZN5S59C73v15Ev,
  (VTBL_ENTRY)&_ZN5S59C73v16Ev,
  (VTBL_ENTRY)&_ZN5S59C73v17Ev,
  (VTBL_ENTRY)&_ZN5S59C73v18Ev,
  (VTBL_ENTRY)&_ZN5S59C73v19Ev,
  (VTBL_ENTRY)&_ZN5S59C73v20Ev,
  (VTBL_ENTRY)&_ZN5S59C73v21Ev,
  (VTBL_ENTRY)&_ZN5S59C73v22Ev,
  (VTBL_ENTRY)&_ZN5S59C73v23Ev,
  (VTBL_ENTRY)&_ZN5S59C73v24Ev,
  (VTBL_ENTRY)&_ZN5S59C73v25Ev,
  (VTBL_ENTRY)&_ZN5S59C73v26Ev,
  (VTBL_ENTRY)&_ZN5S59C73v27Ev,
  (VTBL_ENTRY)&_ZN5S59C73v28Ev,
  (VTBL_ENTRY)&_ZN5S59C73v29Ev,
  (VTBL_ENTRY)&_ZN5S59C73v30Ev,
  (VTBL_ENTRY)&_ZN5S59C73v31Ev,
  (VTBL_ENTRY)&_ZN5S59C73v32Ev,
  (VTBL_ENTRY)&_ZN5S59C73v33Ev,
  (VTBL_ENTRY)&_ZN5S59C73v34Ev,
  (VTBL_ENTRY)&_ZN5S59C73v35Ev,
  (VTBL_ENTRY)&_ZN5S59C73v36Ev,
  (VTBL_ENTRY)&_ZN5S59C73v37Ev,
  (VTBL_ENTRY)&_ZN5S59C73v38Ev,
  (VTBL_ENTRY)&_ZN5S59C73v39Ev,
  (VTBL_ENTRY)&_ZN5S59C73v40Ev,
  (VTBL_ENTRY)&_ZN5S59C73v41Ev,
  (VTBL_ENTRY)&_ZN5S59C73v42Ev,
  (VTBL_ENTRY)&_ZN5S59C73v43Ev,
  (VTBL_ENTRY)&_ZN5S59C73v44Ev,
  (VTBL_ENTRY)&_ZN5S59C73v45Ev,
  (VTBL_ENTRY)&_ZN5S59C73v46Ev,
  (VTBL_ENTRY)&_ZN5S59C73v47Ev,
  (VTBL_ENTRY)&_ZN5S59C73v48Ev,
  (VTBL_ENTRY)&_ZN5S59C73v49Ev,
  (VTBL_ENTRY)&_ZN5S59C73v50Ev,
  (VTBL_ENTRY)&_ZN5S59C73v51Ev,
  (VTBL_ENTRY)&_ZN5S59C73v52Ev,
  (VTBL_ENTRY)&_ZN5S59C73v53Ev,
  (VTBL_ENTRY)&_ZN5S59C73v54Ev,
  (VTBL_ENTRY)&_ZN5S59C73v55Ev,
  (VTBL_ENTRY)&_ZN5S59C73v56Ev,
  (VTBL_ENTRY)&_ZN5S59C73v57Ev,
  (VTBL_ENTRY)&_ZN5S59C73v58Ev,
  (VTBL_ENTRY)&_ZN5S59C73v59Ev,
  (VTBL_ENTRY)&_ZN5S59C73v60Ev,
  (VTBL_ENTRY)&_ZN5S59C73v61Ev,
  (VTBL_ENTRY)&_ZN5S59C73v62Ev,
  (VTBL_ENTRY)&_ZN5S59C73v63Ev,
  (VTBL_ENTRY)&_ZN5S59C73v64Ev,
  (VTBL_ENTRY)&_ZN5S59C73v65Ev,
  (VTBL_ENTRY)&_ZN5S59C73v66Ev,
  (VTBL_ENTRY)&_ZN5S59C63v67Ev,
  (VTBL_ENTRY)&_ZN5S59C63v68Ev,
  (VTBL_ENTRY)&_ZN5S59C63v69Ev,
  (VTBL_ENTRY)&_ZN5S59C63v70Ev,
  (VTBL_ENTRY)&_ZN5S59C63v71Ev,
  (VTBL_ENTRY)&_ZN5S59C63v72Ev,
  (VTBL_ENTRY)&_ZN5S59C63v73Ev,
  (VTBL_ENTRY)&_ZN5S59C63v74Ev,
  (VTBL_ENTRY)&_ZN5S59C63v75Ev,
  (VTBL_ENTRY)&_ZN5S59C63v76Ev,
  (VTBL_ENTRY)&_ZN5S59C63v77Ev,
  (VTBL_ENTRY)&_ZN5S59C63v78Ev,
  (VTBL_ENTRY)&_ZN5S59C63v79Ev,
  (VTBL_ENTRY)&_ZN5S59C63v80Ev,
  (VTBL_ENTRY)&_ZN5S59C63v81Ev,
  (VTBL_ENTRY)&_ZN5S59C63v82Ev,
  (VTBL_ENTRY)&_ZN5S59C63v83Ev,
  (VTBL_ENTRY)&_ZN5S59C63v84Ev,
  (VTBL_ENTRY)&_ZN5S59C63v85Ev,
  (VTBL_ENTRY)&_ZN5S59C63v86Ev,
  (VTBL_ENTRY)&_ZN5S59C63v87Ev,
  (VTBL_ENTRY)&_ZN5S59C63v88Ev,
  (VTBL_ENTRY)&_ZN5S59C53v89Ev,
  (VTBL_ENTRY)&_ZN5S59C53v90Ev,
  (VTBL_ENTRY)&_ZN5S59C53v91Ev,
  (VTBL_ENTRY)&_ZN5S59C53v92Ev,
  (VTBL_ENTRY)&_ZN5S59C53v93Ev,
  (VTBL_ENTRY)&_ZN5S59C53v94Ev,
  (VTBL_ENTRY)&_ZN5S59C53v95Ev,
  (VTBL_ENTRY)&_ZN5S59C53v96Ev,
  (VTBL_ENTRY)&_ZN5S59C53v97Ev,
  (VTBL_ENTRY)&_ZN5S59C53v98Ev,
  (VTBL_ENTRY)&_ZN5S59C53v99Ev,
  (VTBL_ENTRY)&_ZN5S59C54v100Ev,
  (VTBL_ENTRY)&_ZN5S59C54v101Ev,
  (VTBL_ENTRY)&_ZN5S59C54v102Ev,
  (VTBL_ENTRY)&_ZN5S59C54v103Ev,
  (VTBL_ENTRY)&_ZN5S59C54v104Ev,
  (VTBL_ENTRY)&_ZN5S59C54v105Ev,
  (VTBL_ENTRY)&_ZN5S59C54v106Ev,
  (VTBL_ENTRY)&_ZN5S59C54v107Ev,
  (VTBL_ENTRY)&_ZN5S59C54v108Ev,
  (VTBL_ENTRY)&_ZN5S59C44v109Ev,
  (VTBL_ENTRY)&_ZN5S59C44v110Ev,
  (VTBL_ENTRY)&_ZN5S59C44v111Ev,
  (VTBL_ENTRY)&_ZN5S59C44v112Ev,
  (VTBL_ENTRY)&_ZN5S59C44v113Ev,
  (VTBL_ENTRY)&_ZN5S59C44v114Ev,
  (VTBL_ENTRY)&_ZN5S59C44v115Ev,
  (VTBL_ENTRY)&_ZN5S59C44v116Ev,
  (VTBL_ENTRY)&_ZN5S59C44v117Ev,
  (VTBL_ENTRY)&_ZN5S59C44v118Ev,
  (VTBL_ENTRY)&_ZN5S59C44v119Ev,
  (VTBL_ENTRY)&_ZN5S59C44v120Ev,
  (VTBL_ENTRY)&_ZN5S59C44v121Ev,
  (VTBL_ENTRY)&_ZN5S59C44v122Ev,
};
extern VTBL_ENTRY _ZTI5S59C4[];
extern  VTBL_ENTRY _ZTV5S59C4[];
Class_Descriptor cd_S59C4 = {  "S59C4", // class name
  bases_S59C4, 3,
  &(vtc_S59C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(336,244), // object size
  NSPAIRA(_ZTI5S59C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S59C4),124, //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  S59C3  : S59C4 {
  void *s59c3f0[2];
  ::S287C8_nt s59c3f1;
  unsigned int s59c3f2:1;
  unsigned int s59c3f3:1;
  ::S3350C21_nt s59c3f4;
  virtual  ~S59C3(); // _ZN5S59C3D1Ev
  virtual void  v123(); // _ZN5S59C34v123Ev
  virtual void  v124(); // _ZN5S59C34v124Ev
  virtual void  v125(); // _ZN5S59C34v125Ev
  virtual void  v126(); // _ZN5S59C34v126Ev
  virtual void  v127(); // _ZN5S59C34v127Ev
  virtual void  v128(); // _ZN5S59C34v128Ev
  virtual void  v129(); // _ZN5S59C34v129Ev
  virtual void  v130(); // _ZN5S59C34v130Ev
  virtual void  v131(); // _ZN5S59C34v131Ev
  virtual void  v132(); // _ZN5S59C34v132Ev
  virtual void  v133(); // _ZN5S59C34v133Ev
  S59C3(); // tgen
};
//SIG(-1 S59C3) C1{ BC2{ BC3{ BC4{ BC5{ vd v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 Fi[2] Fp Fi[2] FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} FC7 FC11{ m} FC7 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 Fi:1 Fi:1 Fi:1 FC12{ BC13{ BC10}} FC14{ BC15{ BC10}} FC16{ BC17{ BC10}} FC18{ BC19{ BC10}} Fi[3]} vd v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC20{ BC21{ BC10}}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[2] FC7 Fi:1 Fi:1 FC22{ m Fp FC6}}


 S59C3 ::~S59C3(){ note_dtor("S59C3", this);}
void  S59C3 ::v123(){vfunc_called(this, "_ZN5S59C34v123Ev");}
void  S59C3 ::v124(){vfunc_called(this, "_ZN5S59C34v124Ev");}
void  S59C3 ::v125(){vfunc_called(this, "_ZN5S59C34v125Ev");}
void  S59C3 ::v126(){vfunc_called(this, "_ZN5S59C34v126Ev");}
void  S59C3 ::v127(){vfunc_called(this, "_ZN5S59C34v127Ev");}
void  S59C3 ::v128(){vfunc_called(this, "_ZN5S59C34v128Ev");}
void  S59C3 ::v129(){vfunc_called(this, "_ZN5S59C34v129Ev");}
void  S59C3 ::v130(){vfunc_called(this, "_ZN5S59C34v130Ev");}
void  S59C3 ::v131(){vfunc_called(this, "_ZN5S59C34v131Ev");}
void  S59C3 ::v132(){vfunc_called(this, "_ZN5S59C34v132Ev");}
void  S59C3 ::v133(){vfunc_called(this, "_ZN5S59C34v133Ev");}
S59C3 ::S59C3(){ note_ctor("S59C3", this);} // tgen

static void Test_S59C3()
{
  extern Class_Descriptor cd_S59C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(50,71)];
    init_test(&cd_S59C3, buf);
    S59C3 *dp, &lv = *(dp=new (buf) S59C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(392,280), "sizeof(S59C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S59C3)");
    check_base_class_offset(lv, (S59C7*)(S59C6*)(S59C5*)(S59C4*), 0, "S59C3");
    check_base_class_offset(lv, (S59C6*)(S59C5*)(S59C4*), 0, "S59C3");
    check_base_class_offset(lv, (S59C5*)(S59C4*), 0, "S59C3");
    check_base_class_offset(lv, (S59C4*), 0, "S59C3");
    check_field_offset(lv, s59c3f0, ABISELECT(336,244), "S59C3.s59c3f0");
    check_field_offset(lv, s59c3f1, ABISELECT(352,252), "S59C3.s59c3f1");
    set_bf_and_test(lv, s59c3f2, ABISELECT(368,264), 0, 1, 1, "S59C3");
    set_bf_and_test(lv, s59c3f3, ABISELECT(368,264), 1, 1, 1, "S59C3");
    check_field_offset(lv, s59c3f4, ABISELECT(376,268), "S59C3.s59c3f4");
    test_class_info(&lv, &cd_S59C3);
    dp->~S59C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS59C3(Test_S59C3, "S59C3", ABISELECT(392,280));

#else // __cplusplus

extern void _ZN5S59C3C1Ev();
extern void _ZN5S59C3D1Ev();
Name_Map name_map_S59C3[] = {
  NSPAIR(_ZN5S59C3C1Ev),
  NSPAIR(_ZN5S59C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S59C7;
extern VTBL_ENTRY _ZTI5S59C7[];
extern  VTBL_ENTRY _ZTV5S59C7[];
extern Class_Descriptor cd_S59C6;
extern VTBL_ENTRY _ZTI5S59C6[];
extern  VTBL_ENTRY _ZTV5S59C6[];
extern Class_Descriptor cd_S59C5;
extern VTBL_ENTRY _ZTI5S59C5[];
extern  VTBL_ENTRY _ZTV5S59C5[];
extern Class_Descriptor cd_S59C4;
extern VTBL_ENTRY _ZTI5S59C4[];
extern  VTBL_ENTRY _ZTV5S59C4[];
static Base_Class bases_S59C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S59C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S59C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S59C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S59C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S59C3[];
extern void _ZN5S59C3D1Ev();
extern void _ZN5S59C3D0Ev();
extern void _ZN5S59C72v3Ev();
extern void _ZN5S59C72v4Ev();
extern void _ZN5S59C72v5Ev();
extern void _ZN5S59C72v6Ev();
extern void _ZN5S59C72v7Ev();
extern void _ZN5S59C72v8Ev();
extern void _ZN5S59C72v9Ev();
extern void _ZN5S59C73v10Ev();
extern void _ZN5S59C73v11Ev();
extern void _ZN5S59C73v12Ev();
extern void _ZN5S59C73v13Ev();
extern void _ZN5S59C73v14Ev();
extern void _ZN5S59C73v15Ev();
extern void _ZN5S59C73v16Ev();
extern void _ZN5S59C73v17Ev();
extern void _ZN5S59C73v18Ev();
extern void _ZN5S59C73v19Ev();
extern void _ZN5S59C73v20Ev();
extern void _ZN5S59C73v21Ev();
extern void _ZN5S59C73v22Ev();
extern void _ZN5S59C73v23Ev();
extern void _ZN5S59C73v24Ev();
extern void _ZN5S59C73v25Ev();
extern void _ZN5S59C73v26Ev();
extern void _ZN5S59C73v27Ev();
extern void _ZN5S59C73v28Ev();
extern void _ZN5S59C73v29Ev();
extern void _ZN5S59C73v30Ev();
extern void _ZN5S59C73v31Ev();
extern void _ZN5S59C73v32Ev();
extern void _ZN5S59C73v33Ev();
extern void _ZN5S59C73v34Ev();
extern void _ZN5S59C73v35Ev();
extern void _ZN5S59C73v36Ev();
extern void _ZN5S59C73v37Ev();
extern void _ZN5S59C73v38Ev();
extern void _ZN5S59C73v39Ev();
extern void _ZN5S59C73v40Ev();
extern void _ZN5S59C73v41Ev();
extern void _ZN5S59C73v42Ev();
extern void _ZN5S59C73v43Ev();
extern void _ZN5S59C73v44Ev();
extern void _ZN5S59C73v45Ev();
extern void _ZN5S59C73v46Ev();
extern void _ZN5S59C73v47Ev();
extern void _ZN5S59C73v48Ev();
extern void _ZN5S59C73v49Ev();
extern void _ZN5S59C73v50Ev();
extern void _ZN5S59C73v51Ev();
extern void _ZN5S59C73v52Ev();
extern void _ZN5S59C73v53Ev();
extern void _ZN5S59C73v54Ev();
extern void _ZN5S59C73v55Ev();
extern void _ZN5S59C73v56Ev();
extern void _ZN5S59C73v57Ev();
extern void _ZN5S59C73v58Ev();
extern void _ZN5S59C73v59Ev();
extern void _ZN5S59C73v60Ev();
extern void _ZN5S59C73v61Ev();
extern void _ZN5S59C73v62Ev();
extern void _ZN5S59C73v63Ev();
extern void _ZN5S59C73v64Ev();
extern void _ZN5S59C73v65Ev();
extern void _ZN5S59C73v66Ev();
extern void _ZN5S59C63v67Ev();
extern void _ZN5S59C63v68Ev();
extern void _ZN5S59C63v69Ev();
extern void _ZN5S59C63v70Ev();
extern void _ZN5S59C63v71Ev();
extern void _ZN5S59C63v72Ev();
extern void _ZN5S59C63v73Ev();
extern void _ZN5S59C63v74Ev();
extern void _ZN5S59C63v75Ev();
extern void _ZN5S59C63v76Ev();
extern void _ZN5S59C63v77Ev();
extern void _ZN5S59C63v78Ev();
extern void _ZN5S59C63v79Ev();
extern void _ZN5S59C63v80Ev();
extern void _ZN5S59C63v81Ev();
extern void _ZN5S59C63v82Ev();
extern void _ZN5S59C63v83Ev();
extern void _ZN5S59C63v84Ev();
extern void _ZN5S59C63v85Ev();
extern void _ZN5S59C63v86Ev();
extern void _ZN5S59C63v87Ev();
extern void _ZN5S59C63v88Ev();
extern void _ZN5S59C53v89Ev();
extern void _ZN5S59C53v90Ev();
extern void _ZN5S59C53v91Ev();
extern void _ZN5S59C53v92Ev();
extern void _ZN5S59C53v93Ev();
extern void _ZN5S59C53v94Ev();
extern void _ZN5S59C53v95Ev();
extern void _ZN5S59C53v96Ev();
extern void _ZN5S59C53v97Ev();
extern void _ZN5S59C53v98Ev();
extern void _ZN5S59C53v99Ev();
extern void _ZN5S59C54v100Ev();
extern void _ZN5S59C54v101Ev();
extern void _ZN5S59C54v102Ev();
extern void _ZN5S59C54v103Ev();
extern void _ZN5S59C54v104Ev();
extern void _ZN5S59C54v105Ev();
extern void _ZN5S59C54v106Ev();
extern void _ZN5S59C54v107Ev();
extern void _ZN5S59C54v108Ev();
extern void _ZN5S59C44v109Ev();
extern void _ZN5S59C44v110Ev();
extern void _ZN5S59C44v111Ev();
extern void _ZN5S59C44v112Ev();
extern void _ZN5S59C44v113Ev();
extern void _ZN5S59C44v114Ev();
extern void _ZN5S59C44v115Ev();
extern void _ZN5S59C44v116Ev();
extern void _ZN5S59C44v117Ev();
extern void _ZN5S59C44v118Ev();
extern void _ZN5S59C44v119Ev();
extern void _ZN5S59C44v120Ev();
extern void _ZN5S59C44v121Ev();
extern void _ZN5S59C44v122Ev();
extern void _ZN5S59C34v123Ev();
extern void _ZN5S59C34v124Ev();
extern void _ZN5S59C34v125Ev();
extern void _ZN5S59C34v126Ev();
extern void _ZN5S59C34v127Ev();
extern void _ZN5S59C34v128Ev();
extern void _ZN5S59C34v129Ev();
extern void _ZN5S59C34v130Ev();
extern void _ZN5S59C34v131Ev();
extern void _ZN5S59C34v132Ev();
extern void _ZN5S59C34v133Ev();
static  VTBL_ENTRY vtc_S59C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S59C3[0]),
  (VTBL_ENTRY)&_ZN5S59C3D1Ev,
  (VTBL_ENTRY)&_ZN5S59C3D0Ev,
  (VTBL_ENTRY)&_ZN5S59C72v3Ev,
  (VTBL_ENTRY)&_ZN5S59C72v4Ev,
  (VTBL_ENTRY)&_ZN5S59C72v5Ev,
  (VTBL_ENTRY)&_ZN5S59C72v6Ev,
  (VTBL_ENTRY)&_ZN5S59C72v7Ev,
  (VTBL_ENTRY)&_ZN5S59C72v8Ev,
  (VTBL_ENTRY)&_ZN5S59C72v9Ev,
  (VTBL_ENTRY)&_ZN5S59C73v10Ev,
  (VTBL_ENTRY)&_ZN5S59C73v11Ev,
  (VTBL_ENTRY)&_ZN5S59C73v12Ev,
  (VTBL_ENTRY)&_ZN5S59C73v13Ev,
  (VTBL_ENTRY)&_ZN5S59C73v14Ev,
  (VTBL_ENTRY)&_ZN5S59C73v15Ev,
  (VTBL_ENTRY)&_ZN5S59C73v16Ev,
  (VTBL_ENTRY)&_ZN5S59C73v17Ev,
  (VTBL_ENTRY)&_ZN5S59C73v18Ev,
  (VTBL_ENTRY)&_ZN5S59C73v19Ev,
  (VTBL_ENTRY)&_ZN5S59C73v20Ev,
  (VTBL_ENTRY)&_ZN5S59C73v21Ev,
  (VTBL_ENTRY)&_ZN5S59C73v22Ev,
  (VTBL_ENTRY)&_ZN5S59C73v23Ev,
  (VTBL_ENTRY)&_ZN5S59C73v24Ev,
  (VTBL_ENTRY)&_ZN5S59C73v25Ev,
  (VTBL_ENTRY)&_ZN5S59C73v26Ev,
  (VTBL_ENTRY)&_ZN5S59C73v27Ev,
  (VTBL_ENTRY)&_ZN5S59C73v28Ev,
  (VTBL_ENTRY)&_ZN5S59C73v29Ev,
  (VTBL_ENTRY)&_ZN5S59C73v30Ev,
  (VTBL_ENTRY)&_ZN5S59C73v31Ev,
  (VTBL_ENTRY)&_ZN5S59C73v32Ev,
  (VTBL_ENTRY)&_ZN5S59C73v33Ev,
  (VTBL_ENTRY)&_ZN5S59C73v34Ev,
  (VTBL_ENTRY)&_ZN5S59C73v35Ev,
  (VTBL_ENTRY)&_ZN5S59C73v36Ev,
  (VTBL_ENTRY)&_ZN5S59C73v37Ev,
  (VTBL_ENTRY)&_ZN5S59C73v38Ev,
  (VTBL_ENTRY)&_ZN5S59C73v39Ev,
  (VTBL_ENTRY)&_ZN5S59C73v40Ev,
  (VTBL_ENTRY)&_ZN5S59C73v41Ev,
  (VTBL_ENTRY)&_ZN5S59C73v42Ev,
  (VTBL_ENTRY)&_ZN5S59C73v43Ev,
  (VTBL_ENTRY)&_ZN5S59C73v44Ev,
  (VTBL_ENTRY)&_ZN5S59C73v45Ev,
  (VTBL_ENTRY)&_ZN5S59C73v46Ev,
  (VTBL_ENTRY)&_ZN5S59C73v47Ev,
  (VTBL_ENTRY)&_ZN5S59C73v48Ev,
  (VTBL_ENTRY)&_ZN5S59C73v49Ev,
  (VTBL_ENTRY)&_ZN5S59C73v50Ev,
  (VTBL_ENTRY)&_ZN5S59C73v51Ev,
  (VTBL_ENTRY)&_ZN5S59C73v52Ev,
  (VTBL_ENTRY)&_ZN5S59C73v53Ev,
  (VTBL_ENTRY)&_ZN5S59C73v54Ev,
  (VTBL_ENTRY)&_ZN5S59C73v55Ev,
  (VTBL_ENTRY)&_ZN5S59C73v56Ev,
  (VTBL_ENTRY)&_ZN5S59C73v57Ev,
  (VTBL_ENTRY)&_ZN5S59C73v58Ev,
  (VTBL_ENTRY)&_ZN5S59C73v59Ev,
  (VTBL_ENTRY)&_ZN5S59C73v60Ev,
  (VTBL_ENTRY)&_ZN5S59C73v61Ev,
  (VTBL_ENTRY)&_ZN5S59C73v62Ev,
  (VTBL_ENTRY)&_ZN5S59C73v63Ev,
  (VTBL_ENTRY)&_ZN5S59C73v64Ev,
  (VTBL_ENTRY)&_ZN5S59C73v65Ev,
  (VTBL_ENTRY)&_ZN5S59C73v66Ev,
  (VTBL_ENTRY)&_ZN5S59C63v67Ev,
  (VTBL_ENTRY)&_ZN5S59C63v68Ev,
  (VTBL_ENTRY)&_ZN5S59C63v69Ev,
  (VTBL_ENTRY)&_ZN5S59C63v70Ev,
  (VTBL_ENTRY)&_ZN5S59C63v71Ev,
  (VTBL_ENTRY)&_ZN5S59C63v72Ev,
  (VTBL_ENTRY)&_ZN5S59C63v73Ev,
  (VTBL_ENTRY)&_ZN5S59C63v74Ev,
  (VTBL_ENTRY)&_ZN5S59C63v75Ev,
  (VTBL_ENTRY)&_ZN5S59C63v76Ev,
  (VTBL_ENTRY)&_ZN5S59C63v77Ev,
  (VTBL_ENTRY)&_ZN5S59C63v78Ev,
  (VTBL_ENTRY)&_ZN5S59C63v79Ev,
  (VTBL_ENTRY)&_ZN5S59C63v80Ev,
  (VTBL_ENTRY)&_ZN5S59C63v81Ev,
  (VTBL_ENTRY)&_ZN5S59C63v82Ev,
  (VTBL_ENTRY)&_ZN5S59C63v83Ev,
  (VTBL_ENTRY)&_ZN5S59C63v84Ev,
  (VTBL_ENTRY)&_ZN5S59C63v85Ev,
  (VTBL_ENTRY)&_ZN5S59C63v86Ev,
  (VTBL_ENTRY)&_ZN5S59C63v87Ev,
  (VTBL_ENTRY)&_ZN5S59C63v88Ev,
  (VTBL_ENTRY)&_ZN5S59C53v89Ev,
  (VTBL_ENTRY)&_ZN5S59C53v90Ev,
  (VTBL_ENTRY)&_ZN5S59C53v91Ev,
  (VTBL_ENTRY)&_ZN5S59C53v92Ev,
  (VTBL_ENTRY)&_ZN5S59C53v93Ev,
  (VTBL_ENTRY)&_ZN5S59C53v94Ev,
  (VTBL_ENTRY)&_ZN5S59C53v95Ev,
  (VTBL_ENTRY)&_ZN5S59C53v96Ev,
  (VTBL_ENTRY)&_ZN5S59C53v97Ev,
  (VTBL_ENTRY)&_ZN5S59C53v98Ev,
  (VTBL_ENTRY)&_ZN5S59C53v99Ev,
  (VTBL_ENTRY)&_ZN5S59C54v100Ev,
  (VTBL_ENTRY)&_ZN5S59C54v101Ev,
  (VTBL_ENTRY)&_ZN5S59C54v102Ev,
  (VTBL_ENTRY)&_ZN5S59C54v103Ev,
  (VTBL_ENTRY)&_ZN5S59C54v104Ev,
  (VTBL_ENTRY)&_ZN5S59C54v105Ev,
  (VTBL_ENTRY)&_ZN5S59C54v106Ev,
  (VTBL_ENTRY)&_ZN5S59C54v107Ev,
  (VTBL_ENTRY)&_ZN5S59C54v108Ev,
  (VTBL_ENTRY)&_ZN5S59C44v109Ev,
  (VTBL_ENTRY)&_ZN5S59C44v110Ev,
  (VTBL_ENTRY)&_ZN5S59C44v111Ev,
  (VTBL_ENTRY)&_ZN5S59C44v112Ev,
  (VTBL_ENTRY)&_ZN5S59C44v113Ev,
  (VTBL_ENTRY)&_ZN5S59C44v114Ev,
  (VTBL_ENTRY)&_ZN5S59C44v115Ev,
  (VTBL_ENTRY)&_ZN5S59C44v116Ev,
  (VTBL_ENTRY)&_ZN5S59C44v117Ev,
  (VTBL_ENTRY)&_ZN5S59C44v118Ev,
  (VTBL_ENTRY)&_ZN5S59C44v119Ev,
  (VTBL_ENTRY)&_ZN5S59C44v120Ev,
  (VTBL_ENTRY)&_ZN5S59C44v121Ev,
  (VTBL_ENTRY)&_ZN5S59C44v122Ev,
  (VTBL_ENTRY)&_ZN5S59C34v123Ev,
  (VTBL_ENTRY)&_ZN5S59C34v124Ev,
  (VTBL_ENTRY)&_ZN5S59C34v125Ev,
  (VTBL_ENTRY)&_ZN5S59C34v126Ev,
  (VTBL_ENTRY)&_ZN5S59C34v127Ev,
  (VTBL_ENTRY)&_ZN5S59C34v128Ev,
  (VTBL_ENTRY)&_ZN5S59C34v129Ev,
  (VTBL_ENTRY)&_ZN5S59C34v130Ev,
  (VTBL_ENTRY)&_ZN5S59C34v131Ev,
  (VTBL_ENTRY)&_ZN5S59C34v132Ev,
  (VTBL_ENTRY)&_ZN5S59C34v133Ev,
};
extern VTBL_ENTRY _ZTI5S59C3[];
extern  VTBL_ENTRY _ZTV5S59C3[];
Class_Descriptor cd_S59C3 = {  "S59C3", // class name
  bases_S59C3, 4,
  &(vtc_S59C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(392,280), // object size
  NSPAIRA(_ZTI5S59C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S59C3),135, //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  S59C2  : S59C3 {
  virtual  ~S59C2(); // _ZN5S59C2D1Ev
  virtual void  v134(); // _ZN5S59C24v134Ev
  virtual void  v135(); // _ZN5S59C24v135Ev
  S59C2(); // tgen
};
//SIG(-1 S59C2) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ 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 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 Fi FL Fp[4] Fi[2] Fp FC7{ m Fi[2]} Fp[2]} vd v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fi[2] Fp Fi[2] FC8{ BC9{ BC10{ BC11{ m Fp Fi[2]}}}} FC8 FC12{ m} FC8 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 Fi:1 Fi:1 Fi:1 FC13{ BC14{ BC11}} FC15{ BC16{ BC11}} FC17{ BC18{ BC11}} FC19{ BC20{ BC11}} Fi[3]} vd v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC21{ BC22{ BC11}}} vd v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 Fp[2] FC8 Fi:1 Fi:1 FC23{ m Fp FC7}} vd v1 v2}


 S59C2 ::~S59C2(){ note_dtor("S59C2", this);}
void  S59C2 ::v134(){vfunc_called(this, "_ZN5S59C24v134Ev");}
void  S59C2 ::v135(){vfunc_called(this, "_ZN5S59C24v135Ev");}
S59C2 ::S59C2(){ note_ctor("S59C2", this);} // tgen

static void Test_S59C2()
{
  extern Class_Descriptor cd_S59C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(50,71)];
    init_test(&cd_S59C2, buf);
    S59C2 *dp, &lv = *(dp=new (buf) S59C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(392,280), "sizeof(S59C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S59C2)");
    check_base_class_offset(lv, (S59C7*)(S59C6*)(S59C5*)(S59C4*)(S59C3*), 0, "S59C2");
    check_base_class_offset(lv, (S59C6*)(S59C5*)(S59C4*)(S59C3*), 0, "S59C2");
    check_base_class_offset(lv, (S59C5*)(S59C4*)(S59C3*), 0, "S59C2");
    check_base_class_offset(lv, (S59C4*)(S59C3*), 0, "S59C2");
    check_base_class_offset(lv, (S59C3*), 0, "S59C2");
    test_class_info(&lv, &cd_S59C2);
    dp->~S59C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS59C2(Test_S59C2, "S59C2", ABISELECT(392,280));

#else // __cplusplus

extern void _ZN5S59C2C1Ev();
extern void _ZN5S59C2D1Ev();
Name_Map name_map_S59C2[] = {
  NSPAIR(_ZN5S59C2C1Ev),
  NSPAIR(_ZN5S59C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S59C7;
extern VTBL_ENTRY _ZTI5S59C7[];
extern  VTBL_ENTRY _ZTV5S59C7[];
extern Class_Descriptor cd_S59C6;
extern VTBL_ENTRY _ZTI5S59C6[];
extern  VTBL_ENTRY _ZTV5S59C6[];
extern Class_Descriptor cd_S59C5;
extern VTBL_ENTRY _ZTI5S59C5[];
extern  VTBL_ENTRY _ZTV5S59C5[];
extern Class_Descriptor cd_S59C4;
extern VTBL_ENTRY _ZTI5S59C4[];
extern  VTBL_ENTRY _ZTV5S59C4[];
extern Class_Descriptor cd_S59C3;
extern VTBL_ENTRY _ZTI5S59C3[];
extern  VTBL_ENTRY _ZTV5S59C3[];
static Base_Class bases_S59C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S59C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S59C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S59C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S59C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S59C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S59C2[];
extern void _ZN5S59C2D1Ev();
extern void _ZN5S59C2D0Ev();
extern void _ZN5S59C72v3Ev();
extern void _ZN5S59C72v4Ev();
extern void _ZN5S59C72v5Ev();
extern void _ZN5S59C72v6Ev();
extern void _ZN5S59C72v7Ev();
extern void _ZN5S59C72v8Ev();
extern void _ZN5S59C72v9Ev();
extern void _ZN5S59C73v10Ev();
extern void _ZN5S59C73v11Ev();
extern void _ZN5S59C73v12Ev();
extern void _ZN5S59C73v13Ev();
extern void _ZN5S59C73v14Ev();
extern void _ZN5S59C73v15Ev();
extern void _ZN5S59C73v16Ev();
extern void _ZN5S59C73v17Ev();
extern void _ZN5S59C73v18Ev();
extern void _ZN5S59C73v19Ev();
extern void _ZN5S59C73v20Ev();
extern void _ZN5S59C73v21Ev();
extern void _ZN5S59C73v22Ev();
extern void _ZN5S59C73v23Ev();
extern void _ZN5S59C73v24Ev();
extern void _ZN5S59C73v25Ev();
extern void _ZN5S59C73v26Ev();
extern void _ZN5S59C73v27Ev();
extern void _ZN5S59C73v28Ev();
extern void _ZN5S59C73v29Ev();
extern void _ZN5S59C73v30Ev();
extern void _ZN5S59C73v31Ev();
extern void _ZN5S59C73v32Ev();
extern void _ZN5S59C73v33Ev();
extern void _ZN5S59C73v34Ev();
extern void _ZN5S59C73v35Ev();
extern void _ZN5S59C73v36Ev();
extern void _ZN5S59C73v37Ev();
extern void _ZN5S59C73v38Ev();
extern void _ZN5S59C73v39Ev();
extern void _ZN5S59C73v40Ev();
extern void _ZN5S59C73v41Ev();
extern void _ZN5S59C73v42Ev();
extern void _ZN5S59C73v43Ev();
extern void _ZN5S59C73v44Ev();
extern void _ZN5S59C73v45Ev();
extern void _ZN5S59C73v46Ev();
extern void _ZN5S59C73v47Ev();
extern void _ZN5S59C73v48Ev();
extern void _ZN5S59C73v49Ev();
extern void _ZN5S59C73v50Ev();
extern void _ZN5S59C73v51Ev();
extern void _ZN5S59C73v52Ev();
extern void _ZN5S59C73v53Ev();
extern void _ZN5S59C73v54Ev();
extern void _ZN5S59C73v55Ev();
extern void _ZN5S59C73v56Ev();
extern void _ZN5S59C73v57Ev();
extern void _ZN5S59C73v58Ev();
extern void _ZN5S59C73v59Ev();
extern void _ZN5S59C73v60Ev();
extern void _ZN5S59C73v61Ev();
extern void _ZN5S59C73v62Ev();
extern void _ZN5S59C73v63Ev();
extern void _ZN5S59C73v64Ev();
extern void _ZN5S59C73v65Ev();
extern void _ZN5S59C73v66Ev();
extern void _ZN5S59C63v67Ev();
extern void _ZN5S59C63v68Ev();
extern void _ZN5S59C63v69Ev();
extern void _ZN5S59C63v70Ev();
extern void _ZN5S59C63v71Ev();
extern void _ZN5S59C63v72Ev();
extern void _ZN5S59C63v73Ev();
extern void _ZN5S59C63v74Ev();
extern void _ZN5S59C63v75Ev();
extern void _ZN5S59C63v76Ev();
extern void _ZN5S59C63v77Ev();
extern void _ZN5S59C63v78Ev();
extern void _ZN5S59C63v79Ev();
extern void _ZN5S59C63v80Ev();
extern void _ZN5S59C63v81Ev();
extern void _ZN5S59C63v82Ev();
extern void _ZN5S59C63v83Ev();
extern void _ZN5S59C63v84Ev();
extern void _ZN5S59C63v85Ev();
extern void _ZN5S59C63v86Ev();
extern void _ZN5S59C63v87Ev();
extern void _ZN5S59C63v88Ev();
extern void _ZN5S59C53v89Ev();
extern void _ZN5S59C53v90Ev();
extern void _ZN5S59C53v91Ev();
extern void _ZN5S59C53v92Ev();
extern void _ZN5S59C53v93Ev();
extern void _ZN5S59C53v94Ev();
extern void _ZN5S59C53v95Ev();
extern void _ZN5S59C53v96Ev();
extern void _ZN5S59C53v97Ev();
extern void _ZN5S59C53v98Ev();
extern void _ZN5S59C53v99Ev();
extern void _ZN5S59C54v100Ev();
extern void _ZN5S59C54v101Ev();
extern void _ZN5S59C54v102Ev();
extern void _ZN5S59C54v103Ev();
extern void _ZN5S59C54v104Ev();
extern void _ZN5S59C54v105Ev();
extern void _ZN5S59C54v106Ev();
extern void _ZN5S59C54v107Ev();
extern void _ZN5S59C54v108Ev();
extern void _ZN5S59C44v109Ev();
extern void _ZN5S59C44v110Ev();
extern void _ZN5S59C44v111Ev();
extern void _ZN5S59C44v112Ev();
extern void _ZN5S59C44v113Ev();
extern void _ZN5S59C44v114Ev();
extern void _ZN5S59C44v115Ev();
extern void _ZN5S59C44v116Ev();
extern void _ZN5S59C44v117Ev();
extern void _ZN5S59C44v118Ev();
extern void _ZN5S59C44v119Ev();
extern void _ZN5S59C44v120Ev();
extern void _ZN5S59C44v121Ev();
extern void _ZN5S59C44v122Ev();
extern void _ZN5S59C34v123Ev();
extern void _ZN5S59C34v124Ev();
extern void _ZN5S59C34v125Ev();
extern void _ZN5S59C34v126Ev();
extern void _ZN5S59C34v127Ev();
extern void _ZN5S59C34v128Ev();
extern void _ZN5S59C34v129Ev();
extern void _ZN5S59C34v130Ev();
extern void _ZN5S59C34v131Ev();
extern void _ZN5S59C34v132Ev();
extern void _ZN5S59C34v133Ev();
extern void _ZN5S59C24v134Ev();
extern void _ZN5S59C24v135Ev();
static  VTBL_ENTRY vtc_S59C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S59C2[0]),
  (VTBL_ENTRY)&_ZN5S59C2D1Ev,
  (VTBL_ENTRY)&_ZN5S59C2D0Ev,
  (VTBL_ENTRY)&_ZN5S59C72v3Ev,
  (VTBL_ENTRY)&_ZN5S59C72v4Ev,
  (VTBL_ENTRY)&_ZN5S59C72v5Ev,
  (VTBL_ENTRY)&_ZN5S59C72v6Ev,
  (VTBL_ENTRY)&_ZN5S59C72v7Ev,
  (VTBL_ENTRY)&_ZN5S59C72v8Ev,
  (VTBL_ENTRY)&_ZN5S59C72v9Ev,
  (VTBL_ENTRY)&_ZN5S59C73v10Ev,
  (VTBL_ENTRY)&_ZN5S59C73v11Ev,
  (VTBL_ENTRY)&_ZN5S59C73v12Ev,
  (VTBL_ENTRY)&_ZN5S59C73v13Ev,
  (VTBL_ENTRY)&_ZN5S59C73v14Ev,
  (VTBL_ENTRY)&_ZN5S59C73v15Ev,
  (VTBL_ENTRY)&_ZN5S59C73v16Ev,
  (VTBL_ENTRY)&_ZN5S59C73v17Ev,
  (VTBL_ENTRY)&_ZN5S59C73v18Ev,
  (VTBL_ENTRY)&_ZN5S59C73v19Ev,
  (VTBL_ENTRY)&_ZN5S59C73v20Ev,
  (VTBL_ENTRY)&_ZN5S59C73v21Ev,
  (VTBL_ENTRY)&_ZN5S59C73v22Ev,
  (VTBL_ENTRY)&_ZN5S59C73v23Ev,
  (VTBL_ENTRY)&_ZN5S59C73v24Ev,
  (VTBL_ENTRY)&_ZN5S59C73v25Ev,
  (VTBL_ENTRY)&_ZN5S59C73v26Ev,
  (VTBL_ENTRY)&_ZN5S59C73v27Ev,
  (VTBL_ENTRY)&_ZN5S59C73v28Ev,
  (VTBL_ENTRY)&_ZN5S59C73v29Ev,
  (VTBL_ENTRY)&_ZN5S59C73v30Ev,
  (VTBL_ENTRY)&_ZN5S59C73v31Ev,
  (VTBL_ENTRY)&_ZN5S59C73v32Ev,
  (VTBL_ENTRY)&_ZN5S59C73v33Ev,
  (VTBL_ENTRY)&_ZN5S59C73v34Ev,
  (VTBL_ENTRY)&_ZN5S59C73v35Ev,
  (VTBL_ENTRY)&_ZN5S59C73v36Ev,
  (VTBL_ENTRY)&_ZN5S59C73v37Ev,
  (VTBL_ENTRY)&_ZN5S59C73v38Ev,
  (VTBL_ENTRY)&_ZN5S59C73v39Ev,
  (VTBL_ENTRY)&_ZN5S59C73v40Ev,
  (VTBL_ENTRY)&_ZN5S59C73v41Ev,
  (VTBL_ENTRY)&_ZN5S59C73v42Ev,
  (VTBL_ENTRY)&_ZN5S59C73v43Ev,
  (VTBL_ENTRY)&_ZN5S59C73v44Ev,
  (VTBL_ENTRY)&_ZN5S59C73v45Ev,
  (VTBL_ENTRY)&_ZN5S59C73v46Ev,
  (VTBL_ENTRY)&_ZN5S59C73v47Ev,
  (VTBL_ENTRY)&_ZN5S59C73v48Ev,
  (VTBL_ENTRY)&_ZN5S59C73v49Ev,
  (VTBL_ENTRY)&_ZN5S59C73v50Ev,
  (VTBL_ENTRY)&_ZN5S59C73v51Ev,
  (VTBL_ENTRY)&_ZN5S59C73v52Ev,
  (VTBL_ENTRY)&_ZN5S59C73v53Ev,
  (VTBL_ENTRY)&_ZN5S59C73v54Ev,
  (VTBL_ENTRY)&_ZN5S59C73v55Ev,
  (VTBL_ENTRY)&_ZN5S59C73v56Ev,
  (VTBL_ENTRY)&_ZN5S59C73v57Ev,
  (VTBL_ENTRY)&_ZN5S59C73v58Ev,
  (VTBL_ENTRY)&_ZN5S59C73v59Ev,
  (VTBL_ENTRY)&_ZN5S59C73v60Ev,
  (VTBL_ENTRY)&_ZN5S59C73v61Ev,
  (VTBL_ENTRY)&_ZN5S59C73v62Ev,
  (VTBL_ENTRY)&_ZN5S59C73v63Ev,
  (VTBL_ENTRY)&_ZN5S59C73v64Ev,
  (VTBL_ENTRY)&_ZN5S59C73v65Ev,
  (VTBL_ENTRY)&_ZN5S59C73v66Ev,
  (VTBL_ENTRY)&_ZN5S59C63v67Ev,
  (VTBL_ENTRY)&_ZN5S59C63v68Ev,
  (VTBL_ENTRY)&_ZN5S59C63v69Ev,
  (VTBL_ENTRY)&_ZN5S59C63v70Ev,
  (VTBL_ENTRY)&_ZN5S59C63v71Ev,
  (VTBL_ENTRY)&_ZN5S59C63v72Ev,
  (VTBL_ENTRY)&_ZN5S59C63v73Ev,
  (VTBL_ENTRY)&_ZN5S59C63v74Ev,
  (VTBL_ENTRY)&_ZN5S59C63v75Ev,
  (VTBL_ENTRY)&_ZN5S59C63v76Ev,
  (VTBL_ENTRY)&_ZN5S59C63v77Ev,
  (VTBL_ENTRY)&_ZN5S59C63v78Ev,
  (VTBL_ENTRY)&_ZN5S59C63v79Ev,
  (VTBL_ENTRY)&_ZN5S59C63v80Ev,
  (VTBL_ENTRY)&_ZN5S59C63v81Ev,
  (VTBL_ENTRY)&_ZN5S59C63v82Ev,
  (VTBL_ENTRY)&_ZN5S59C63v83Ev,
  (VTBL_ENTRY)&_ZN5S59C63v84Ev,
  (VTBL_ENTRY)&_ZN5S59C63v85Ev,
  (VTBL_ENTRY)&_ZN5S59C63v86Ev,
  (VTBL_ENTRY)&_ZN5S59C63v87Ev,
  (VTBL_ENTRY)&_ZN5S59C63v88Ev,
  (VTBL_ENTRY)&_ZN5S59C53v89Ev,
  (VTBL_ENTRY)&_ZN5S59C53v90Ev,
  (VTBL_ENTRY)&_ZN5S59C53v91Ev,
  (VTBL_ENTRY)&_ZN5S59C53v92Ev,
  (VTBL_ENTRY)&_ZN5S59C53v93Ev,
  (VTBL_ENTRY)&_ZN5S59C53v94Ev,
  (VTBL_ENTRY)&_ZN5S59C53v95Ev,
  (VTBL_ENTRY)&_ZN5S59C53v96Ev,
  (VTBL_ENTRY)&_ZN5S59C53v97Ev,
  (VTBL_ENTRY)&_ZN5S59C53v98Ev,
  (VTBL_ENTRY)&_ZN5S59C53v99Ev,
  (VTBL_ENTRY)&_ZN5S59C54v100Ev,
  (VTBL_ENTRY)&_ZN5S59C54v101Ev,
  (VTBL_ENTRY)&_ZN5S59C54v102Ev,
  (VTBL_ENTRY)&_ZN5S59C54v103Ev,
  (VTBL_ENTRY)&_ZN5S59C54v104Ev,
  (VTBL_ENTRY)&_ZN5S59C54v105Ev,
  (VTBL_ENTRY)&_ZN5S59C54v106Ev,
  (VTBL_ENTRY)&_ZN5S59C54v107Ev,
  (VTBL_ENTRY)&_ZN5S59C54v108Ev,
  (VTBL_ENTRY)&_ZN5S59C44v109Ev,
  (VTBL_ENTRY)&_ZN5S59C44v110Ev,
  (VTBL_ENTRY)&_ZN5S59C44v111Ev,
  (VTBL_ENTRY)&_ZN5S59C44v112Ev,
  (VTBL_ENTRY)&_ZN5S59C44v113Ev,
  (VTBL_ENTRY)&_ZN5S59C44v114Ev,
  (VTBL_ENTRY)&_ZN5S59C44v115Ev,
  (VTBL_ENTRY)&_ZN5S59C44v116Ev,
  (VTBL_ENTRY)&_ZN5S59C44v117Ev,
  (VTBL_ENTRY)&_ZN5S59C44v118Ev,
  (VTBL_ENTRY)&_ZN5S59C44v119Ev,
  (VTBL_ENTRY)&_ZN5S59C44v120Ev,
  (VTBL_ENTRY)&_ZN5S59C44v121Ev,
  (VTBL_ENTRY)&_ZN5S59C44v122Ev,
  (VTBL_ENTRY)&_ZN5S59C34v123Ev,
  (VTBL_ENTRY)&_ZN5S59C34v124Ev,
  (VTBL_ENTRY)&_ZN5S59C34v125Ev,
  (VTBL_ENTRY)&_ZN5S59C34v126Ev,
  (VTBL_ENTRY)&_ZN5S59C34v127Ev,
  (VTBL_ENTRY)&_ZN5S59C34v128Ev,
  (VTBL_ENTRY)&_ZN5S59C34v129Ev,
  (VTBL_ENTRY)&_ZN5S59C34v130Ev,
  (VTBL_ENTRY)&_ZN5S59C34v131Ev,
  (VTBL_ENTRY)&_ZN5S59C34v132Ev,
  (VTBL_ENTRY)&_ZN5S59C34v133Ev,
  (VTBL_ENTRY)&_ZN5S59C24v134Ev,
  (VTBL_ENTRY)&_ZN5S59C24v135Ev,
};
extern VTBL_ENTRY _ZTI5S59C2[];
extern  VTBL_ENTRY _ZTV5S59C2[];
Class_Descriptor cd_S59C2 = {  "S59C2", // class name
  bases_S59C2, 5,
  &(vtc_S59C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(392,280), // object size
  NSPAIRA(_ZTI5S59C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S59C2),137, //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  S59C1  : S59C2 {
  virtual  ~S59C1(); // _ZN5S59C1D1Ev
  virtual void  v1(); // _ZN5S59C12v1Ev
  virtual void  v2(); // _ZN5S59C12v2Ev
  S59C1(); // tgen
};
//SIG(1 S59C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ 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 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 Fi FL Fp[4] Fi[2] Fp FC8{ m Fi[2]} Fp[2]} vd v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fi[2] Fp Fi[2] FC9{ BC10{ BC11{ BC12{ m Fp Fi[2]}}}} FC9 FC13{ m} FC9 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 Fi:1 Fi:1 Fi:1 FC14{ BC15{ BC12}} FC16{ BC17{ BC12}} FC18{ BC19{ BC12}} FC20{ BC21{ BC12}} Fi[3]} vd v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC22{ BC23{ BC12}}} vd v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 Fp[2] FC9 Fi:1 Fi:1 FC24{ m Fp FC8}} vd v134 v135} vd v1 v2}


 S59C1 ::~S59C1(){ note_dtor("S59C1", this);}
void  S59C1 ::v1(){vfunc_called(this, "_ZN5S59C12v1Ev");}
void  S59C1 ::v2(){vfunc_called(this, "_ZN5S59C12v2Ev");}
S59C1 ::S59C1(){ note_ctor("S59C1", this);} // tgen

static void Test_S59C1()
{
  extern Class_Descriptor cd_S59C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(50,71)];
    init_test(&cd_S59C1, buf);
    S59C1 *dp, &lv = *(dp=new (buf) S59C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(392,280), "sizeof(S59C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S59C1)");
    check_base_class_offset(lv, (S59C7*)(S59C6*)(S59C5*)(S59C4*)(S59C3*)(S59C2*), 0, "S59C1");
    check_base_class_offset(lv, (S59C6*)(S59C5*)(S59C4*)(S59C3*)(S59C2*), 0, "S59C1");
    check_base_class_offset(lv, (S59C5*)(S59C4*)(S59C3*)(S59C2*), 0, "S59C1");
    check_base_class_offset(lv, (S59C4*)(S59C3*)(S59C2*), 0, "S59C1");
    check_base_class_offset(lv, (S59C3*)(S59C2*), 0, "S59C1");
    check_base_class_offset(lv, (S59C2*), 0, "S59C1");
    test_class_info(&lv, &cd_S59C1);
    dp->~S59C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS59C1(Test_S59C1, "S59C1", ABISELECT(392,280));

#else // __cplusplus

extern void _ZN5S59C1C1Ev();
extern void _ZN5S59C1D1Ev();
Name_Map name_map_S59C1[] = {
  NSPAIR(_ZN5S59C1C1Ev),
  NSPAIR(_ZN5S59C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S59C7;
extern VTBL_ENTRY _ZTI5S59C7[];
extern  VTBL_ENTRY _ZTV5S59C7[];
extern Class_Descriptor cd_S59C6;
extern VTBL_ENTRY _ZTI5S59C6[];
extern  VTBL_ENTRY _ZTV5S59C6[];
extern Class_Descriptor cd_S59C5;
extern VTBL_ENTRY _ZTI5S59C5[];
extern  VTBL_ENTRY _ZTV5S59C5[];
extern Class_Descriptor cd_S59C4;
extern VTBL_ENTRY _ZTI5S59C4[];
extern  VTBL_ENTRY _ZTV5S59C4[];
extern Class_Descriptor cd_S59C3;
extern VTBL_ENTRY _ZTI5S59C3[];
extern  VTBL_ENTRY _ZTV5S59C3[];
extern Class_Descriptor cd_S59C2;
extern VTBL_ENTRY _ZTI5S59C2[];
extern  VTBL_ENTRY _ZTV5S59C2[];
static Base_Class bases_S59C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S59C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S59C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S59C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S59C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S59C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S59C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S59C1[];
extern void _ZN5S59C1D1Ev();
extern void _ZN5S59C1D0Ev();
extern void _ZN5S59C72v3Ev();
extern void _ZN5S59C72v4Ev();
extern void _ZN5S59C72v5Ev();
extern void _ZN5S59C72v6Ev();
extern void _ZN5S59C72v7Ev();
extern void _ZN5S59C72v8Ev();
extern void _ZN5S59C72v9Ev();
extern void _ZN5S59C73v10Ev();
extern void _ZN5S59C73v11Ev();
extern void _ZN5S59C73v12Ev();
extern void _ZN5S59C73v13Ev();
extern void _ZN5S59C73v14Ev();
extern void _ZN5S59C73v15Ev();
extern void _ZN5S59C73v16Ev();
extern void _ZN5S59C73v17Ev();
extern void _ZN5S59C73v18Ev();
extern void _ZN5S59C73v19Ev();
extern void _ZN5S59C73v20Ev();
extern void _ZN5S59C73v21Ev();
extern void _ZN5S59C73v22Ev();
extern void _ZN5S59C73v23Ev();
extern void _ZN5S59C73v24Ev();
extern void _ZN5S59C73v25Ev();
extern void _ZN5S59C73v26Ev();
extern void _ZN5S59C73v27Ev();
extern void _ZN5S59C73v28Ev();
extern void _ZN5S59C73v29Ev();
extern void _ZN5S59C73v30Ev();
extern void _ZN5S59C73v31Ev();
extern void _ZN5S59C73v32Ev();
extern void _ZN5S59C73v33Ev();
extern void _ZN5S59C73v34Ev();
extern void _ZN5S59C73v35Ev();
extern void _ZN5S59C73v36Ev();
extern void _ZN5S59C73v37Ev();
extern void _ZN5S59C73v38Ev();
extern void _ZN5S59C73v39Ev();
extern void _ZN5S59C73v40Ev();
extern void _ZN5S59C73v41Ev();
extern void _ZN5S59C73v42Ev();
extern void _ZN5S59C73v43Ev();
extern void _ZN5S59C73v44Ev();
extern void _ZN5S59C73v45Ev();
extern void _ZN5S59C73v46Ev();
extern void _ZN5S59C73v47Ev();
extern void _ZN5S59C73v48Ev();
extern void _ZN5S59C73v49Ev();
extern void _ZN5S59C73v50Ev();
extern void _ZN5S59C73v51Ev();
extern void _ZN5S59C73v52Ev();
extern void _ZN5S59C73v53Ev();
extern void _ZN5S59C73v54Ev();
extern void _ZN5S59C73v55Ev();
extern void _ZN5S59C73v56Ev();
extern void _ZN5S59C73v57Ev();
extern void _ZN5S59C73v58Ev();
extern void _ZN5S59C73v59Ev();
extern void _ZN5S59C73v60Ev();
extern void _ZN5S59C73v61Ev();
extern void _ZN5S59C73v62Ev();
extern void _ZN5S59C73v63Ev();
extern void _ZN5S59C73v64Ev();
extern void _ZN5S59C73v65Ev();
extern void _ZN5S59C73v66Ev();
extern void _ZN5S59C63v67Ev();
extern void _ZN5S59C63v68Ev();
extern void _ZN5S59C63v69Ev();
extern void _ZN5S59C63v70Ev();
extern void _ZN5S59C63v71Ev();
extern void _ZN5S59C63v72Ev();
extern void _ZN5S59C63v73Ev();
extern void _ZN5S59C63v74Ev();
extern void _ZN5S59C63v75Ev();
extern void _ZN5S59C63v76Ev();
extern void _ZN5S59C63v77Ev();
extern void _ZN5S59C63v78Ev();
extern void _ZN5S59C63v79Ev();
extern void _ZN5S59C63v80Ev();
extern void _ZN5S59C63v81Ev();
extern void _ZN5S59C63v82Ev();
extern void _ZN5S59C63v83Ev();
extern void _ZN5S59C63v84Ev();
extern void _ZN5S59C63v85Ev();
extern void _ZN5S59C63v86Ev();
extern void _ZN5S59C63v87Ev();
extern void _ZN5S59C63v88Ev();
extern void _ZN5S59C53v89Ev();
extern void _ZN5S59C53v90Ev();
extern void _ZN5S59C53v91Ev();
extern void _ZN5S59C53v92Ev();
extern void _ZN5S59C53v93Ev();
extern void _ZN5S59C53v94Ev();
extern void _ZN5S59C53v95Ev();
extern void _ZN5S59C53v96Ev();
extern void _ZN5S59C53v97Ev();
extern void _ZN5S59C53v98Ev();
extern void _ZN5S59C53v99Ev();
extern void _ZN5S59C54v100Ev();
extern void _ZN5S59C54v101Ev();
extern void _ZN5S59C54v102Ev();
extern void _ZN5S59C54v103Ev();
extern void _ZN5S59C54v104Ev();
extern void _ZN5S59C54v105Ev();
extern void _ZN5S59C54v106Ev();
extern void _ZN5S59C54v107Ev();
extern void _ZN5S59C54v108Ev();
extern void _ZN5S59C44v109Ev();
extern void _ZN5S59C44v110Ev();
extern void _ZN5S59C44v111Ev();
extern void _ZN5S59C44v112Ev();
extern void _ZN5S59C44v113Ev();
extern void _ZN5S59C44v114Ev();
extern void _ZN5S59C44v115Ev();
extern void _ZN5S59C44v116Ev();
extern void _ZN5S59C44v117Ev();
extern void _ZN5S59C44v118Ev();
extern void _ZN5S59C44v119Ev();
extern void _ZN5S59C44v120Ev();
extern void _ZN5S59C44v121Ev();
extern void _ZN5S59C44v122Ev();
extern void _ZN5S59C34v123Ev();
extern void _ZN5S59C34v124Ev();
extern void _ZN5S59C34v125Ev();
extern void _ZN5S59C34v126Ev();
extern void _ZN5S59C34v127Ev();
extern void _ZN5S59C34v128Ev();
extern void _ZN5S59C34v129Ev();
extern void _ZN5S59C34v130Ev();
extern void _ZN5S59C34v131Ev();
extern void _ZN5S59C34v132Ev();
extern void _ZN5S59C34v133Ev();
extern void _ZN5S59C24v134Ev();
extern void _ZN5S59C24v135Ev();
extern void _ZN5S59C12v1Ev();
extern void _ZN5S59C12v2Ev();
static  VTBL_ENTRY vtc_S59C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S59C1[0]),
  (VTBL_ENTRY)&_ZN5S59C1D1Ev,
  (VTBL_ENTRY)&_ZN5S59C1D0Ev,
  (VTBL_ENTRY)&_ZN5S59C72v3Ev,
  (VTBL_ENTRY)&_ZN5S59C72v4Ev,
  (VTBL_ENTRY)&_ZN5S59C72v5Ev,
  (VTBL_ENTRY)&_ZN5S59C72v6Ev,
  (VTBL_ENTRY)&_ZN5S59C72v7Ev,
  (VTBL_ENTRY)&_ZN5S59C72v8Ev,
  (VTBL_ENTRY)&_ZN5S59C72v9Ev,
  (VTBL_ENTRY)&_ZN5S59C73v10Ev,
  (VTBL_ENTRY)&_ZN5S59C73v11Ev,
  (VTBL_ENTRY)&_ZN5S59C73v12Ev,
  (VTBL_ENTRY)&_ZN5S59C73v13Ev,
  (VTBL_ENTRY)&_ZN5S59C73v14Ev,
  (VTBL_ENTRY)&_ZN5S59C73v15Ev,
  (VTBL_ENTRY)&_ZN5S59C73v16Ev,
  (VTBL_ENTRY)&_ZN5S59C73v17Ev,
  (VTBL_ENTRY)&_ZN5S59C73v18Ev,
  (VTBL_ENTRY)&_ZN5S59C73v19Ev,
  (VTBL_ENTRY)&_ZN5S59C73v20Ev,
  (VTBL_ENTRY)&_ZN5S59C73v21Ev,
  (VTBL_ENTRY)&_ZN5S59C73v22Ev,
  (VTBL_ENTRY)&_ZN5S59C73v23Ev,
  (VTBL_ENTRY)&_ZN5S59C73v24Ev,
  (VTBL_ENTRY)&_ZN5S59C73v25Ev,
  (VTBL_ENTRY)&_ZN5S59C73v26Ev,
  (VTBL_ENTRY)&_ZN5S59C73v27Ev,
  (VTBL_ENTRY)&_ZN5S59C73v28Ev,
  (VTBL_ENTRY)&_ZN5S59C73v29Ev,
  (VTBL_ENTRY)&_ZN5S59C73v30Ev,
  (VTBL_ENTRY)&_ZN5S59C73v31Ev,
  (VTBL_ENTRY)&_ZN5S59C73v32Ev,
  (VTBL_ENTRY)&_ZN5S59C73v33Ev,
  (VTBL_ENTRY)&_ZN5S59C73v34Ev,
  (VTBL_ENTRY)&_ZN5S59C73v35Ev,
  (VTBL_ENTRY)&_ZN5S59C73v36Ev,
  (VTBL_ENTRY)&_ZN5S59C73v37Ev,
  (VTBL_ENTRY)&_ZN5S59C73v38Ev,
  (VTBL_ENTRY)&_ZN5S59C73v39Ev,
  (VTBL_ENTRY)&_ZN5S59C73v40Ev,
  (VTBL_ENTRY)&_ZN5S59C73v41Ev,
  (VTBL_ENTRY)&_ZN5S59C73v42Ev,
  (VTBL_ENTRY)&_ZN5S59C73v43Ev,
  (VTBL_ENTRY)&_ZN5S59C73v44Ev,
  (VTBL_ENTRY)&_ZN5S59C73v45Ev,
  (VTBL_ENTRY)&_ZN5S59C73v46Ev,
  (VTBL_ENTRY)&_ZN5S59C73v47Ev,
  (VTBL_ENTRY)&_ZN5S59C73v48Ev,
  (VTBL_ENTRY)&_ZN5S59C73v49Ev,
  (VTBL_ENTRY)&_ZN5S59C73v50Ev,
  (VTBL_ENTRY)&_ZN5S59C73v51Ev,
  (VTBL_ENTRY)&_ZN5S59C73v52Ev,
  (VTBL_ENTRY)&_ZN5S59C73v53Ev,
  (VTBL_ENTRY)&_ZN5S59C73v54Ev,
  (VTBL_ENTRY)&_ZN5S59C73v55Ev,
  (VTBL_ENTRY)&_ZN5S59C73v56Ev,
  (VTBL_ENTRY)&_ZN5S59C73v57Ev,
  (VTBL_ENTRY)&_ZN5S59C73v58Ev,
  (VTBL_ENTRY)&_ZN5S59C73v59Ev,
  (VTBL_ENTRY)&_ZN5S59C73v60Ev,
  (VTBL_ENTRY)&_ZN5S59C73v61Ev,
  (VTBL_ENTRY)&_ZN5S59C73v62Ev,
  (VTBL_ENTRY)&_ZN5S59C73v63Ev,
  (VTBL_ENTRY)&_ZN5S59C73v64Ev,
  (VTBL_ENTRY)&_ZN5S59C73v65Ev,
  (VTBL_ENTRY)&_ZN5S59C73v66Ev,
  (VTBL_ENTRY)&_ZN5S59C63v67Ev,
  (VTBL_ENTRY)&_ZN5S59C63v68Ev,
  (VTBL_ENTRY)&_ZN5S59C63v69Ev,
  (VTBL_ENTRY)&_ZN5S59C63v70Ev,
  (VTBL_ENTRY)&_ZN5S59C63v71Ev,
  (VTBL_ENTRY)&_ZN5S59C63v72Ev,
  (VTBL_ENTRY)&_ZN5S59C63v73Ev,
  (VTBL_ENTRY)&_ZN5S59C63v74Ev,
  (VTBL_ENTRY)&_ZN5S59C63v75Ev,
  (VTBL_ENTRY)&_ZN5S59C63v76Ev,
  (VTBL_ENTRY)&_ZN5S59C63v77Ev,
  (VTBL_ENTRY)&_ZN5S59C63v78Ev,
  (VTBL_ENTRY)&_ZN5S59C63v79Ev,
  (VTBL_ENTRY)&_ZN5S59C63v80Ev,
  (VTBL_ENTRY)&_ZN5S59C63v81Ev,
  (VTBL_ENTRY)&_ZN5S59C63v82Ev,
  (VTBL_ENTRY)&_ZN5S59C63v83Ev,
  (VTBL_ENTRY)&_ZN5S59C63v84Ev,
  (VTBL_ENTRY)&_ZN5S59C63v85Ev,
  (VTBL_ENTRY)&_ZN5S59C63v86Ev,
  (VTBL_ENTRY)&_ZN5S59C63v87Ev,
  (VTBL_ENTRY)&_ZN5S59C63v88Ev,
  (VTBL_ENTRY)&_ZN5S59C53v89Ev,
  (VTBL_ENTRY)&_ZN5S59C53v90Ev,
  (VTBL_ENTRY)&_ZN5S59C53v91Ev,
  (VTBL_ENTRY)&_ZN5S59C53v92Ev,
  (VTBL_ENTRY)&_ZN5S59C53v93Ev,
  (VTBL_ENTRY)&_ZN5S59C53v94Ev,
  (VTBL_ENTRY)&_ZN5S59C53v95Ev,
  (VTBL_ENTRY)&_ZN5S59C53v96Ev,
  (VTBL_ENTRY)&_ZN5S59C53v97Ev,
  (VTBL_ENTRY)&_ZN5S59C53v98Ev,
  (VTBL_ENTRY)&_ZN5S59C53v99Ev,
  (VTBL_ENTRY)&_ZN5S59C54v100Ev,
  (VTBL_ENTRY)&_ZN5S59C54v101Ev,
  (VTBL_ENTRY)&_ZN5S59C54v102Ev,
  (VTBL_ENTRY)&_ZN5S59C54v103Ev,
  (VTBL_ENTRY)&_ZN5S59C54v104Ev,
  (VTBL_ENTRY)&_ZN5S59C54v105Ev,
  (VTBL_ENTRY)&_ZN5S59C54v106Ev,
  (VTBL_ENTRY)&_ZN5S59C54v107Ev,
  (VTBL_ENTRY)&_ZN5S59C54v108Ev,
  (VTBL_ENTRY)&_ZN5S59C44v109Ev,
  (VTBL_ENTRY)&_ZN5S59C44v110Ev,
  (VTBL_ENTRY)&_ZN5S59C44v111Ev,
  (VTBL_ENTRY)&_ZN5S59C44v112Ev,
  (VTBL_ENTRY)&_ZN5S59C44v113Ev,
  (VTBL_ENTRY)&_ZN5S59C44v114Ev,
  (VTBL_ENTRY)&_ZN5S59C44v115Ev,
  (VTBL_ENTRY)&_ZN5S59C44v116Ev,
  (VTBL_ENTRY)&_ZN5S59C44v117Ev,
  (VTBL_ENTRY)&_ZN5S59C44v118Ev,
  (VTBL_ENTRY)&_ZN5S59C44v119Ev,
  (VTBL_ENTRY)&_ZN5S59C44v120Ev,
  (VTBL_ENTRY)&_ZN5S59C44v121Ev,
  (VTBL_ENTRY)&_ZN5S59C44v122Ev,
  (VTBL_ENTRY)&_ZN5S59C34v123Ev,
  (VTBL_ENTRY)&_ZN5S59C34v124Ev,
  (VTBL_ENTRY)&_ZN5S59C34v125Ev,
  (VTBL_ENTRY)&_ZN5S59C34v126Ev,
  (VTBL_ENTRY)&_ZN5S59C34v127Ev,
  (VTBL_ENTRY)&_ZN5S59C34v128Ev,
  (VTBL_ENTRY)&_ZN5S59C34v129Ev,
  (VTBL_ENTRY)&_ZN5S59C34v130Ev,
  (VTBL_ENTRY)&_ZN5S59C34v131Ev,
  (VTBL_ENTRY)&_ZN5S59C34v132Ev,
  (VTBL_ENTRY)&_ZN5S59C34v133Ev,
  (VTBL_ENTRY)&_ZN5S59C24v134Ev,
  (VTBL_ENTRY)&_ZN5S59C24v135Ev,
  (VTBL_ENTRY)&_ZN5S59C12v1Ev,
  (VTBL_ENTRY)&_ZN5S59C12v2Ev,
};
extern VTBL_ENTRY _ZTI5S59C1[];
extern  VTBL_ENTRY _ZTV5S59C1[];
Class_Descriptor cd_S59C1 = {  "S59C1", // class name
  bases_S59C1, 6,
  &(vtc_S59C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(392,280), // object size
  NSPAIRA(_ZTI5S59C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S59C1),139, //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  S216C6  {
  int s216c6f0;
  __tsi64 s216c6f1;
  void *s216c6f2[4];
  int s216c6f3[2];
  void *s216c6f4;
  ::S3350C4_nt s216c6f5;
  void *s216c6f6[2];
  virtual  ~S216C6(); // _ZN6S216C6D1Ev
  virtual void  v4(); // _ZN6S216C62v4Ev
  virtual void  v5(); // _ZN6S216C62v5Ev
  virtual void  v6(); // _ZN6S216C62v6Ev
  virtual void  v7(); // _ZN6S216C62v7Ev
  virtual void  v8(); // _ZN6S216C62v8Ev
  virtual void  v9(); // _ZN6S216C62v9Ev
  virtual void  v10(); // _ZN6S216C63v10Ev
  virtual void  v11(); // _ZN6S216C63v11Ev
  virtual void  v12(); // _ZN6S216C63v12Ev
  virtual void  v13(); // _ZN6S216C63v13Ev
  virtual void  v14(); // _ZN6S216C63v14Ev
  virtual void  v15(); // _ZN6S216C63v15Ev
  virtual void  v16(); // _ZN6S216C63v16Ev
  virtual void  v17(); // _ZN6S216C63v17Ev
  virtual void  v18(); // _ZN6S216C63v18Ev
  virtual void  v19(); // _ZN6S216C63v19Ev
  virtual void  v20(); // _ZN6S216C63v20Ev
  virtual void  v21(); // _ZN6S216C63v21Ev
  virtual void  v22(); // _ZN6S216C63v22Ev
  virtual void  v23(); // _ZN6S216C63v23Ev
  virtual void  v24(); // _ZN6S216C63v24Ev
  virtual void  v25(); // _ZN6S216C63v25Ev
  virtual void  v26(); // _ZN6S216C63v26Ev
  virtual void  v27(); // _ZN6S216C63v27Ev
  virtual void  v28(); // _ZN6S216C63v28Ev
  virtual void  v29(); // _ZN6S216C63v29Ev
  virtual void  v30(); // _ZN6S216C63v30Ev
  virtual void  v31(); // _ZN6S216C63v31Ev
  virtual void  v32(); // _ZN6S216C63v32Ev
  virtual void  v33(); // _ZN6S216C63v33Ev
  virtual void  v34(); // _ZN6S216C63v34Ev
  virtual void  v35(); // _ZN6S216C63v35Ev
  virtual void  v36(); // _ZN6S216C63v36Ev
  virtual void  v37(); // _ZN6S216C63v37Ev
  virtual void  v38(); // _ZN6S216C63v38Ev
  virtual void  v39(); // _ZN6S216C63v39Ev
  virtual void  v40(); // _ZN6S216C63v40Ev
  virtual void  v41(); // _ZN6S216C63v41Ev
  virtual void  v42(); // _ZN6S216C63v42Ev
  virtual void  v43(); // _ZN6S216C63v43Ev
  virtual void  v44(); // _ZN6S216C63v44Ev
  virtual void  v45(); // _ZN6S216C63v45Ev
  virtual void  v46(); // _ZN6S216C63v46Ev
  virtual void  v47(); // _ZN6S216C63v47Ev
  virtual void  v48(); // _ZN6S216C63v48Ev
  virtual void  v49(); // _ZN6S216C63v49Ev
  virtual void  v50(); // _ZN6S216C63v50Ev
  virtual void  v51(); // _ZN6S216C63v51Ev
  virtual void  v52(); // _ZN6S216C63v52Ev
  virtual void  v53(); // _ZN6S216C63v53Ev
  virtual void  v54(); // _ZN6S216C63v54Ev
  virtual void  v55(); // _ZN6S216C63v55Ev
  virtual void  v56(); // _ZN6S216C63v56Ev
  virtual void  v57(); // _ZN6S216C63v57Ev
  virtual void  v58(); // _ZN6S216C63v58Ev
  virtual void  v59(); // _ZN6S216C63v59Ev
  virtual void  v60(); // _ZN6S216C63v60Ev
  virtual void  v61(); // _ZN6S216C63v61Ev
  virtual void  v62(); // _ZN6S216C63v62Ev
  virtual void  v63(); // _ZN6S216C63v63Ev
  virtual void  v64(); // _ZN6S216C63v64Ev
  virtual void  v65(); // _ZN6S216C63v65Ev
  virtual void  v66(); // _ZN6S216C63v66Ev
  virtual void  v67(); // _ZN6S216C63v67Ev
  S216C6(); // tgen
};
//SIG(-1 S216C6) 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]}


 S216C6 ::~S216C6(){ note_dtor("S216C6", this);}
void  S216C6 ::v4(){vfunc_called(this, "_ZN6S216C62v4Ev");}
void  S216C6 ::v5(){vfunc_called(this, "_ZN6S216C62v5Ev");}
void  S216C6 ::v6(){vfunc_called(this, "_ZN6S216C62v6Ev");}
void  S216C6 ::v7(){vfunc_called(this, "_ZN6S216C62v7Ev");}
void  S216C6 ::v8(){vfunc_called(this, "_ZN6S216C62v8Ev");}
void  S216C6 ::v9(){vfunc_called(this, "_ZN6S216C62v9Ev");}
void  S216C6 ::v10(){vfunc_called(this, "_ZN6S216C63v10Ev");}
void  S216C6 ::v11(){vfunc_called(this, "_ZN6S216C63v11Ev");}
void  S216C6 ::v12(){vfunc_called(this, "_ZN6S216C63v12Ev");}
void  S216C6 ::v13(){vfunc_called(this, "_ZN6S216C63v13Ev");}
void  S216C6 ::v14(){vfunc_called(this, "_ZN6S216C63v14Ev");}
void  S216C6 ::v15(){vfunc_called(this, "_ZN6S216C63v15Ev");}
void  S216C6 ::v16(){vfunc_called(this, "_ZN6S216C63v16Ev");}
void  S216C6 ::v17(){vfunc_called(this, "_ZN6S216C63v17Ev");}
void  S216C6 ::v18(){vfunc_called(this, "_ZN6S216C63v18Ev");}
void  S216C6 ::v19(){vfunc_called(this, "_ZN6S216C63v19Ev");}
void  S216C6 ::v20(){vfunc_called(this, "_ZN6S216C63v20Ev");}
void  S216C6 ::v21(){vfunc_called(this, "_ZN6S216C63v21Ev");}
void  S216C6 ::v22(){vfunc_called(this, "_ZN6S216C63v22Ev");}
void  S216C6 ::v23(){vfunc_called(this, "_ZN6S216C63v23Ev");}
void  S216C6 ::v24(){vfunc_called(this, "_ZN6S216C63v24Ev");}
void  S216C6 ::v25(){vfunc_called(this, "_ZN6S216C63v25Ev");}
void  S216C6 ::v26(){vfunc_called(this, "_ZN6S216C63v26Ev");}
void  S216C6 ::v27(){vfunc_called(this, "_ZN6S216C63v27Ev");}
void  S216C6 ::v28(){vfunc_called(this, "_ZN6S216C63v28Ev");}
void  S216C6 ::v29(){vfunc_called(this, "_ZN6S216C63v29Ev");}
void  S216C6 ::v30(){vfunc_called(this, "_ZN6S216C63v30Ev");}
void  S216C6 ::v31(){vfunc_called(this, "_ZN6S216C63v31Ev");}
void  S216C6 ::v32(){vfunc_called(this, "_ZN6S216C63v32Ev");}
void  S216C6 ::v33(){vfunc_called(this, "_ZN6S216C63v33Ev");}
void  S216C6 ::v34(){vfunc_called(this, "_ZN6S216C63v34Ev");}
void  S216C6 ::v35(){vfunc_called(this, "_ZN6S216C63v35Ev");}
void  S216C6 ::v36(){vfunc_called(this, "_ZN6S216C63v36Ev");}
void  S216C6 ::v37(){vfunc_called(this, "_ZN6S216C63v37Ev");}
void  S216C6 ::v38(){vfunc_called(this, "_ZN6S216C63v38Ev");}
void  S216C6 ::v39(){vfunc_called(this, "_ZN6S216C63v39Ev");}
void  S216C6 ::v40(){vfunc_called(this, "_ZN6S216C63v40Ev");}
void  S216C6 ::v41(){vfunc_called(this, "_ZN6S216C63v41Ev");}
void  S216C6 ::v42(){vfunc_called(this, "_ZN6S216C63v42Ev");}
void  S216C6 ::v43(){vfunc_called(this, "_ZN6S216C63v43Ev");}
void  S216C6 ::v44(){vfunc_called(this, "_ZN6S216C63v44Ev");}
void  S216C6 ::v45(){vfunc_called(this, "_ZN6S216C63v45Ev");}
void  S216C6 ::v46(){vfunc_called(this, "_ZN6S216C63v46Ev");}
void  S216C6 ::v47(){vfunc_called(this, "_ZN6S216C63v47Ev");}
void  S216C6 ::v48(){vfunc_called(this, "_ZN6S216C63v48Ev");}
void  S216C6 ::v49(){vfunc_called(this, "_ZN6S216C63v49Ev");}
void  S216C6 ::v50(){vfunc_called(this, "_ZN6S216C63v50Ev");}
void  S216C6 ::v51(){vfunc_called(this, "_ZN6S216C63v51Ev");}
void  S216C6 ::v52(){vfunc_called(this, "_ZN6S216C63v52Ev");}
void  S216C6 ::v53(){vfunc_called(this, "_ZN6S216C63v53Ev");}
void  S216C6 ::v54(){vfunc_called(this, "_ZN6S216C63v54Ev");}
void  S216C6 ::v55(){vfunc_called(this, "_ZN6S216C63v55Ev");}
void  S216C6 ::v56(){vfunc_called(this, "_ZN6S216C63v56Ev");}
void  S216C6 ::v57(){vfunc_called(this, "_ZN6S216C63v57Ev");}
void  S216C6 ::v58(){vfunc_called(this, "_ZN6S216C63v58Ev");}
void  S216C6 ::v59(){vfunc_called(this, "_ZN6S216C63v59Ev");}
void  S216C6 ::v60(){vfunc_called(this, "_ZN6S216C63v60Ev");}
void  S216C6 ::v61(){vfunc_called(this, "_ZN6S216C63v61Ev");}
void  S216C6 ::v62(){vfunc_called(this, "_ZN6S216C63v62Ev");}
void  S216C6 ::v63(){vfunc_called(this, "_ZN6S216C63v63Ev");}
void  S216C6 ::v64(){vfunc_called(this, "_ZN6S216C63v64Ev");}
void  S216C6 ::v65(){vfunc_called(this, "_ZN6S216C63v65Ev");}
void  S216C6 ::v66(){vfunc_called(this, "_ZN6S216C63v66Ev");}
void  S216C6 ::v67(){vfunc_called(this, "_ZN6S216C63v67Ev");}
S216C6 ::S216C6(){ note_ctor("S216C6", this);} // tgen

static void Test_S216C6()
{
  extern Class_Descriptor cd_S216C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S216C6, buf);
    S216C6 *dp, &lv = *(dp=new (buf) S216C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S216C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S216C6)");
    check_field_offset(lv, s216c6f0, ABISELECT(8,4), "S216C6.s216c6f0");
    check_field_offset(lv, s216c6f1, ABISELECT(16,8), "S216C6.s216c6f1");
    check_field_offset(lv, s216c6f2, ABISELECT(24,16), "S216C6.s216c6f2");
    check_field_offset(lv, s216c6f3, ABISELECT(56,32), "S216C6.s216c6f3");
    check_field_offset(lv, s216c6f4, ABISELECT(64,40), "S216C6.s216c6f4");
    check_field_offset(lv, s216c6f5, ABISELECT(72,44), "S216C6.s216c6f5");
    check_field_offset(lv, s216c6f6, ABISELECT(80,52), "S216C6.s216c6f6");
    test_class_info(&lv, &cd_S216C6);
    dp->~S216C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS216C6(Test_S216C6, "S216C6", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S216C6C1Ev();
extern void _ZN6S216C6D1Ev();
Name_Map name_map_S216C6[] = {
  NSPAIR(_ZN6S216C6C1Ev),
  NSPAIR(_ZN6S216C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S216C6[];
extern void _ZN6S216C6D1Ev();
extern void _ZN6S216C6D0Ev();
extern void _ZN6S216C62v4Ev();
extern void _ZN6S216C62v5Ev();
extern void _ZN6S216C62v6Ev();
extern void _ZN6S216C62v7Ev();
extern void _ZN6S216C62v8Ev();
extern void _ZN6S216C62v9Ev();
extern void _ZN6S216C63v10Ev();
extern void _ZN6S216C63v11Ev();
extern void _ZN6S216C63v12Ev();
extern void _ZN6S216C63v13Ev();
extern void _ZN6S216C63v14Ev();
extern void _ZN6S216C63v15Ev();
extern void _ZN6S216C63v16Ev();
extern void _ZN6S216C63v17Ev();
extern void _ZN6S216C63v18Ev();
extern void _ZN6S216C63v19Ev();
extern void _ZN6S216C63v20Ev();
extern void _ZN6S216C63v21Ev();
extern void _ZN6S216C63v22Ev();
extern void _ZN6S216C63v23Ev();
extern void _ZN6S216C63v24Ev();
extern void _ZN6S216C63v25Ev();
extern void _ZN6S216C63v26Ev();
extern void _ZN6S216C63v27Ev();
extern void _ZN6S216C63v28Ev();
extern void _ZN6S216C63v29Ev();
extern void _ZN6S216C63v30Ev();
extern void _ZN6S216C63v31Ev();
extern void _ZN6S216C63v32Ev();
extern void _ZN6S216C63v33Ev();
extern void _ZN6S216C63v34Ev();
extern void _ZN6S216C63v35Ev();
extern void _ZN6S216C63v36Ev();
extern void _ZN6S216C63v37Ev();
extern void _ZN6S216C63v38Ev();
extern void _ZN6S216C63v39Ev();
extern void _ZN6S216C63v40Ev();
extern void _ZN6S216C63v41Ev();
extern void _ZN6S216C63v42Ev();
extern void _ZN6S216C63v43Ev();
extern void _ZN6S216C63v44Ev();
extern void _ZN6S216C63v45Ev();
extern void _ZN6S216C63v46Ev();
extern void _ZN6S216C63v47Ev();
extern void _ZN6S216C63v48Ev();
extern void _ZN6S216C63v49Ev();
extern void _ZN6S216C63v50Ev();
extern void _ZN6S216C63v51Ev();
extern void _ZN6S216C63v52Ev();
extern void _ZN6S216C63v53Ev();
extern void _ZN6S216C63v54Ev();
extern void _ZN6S216C63v55Ev();
extern void _ZN6S216C63v56Ev();
extern void _ZN6S216C63v57Ev();
extern void _ZN6S216C63v58Ev();
extern void _ZN6S216C63v59Ev();
extern void _ZN6S216C63v60Ev();
extern void _ZN6S216C63v61Ev();
extern void _ZN6S216C63v62Ev();
extern void _ZN6S216C63v63Ev();
extern void _ZN6S216C63v64Ev();
extern void _ZN6S216C63v65Ev();
extern void _ZN6S216C63v66Ev();
extern void _ZN6S216C63v67Ev();
static  VTBL_ENTRY vtc_S216C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S216C6[0]),
  (VTBL_ENTRY)&_ZN6S216C6D1Ev,
  (VTBL_ENTRY)&_ZN6S216C6D0Ev,
  (VTBL_ENTRY)&_ZN6S216C62v4Ev,
  (VTBL_ENTRY)&_ZN6S216C62v5Ev,
  (VTBL_ENTRY)&_ZN6S216C62v6Ev,
  (VTBL_ENTRY)&_ZN6S216C62v7Ev,
  (VTBL_ENTRY)&_ZN6S216C62v8Ev,
  (VTBL_ENTRY)&_ZN6S216C62v9Ev,
  (VTBL_ENTRY)&_ZN6S216C63v10Ev,
  (VTBL_ENTRY)&_ZN6S216C63v11Ev,
  (VTBL_ENTRY)&_ZN6S216C63v12Ev,
  (VTBL_ENTRY)&_ZN6S216C63v13Ev,
  (VTBL_ENTRY)&_ZN6S216C63v14Ev,
  (VTBL_ENTRY)&_ZN6S216C63v15Ev,
  (VTBL_ENTRY)&_ZN6S216C63v16Ev,
  (VTBL_ENTRY)&_ZN6S216C63v17Ev,
  (VTBL_ENTRY)&_ZN6S216C63v18Ev,
  (VTBL_ENTRY)&_ZN6S216C63v19Ev,
  (VTBL_ENTRY)&_ZN6S216C63v20Ev,
  (VTBL_ENTRY)&_ZN6S216C63v21Ev,
  (VTBL_ENTRY)&_ZN6S216C63v22Ev,
  (VTBL_ENTRY)&_ZN6S216C63v23Ev,
  (VTBL_ENTRY)&_ZN6S216C63v24Ev,
  (VTBL_ENTRY)&_ZN6S216C63v25Ev,
  (VTBL_ENTRY)&_ZN6S216C63v26Ev,
  (VTBL_ENTRY)&_ZN6S216C63v27Ev,
  (VTBL_ENTRY)&_ZN6S216C63v28Ev,
  (VTBL_ENTRY)&_ZN6S216C63v29Ev,
  (VTBL_ENTRY)&_ZN6S216C63v30Ev,
  (VTBL_ENTRY)&_ZN6S216C63v31Ev,
  (VTBL_ENTRY)&_ZN6S216C63v32Ev,
  (VTBL_ENTRY)&_ZN6S216C63v33Ev,
  (VTBL_ENTRY)&_ZN6S216C63v34Ev,
  (VTBL_ENTRY)&_ZN6S216C63v35Ev,
  (VTBL_ENTRY)&_ZN6S216C63v36Ev,
  (VTBL_ENTRY)&_ZN6S216C63v37Ev,
  (VTBL_ENTRY)&_ZN6S216C63v38Ev,
  (VTBL_ENTRY)&_ZN6S216C63v39Ev,
  (VTBL_ENTRY)&_ZN6S216C63v40Ev,
  (VTBL_ENTRY)&_ZN6S216C63v41Ev,
  (VTBL_ENTRY)&_ZN6S216C63v42Ev,
  (VTBL_ENTRY)&_ZN6S216C63v43Ev,
  (VTBL_ENTRY)&_ZN6S216C63v44Ev,
  (VTBL_ENTRY)&_ZN6S216C63v45Ev,
  (VTBL_ENTRY)&_ZN6S216C63v46Ev,
  (VTBL_ENTRY)&_ZN6S216C63v47Ev,
  (VTBL_ENTRY)&_ZN6S216C63v48Ev,
  (VTBL_ENTRY)&_ZN6S216C63v49Ev,
  (VTBL_ENTRY)&_ZN6S216C63v50Ev,
  (VTBL_ENTRY)&_ZN6S216C63v51Ev,
  (VTBL_ENTRY)&_ZN6S216C63v52Ev,
  (VTBL_ENTRY)&_ZN6S216C63v53Ev,
  (VTBL_ENTRY)&_ZN6S216C63v54Ev,
  (VTBL_ENTRY)&_ZN6S216C63v55Ev,
  (VTBL_ENTRY)&_ZN6S216C63v56Ev,
  (VTBL_ENTRY)&_ZN6S216C63v57Ev,
  (VTBL_ENTRY)&_ZN6S216C63v58Ev,
  (VTBL_ENTRY)&_ZN6S216C63v59Ev,
  (VTBL_ENTRY)&_ZN6S216C63v60Ev,
  (VTBL_ENTRY)&_ZN6S216C63v61Ev,
  (VTBL_ENTRY)&_ZN6S216C63v62Ev,
  (VTBL_ENTRY)&_ZN6S216C63v63Ev,
  (VTBL_ENTRY)&_ZN6S216C63v64Ev,
  (VTBL_ENTRY)&_ZN6S216C63v65Ev,
  (VTBL_ENTRY)&_ZN6S216C63v66Ev,
  (VTBL_ENTRY)&_ZN6S216C63v67Ev,
};
extern VTBL_ENTRY _ZTI6S216C6[];
extern  VTBL_ENTRY _ZTV6S216C6[];
Class_Descriptor cd_S216C6 = {  "S216C6", // class name
  0,0,//no base classes
  &(vtc_S216C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S216C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S216C6),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  S216C5  : S216C6 {
  int s216c5f0[2];
  void *s216c5f1;
  int s216c5f2[2];
  ::S287C8_nt s216c5f3;
  ::S287C8_nt s216c5f4;
  ::S2121C38 s216c5f5;
  ::S287C8_nt s216c5f6;
  unsigned int s216c5f7:1;
  unsigned int s216c5f8:1;
  unsigned int s216c5f9:1;
  unsigned int s216c5f10:1;
  unsigned int s216c5f11:1;
  int s216c5f12[2];
  virtual  ~S216C5(); // _ZN6S216C5D1Ev
  virtual void  v68(); // _ZN6S216C53v68Ev
  virtual void  v69(); // _ZN6S216C53v69Ev
  virtual void  v70(); // _ZN6S216C53v70Ev
  virtual void  v71(); // _ZN6S216C53v71Ev
  virtual void  v72(); // _ZN6S216C53v72Ev
  virtual void  v73(); // _ZN6S216C53v73Ev
  virtual void  v74(); // _ZN6S216C53v74Ev
  virtual void  v75(); // _ZN6S216C53v75Ev
  virtual void  v76(); // _ZN6S216C53v76Ev
  virtual void  v77(); // _ZN6S216C53v77Ev
  virtual void  v78(); // _ZN6S216C53v78Ev
  virtual void  v79(); // _ZN6S216C53v79Ev
  virtual void  v80(); // _ZN6S216C53v80Ev
  virtual void  v81(); // _ZN6S216C53v81Ev
  virtual void  v82(); // _ZN6S216C53v82Ev
  virtual void  v83(); // _ZN6S216C53v83Ev
  virtual void  v84(); // _ZN6S216C53v84Ev
  virtual void  v85(); // _ZN6S216C53v85Ev
  virtual void  v86(); // _ZN6S216C53v86Ev
  virtual void  v87(); // _ZN6S216C53v87Ev
  virtual void  v88(); // _ZN6S216C53v88Ev
  virtual void  v89(); // _ZN6S216C53v89Ev
  S216C5(); // tgen
};
//SIG(-1 S216C5) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S216C5 ::~S216C5(){ note_dtor("S216C5", this);}
void  S216C5 ::v68(){vfunc_called(this, "_ZN6S216C53v68Ev");}
void  S216C5 ::v69(){vfunc_called(this, "_ZN6S216C53v69Ev");}
void  S216C5 ::v70(){vfunc_called(this, "_ZN6S216C53v70Ev");}
void  S216C5 ::v71(){vfunc_called(this, "_ZN6S216C53v71Ev");}
void  S216C5 ::v72(){vfunc_called(this, "_ZN6S216C53v72Ev");}
void  S216C5 ::v73(){vfunc_called(this, "_ZN6S216C53v73Ev");}
void  S216C5 ::v74(){vfunc_called(this, "_ZN6S216C53v74Ev");}
void  S216C5 ::v75(){vfunc_called(this, "_ZN6S216C53v75Ev");}
void  S216C5 ::v76(){vfunc_called(this, "_ZN6S216C53v76Ev");}
void  S216C5 ::v77(){vfunc_called(this, "_ZN6S216C53v77Ev");}
void  S216C5 ::v78(){vfunc_called(this, "_ZN6S216C53v78Ev");}
void  S216C5 ::v79(){vfunc_called(this, "_ZN6S216C53v79Ev");}
void  S216C5 ::v80(){vfunc_called(this, "_ZN6S216C53v80Ev");}
void  S216C5 ::v81(){vfunc_called(this, "_ZN6S216C53v81Ev");}
void  S216C5 ::v82(){vfunc_called(this, "_ZN6S216C53v82Ev");}
void  S216C5 ::v83(){vfunc_called(this, "_ZN6S216C53v83Ev");}
void  S216C5 ::v84(){vfunc_called(this, "_ZN6S216C53v84Ev");}
void  S216C5 ::v85(){vfunc_called(this, "_ZN6S216C53v85Ev");}
void  S216C5 ::v86(){vfunc_called(this, "_ZN6S216C53v86Ev");}
void  S216C5 ::v87(){vfunc_called(this, "_ZN6S216C53v87Ev");}
void  S216C5 ::v88(){vfunc_called(this, "_ZN6S216C53v88Ev");}
void  S216C5 ::v89(){vfunc_called(this, "_ZN6S216C53v89Ev");}
S216C5 ::S216C5(){ note_ctor("S216C5", this);} // tgen

static void Test_S216C5()
{
  extern Class_Descriptor cd_S216C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S216C5, buf);
    S216C5 *dp, &lv = *(dp=new (buf) S216C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S216C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S216C5)");
    check_base_class_offset(lv, (S216C6*), 0, "S216C5");
    check_field_offset(lv, s216c5f0, ABISELECT(96,60), "S216C5.s216c5f0");
    check_field_offset(lv, s216c5f1, ABISELECT(104,68), "S216C5.s216c5f1");
    check_field_offset(lv, s216c5f2, ABISELECT(112,72), "S216C5.s216c5f2");
    check_field_offset(lv, s216c5f3, ABISELECT(120,80), "S216C5.s216c5f3");
    check_field_offset(lv, s216c5f4, ABISELECT(136,92), "S216C5.s216c5f4");
    check_field_offset(lv, s216c5f5, ABISELECT(152,104), "S216C5.s216c5f5");
    check_field_offset(lv, s216c5f6, ABISELECT(160,108), "S216C5.s216c5f6");
    set_bf_and_test(lv, s216c5f7, ABISELECT(176,120), 0, 1, 1, "S216C5");
    set_bf_and_test(lv, s216c5f8, ABISELECT(176,120), 1, 1, 1, "S216C5");
    set_bf_and_test(lv, s216c5f9, ABISELECT(176,120), 2, 1, 1, "S216C5");
    set_bf_and_test(lv, s216c5f10, ABISELECT(176,120), 3, 1, 1, "S216C5");
    set_bf_and_test(lv, s216c5f11, ABISELECT(176,120), 4, 1, 1, "S216C5");
    check_field_offset(lv, s216c5f12, ABISELECT(180,124), "S216C5.s216c5f12");
    test_class_info(&lv, &cd_S216C5);
    dp->~S216C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS216C5(Test_S216C5, "S216C5", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN6S216C5C1Ev();
extern void _ZN6S216C5D1Ev();
Name_Map name_map_S216C5[] = {
  NSPAIR(_ZN6S216C5C1Ev),
  NSPAIR(_ZN6S216C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S216C6;
extern VTBL_ENTRY _ZTI6S216C6[];
extern  VTBL_ENTRY _ZTV6S216C6[];
static Base_Class bases_S216C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S216C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI6S216C5[];
extern void _ZN6S216C5D1Ev();
extern void _ZN6S216C5D0Ev();
extern void _ZN6S216C62v4Ev();
extern void _ZN6S216C62v5Ev();
extern void _ZN6S216C62v6Ev();
extern void _ZN6S216C62v7Ev();
extern void _ZN6S216C62v8Ev();
extern void _ZN6S216C62v9Ev();
extern void _ZN6S216C63v10Ev();
extern void _ZN6S216C63v11Ev();
extern void _ZN6S216C63v12Ev();
extern void _ZN6S216C63v13Ev();
extern void _ZN6S216C63v14Ev();
extern void _ZN6S216C63v15Ev();
extern void _ZN6S216C63v16Ev();
extern void _ZN6S216C63v17Ev();
extern void _ZN6S216C63v18Ev();
extern void _ZN6S216C63v19Ev();
extern void _ZN6S216C63v20Ev();
extern void _ZN6S216C63v21Ev();
extern void _ZN6S216C63v22Ev();
extern void _ZN6S216C63v23Ev();
extern void _ZN6S216C63v24Ev();
extern void _ZN6S216C63v25Ev();
extern void _ZN6S216C63v26Ev();
extern void _ZN6S216C63v27Ev();
extern void _ZN6S216C63v28Ev();
extern void _ZN6S216C63v29Ev();
extern void _ZN6S216C63v30Ev();
extern void _ZN6S216C63v31Ev();
extern void _ZN6S216C63v32Ev();
extern void _ZN6S216C63v33Ev();
extern void _ZN6S216C63v34Ev();
extern void _ZN6S216C63v35Ev();
extern void _ZN6S216C63v36Ev();
extern void _ZN6S216C63v37Ev();
extern void _ZN6S216C63v38Ev();
extern void _ZN6S216C63v39Ev();
extern void _ZN6S216C63v40Ev();
extern void _ZN6S216C63v41Ev();
extern void _ZN6S216C63v42Ev();
extern void _ZN6S216C63v43Ev();
extern void _ZN6S216C63v44Ev();
extern void _ZN6S216C63v45Ev();
extern void _ZN6S216C63v46Ev();
extern void _ZN6S216C63v47Ev();
extern void _ZN6S216C63v48Ev();
extern void _ZN6S216C63v49Ev();
extern void _ZN6S216C63v50Ev();
extern void _ZN6S216C63v51Ev();
extern void _ZN6S216C63v52Ev();
extern void _ZN6S216C63v53Ev();
extern void _ZN6S216C63v54Ev();
extern void _ZN6S216C63v55Ev();
extern void _ZN6S216C63v56Ev();
extern void _ZN6S216C63v57Ev();
extern void _ZN6S216C63v58Ev();
extern void _ZN6S216C63v59Ev();
extern void _ZN6S216C63v60Ev();
extern void _ZN6S216C63v61Ev();
extern void _ZN6S216C63v62Ev();
extern void _ZN6S216C63v63Ev();
extern void _ZN6S216C63v64Ev();
extern void _ZN6S216C63v65Ev();
extern void _ZN6S216C63v66Ev();
extern void _ZN6S216C63v67Ev();
extern void _ZN6S216C53v68Ev();
extern void _ZN6S216C53v69Ev();
extern void _ZN6S216C53v70Ev();
extern void _ZN6S216C53v71Ev();
extern void _ZN6S216C53v72Ev();
extern void _ZN6S216C53v73Ev();
extern void _ZN6S216C53v74Ev();
extern void _ZN6S216C53v75Ev();
extern void _ZN6S216C53v76Ev();
extern void _ZN6S216C53v77Ev();
extern void _ZN6S216C53v78Ev();
extern void _ZN6S216C53v79Ev();
extern void _ZN6S216C53v80Ev();
extern void _ZN6S216C53v81Ev();
extern void _ZN6S216C53v82Ev();
extern void _ZN6S216C53v83Ev();
extern void _ZN6S216C53v84Ev();
extern void _ZN6S216C53v85Ev();
extern void _ZN6S216C53v86Ev();
extern void _ZN6S216C53v87Ev();
extern void _ZN6S216C53v88Ev();
extern void _ZN6S216C53v89Ev();
static  VTBL_ENTRY vtc_S216C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S216C5[0]),
  (VTBL_ENTRY)&_ZN6S216C5D1Ev,
  (VTBL_ENTRY)&_ZN6S216C5D0Ev,
  (VTBL_ENTRY)&_ZN6S216C62v4Ev,
  (VTBL_ENTRY)&_ZN6S216C62v5Ev,
  (VTBL_ENTRY)&_ZN6S216C62v6Ev,
  (VTBL_ENTRY)&_ZN6S216C62v7Ev,
  (VTBL_ENTRY)&_ZN6S216C62v8Ev,
  (VTBL_ENTRY)&_ZN6S216C62v9Ev,
  (VTBL_ENTRY)&_ZN6S216C63v10Ev,
  (VTBL_ENTRY)&_ZN6S216C63v11Ev,
  (VTBL_ENTRY)&_ZN6S216C63v12Ev,
  (VTBL_ENTRY)&_ZN6S216C63v13Ev,
  (VTBL_ENTRY)&_ZN6S216C63v14Ev,
  (VTBL_ENTRY)&_ZN6S216C63v15Ev,
  (VTBL_ENTRY)&_ZN6S216C63v16Ev,
  (VTBL_ENTRY)&_ZN6S216C63v17Ev,
  (VTBL_ENTRY)&_ZN6S216C63v18Ev,
  (VTBL_ENTRY)&_ZN6S216C63v19Ev,
  (VTBL_ENTRY)&_ZN6S216C63v20Ev,
  (VTBL_ENTRY)&_ZN6S216C63v21Ev,
  (VTBL_ENTRY)&_ZN6S216C63v22Ev,
  (VTBL_ENTRY)&_ZN6S216C63v23Ev,
  (VTBL_ENTRY)&_ZN6S216C63v24Ev,
  (VTBL_ENTRY)&_ZN6S216C63v25Ev,
  (VTBL_ENTRY)&_ZN6S216C63v26Ev,
  (VTBL_ENTRY)&_ZN6S216C63v27Ev,
  (VTBL_ENTRY)&_ZN6S216C63v28Ev,
  (VTBL_ENTRY)&_ZN6S216C63v29Ev,
  (VTBL_ENTRY)&_ZN6S216C63v30Ev,
  (VTBL_ENTRY)&_ZN6S216C63v31Ev,
  (VTBL_ENTRY)&_ZN6S216C63v32Ev,
  (VTBL_ENTRY)&_ZN6S216C63v33Ev,
  (VTBL_ENTRY)&_ZN6S216C63v34Ev,
  (VTBL_ENTRY)&_ZN6S216C63v35Ev,
  (VTBL_ENTRY)&_ZN6S216C63v36Ev,
  (VTBL_ENTRY)&_ZN6S216C63v37Ev,
  (VTBL_ENTRY)&_ZN6S216C63v38Ev,
  (VTBL_ENTRY)&_ZN6S216C63v39Ev,
  (VTBL_ENTRY)&_ZN6S216C63v40Ev,
  (VTBL_ENTRY)&_ZN6S216C63v41Ev,
  (VTBL_ENTRY)&_ZN6S216C63v42Ev,
  (VTBL_ENTRY)&_ZN6S216C63v43Ev,
  (VTBL_ENTRY)&_ZN6S216C63v44Ev,
  (VTBL_ENTRY)&_ZN6S216C63v45Ev,
  (VTBL_ENTRY)&_ZN6S216C63v46Ev,
  (VTBL_ENTRY)&_ZN6S216C63v47Ev,
  (VTBL_ENTRY)&_ZN6S216C63v48Ev,
  (VTBL_ENTRY)&_ZN6S216C63v49Ev,
  (VTBL_ENTRY)&_ZN6S216C63v50Ev,
  (VTBL_ENTRY)&_ZN6S216C63v51Ev,
  (VTBL_ENTRY)&_ZN6S216C63v52Ev,
  (VTBL_ENTRY)&_ZN6S216C63v53Ev,
  (VTBL_ENTRY)&_ZN6S216C63v54Ev,
  (VTBL_ENTRY)&_ZN6S216C63v55Ev,
  (VTBL_ENTRY)&_ZN6S216C63v56Ev,
  (VTBL_ENTRY)&_ZN6S216C63v57Ev,
  (VTBL_ENTRY)&_ZN6S216C63v58Ev,
  (VTBL_ENTRY)&_ZN6S216C63v59Ev,
  (VTBL_ENTRY)&_ZN6S216C63v60Ev,
  (VTBL_ENTRY)&_ZN6S216C63v61Ev,
  (VTBL_ENTRY)&_ZN6S216C63v62Ev,
  (VTBL_ENTRY)&_ZN6S216C63v63Ev,
  (VTBL_ENTRY)&_ZN6S216C63v64Ev,
  (VTBL_ENTRY)&_ZN6S216C63v65Ev,
  (VTBL_ENTRY)&_ZN6S216C63v66Ev,
  (VTBL_ENTRY)&_ZN6S216C63v67Ev,
  (VTBL_ENTRY)&_ZN6S216C53v68Ev,
  (VTBL_ENTRY)&_ZN6S216C53v69Ev,
  (VTBL_ENTRY)&_ZN6S216C53v70Ev,
  (VTBL_ENTRY)&_ZN6S216C53v71Ev,
  (VTBL_ENTRY)&_ZN6S216C53v72Ev,
  (VTBL_ENTRY)&_ZN6S216C53v73Ev,
  (VTBL_ENTRY)&_ZN6S216C53v74Ev,
  (VTBL_ENTRY)&_ZN6S216C53v75Ev,
  (VTBL_ENTRY)&_ZN6S216C53v76Ev,
  (VTBL_ENTRY)&_ZN6S216C53v77Ev,
  (VTBL_ENTRY)&_ZN6S216C53v78Ev,
  (VTBL_ENTRY)&_ZN6S216C53v79Ev,
  (VTBL_ENTRY)&_ZN6S216C53v80Ev,
  (VTBL_ENTRY)&_ZN6S216C53v81Ev,
  (VTBL_ENTRY)&_ZN6S216C53v82Ev,
  (VTBL_ENTRY)&_ZN6S216C53v83Ev,
  (VTBL_ENTRY)&_ZN6S216C53v84Ev,
  (VTBL_ENTRY)&_ZN6S216C53v85Ev,
  (VTBL_ENTRY)&_ZN6S216C53v86Ev,
  (VTBL_ENTRY)&_ZN6S216C53v87Ev,
  (VTBL_ENTRY)&_ZN6S216C53v88Ev,
  (VTBL_ENTRY)&_ZN6S216C53v89Ev,
};
extern VTBL_ENTRY _ZTI6S216C5[];
extern  VTBL_ENTRY _ZTV6S216C5[];
Class_Descriptor cd_S216C5 = {  "S216C5", // class name
  bases_S216C5, 1,
  &(vtc_S216C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI6S216C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S216C5),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S216C4  : S216C5 {
  unsigned int s216c4f0:1;
  unsigned int s216c4f1:1;
  unsigned int s216c4f2:1;
  ::S3350C17 s216c4f3;
  ::S3350C11 s216c4f4;
  ::S3350C5_nt s216c4f5;
  ::S287C27 s216c4f6;
  int s216c4f7[3];
  virtual  ~S216C4(); // _ZN6S216C4D1Ev
  virtual void  v90(); // _ZN6S216C43v90Ev
  virtual void  v91(); // _ZN6S216C43v91Ev
  virtual void  v92(); // _ZN6S216C43v92Ev
  virtual void  v93(); // _ZN6S216C43v93Ev
  virtual void  v94(); // _ZN6S216C43v94Ev
  virtual void  v95(); // _ZN6S216C43v95Ev
  virtual void  v96(); // _ZN6S216C43v96Ev
  virtual void  v97(); // _ZN6S216C43v97Ev
  virtual void  v98(); // _ZN6S216C43v98Ev
  virtual void  v99(); // _ZN6S216C43v99Ev
  virtual void  v100(); // _ZN6S216C44v100Ev
  virtual void  v101(); // _ZN6S216C44v101Ev
  virtual void  v102(); // _ZN6S216C44v102Ev
  virtual void  v103(); // _ZN6S216C44v103Ev
  virtual void  v104(); // _ZN6S216C44v104Ev
  virtual void  v105(); // _ZN6S216C44v105Ev
  virtual void  v106(); // _ZN6S216C44v106Ev
  virtual void  v107(); // _ZN6S216C44v107Ev
  virtual void  v108(); // _ZN6S216C44v108Ev
  virtual void  v109(); // _ZN6S216C44v109Ev
  S216C4(); // tgen
};
//SIG(-1 S216C4) C1{ BC2{ BC3{ vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 FC10{ BC11{ BC8}} FC12{ BC13{ BC8}} FC14{ BC15{ BC8}} FC16{ BC17{ BC8}} Fi[3]}


 S216C4 ::~S216C4(){ note_dtor("S216C4", this);}
void  S216C4 ::v90(){vfunc_called(this, "_ZN6S216C43v90Ev");}
void  S216C4 ::v91(){vfunc_called(this, "_ZN6S216C43v91Ev");}
void  S216C4 ::v92(){vfunc_called(this, "_ZN6S216C43v92Ev");}
void  S216C4 ::v93(){vfunc_called(this, "_ZN6S216C43v93Ev");}
void  S216C4 ::v94(){vfunc_called(this, "_ZN6S216C43v94Ev");}
void  S216C4 ::v95(){vfunc_called(this, "_ZN6S216C43v95Ev");}
void  S216C4 ::v96(){vfunc_called(this, "_ZN6S216C43v96Ev");}
void  S216C4 ::v97(){vfunc_called(this, "_ZN6S216C43v97Ev");}
void  S216C4 ::v98(){vfunc_called(this, "_ZN6S216C43v98Ev");}
void  S216C4 ::v99(){vfunc_called(this, "_ZN6S216C43v99Ev");}
void  S216C4 ::v100(){vfunc_called(this, "_ZN6S216C44v100Ev");}
void  S216C4 ::v101(){vfunc_called(this, "_ZN6S216C44v101Ev");}
void  S216C4 ::v102(){vfunc_called(this, "_ZN6S216C44v102Ev");}
void  S216C4 ::v103(){vfunc_called(this, "_ZN6S216C44v103Ev");}
void  S216C4 ::v104(){vfunc_called(this, "_ZN6S216C44v104Ev");}
void  S216C4 ::v105(){vfunc_called(this, "_ZN6S216C44v105Ev");}
void  S216C4 ::v106(){vfunc_called(this, "_ZN6S216C44v106Ev");}
void  S216C4 ::v107(){vfunc_called(this, "_ZN6S216C44v107Ev");}
void  S216C4 ::v108(){vfunc_called(this, "_ZN6S216C44v108Ev");}
void  S216C4 ::v109(){vfunc_called(this, "_ZN6S216C44v109Ev");}
S216C4 ::S216C4(){ note_ctor("S216C4", this);} // tgen

static void Test_S216C4()
{
  extern Class_Descriptor cd_S216C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S216C4, buf);
    S216C4 *dp, &lv = *(dp=new (buf) S216C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S216C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S216C4)");
    check_base_class_offset(lv, (S216C6*)(S216C5*), 0, "S216C4");
    check_base_class_offset(lv, (S216C5*), 0, "S216C4");
    set_bf_and_test(lv, s216c4f0, ABISELECT(188,132), 0, 1, 1, "S216C4");
    set_bf_and_test(lv, s216c4f1, ABISELECT(188,132), 1, 1, 1, "S216C4");
    set_bf_and_test(lv, s216c4f2, ABISELECT(188,132), 2, 1, 1, "S216C4");
    check_field_offset(lv, s216c4f3, ABISELECT(192,136), "S216C4.s216c4f3");
    check_field_offset(lv, s216c4f4, ABISELECT(208,148), "S216C4.s216c4f4");
    check_field_offset(lv, s216c4f5, ABISELECT(224,160), "S216C4.s216c4f5");
    check_field_offset(lv, s216c4f6, ABISELECT(240,172), "S216C4.s216c4f6");
    check_field_offset(lv, s216c4f7, ABISELECT(256,184), "S216C4.s216c4f7");
    test_class_info(&lv, &cd_S216C4);
    dp->~S216C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS216C4(Test_S216C4, "S216C4", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN6S216C4C1Ev();
extern void _ZN6S216C4D1Ev();
Name_Map name_map_S216C4[] = {
  NSPAIR(_ZN6S216C4C1Ev),
  NSPAIR(_ZN6S216C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S216C6;
extern VTBL_ENTRY _ZTI6S216C6[];
extern  VTBL_ENTRY _ZTV6S216C6[];
extern Class_Descriptor cd_S216C5;
extern VTBL_ENTRY _ZTI6S216C5[];
extern  VTBL_ENTRY _ZTV6S216C5[];
static Base_Class bases_S216C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S216C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S216C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S216C4[];
extern void _ZN6S216C4D1Ev();
extern void _ZN6S216C4D0Ev();
extern void _ZN6S216C62v4Ev();
extern void _ZN6S216C62v5Ev();
extern void _ZN6S216C62v6Ev();
extern void _ZN6S216C62v7Ev();
extern void _ZN6S216C62v8Ev();
extern void _ZN6S216C62v9Ev();
extern void _ZN6S216C63v10Ev();
extern void _ZN6S216C63v11Ev();
extern void _ZN6S216C63v12Ev();
extern void _ZN6S216C63v13Ev();
extern void _ZN6S216C63v14Ev();
extern void _ZN6S216C63v15Ev();
extern void _ZN6S216C63v16Ev();
extern void _ZN6S216C63v17Ev();
extern void _ZN6S216C63v18Ev();
extern void _ZN6S216C63v19Ev();
extern void _ZN6S216C63v20Ev();
extern void _ZN6S216C63v21Ev();
extern void _ZN6S216C63v22Ev();
extern void _ZN6S216C63v23Ev();
extern void _ZN6S216C63v24Ev();
extern void _ZN6S216C63v25Ev();
extern void _ZN6S216C63v26Ev();
extern void _ZN6S216C63v27Ev();
extern void _ZN6S216C63v28Ev();
extern void _ZN6S216C63v29Ev();
extern void _ZN6S216C63v30Ev();
extern void _ZN6S216C63v31Ev();
extern void _ZN6S216C63v32Ev();
extern void _ZN6S216C63v33Ev();
extern void _ZN6S216C63v34Ev();
extern void _ZN6S216C63v35Ev();
extern void _ZN6S216C63v36Ev();
extern void _ZN6S216C63v37Ev();
extern void _ZN6S216C63v38Ev();
extern void _ZN6S216C63v39Ev();
extern void _ZN6S216C63v40Ev();
extern void _ZN6S216C63v41Ev();
extern void _ZN6S216C63v42Ev();
extern void _ZN6S216C63v43Ev();
extern void _ZN6S216C63v44Ev();
extern void _ZN6S216C63v45Ev();
extern void _ZN6S216C63v46Ev();
extern void _ZN6S216C63v47Ev();
extern void _ZN6S216C63v48Ev();
extern void _ZN6S216C63v49Ev();
extern void _ZN6S216C63v50Ev();
extern void _ZN6S216C63v51Ev();
extern void _ZN6S216C63v52Ev();
extern void _ZN6S216C63v53Ev();
extern void _ZN6S216C63v54Ev();
extern void _ZN6S216C63v55Ev();
extern void _ZN6S216C63v56Ev();
extern void _ZN6S216C63v57Ev();
extern void _ZN6S216C63v58Ev();
extern void _ZN6S216C63v59Ev();
extern void _ZN6S216C63v60Ev();
extern void _ZN6S216C63v61Ev();
extern void _ZN6S216C63v62Ev();
extern void _ZN6S216C63v63Ev();
extern void _ZN6S216C63v64Ev();
extern void _ZN6S216C63v65Ev();
extern void _ZN6S216C63v66Ev();
extern void _ZN6S216C63v67Ev();
extern void _ZN6S216C53v68Ev();
extern void _ZN6S216C53v69Ev();
extern void _ZN6S216C53v70Ev();
extern void _ZN6S216C53v71Ev();
extern void _ZN6S216C53v72Ev();
extern void _ZN6S216C53v73Ev();
extern void _ZN6S216C53v74Ev();
extern void _ZN6S216C53v75Ev();
extern void _ZN6S216C53v76Ev();
extern void _ZN6S216C53v77Ev();
extern void _ZN6S216C53v78Ev();
extern void _ZN6S216C53v79Ev();
extern void _ZN6S216C53v80Ev();
extern void _ZN6S216C53v81Ev();
extern void _ZN6S216C53v82Ev();
extern void _ZN6S216C53v83Ev();
extern void _ZN6S216C53v84Ev();
extern void _ZN6S216C53v85Ev();
extern void _ZN6S216C53v86Ev();
extern void _ZN6S216C53v87Ev();
extern void _ZN6S216C53v88Ev();
extern void _ZN6S216C53v89Ev();
extern void _ZN6S216C43v90Ev();
extern void _ZN6S216C43v91Ev();
extern void _ZN6S216C43v92Ev();
extern void _ZN6S216C43v93Ev();
extern void _ZN6S216C43v94Ev();
extern void _ZN6S216C43v95Ev();
extern void _ZN6S216C43v96Ev();
extern void _ZN6S216C43v97Ev();
extern void _ZN6S216C43v98Ev();
extern void _ZN6S216C43v99Ev();
extern void _ZN6S216C44v100Ev();
extern void _ZN6S216C44v101Ev();
extern void _ZN6S216C44v102Ev();
extern void _ZN6S216C44v103Ev();
extern void _ZN6S216C44v104Ev();
extern void _ZN6S216C44v105Ev();
extern void _ZN6S216C44v106Ev();
extern void _ZN6S216C44v107Ev();
extern void _ZN6S216C44v108Ev();
extern void _ZN6S216C44v109Ev();
static  VTBL_ENTRY vtc_S216C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S216C4[0]),
  (VTBL_ENTRY)&_ZN6S216C4D1Ev,
  (VTBL_ENTRY)&_ZN6S216C4D0Ev,
  (VTBL_ENTRY)&_ZN6S216C62v4Ev,
  (VTBL_ENTRY)&_ZN6S216C62v5Ev,
  (VTBL_ENTRY)&_ZN6S216C62v6Ev,
  (VTBL_ENTRY)&_ZN6S216C62v7Ev,
  (VTBL_ENTRY)&_ZN6S216C62v8Ev,
  (VTBL_ENTRY)&_ZN6S216C62v9Ev,
  (VTBL_ENTRY)&_ZN6S216C63v10Ev,
  (VTBL_ENTRY)&_ZN6S216C63v11Ev,
  (VTBL_ENTRY)&_ZN6S216C63v12Ev,
  (VTBL_ENTRY)&_ZN6S216C63v13Ev,
  (VTBL_ENTRY)&_ZN6S216C63v14Ev,
  (VTBL_ENTRY)&_ZN6S216C63v15Ev,
  (VTBL_ENTRY)&_ZN6S216C63v16Ev,
  (VTBL_ENTRY)&_ZN6S216C63v17Ev,
  (VTBL_ENTRY)&_ZN6S216C63v18Ev,
  (VTBL_ENTRY)&_ZN6S216C63v19Ev,
  (VTBL_ENTRY)&_ZN6S216C63v20Ev,
  (VTBL_ENTRY)&_ZN6S216C63v21Ev,
  (VTBL_ENTRY)&_ZN6S216C63v22Ev,
  (VTBL_ENTRY)&_ZN6S216C63v23Ev,
  (VTBL_ENTRY)&_ZN6S216C63v24Ev,
  (VTBL_ENTRY)&_ZN6S216C63v25Ev,
  (VTBL_ENTRY)&_ZN6S216C63v26Ev,
  (VTBL_ENTRY)&_ZN6S216C63v27Ev,
  (VTBL_ENTRY)&_ZN6S216C63v28Ev,
  (VTBL_ENTRY)&_ZN6S216C63v29Ev,
  (VTBL_ENTRY)&_ZN6S216C63v30Ev,
  (VTBL_ENTRY)&_ZN6S216C63v31Ev,
  (VTBL_ENTRY)&_ZN6S216C63v32Ev,
  (VTBL_ENTRY)&_ZN6S216C63v33Ev,
  (VTBL_ENTRY)&_ZN6S216C63v34Ev,
  (VTBL_ENTRY)&_ZN6S216C63v35Ev,
  (VTBL_ENTRY)&_ZN6S216C63v36Ev,
  (VTBL_ENTRY)&_ZN6S216C63v37Ev,
  (VTBL_ENTRY)&_ZN6S216C63v38Ev,
  (VTBL_ENTRY)&_ZN6S216C63v39Ev,
  (VTBL_ENTRY)&_ZN6S216C63v40Ev,
  (VTBL_ENTRY)&_ZN6S216C63v41Ev,
  (VTBL_ENTRY)&_ZN6S216C63v42Ev,
  (VTBL_ENTRY)&_ZN6S216C63v43Ev,
  (VTBL_ENTRY)&_ZN6S216C63v44Ev,
  (VTBL_ENTRY)&_ZN6S216C63v45Ev,
  (VTBL_ENTRY)&_ZN6S216C63v46Ev,
  (VTBL_ENTRY)&_ZN6S216C63v47Ev,
  (VTBL_ENTRY)&_ZN6S216C63v48Ev,
  (VTBL_ENTRY)&_ZN6S216C63v49Ev,
  (VTBL_ENTRY)&_ZN6S216C63v50Ev,
  (VTBL_ENTRY)&_ZN6S216C63v51Ev,
  (VTBL_ENTRY)&_ZN6S216C63v52Ev,
  (VTBL_ENTRY)&_ZN6S216C63v53Ev,
  (VTBL_ENTRY)&_ZN6S216C63v54Ev,
  (VTBL_ENTRY)&_ZN6S216C63v55Ev,
  (VTBL_ENTRY)&_ZN6S216C63v56Ev,
  (VTBL_ENTRY)&_ZN6S216C63v57Ev,
  (VTBL_ENTRY)&_ZN6S216C63v58Ev,
  (VTBL_ENTRY)&_ZN6S216C63v59Ev,
  (VTBL_ENTRY)&_ZN6S216C63v60Ev,
  (VTBL_ENTRY)&_ZN6S216C63v61Ev,
  (VTBL_ENTRY)&_ZN6S216C63v62Ev,
  (VTBL_ENTRY)&_ZN6S216C63v63Ev,
  (VTBL_ENTRY)&_ZN6S216C63v64Ev,
  (VTBL_ENTRY)&_ZN6S216C63v65Ev,
  (VTBL_ENTRY)&_ZN6S216C63v66Ev,
  (VTBL_ENTRY)&_ZN6S216C63v67Ev,
  (VTBL_ENTRY)&_ZN6S216C53v68Ev,
  (VTBL_ENTRY)&_ZN6S216C53v69Ev,
  (VTBL_ENTRY)&_ZN6S216C53v70Ev,
  (VTBL_ENTRY)&_ZN6S216C53v71Ev,
  (VTBL_ENTRY)&_ZN6S216C53v72Ev,
  (VTBL_ENTRY)&_ZN6S216C53v73Ev,
  (VTBL_ENTRY)&_ZN6S216C53v74Ev,
  (VTBL_ENTRY)&_ZN6S216C53v75Ev,
  (VTBL_ENTRY)&_ZN6S216C53v76Ev,
  (VTBL_ENTRY)&_ZN6S216C53v77Ev,
  (VTBL_ENTRY)&_ZN6S216C53v78Ev,
  (VTBL_ENTRY)&_ZN6S216C53v79Ev,
  (VTBL_ENTRY)&_ZN6S216C53v80Ev,
  (VTBL_ENTRY)&_ZN6S216C53v81Ev,
  (VTBL_ENTRY)&_ZN6S216C53v82Ev,
  (VTBL_ENTRY)&_ZN6S216C53v83Ev,
  (VTBL_ENTRY)&_ZN6S216C53v84Ev,
  (VTBL_ENTRY)&_ZN6S216C53v85Ev,
  (VTBL_ENTRY)&_ZN6S216C53v86Ev,
  (VTBL_ENTRY)&_ZN6S216C53v87Ev,
  (VTBL_ENTRY)&_ZN6S216C53v88Ev,
  (VTBL_ENTRY)&_ZN6S216C53v89Ev,
  (VTBL_ENTRY)&_ZN6S216C43v90Ev,
  (VTBL_ENTRY)&_ZN6S216C43v91Ev,
  (VTBL_ENTRY)&_ZN6S216C43v92Ev,
  (VTBL_ENTRY)&_ZN6S216C43v93Ev,
  (VTBL_ENTRY)&_ZN6S216C43v94Ev,
  (VTBL_ENTRY)&_ZN6S216C43v95Ev,
  (VTBL_ENTRY)&_ZN6S216C43v96Ev,
  (VTBL_ENTRY)&_ZN6S216C43v97Ev,
  (VTBL_ENTRY)&_ZN6S216C43v98Ev,
  (VTBL_ENTRY)&_ZN6S216C43v99Ev,
  (VTBL_ENTRY)&_ZN6S216C44v100Ev,
  (VTBL_ENTRY)&_ZN6S216C44v101Ev,
  (VTBL_ENTRY)&_ZN6S216C44v102Ev,
  (VTBL_ENTRY)&_ZN6S216C44v103Ev,
  (VTBL_ENTRY)&_ZN6S216C44v104Ev,
  (VTBL_ENTRY)&_ZN6S216C44v105Ev,
  (VTBL_ENTRY)&_ZN6S216C44v106Ev,
  (VTBL_ENTRY)&_ZN6S216C44v107Ev,
  (VTBL_ENTRY)&_ZN6S216C44v108Ev,
  (VTBL_ENTRY)&_ZN6S216C44v109Ev,
};
extern VTBL_ENTRY _ZTI6S216C4[];
extern  VTBL_ENTRY _ZTV6S216C4[];
Class_Descriptor cd_S216C4 = {  "S216C4", // class name
  bases_S216C4, 2,
  &(vtc_S216C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI6S216C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S216C4),110, //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  S216C3  : S216C4 {
  void *s216c3f0[2];
  int s216c3f1[4];
  unsigned int s216c3f2:1;
  unsigned int s216c3f3:1;
  unsigned int s216c3f4:1;
  char s216c3f5;
  int s216c3f6;
  unsigned int s216c3f7:1;
  ::S287C23 s216c3f8;
  virtual  ~S216C3(); // _ZN6S216C3D1Ev
  virtual void  v110(); // _ZN6S216C34v110Ev
  virtual void  v111(); // _ZN6S216C34v111Ev
  virtual void  v112(); // _ZN6S216C34v112Ev
  virtual void  v113(); // _ZN6S216C34v113Ev
  virtual void  v114(); // _ZN6S216C34v114Ev
  virtual void  v115(); // _ZN6S216C34v115Ev
  virtual void  v116(); // _ZN6S216C34v116Ev
  virtual void  v117(); // _ZN6S216C34v117Ev
  virtual void  v118(); // _ZN6S216C34v118Ev
  virtual void  v119(); // _ZN6S216C34v119Ev
  virtual void  v120(); // _ZN6S216C34v120Ev
  virtual void  v121(); // _ZN6S216C34v121Ev
  virtual void  v122(); // _ZN6S216C34v122Ev
  virtual void  v123(); // _ZN6S216C34v123Ev
  S216C3(); // tgen
};
//SIG(-1 S216C3) C1{ BC2{ BC3{ BC4{ 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 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 Fi:1 Fi:1 Fi:1 FC11{ BC12{ BC9}} FC13{ BC14{ BC9}} FC15{ BC16{ BC9}} FC17{ BC18{ BC9}} Fi[3]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC19{ BC20{ BC9}}}


 S216C3 ::~S216C3(){ note_dtor("S216C3", this);}
void  S216C3 ::v110(){vfunc_called(this, "_ZN6S216C34v110Ev");}
void  S216C3 ::v111(){vfunc_called(this, "_ZN6S216C34v111Ev");}
void  S216C3 ::v112(){vfunc_called(this, "_ZN6S216C34v112Ev");}
void  S216C3 ::v113(){vfunc_called(this, "_ZN6S216C34v113Ev");}
void  S216C3 ::v114(){vfunc_called(this, "_ZN6S216C34v114Ev");}
void  S216C3 ::v115(){vfunc_called(this, "_ZN6S216C34v115Ev");}
void  S216C3 ::v116(){vfunc_called(this, "_ZN6S216C34v116Ev");}
void  S216C3 ::v117(){vfunc_called(this, "_ZN6S216C34v117Ev");}
void  S216C3 ::v118(){vfunc_called(this, "_ZN6S216C34v118Ev");}
void  S216C3 ::v119(){vfunc_called(this, "_ZN6S216C34v119Ev");}
void  S216C3 ::v120(){vfunc_called(this, "_ZN6S216C34v120Ev");}
void  S216C3 ::v121(){vfunc_called(this, "_ZN6S216C34v121Ev");}
void  S216C3 ::v122(){vfunc_called(this, "_ZN6S216C34v122Ev");}
void  S216C3 ::v123(){vfunc_called(this, "_ZN6S216C34v123Ev");}
S216C3 ::S216C3(){ note_ctor("S216C3", this);} // tgen

static void Test_S216C3()
{
  extern Class_Descriptor cd_S216C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(43,62)];
    init_test(&cd_S216C3, buf);
    S216C3 *dp, &lv = *(dp=new (buf) S216C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,244), "sizeof(S216C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S216C3)");
    check_base_class_offset(lv, (S216C6*)(S216C5*)(S216C4*), 0, "S216C3");
    check_base_class_offset(lv, (S216C5*)(S216C4*), 0, "S216C3");
    check_base_class_offset(lv, (S216C4*), 0, "S216C3");
    check_field_offset(lv, s216c3f0, ABISELECT(272,196), "S216C3.s216c3f0");
    check_field_offset(lv, s216c3f1, ABISELECT(288,204), "S216C3.s216c3f1");
    set_bf_and_test(lv, s216c3f2, ABISELECT(304,220), 0, 1, 1, "S216C3");
    set_bf_and_test(lv, s216c3f3, ABISELECT(304,220), 1, 1, 1, "S216C3");
    set_bf_and_test(lv, s216c3f4, ABISELECT(304,220), 2, 1, 1, "S216C3");
    check_field_offset(lv, s216c3f5, ABISELECT(305,221), "S216C3.s216c3f5");
    check_field_offset(lv, s216c3f6, ABISELECT(308,224), "S216C3.s216c3f6");
    set_bf_and_test(lv, s216c3f7, ABISELECT(312,228), 0, 1, 1, "S216C3");
    check_field_offset(lv, s216c3f8, ABISELECT(320,232), "S216C3.s216c3f8");
    test_class_info(&lv, &cd_S216C3);
    dp->~S216C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS216C3(Test_S216C3, "S216C3", ABISELECT(336,244));

#else // __cplusplus

extern void _ZN6S216C3C1Ev();
extern void _ZN6S216C3D1Ev();
Name_Map name_map_S216C3[] = {
  NSPAIR(_ZN6S216C3C1Ev),
  NSPAIR(_ZN6S216C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S216C6;
extern VTBL_ENTRY _ZTI6S216C6[];
extern  VTBL_ENTRY _ZTV6S216C6[];
extern Class_Descriptor cd_S216C5;
extern VTBL_ENTRY _ZTI6S216C5[];
extern  VTBL_ENTRY _ZTV6S216C5[];
extern Class_Descriptor cd_S216C4;
extern VTBL_ENTRY _ZTI6S216C4[];
extern  VTBL_ENTRY _ZTV6S216C4[];
static Base_Class bases_S216C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S216C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S216C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S216C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S216C3[];
extern void _ZN6S216C3D1Ev();
extern void _ZN6S216C3D0Ev();
extern void _ZN6S216C62v4Ev();
extern void _ZN6S216C62v5Ev();
extern void _ZN6S216C62v6Ev();
extern void _ZN6S216C62v7Ev();
extern void _ZN6S216C62v8Ev();
extern void _ZN6S216C62v9Ev();
extern void _ZN6S216C63v10Ev();
extern void _ZN6S216C63v11Ev();
extern void _ZN6S216C63v12Ev();
extern void _ZN6S216C63v13Ev();
extern void _ZN6S216C63v14Ev();
extern void _ZN6S216C63v15Ev();
extern void _ZN6S216C63v16Ev();
extern void _ZN6S216C63v17Ev();
extern void _ZN6S216C63v18Ev();
extern void _ZN6S216C63v19Ev();
extern void _ZN6S216C63v20Ev();
extern void _ZN6S216C63v21Ev();
extern void _ZN6S216C63v22Ev();
extern void _ZN6S216C63v23Ev();
extern void _ZN6S216C63v24Ev();
extern void _ZN6S216C63v25Ev();
extern void _ZN6S216C63v26Ev();
extern void _ZN6S216C63v27Ev();
extern void _ZN6S216C63v28Ev();
extern void _ZN6S216C63v29Ev();
extern void _ZN6S216C63v30Ev();
extern void _ZN6S216C63v31Ev();
extern void _ZN6S216C63v32Ev();
extern void _ZN6S216C63v33Ev();
extern void _ZN6S216C63v34Ev();
extern void _ZN6S216C63v35Ev();
extern void _ZN6S216C63v36Ev();
extern void _ZN6S216C63v37Ev();
extern void _ZN6S216C63v38Ev();
extern void _ZN6S216C63v39Ev();
extern void _ZN6S216C63v40Ev();
extern void _ZN6S216C63v41Ev();
extern void _ZN6S216C63v42Ev();
extern void _ZN6S216C63v43Ev();
extern void _ZN6S216C63v44Ev();
extern void _ZN6S216C63v45Ev();
extern void _ZN6S216C63v46Ev();
extern void _ZN6S216C63v47Ev();
extern void _ZN6S216C63v48Ev();
extern void _ZN6S216C63v49Ev();
extern void _ZN6S216C63v50Ev();
extern void _ZN6S216C63v51Ev();
extern void _ZN6S216C63v52Ev();
extern void _ZN6S216C63v53Ev();
extern void _ZN6S216C63v54Ev();
extern void _ZN6S216C63v55Ev();
extern void _ZN6S216C63v56Ev();
extern void _ZN6S216C63v57Ev();
extern void _ZN6S216C63v58Ev();
extern void _ZN6S216C63v59Ev();
extern void _ZN6S216C63v60Ev();
extern void _ZN6S216C63v61Ev();
extern void _ZN6S216C63v62Ev();
extern void _ZN6S216C63v63Ev();
extern void _ZN6S216C63v64Ev();
extern void _ZN6S216C63v65Ev();
extern void _ZN6S216C63v66Ev();
extern void _ZN6S216C63v67Ev();
extern void _ZN6S216C53v68Ev();
extern void _ZN6S216C53v69Ev();
extern void _ZN6S216C53v70Ev();
extern void _ZN6S216C53v71Ev();
extern void _ZN6S216C53v72Ev();
extern void _ZN6S216C53v73Ev();
extern void _ZN6S216C53v74Ev();
extern void _ZN6S216C53v75Ev();
extern void _ZN6S216C53v76Ev();
extern void _ZN6S216C53v77Ev();
extern void _ZN6S216C53v78Ev();
extern void _ZN6S216C53v79Ev();
extern void _ZN6S216C53v80Ev();
extern void _ZN6S216C53v81Ev();
extern void _ZN6S216C53v82Ev();
extern void _ZN6S216C53v83Ev();
extern void _ZN6S216C53v84Ev();
extern void _ZN6S216C53v85Ev();
extern void _ZN6S216C53v86Ev();
extern void _ZN6S216C53v87Ev();
extern void _ZN6S216C53v88Ev();
extern void _ZN6S216C53v89Ev();
extern void _ZN6S216C43v90Ev();
extern void _ZN6S216C43v91Ev();
extern void _ZN6S216C43v92Ev();
extern void _ZN6S216C43v93Ev();
extern void _ZN6S216C43v94Ev();
extern void _ZN6S216C43v95Ev();
extern void _ZN6S216C43v96Ev();
extern void _ZN6S216C43v97Ev();
extern void _ZN6S216C43v98Ev();
extern void _ZN6S216C43v99Ev();
extern void _ZN6S216C44v100Ev();
extern void _ZN6S216C44v101Ev();
extern void _ZN6S216C44v102Ev();
extern void _ZN6S216C44v103Ev();
extern void _ZN6S216C44v104Ev();
extern void _ZN6S216C44v105Ev();
extern void _ZN6S216C44v106Ev();
extern void _ZN6S216C44v107Ev();
extern void _ZN6S216C44v108Ev();
extern void _ZN6S216C44v109Ev();
extern void _ZN6S216C34v110Ev();
extern void _ZN6S216C34v111Ev();
extern void _ZN6S216C34v112Ev();
extern void _ZN6S216C34v113Ev();
extern void _ZN6S216C34v114Ev();
extern void _ZN6S216C34v115Ev();
extern void _ZN6S216C34v116Ev();
extern void _ZN6S216C34v117Ev();
extern void _ZN6S216C34v118Ev();
extern void _ZN6S216C34v119Ev();
extern void _ZN6S216C34v120Ev();
extern void _ZN6S216C34v121Ev();
extern void _ZN6S216C34v122Ev();
extern void _ZN6S216C34v123Ev();
static  VTBL_ENTRY vtc_S216C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S216C3[0]),
  (VTBL_ENTRY)&_ZN6S216C3D1Ev,
  (VTBL_ENTRY)&_ZN6S216C3D0Ev,
  (VTBL_ENTRY)&_ZN6S216C62v4Ev,
  (VTBL_ENTRY)&_ZN6S216C62v5Ev,
  (VTBL_ENTRY)&_ZN6S216C62v6Ev,
  (VTBL_ENTRY)&_ZN6S216C62v7Ev,
  (VTBL_ENTRY)&_ZN6S216C62v8Ev,
  (VTBL_ENTRY)&_ZN6S216C62v9Ev,
  (VTBL_ENTRY)&_ZN6S216C63v10Ev,
  (VTBL_ENTRY)&_ZN6S216C63v11Ev,
  (VTBL_ENTRY)&_ZN6S216C63v12Ev,
  (VTBL_ENTRY)&_ZN6S216C63v13Ev,
  (VTBL_ENTRY)&_ZN6S216C63v14Ev,
  (VTBL_ENTRY)&_ZN6S216C63v15Ev,
  (VTBL_ENTRY)&_ZN6S216C63v16Ev,
  (VTBL_ENTRY)&_ZN6S216C63v17Ev,
  (VTBL_ENTRY)&_ZN6S216C63v18Ev,
  (VTBL_ENTRY)&_ZN6S216C63v19Ev,
  (VTBL_ENTRY)&_ZN6S216C63v20Ev,
  (VTBL_ENTRY)&_ZN6S216C63v21Ev,
  (VTBL_ENTRY)&_ZN6S216C63v22Ev,
  (VTBL_ENTRY)&_ZN6S216C63v23Ev,
  (VTBL_ENTRY)&_ZN6S216C63v24Ev,
  (VTBL_ENTRY)&_ZN6S216C63v25Ev,
  (VTBL_ENTRY)&_ZN6S216C63v26Ev,
  (VTBL_ENTRY)&_ZN6S216C63v27Ev,
  (VTBL_ENTRY)&_ZN6S216C63v28Ev,
  (VTBL_ENTRY)&_ZN6S216C63v29Ev,
  (VTBL_ENTRY)&_ZN6S216C63v30Ev,
  (VTBL_ENTRY)&_ZN6S216C63v31Ev,
  (VTBL_ENTRY)&_ZN6S216C63v32Ev,
  (VTBL_ENTRY)&_ZN6S216C63v33Ev,
  (VTBL_ENTRY)&_ZN6S216C63v34Ev,
  (VTBL_ENTRY)&_ZN6S216C63v35Ev,
  (VTBL_ENTRY)&_ZN6S216C63v36Ev,
  (VTBL_ENTRY)&_ZN6S216C63v37Ev,
  (VTBL_ENTRY)&_ZN6S216C63v38Ev,
  (VTBL_ENTRY)&_ZN6S216C63v39Ev,
  (VTBL_ENTRY)&_ZN6S216C63v40Ev,
  (VTBL_ENTRY)&_ZN6S216C63v41Ev,
  (VTBL_ENTRY)&_ZN6S216C63v42Ev,
  (VTBL_ENTRY)&_ZN6S216C63v43Ev,
  (VTBL_ENTRY)&_ZN6S216C63v44Ev,
  (VTBL_ENTRY)&_ZN6S216C63v45Ev,
  (VTBL_ENTRY)&_ZN6S216C63v46Ev,
  (VTBL_ENTRY)&_ZN6S216C63v47Ev,
  (VTBL_ENTRY)&_ZN6S216C63v48Ev,
  (VTBL_ENTRY)&_ZN6S216C63v49Ev,
  (VTBL_ENTRY)&_ZN6S216C63v50Ev,
  (VTBL_ENTRY)&_ZN6S216C63v51Ev,
  (VTBL_ENTRY)&_ZN6S216C63v52Ev,
  (VTBL_ENTRY)&_ZN6S216C63v53Ev,
  (VTBL_ENTRY)&_ZN6S216C63v54Ev,
  (VTBL_ENTRY)&_ZN6S216C63v55Ev,
  (VTBL_ENTRY)&_ZN6S216C63v56Ev,
  (VTBL_ENTRY)&_ZN6S216C63v57Ev,
  (VTBL_ENTRY)&_ZN6S216C63v58Ev,
  (VTBL_ENTRY)&_ZN6S216C63v59Ev,
  (VTBL_ENTRY)&_ZN6S216C63v60Ev,
  (VTBL_ENTRY)&_ZN6S216C63v61Ev,
  (VTBL_ENTRY)&_ZN6S216C63v62Ev,
  (VTBL_ENTRY)&_ZN6S216C63v63Ev,
  (VTBL_ENTRY)&_ZN6S216C63v64Ev,
  (VTBL_ENTRY)&_ZN6S216C63v65Ev,
  (VTBL_ENTRY)&_ZN6S216C63v66Ev,
  (VTBL_ENTRY)&_ZN6S216C63v67Ev,
  (VTBL_ENTRY)&_ZN6S216C53v68Ev,
  (VTBL_ENTRY)&_ZN6S216C53v69Ev,
  (VTBL_ENTRY)&_ZN6S216C53v70Ev,
  (VTBL_ENTRY)&_ZN6S216C53v71Ev,
  (VTBL_ENTRY)&_ZN6S216C53v72Ev,
  (VTBL_ENTRY)&_ZN6S216C53v73Ev,
  (VTBL_ENTRY)&_ZN6S216C53v74Ev,
  (VTBL_ENTRY)&_ZN6S216C53v75Ev,
  (VTBL_ENTRY)&_ZN6S216C53v76Ev,
  (VTBL_ENTRY)&_ZN6S216C53v77Ev,
  (VTBL_ENTRY)&_ZN6S216C53v78Ev,
  (VTBL_ENTRY)&_ZN6S216C53v79Ev,
  (VTBL_ENTRY)&_ZN6S216C53v80Ev,
  (VTBL_ENTRY)&_ZN6S216C53v81Ev,
  (VTBL_ENTRY)&_ZN6S216C53v82Ev,
  (VTBL_ENTRY)&_ZN6S216C53v83Ev,
  (VTBL_ENTRY)&_ZN6S216C53v84Ev,
  (VTBL_ENTRY)&_ZN6S216C53v85Ev,
  (VTBL_ENTRY)&_ZN6S216C53v86Ev,
  (VTBL_ENTRY)&_ZN6S216C53v87Ev,
  (VTBL_ENTRY)&_ZN6S216C53v88Ev,
  (VTBL_ENTRY)&_ZN6S216C53v89Ev,
  (VTBL_ENTRY)&_ZN6S216C43v90Ev,
  (VTBL_ENTRY)&_ZN6S216C43v91Ev,
  (VTBL_ENTRY)&_ZN6S216C43v92Ev,
  (VTBL_ENTRY)&_ZN6S216C43v93Ev,
  (VTBL_ENTRY)&_ZN6S216C43v94Ev,
  (VTBL_ENTRY)&_ZN6S216C43v95Ev,
  (VTBL_ENTRY)&_ZN6S216C43v96Ev,
  (VTBL_ENTRY)&_ZN6S216C43v97Ev,
  (VTBL_ENTRY)&_ZN6S216C43v98Ev,
  (VTBL_ENTRY)&_ZN6S216C43v99Ev,
  (VTBL_ENTRY)&_ZN6S216C44v100Ev,
  (VTBL_ENTRY)&_ZN6S216C44v101Ev,
  (VTBL_ENTRY)&_ZN6S216C44v102Ev,
  (VTBL_ENTRY)&_ZN6S216C44v103Ev,
  (VTBL_ENTRY)&_ZN6S216C44v104Ev,
  (VTBL_ENTRY)&_ZN6S216C44v105Ev,
  (VTBL_ENTRY)&_ZN6S216C44v106Ev,
  (VTBL_ENTRY)&_ZN6S216C44v107Ev,
  (VTBL_ENTRY)&_ZN6S216C44v108Ev,
  (VTBL_ENTRY)&_ZN6S216C44v109Ev,
  (VTBL_ENTRY)&_ZN6S216C34v110Ev,
  (VTBL_ENTRY)&_ZN6S216C34v111Ev,
  (VTBL_ENTRY)&_ZN6S216C34v112Ev,
  (VTBL_ENTRY)&_ZN6S216C34v113Ev,
  (VTBL_ENTRY)&_ZN6S216C34v114Ev,
  (VTBL_ENTRY)&_ZN6S216C34v115Ev,
  (VTBL_ENTRY)&_ZN6S216C34v116Ev,
  (VTBL_ENTRY)&_ZN6S216C34v117Ev,
  (VTBL_ENTRY)&_ZN6S216C34v118Ev,
  (VTBL_ENTRY)&_ZN6S216C34v119Ev,
  (VTBL_ENTRY)&_ZN6S216C34v120Ev,
  (VTBL_ENTRY)&_ZN6S216C34v121Ev,
  (VTBL_ENTRY)&_ZN6S216C34v122Ev,
  (VTBL_ENTRY)&_ZN6S216C34v123Ev,
};
extern VTBL_ENTRY _ZTI6S216C3[];
extern  VTBL_ENTRY _ZTV6S216C3[];
Class_Descriptor cd_S216C3 = {  "S216C3", // class name
  bases_S216C3, 3,
  &(vtc_S216C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(336,244), // object size
  NSPAIRA(_ZTI6S216C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S216C3),124, //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  S216C2  : S216C3 {
  void *s216c2f0[2];
  ::S287C8_nt s216c2f1;
  unsigned int s216c2f2:1;
  unsigned int s216c2f3:1;
  ::S3350C21_nt s216c2f4;
  virtual  ~S216C2(); // _ZN6S216C2D1Ev
  virtual void  v124(); // _ZN6S216C24v124Ev
  virtual void  v125(); // _ZN6S216C24v125Ev
  virtual void  v126(); // _ZN6S216C24v126Ev
  virtual void  v127(); // _ZN6S216C24v127Ev
  virtual void  v128(); // _ZN6S216C24v128Ev
  virtual void  v129(); // _ZN6S216C24v129Ev
  virtual void  v130(); // _ZN6S216C24v130Ev
  virtual void  v131(); // _ZN6S216C24v131Ev
  virtual void  v132(); // _ZN6S216C24v132Ev
  virtual void  v133(); // _ZN6S216C24v133Ev
  virtual void  v134(); // _ZN6S216C24v134Ev
  S216C2(); // tgen
};
//SIG(-1 S216C2) C1{ BC2{ BC3{ BC4{ BC5{ vd v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 Fi[2] Fp Fi[2] FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} FC7 FC11{ m} FC7 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 Fi:1 Fi:1 Fi:1 FC12{ BC13{ BC10}} FC14{ BC15{ BC10}} FC16{ BC17{ BC10}} FC18{ BC19{ BC10}} Fi[3]} vd v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC20{ BC21{ BC10}}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[2] FC7 Fi:1 Fi:1 FC22{ m Fp FC6}}


 S216C2 ::~S216C2(){ note_dtor("S216C2", this);}
void  S216C2 ::v124(){vfunc_called(this, "_ZN6S216C24v124Ev");}
void  S216C2 ::v125(){vfunc_called(this, "_ZN6S216C24v125Ev");}
void  S216C2 ::v126(){vfunc_called(this, "_ZN6S216C24v126Ev");}
void  S216C2 ::v127(){vfunc_called(this, "_ZN6S216C24v127Ev");}
void  S216C2 ::v128(){vfunc_called(this, "_ZN6S216C24v128Ev");}
void  S216C2 ::v129(){vfunc_called(this, "_ZN6S216C24v129Ev");}
void  S216C2 ::v130(){vfunc_called(this, "_ZN6S216C24v130Ev");}
void  S216C2 ::v131(){vfunc_called(this, "_ZN6S216C24v131Ev");}
void  S216C2 ::v132(){vfunc_called(this, "_ZN6S216C24v132Ev");}
void  S216C2 ::v133(){vfunc_called(this, "_ZN6S216C24v133Ev");}
void  S216C2 ::v134(){vfunc_called(this, "_ZN6S216C24v134Ev");}
S216C2 ::S216C2(){ note_ctor("S216C2", this);} // tgen

static void Test_S216C2()
{
  extern Class_Descriptor cd_S216C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(50,71)];
    init_test(&cd_S216C2, buf);
    S216C2 *dp, &lv = *(dp=new (buf) S216C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(392,280), "sizeof(S216C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S216C2)");
    check_base_class_offset(lv, (S216C6*)(S216C5*)(S216C4*)(S216C3*), 0, "S216C2");
    check_base_class_offset(lv, (S216C5*)(S216C4*)(S216C3*), 0, "S216C2");
    check_base_class_offset(lv, (S216C4*)(S216C3*), 0, "S216C2");
    check_base_class_offset(lv, (S216C3*), 0, "S216C2");
    check_field_offset(lv, s216c2f0, ABISELECT(336,244), "S216C2.s216c2f0");
    check_field_offset(lv, s216c2f1, ABISELECT(352,252), "S216C2.s216c2f1");
    set_bf_and_test(lv, s216c2f2, ABISELECT(368,264), 0, 1, 1, "S216C2");
    set_bf_and_test(lv, s216c2f3, ABISELECT(368,264), 1, 1, 1, "S216C2");
    check_field_offset(lv, s216c2f4, ABISELECT(376,268), "S216C2.s216c2f4");
    test_class_info(&lv, &cd_S216C2);
    dp->~S216C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS216C2(Test_S216C2, "S216C2", ABISELECT(392,280));

#else // __cplusplus

extern void _ZN6S216C2C1Ev();
extern void _ZN6S216C2D1Ev();
Name_Map name_map_S216C2[] = {
  NSPAIR(_ZN6S216C2C1Ev),
  NSPAIR(_ZN6S216C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S216C6;
extern VTBL_ENTRY _ZTI6S216C6[];
extern  VTBL_ENTRY _ZTV6S216C6[];
extern Class_Descriptor cd_S216C5;
extern VTBL_ENTRY _ZTI6S216C5[];
extern  VTBL_ENTRY _ZTV6S216C5[];
extern Class_Descriptor cd_S216C4;
extern VTBL_ENTRY _ZTI6S216C4[];
extern  VTBL_ENTRY _ZTV6S216C4[];
extern Class_Descriptor cd_S216C3;
extern VTBL_ENTRY _ZTI6S216C3[];
extern  VTBL_ENTRY _ZTV6S216C3[];
static Base_Class bases_S216C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S216C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S216C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S216C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S216C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S216C2[];
extern void _ZN6S216C2D1Ev();
extern void _ZN6S216C2D0Ev();
extern void _ZN6S216C62v4Ev();
extern void _ZN6S216C62v5Ev();
extern void _ZN6S216C62v6Ev();
extern void _ZN6S216C62v7Ev();
extern void _ZN6S216C62v8Ev();
extern void _ZN6S216C62v9Ev();
extern void _ZN6S216C63v10Ev();
extern void _ZN6S216C63v11Ev();
extern void _ZN6S216C63v12Ev();
extern void _ZN6S216C63v13Ev();
extern void _ZN6S216C63v14Ev();
extern void _ZN6S216C63v15Ev();
extern void _ZN6S216C63v16Ev();
extern void _ZN6S216C63v17Ev();
extern void _ZN6S216C63v18Ev();
extern void _ZN6S216C63v19Ev();
extern void _ZN6S216C63v20Ev();
extern void _ZN6S216C63v21Ev();
extern void _ZN6S216C63v22Ev();
extern void _ZN6S216C63v23Ev();
extern void _ZN6S216C63v24Ev();
extern void _ZN6S216C63v25Ev();
extern void _ZN6S216C63v26Ev();
extern void _ZN6S216C63v27Ev();
extern void _ZN6S216C63v28Ev();
extern void _ZN6S216C63v29Ev();
extern void _ZN6S216C63v30Ev();
extern void _ZN6S216C63v31Ev();
extern void _ZN6S216C63v32Ev();
extern void _ZN6S216C63v33Ev();
extern void _ZN6S216C63v34Ev();
extern void _ZN6S216C63v35Ev();
extern void _ZN6S216C63v36Ev();
extern void _ZN6S216C63v37Ev();
extern void _ZN6S216C63v38Ev();
extern void _ZN6S216C63v39Ev();
extern void _ZN6S216C63v40Ev();
extern void _ZN6S216C63v41Ev();
extern void _ZN6S216C63v42Ev();
extern void _ZN6S216C63v43Ev();
extern void _ZN6S216C63v44Ev();
extern void _ZN6S216C63v45Ev();
extern void _ZN6S216C63v46Ev();
extern void _ZN6S216C63v47Ev();
extern void _ZN6S216C63v48Ev();
extern void _ZN6S216C63v49Ev();
extern void _ZN6S216C63v50Ev();
extern void _ZN6S216C63v51Ev();
extern void _ZN6S216C63v52Ev();
extern void _ZN6S216C63v53Ev();
extern void _ZN6S216C63v54Ev();
extern void _ZN6S216C63v55Ev();
extern void _ZN6S216C63v56Ev();
extern void _ZN6S216C63v57Ev();
extern void _ZN6S216C63v58Ev();
extern void _ZN6S216C63v59Ev();
extern void _ZN6S216C63v60Ev();
extern void _ZN6S216C63v61Ev();
extern void _ZN6S216C63v62Ev();
extern void _ZN6S216C63v63Ev();
extern void _ZN6S216C63v64Ev();
extern void _ZN6S216C63v65Ev();
extern void _ZN6S216C63v66Ev();
extern void _ZN6S216C63v67Ev();
extern void _ZN6S216C53v68Ev();
extern void _ZN6S216C53v69Ev();
extern void _ZN6S216C53v70Ev();
extern void _ZN6S216C53v71Ev();
extern void _ZN6S216C53v72Ev();
extern void _ZN6S216C53v73Ev();
extern void _ZN6S216C53v74Ev();
extern void _ZN6S216C53v75Ev();
extern void _ZN6S216C53v76Ev();
extern void _ZN6S216C53v77Ev();
extern void _ZN6S216C53v78Ev();
extern void _ZN6S216C53v79Ev();
extern void _ZN6S216C53v80Ev();
extern void _ZN6S216C53v81Ev();
extern void _ZN6S216C53v82Ev();
extern void _ZN6S216C53v83Ev();
extern void _ZN6S216C53v84Ev();
extern void _ZN6S216C53v85Ev();
extern void _ZN6S216C53v86Ev();
extern void _ZN6S216C53v87Ev();
extern void _ZN6S216C53v88Ev();
extern void _ZN6S216C53v89Ev();
extern void _ZN6S216C43v90Ev();
extern void _ZN6S216C43v91Ev();
extern void _ZN6S216C43v92Ev();
extern void _ZN6S216C43v93Ev();
extern void _ZN6S216C43v94Ev();
extern void _ZN6S216C43v95Ev();
extern void _ZN6S216C43v96Ev();
extern void _ZN6S216C43v97Ev();
extern void _ZN6S216C43v98Ev();
extern void _ZN6S216C43v99Ev();
extern void _ZN6S216C44v100Ev();
extern void _ZN6S216C44v101Ev();
extern void _ZN6S216C44v102Ev();
extern void _ZN6S216C44v103Ev();
extern void _ZN6S216C44v104Ev();
extern void _ZN6S216C44v105Ev();
extern void _ZN6S216C44v106Ev();
extern void _ZN6S216C44v107Ev();
extern void _ZN6S216C44v108Ev();
extern void _ZN6S216C44v109Ev();
extern void _ZN6S216C34v110Ev();
extern void _ZN6S216C34v111Ev();
extern void _ZN6S216C34v112Ev();
extern void _ZN6S216C34v113Ev();
extern void _ZN6S216C34v114Ev();
extern void _ZN6S216C34v115Ev();
extern void _ZN6S216C34v116Ev();
extern void _ZN6S216C34v117Ev();
extern void _ZN6S216C34v118Ev();
extern void _ZN6S216C34v119Ev();
extern void _ZN6S216C34v120Ev();
extern void _ZN6S216C34v121Ev();
extern void _ZN6S216C34v122Ev();
extern void _ZN6S216C34v123Ev();
extern void _ZN6S216C24v124Ev();
extern void _ZN6S216C24v125Ev();
extern void _ZN6S216C24v126Ev();
extern void _ZN6S216C24v127Ev();
extern void _ZN6S216C24v128Ev();
extern void _ZN6S216C24v129Ev();
extern void _ZN6S216C24v130Ev();
extern void _ZN6S216C24v131Ev();
extern void _ZN6S216C24v132Ev();
extern void _ZN6S216C24v133Ev();
extern void _ZN6S216C24v134Ev();
static  VTBL_ENTRY vtc_S216C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S216C2[0]),
  (VTBL_ENTRY)&_ZN6S216C2D1Ev,
  (VTBL_ENTRY)&_ZN6S216C2D0Ev,
  (VTBL_ENTRY)&_ZN6S216C62v4Ev,
  (VTBL_ENTRY)&_ZN6S216C62v5Ev,
  (VTBL_ENTRY)&_ZN6S216C62v6Ev,
  (VTBL_ENTRY)&_ZN6S216C62v7Ev,
  (VTBL_ENTRY)&_ZN6S216C62v8Ev,
  (VTBL_ENTRY)&_ZN6S216C62v9Ev,
  (VTBL_ENTRY)&_ZN6S216C63v10Ev,
  (VTBL_ENTRY)&_ZN6S216C63v11Ev,
  (VTBL_ENTRY)&_ZN6S216C63v12Ev,
  (VTBL_ENTRY)&_ZN6S216C63v13Ev,
  (VTBL_ENTRY)&_ZN6S216C63v14Ev,
  (VTBL_ENTRY)&_ZN6S216C63v15Ev,
  (VTBL_ENTRY)&_ZN6S216C63v16Ev,
  (VTBL_ENTRY)&_ZN6S216C63v17Ev,
  (VTBL_ENTRY)&_ZN6S216C63v18Ev,
  (VTBL_ENTRY)&_ZN6S216C63v19Ev,
  (VTBL_ENTRY)&_ZN6S216C63v20Ev,
  (VTBL_ENTRY)&_ZN6S216C63v21Ev,
  (VTBL_ENTRY)&_ZN6S216C63v22Ev,
  (VTBL_ENTRY)&_ZN6S216C63v23Ev,
  (VTBL_ENTRY)&_ZN6S216C63v24Ev,
  (VTBL_ENTRY)&_ZN6S216C63v25Ev,
  (VTBL_ENTRY)&_ZN6S216C63v26Ev,
  (VTBL_ENTRY)&_ZN6S216C63v27Ev,
  (VTBL_ENTRY)&_ZN6S216C63v28Ev,
  (VTBL_ENTRY)&_ZN6S216C63v29Ev,
  (VTBL_ENTRY)&_ZN6S216C63v30Ev,
  (VTBL_ENTRY)&_ZN6S216C63v31Ev,
  (VTBL_ENTRY)&_ZN6S216C63v32Ev,
  (VTBL_ENTRY)&_ZN6S216C63v33Ev,
  (VTBL_ENTRY)&_ZN6S216C63v34Ev,
  (VTBL_ENTRY)&_ZN6S216C63v35Ev,
  (VTBL_ENTRY)&_ZN6S216C63v36Ev,
  (VTBL_ENTRY)&_ZN6S216C63v37Ev,
  (VTBL_ENTRY)&_ZN6S216C63v38Ev,
  (VTBL_ENTRY)&_ZN6S216C63v39Ev,
  (VTBL_ENTRY)&_ZN6S216C63v40Ev,
  (VTBL_ENTRY)&_ZN6S216C63v41Ev,
  (VTBL_ENTRY)&_ZN6S216C63v42Ev,
  (VTBL_ENTRY)&_ZN6S216C63v43Ev,
  (VTBL_ENTRY)&_ZN6S216C63v44Ev,
  (VTBL_ENTRY)&_ZN6S216C63v45Ev,
  (VTBL_ENTRY)&_ZN6S216C63v46Ev,
  (VTBL_ENTRY)&_ZN6S216C63v47Ev,
  (VTBL_ENTRY)&_ZN6S216C63v48Ev,
  (VTBL_ENTRY)&_ZN6S216C63v49Ev,
  (VTBL_ENTRY)&_ZN6S216C63v50Ev,
  (VTBL_ENTRY)&_ZN6S216C63v51Ev,
  (VTBL_ENTRY)&_ZN6S216C63v52Ev,
  (VTBL_ENTRY)&_ZN6S216C63v53Ev,
  (VTBL_ENTRY)&_ZN6S216C63v54Ev,
  (VTBL_ENTRY)&_ZN6S216C63v55Ev,
  (VTBL_ENTRY)&_ZN6S216C63v56Ev,
  (VTBL_ENTRY)&_ZN6S216C63v57Ev,
  (VTBL_ENTRY)&_ZN6S216C63v58Ev,
  (VTBL_ENTRY)&_ZN6S216C63v59Ev,
  (VTBL_ENTRY)&_ZN6S216C63v60Ev,
  (VTBL_ENTRY)&_ZN6S216C63v61Ev,
  (VTBL_ENTRY)&_ZN6S216C63v62Ev,
  (VTBL_ENTRY)&_ZN6S216C63v63Ev,
  (VTBL_ENTRY)&_ZN6S216C63v64Ev,
  (VTBL_ENTRY)&_ZN6S216C63v65Ev,
  (VTBL_ENTRY)&_ZN6S216C63v66Ev,
  (VTBL_ENTRY)&_ZN6S216C63v67Ev,
  (VTBL_ENTRY)&_ZN6S216C53v68Ev,
  (VTBL_ENTRY)&_ZN6S216C53v69Ev,
  (VTBL_ENTRY)&_ZN6S216C53v70Ev,
  (VTBL_ENTRY)&_ZN6S216C53v71Ev,
  (VTBL_ENTRY)&_ZN6S216C53v72Ev,
  (VTBL_ENTRY)&_ZN6S216C53v73Ev,
  (VTBL_ENTRY)&_ZN6S216C53v74Ev,
  (VTBL_ENTRY)&_ZN6S216C53v75Ev,
  (VTBL_ENTRY)&_ZN6S216C53v76Ev,
  (VTBL_ENTRY)&_ZN6S216C53v77Ev,
  (VTBL_ENTRY)&_ZN6S216C53v78Ev,
  (VTBL_ENTRY)&_ZN6S216C53v79Ev,
  (VTBL_ENTRY)&_ZN6S216C53v80Ev,
  (VTBL_ENTRY)&_ZN6S216C53v81Ev,
  (VTBL_ENTRY)&_ZN6S216C53v82Ev,
  (VTBL_ENTRY)&_ZN6S216C53v83Ev,
  (VTBL_ENTRY)&_ZN6S216C53v84Ev,
  (VTBL_ENTRY)&_ZN6S216C53v85Ev,
  (VTBL_ENTRY)&_ZN6S216C53v86Ev,
  (VTBL_ENTRY)&_ZN6S216C53v87Ev,
  (VTBL_ENTRY)&_ZN6S216C53v88Ev,
  (VTBL_ENTRY)&_ZN6S216C53v89Ev,
  (VTBL_ENTRY)&_ZN6S216C43v90Ev,
  (VTBL_ENTRY)&_ZN6S216C43v91Ev,
  (VTBL_ENTRY)&_ZN6S216C43v92Ev,
  (VTBL_ENTRY)&_ZN6S216C43v93Ev,
  (VTBL_ENTRY)&_ZN6S216C43v94Ev,
  (VTBL_ENTRY)&_ZN6S216C43v95Ev,
  (VTBL_ENTRY)&_ZN6S216C43v96Ev,
  (VTBL_ENTRY)&_ZN6S216C43v97Ev,
  (VTBL_ENTRY)&_ZN6S216C43v98Ev,
  (VTBL_ENTRY)&_ZN6S216C43v99Ev,
  (VTBL_ENTRY)&_ZN6S216C44v100Ev,
  (VTBL_ENTRY)&_ZN6S216C44v101Ev,
  (VTBL_ENTRY)&_ZN6S216C44v102Ev,
  (VTBL_ENTRY)&_ZN6S216C44v103Ev,
  (VTBL_ENTRY)&_ZN6S216C44v104Ev,
  (VTBL_ENTRY)&_ZN6S216C44v105Ev,
  (VTBL_ENTRY)&_ZN6S216C44v106Ev,
  (VTBL_ENTRY)&_ZN6S216C44v107Ev,
  (VTBL_ENTRY)&_ZN6S216C44v108Ev,
  (VTBL_ENTRY)&_ZN6S216C44v109Ev,
  (VTBL_ENTRY)&_ZN6S216C34v110Ev,
  (VTBL_ENTRY)&_ZN6S216C34v111Ev,
  (VTBL_ENTRY)&_ZN6S216C34v112Ev,
  (VTBL_ENTRY)&_ZN6S216C34v113Ev,
  (VTBL_ENTRY)&_ZN6S216C34v114Ev,
  (VTBL_ENTRY)&_ZN6S216C34v115Ev,
  (VTBL_ENTRY)&_ZN6S216C34v116Ev,
  (VTBL_ENTRY)&_ZN6S216C34v117Ev,
  (VTBL_ENTRY)&_ZN6S216C34v118Ev,
  (VTBL_ENTRY)&_ZN6S216C34v119Ev,
  (VTBL_ENTRY)&_ZN6S216C34v120Ev,
  (VTBL_ENTRY)&_ZN6S216C34v121Ev,
  (VTBL_ENTRY)&_ZN6S216C34v122Ev,
  (VTBL_ENTRY)&_ZN6S216C34v123Ev,
  (VTBL_ENTRY)&_ZN6S216C24v124Ev,
  (VTBL_ENTRY)&_ZN6S216C24v125Ev,
  (VTBL_ENTRY)&_ZN6S216C24v126Ev,
  (VTBL_ENTRY)&_ZN6S216C24v127Ev,
  (VTBL_ENTRY)&_ZN6S216C24v128Ev,
  (VTBL_ENTRY)&_ZN6S216C24v129Ev,
  (VTBL_ENTRY)&_ZN6S216C24v130Ev,
  (VTBL_ENTRY)&_ZN6S216C24v131Ev,
  (VTBL_ENTRY)&_ZN6S216C24v132Ev,
  (VTBL_ENTRY)&_ZN6S216C24v133Ev,
  (VTBL_ENTRY)&_ZN6S216C24v134Ev,
};
extern VTBL_ENTRY _ZTI6S216C2[];
extern  VTBL_ENTRY _ZTV6S216C2[];
Class_Descriptor cd_S216C2 = {  "S216C2", // class name
  bases_S216C2, 4,
  &(vtc_S216C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(392,280), // object size
  NSPAIRA(_ZTI6S216C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S216C2),135, //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  S216C1  : S216C2 {
  void *s216c1f0;
  virtual  ~S216C1(); // _ZN6S216C1D1Ev
  virtual void  v1(); // _ZN6S216C12v1Ev
  virtual void  v2(); // _ZN6S216C12v2Ev
  virtual void  v3(); // _ZN6S216C12v3Ev
  S216C1(); // tgen
};
//SIG(1 S216C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 Fi FL Fp[4] Fi[2] Fp FC7{ m Fi[2]} Fp[2]} vd v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 Fi[2] Fp Fi[2] FC8{ BC9{ BC10{ BC11{ m Fp Fi[2]}}}} FC8 FC12{ m} FC8 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 Fi:1 Fi:1 Fi:1 FC13{ BC14{ BC11}} FC15{ BC16{ BC11}} FC17{ BC18{ BC11}} FC19{ BC20{ BC11}} Fi[3]} vd v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC21{ BC22{ BC11}}} vd v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 v134 Fp[2] FC8 Fi:1 Fi:1 FC23{ m Fp FC7}} vd v1 v2 v3 Fp}


 S216C1 ::~S216C1(){ note_dtor("S216C1", this);}
void  S216C1 ::v1(){vfunc_called(this, "_ZN6S216C12v1Ev");}
void  S216C1 ::v2(){vfunc_called(this, "_ZN6S216C12v2Ev");}
void  S216C1 ::v3(){vfunc_called(this, "_ZN6S216C12v3Ev");}
S216C1 ::S216C1(){ note_ctor("S216C1", this);} // tgen

static void Test_S216C1()
{
  extern Class_Descriptor cd_S216C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(51,72)];
    init_test(&cd_S216C1, buf);
    S216C1 *dp, &lv = *(dp=new (buf) S216C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(400,284), "sizeof(S216C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S216C1)");
    check_base_class_offset(lv, (S216C6*)(S216C5*)(S216C4*)(S216C3*)(S216C2*), 0, "S216C1");
    check_base_class_offset(lv, (S216C5*)(S216C4*)(S216C3*)(S216C2*), 0, "S216C1");
    check_base_class_offset(lv, (S216C4*)(S216C3*)(S216C2*), 0, "S216C1");
    check_base_class_offset(lv, (S216C3*)(S216C2*), 0, "S216C1");
    check_base_class_offset(lv, (S216C2*), 0, "S216C1");
    check_field_offset(lv, s216c1f0, ABISELECT(392,280), "S216C1.s216c1f0");
    test_class_info(&lv, &cd_S216C1);
    dp->~S216C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS216C1(Test_S216C1, "S216C1", ABISELECT(400,284));

#else // __cplusplus

extern void _ZN6S216C1C1Ev();
extern void _ZN6S216C1D1Ev();
Name_Map name_map_S216C1[] = {
  NSPAIR(_ZN6S216C1C1Ev),
  NSPAIR(_ZN6S216C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S216C6;
extern VTBL_ENTRY _ZTI6S216C6[];
extern  VTBL_ENTRY _ZTV6S216C6[];
extern Class_Descriptor cd_S216C5;
extern VTBL_ENTRY _ZTI6S216C5[];
extern  VTBL_ENTRY _ZTV6S216C5[];
extern Class_Descriptor cd_S216C4;
extern VTBL_ENTRY _ZTI6S216C4[];
extern  VTBL_ENTRY _ZTV6S216C4[];
extern Class_Descriptor cd_S216C3;
extern VTBL_ENTRY _ZTI6S216C3[];
extern  VTBL_ENTRY _ZTV6S216C3[];
extern Class_Descriptor cd_S216C2;
extern VTBL_ENTRY _ZTI6S216C2[];
extern  VTBL_ENTRY _ZTV6S216C2[];
static Base_Class bases_S216C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S216C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S216C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S216C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S216C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S216C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S216C1[];
extern void _ZN6S216C1D1Ev();
extern void _ZN6S216C1D0Ev();
extern void _ZN6S216C62v4Ev();
extern void _ZN6S216C62v5Ev();
extern void _ZN6S216C62v6Ev();
extern void _ZN6S216C62v7Ev();
extern void _ZN6S216C62v8Ev();
extern void _ZN6S216C62v9Ev();
extern void _ZN6S216C63v10Ev();
extern void _ZN6S216C63v11Ev();
extern void _ZN6S216C63v12Ev();
extern void _ZN6S216C63v13Ev();
extern void _ZN6S216C63v14Ev();
extern void _ZN6S216C63v15Ev();
extern void _ZN6S216C63v16Ev();
extern void _ZN6S216C63v17Ev();
extern void _ZN6S216C63v18Ev();
extern void _ZN6S216C63v19Ev();
extern void _ZN6S216C63v20Ev();
extern void _ZN6S216C63v21Ev();
extern void _ZN6S216C63v22Ev();
extern void _ZN6S216C63v23Ev();
extern void _ZN6S216C63v24Ev();
extern void _ZN6S216C63v25Ev();
extern void _ZN6S216C63v26Ev();
extern void _ZN6S216C63v27Ev();
extern void _ZN6S216C63v28Ev();
extern void _ZN6S216C63v29Ev();
extern void _ZN6S216C63v30Ev();
extern void _ZN6S216C63v31Ev();
extern void _ZN6S216C63v32Ev();
extern void _ZN6S216C63v33Ev();
extern void _ZN6S216C63v34Ev();
extern void _ZN6S216C63v35Ev();
extern void _ZN6S216C63v36Ev();
extern void _ZN6S216C63v37Ev();
extern void _ZN6S216C63v38Ev();
extern void _ZN6S216C63v39Ev();
extern void _ZN6S216C63v40Ev();
extern void _ZN6S216C63v41Ev();
extern void _ZN6S216C63v42Ev();
extern void _ZN6S216C63v43Ev();
extern void _ZN6S216C63v44Ev();
extern void _ZN6S216C63v45Ev();
extern void _ZN6S216C63v46Ev();
extern void _ZN6S216C63v47Ev();
extern void _ZN6S216C63v48Ev();
extern void _ZN6S216C63v49Ev();
extern void _ZN6S216C63v50Ev();
extern void _ZN6S216C63v51Ev();
extern void _ZN6S216C63v52Ev();
extern void _ZN6S216C63v53Ev();
extern void _ZN6S216C63v54Ev();
extern void _ZN6S216C63v55Ev();
extern void _ZN6S216C63v56Ev();
extern void _ZN6S216C63v57Ev();
extern void _ZN6S216C63v58Ev();
extern void _ZN6S216C63v59Ev();
extern void _ZN6S216C63v60Ev();
extern void _ZN6S216C63v61Ev();
extern void _ZN6S216C63v62Ev();
extern void _ZN6S216C63v63Ev();
extern void _ZN6S216C63v64Ev();
extern void _ZN6S216C63v65Ev();
extern void _ZN6S216C63v66Ev();
extern void _ZN6S216C63v67Ev();
extern void _ZN6S216C53v68Ev();
extern void _ZN6S216C53v69Ev();
extern void _ZN6S216C53v70Ev();
extern void _ZN6S216C53v71Ev();
extern void _ZN6S216C53v72Ev();
extern void _ZN6S216C53v73Ev();
extern void _ZN6S216C53v74Ev();
extern void _ZN6S216C53v75Ev();
extern void _ZN6S216C53v76Ev();
extern void _ZN6S216C53v77Ev();
extern void _ZN6S216C53v78Ev();
extern void _ZN6S216C53v79Ev();
extern void _ZN6S216C53v80Ev();
extern void _ZN6S216C53v81Ev();
extern void _ZN6S216C53v82Ev();
extern void _ZN6S216C53v83Ev();
extern void _ZN6S216C53v84Ev();
extern void _ZN6S216C53v85Ev();
extern void _ZN6S216C53v86Ev();
extern void _ZN6S216C53v87Ev();
extern void _ZN6S216C53v88Ev();
extern void _ZN6S216C53v89Ev();
extern void _ZN6S216C43v90Ev();
extern void _ZN6S216C43v91Ev();
extern void _ZN6S216C43v92Ev();
extern void _ZN6S216C43v93Ev();
extern void _ZN6S216C43v94Ev();
extern void _ZN6S216C43v95Ev();
extern void _ZN6S216C43v96Ev();
extern void _ZN6S216C43v97Ev();
extern void _ZN6S216C43v98Ev();
extern void _ZN6S216C43v99Ev();
extern void _ZN6S216C44v100Ev();
extern void _ZN6S216C44v101Ev();
extern void _ZN6S216C44v102Ev();
extern void _ZN6S216C44v103Ev();
extern void _ZN6S216C44v104Ev();
extern void _ZN6S216C44v105Ev();
extern void _ZN6S216C44v106Ev();
extern void _ZN6S216C44v107Ev();
extern void _ZN6S216C44v108Ev();
extern void _ZN6S216C44v109Ev();
extern void _ZN6S216C34v110Ev();
extern void _ZN6S216C34v111Ev();
extern void _ZN6S216C34v112Ev();
extern void _ZN6S216C34v113Ev();
extern void _ZN6S216C34v114Ev();
extern void _ZN6S216C34v115Ev();
extern void _ZN6S216C34v116Ev();
extern void _ZN6S216C34v117Ev();
extern void _ZN6S216C34v118Ev();
extern void _ZN6S216C34v119Ev();
extern void _ZN6S216C34v120Ev();
extern void _ZN6S216C34v121Ev();
extern void _ZN6S216C34v122Ev();
extern void _ZN6S216C34v123Ev();
extern void _ZN6S216C24v124Ev();
extern void _ZN6S216C24v125Ev();
extern void _ZN6S216C24v126Ev();
extern void _ZN6S216C24v127Ev();
extern void _ZN6S216C24v128Ev();
extern void _ZN6S216C24v129Ev();
extern void _ZN6S216C24v130Ev();
extern void _ZN6S216C24v131Ev();
extern void _ZN6S216C24v132Ev();
extern void _ZN6S216C24v133Ev();
extern void _ZN6S216C24v134Ev();
extern void _ZN6S216C12v1Ev();
extern void _ZN6S216C12v2Ev();
extern void _ZN6S216C12v3Ev();
static  VTBL_ENTRY vtc_S216C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S216C1[0]),
  (VTBL_ENTRY)&_ZN6S216C1D1Ev,
  (VTBL_ENTRY)&_ZN6S216C1D0Ev,
  (VTBL_ENTRY)&_ZN6S216C62v4Ev,
  (VTBL_ENTRY)&_ZN6S216C62v5Ev,
  (VTBL_ENTRY)&_ZN6S216C62v6Ev,
  (VTBL_ENTRY)&_ZN6S216C62v7Ev,
  (VTBL_ENTRY)&_ZN6S216C62v8Ev,
  (VTBL_ENTRY)&_ZN6S216C62v9Ev,
  (VTBL_ENTRY)&_ZN6S216C63v10Ev,
  (VTBL_ENTRY)&_ZN6S216C63v11Ev,
  (VTBL_ENTRY)&_ZN6S216C63v12Ev,
  (VTBL_ENTRY)&_ZN6S216C63v13Ev,
  (VTBL_ENTRY)&_ZN6S216C63v14Ev,
  (VTBL_ENTRY)&_ZN6S216C63v15Ev,
  (VTBL_ENTRY)&_ZN6S216C63v16Ev,
  (VTBL_ENTRY)&_ZN6S216C63v17Ev,
  (VTBL_ENTRY)&_ZN6S216C63v18Ev,
  (VTBL_ENTRY)&_ZN6S216C63v19Ev,
  (VTBL_ENTRY)&_ZN6S216C63v20Ev,
  (VTBL_ENTRY)&_ZN6S216C63v21Ev,
  (VTBL_ENTRY)&_ZN6S216C63v22Ev,
  (VTBL_ENTRY)&_ZN6S216C63v23Ev,
  (VTBL_ENTRY)&_ZN6S216C63v24Ev,
  (VTBL_ENTRY)&_ZN6S216C63v25Ev,
  (VTBL_ENTRY)&_ZN6S216C63v26Ev,
  (VTBL_ENTRY)&_ZN6S216C63v27Ev,
  (VTBL_ENTRY)&_ZN6S216C63v28Ev,
  (VTBL_ENTRY)&_ZN6S216C63v29Ev,
  (VTBL_ENTRY)&_ZN6S216C63v30Ev,
  (VTBL_ENTRY)&_ZN6S216C63v31Ev,
  (VTBL_ENTRY)&_ZN6S216C63v32Ev,
  (VTBL_ENTRY)&_ZN6S216C63v33Ev,
  (VTBL_ENTRY)&_ZN6S216C63v34Ev,
  (VTBL_ENTRY)&_ZN6S216C63v35Ev,
  (VTBL_ENTRY)&_ZN6S216C63v36Ev,
  (VTBL_ENTRY)&_ZN6S216C63v37Ev,
  (VTBL_ENTRY)&_ZN6S216C63v38Ev,
  (VTBL_ENTRY)&_ZN6S216C63v39Ev,
  (VTBL_ENTRY)&_ZN6S216C63v40Ev,
  (VTBL_ENTRY)&_ZN6S216C63v41Ev,
  (VTBL_ENTRY)&_ZN6S216C63v42Ev,
  (VTBL_ENTRY)&_ZN6S216C63v43Ev,
  (VTBL_ENTRY)&_ZN6S216C63v44Ev,
  (VTBL_ENTRY)&_ZN6S216C63v45Ev,
  (VTBL_ENTRY)&_ZN6S216C63v46Ev,
  (VTBL_ENTRY)&_ZN6S216C63v47Ev,
  (VTBL_ENTRY)&_ZN6S216C63v48Ev,
  (VTBL_ENTRY)&_ZN6S216C63v49Ev,
  (VTBL_ENTRY)&_ZN6S216C63v50Ev,
  (VTBL_ENTRY)&_ZN6S216C63v51Ev,
  (VTBL_ENTRY)&_ZN6S216C63v52Ev,
  (VTBL_ENTRY)&_ZN6S216C63v53Ev,
  (VTBL_ENTRY)&_ZN6S216C63v54Ev,
  (VTBL_ENTRY)&_ZN6S216C63v55Ev,
  (VTBL_ENTRY)&_ZN6S216C63v56Ev,
  (VTBL_ENTRY)&_ZN6S216C63v57Ev,
  (VTBL_ENTRY)&_ZN6S216C63v58Ev,
  (VTBL_ENTRY)&_ZN6S216C63v59Ev,
  (VTBL_ENTRY)&_ZN6S216C63v60Ev,
  (VTBL_ENTRY)&_ZN6S216C63v61Ev,
  (VTBL_ENTRY)&_ZN6S216C63v62Ev,
  (VTBL_ENTRY)&_ZN6S216C63v63Ev,
  (VTBL_ENTRY)&_ZN6S216C63v64Ev,
  (VTBL_ENTRY)&_ZN6S216C63v65Ev,
  (VTBL_ENTRY)&_ZN6S216C63v66Ev,
  (VTBL_ENTRY)&_ZN6S216C63v67Ev,
  (VTBL_ENTRY)&_ZN6S216C53v68Ev,
  (VTBL_ENTRY)&_ZN6S216C53v69Ev,
  (VTBL_ENTRY)&_ZN6S216C53v70Ev,
  (VTBL_ENTRY)&_ZN6S216C53v71Ev,
  (VTBL_ENTRY)&_ZN6S216C53v72Ev,
  (VTBL_ENTRY)&_ZN6S216C53v73Ev,
  (VTBL_ENTRY)&_ZN6S216C53v74Ev,
  (VTBL_ENTRY)&_ZN6S216C53v75Ev,
  (VTBL_ENTRY)&_ZN6S216C53v76Ev,
  (VTBL_ENTRY)&_ZN6S216C53v77Ev,
  (VTBL_ENTRY)&_ZN6S216C53v78Ev,
  (VTBL_ENTRY)&_ZN6S216C53v79Ev,
  (VTBL_ENTRY)&_ZN6S216C53v80Ev,
  (VTBL_ENTRY)&_ZN6S216C53v81Ev,
  (VTBL_ENTRY)&_ZN6S216C53v82Ev,
  (VTBL_ENTRY)&_ZN6S216C53v83Ev,
  (VTBL_ENTRY)&_ZN6S216C53v84Ev,
  (VTBL_ENTRY)&_ZN6S216C53v85Ev,
  (VTBL_ENTRY)&_ZN6S216C53v86Ev,
  (VTBL_ENTRY)&_ZN6S216C53v87Ev,
  (VTBL_ENTRY)&_ZN6S216C53v88Ev,
  (VTBL_ENTRY)&_ZN6S216C53v89Ev,
  (VTBL_ENTRY)&_ZN6S216C43v90Ev,
  (VTBL_ENTRY)&_ZN6S216C43v91Ev,
  (VTBL_ENTRY)&_ZN6S216C43v92Ev,
  (VTBL_ENTRY)&_ZN6S216C43v93Ev,
  (VTBL_ENTRY)&_ZN6S216C43v94Ev,
  (VTBL_ENTRY)&_ZN6S216C43v95Ev,
  (VTBL_ENTRY)&_ZN6S216C43v96Ev,
  (VTBL_ENTRY)&_ZN6S216C43v97Ev,
  (VTBL_ENTRY)&_ZN6S216C43v98Ev,
  (VTBL_ENTRY)&_ZN6S216C43v99Ev,
  (VTBL_ENTRY)&_ZN6S216C44v100Ev,
  (VTBL_ENTRY)&_ZN6S216C44v101Ev,
  (VTBL_ENTRY)&_ZN6S216C44v102Ev,
  (VTBL_ENTRY)&_ZN6S216C44v103Ev,
  (VTBL_ENTRY)&_ZN6S216C44v104Ev,
  (VTBL_ENTRY)&_ZN6S216C44v105Ev,
  (VTBL_ENTRY)&_ZN6S216C44v106Ev,
  (VTBL_ENTRY)&_ZN6S216C44v107Ev,
  (VTBL_ENTRY)&_ZN6S216C44v108Ev,
  (VTBL_ENTRY)&_ZN6S216C44v109Ev,
  (VTBL_ENTRY)&_ZN6S216C34v110Ev,
  (VTBL_ENTRY)&_ZN6S216C34v111Ev,
  (VTBL_ENTRY)&_ZN6S216C34v112Ev,
  (VTBL_ENTRY)&_ZN6S216C34v113Ev,
  (VTBL_ENTRY)&_ZN6S216C34v114Ev,
  (VTBL_ENTRY)&_ZN6S216C34v115Ev,
  (VTBL_ENTRY)&_ZN6S216C34v116Ev,
  (VTBL_ENTRY)&_ZN6S216C34v117Ev,
  (VTBL_ENTRY)&_ZN6S216C34v118Ev,
  (VTBL_ENTRY)&_ZN6S216C34v119Ev,
  (VTBL_ENTRY)&_ZN6S216C34v120Ev,
  (VTBL_ENTRY)&_ZN6S216C34v121Ev,
  (VTBL_ENTRY)&_ZN6S216C34v122Ev,
  (VTBL_ENTRY)&_ZN6S216C34v123Ev,
  (VTBL_ENTRY)&_ZN6S216C24v124Ev,
  (VTBL_ENTRY)&_ZN6S216C24v125Ev,
  (VTBL_ENTRY)&_ZN6S216C24v126Ev,
  (VTBL_ENTRY)&_ZN6S216C24v127Ev,
  (VTBL_ENTRY)&_ZN6S216C24v128Ev,
  (VTBL_ENTRY)&_ZN6S216C24v129Ev,
  (VTBL_ENTRY)&_ZN6S216C24v130Ev,
  (VTBL_ENTRY)&_ZN6S216C24v131Ev,
  (VTBL_ENTRY)&_ZN6S216C24v132Ev,
  (VTBL_ENTRY)&_ZN6S216C24v133Ev,
  (VTBL_ENTRY)&_ZN6S216C24v134Ev,
  (VTBL_ENTRY)&_ZN6S216C12v1Ev,
  (VTBL_ENTRY)&_ZN6S216C12v2Ev,
  (VTBL_ENTRY)&_ZN6S216C12v3Ev,
};
extern VTBL_ENTRY _ZTI6S216C1[];
extern  VTBL_ENTRY _ZTV6S216C1[];
Class_Descriptor cd_S216C1 = {  "S216C1", // class name
  bases_S216C1, 5,
  &(vtc_S216C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(400,284), // object size
  NSPAIRA(_ZTI6S216C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S216C1),138, //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  S215C6  {
  int s215c6f0;
  __tsi64 s215c6f1;
  void *s215c6f2[4];
  int s215c6f3[2];
  void *s215c6f4;
  ::S3350C4_nt s215c6f5;
  void *s215c6f6[2];
  virtual  ~S215C6(); // _ZN6S215C6D1Ev
  virtual void  v4(); // _ZN6S215C62v4Ev
  virtual void  v5(); // _ZN6S215C62v5Ev
  virtual void  v6(); // _ZN6S215C62v6Ev
  virtual void  v7(); // _ZN6S215C62v7Ev
  virtual void  v8(); // _ZN6S215C62v8Ev
  virtual void  v9(); // _ZN6S215C62v9Ev
  virtual void  v10(); // _ZN6S215C63v10Ev
  virtual void  v11(); // _ZN6S215C63v11Ev
  virtual void  v12(); // _ZN6S215C63v12Ev
  virtual void  v13(); // _ZN6S215C63v13Ev
  virtual void  v14(); // _ZN6S215C63v14Ev
  virtual void  v15(); // _ZN6S215C63v15Ev
  virtual void  v16(); // _ZN6S215C63v16Ev
  virtual void  v17(); // _ZN6S215C63v17Ev
  virtual void  v18(); // _ZN6S215C63v18Ev
  virtual void  v19(); // _ZN6S215C63v19Ev
  virtual void  v20(); // _ZN6S215C63v20Ev
  virtual void  v21(); // _ZN6S215C63v21Ev
  virtual void  v22(); // _ZN6S215C63v22Ev
  virtual void  v23(); // _ZN6S215C63v23Ev
  virtual void  v24(); // _ZN6S215C63v24Ev
  virtual void  v25(); // _ZN6S215C63v25Ev
  virtual void  v26(); // _ZN6S215C63v26Ev
  virtual void  v27(); // _ZN6S215C63v27Ev
  virtual void  v28(); // _ZN6S215C63v28Ev
  virtual void  v29(); // _ZN6S215C63v29Ev
  virtual void  v30(); // _ZN6S215C63v30Ev
  virtual void  v31(); // _ZN6S215C63v31Ev
  virtual void  v32(); // _ZN6S215C63v32Ev
  virtual void  v33(); // _ZN6S215C63v33Ev
  virtual void  v34(); // _ZN6S215C63v34Ev
  virtual void  v35(); // _ZN6S215C63v35Ev
  virtual void  v36(); // _ZN6S215C63v36Ev
  virtual void  v37(); // _ZN6S215C63v37Ev
  virtual void  v38(); // _ZN6S215C63v38Ev
  virtual void  v39(); // _ZN6S215C63v39Ev
  virtual void  v40(); // _ZN6S215C63v40Ev
  virtual void  v41(); // _ZN6S215C63v41Ev
  virtual void  v42(); // _ZN6S215C63v42Ev
  virtual void  v43(); // _ZN6S215C63v43Ev
  virtual void  v44(); // _ZN6S215C63v44Ev
  virtual void  v45(); // _ZN6S215C63v45Ev
  virtual void  v46(); // _ZN6S215C63v46Ev
  virtual void  v47(); // _ZN6S215C63v47Ev
  virtual void  v48(); // _ZN6S215C63v48Ev
  virtual void  v49(); // _ZN6S215C63v49Ev
  virtual void  v50(); // _ZN6S215C63v50Ev
  virtual void  v51(); // _ZN6S215C63v51Ev
  virtual void  v52(); // _ZN6S215C63v52Ev
  virtual void  v53(); // _ZN6S215C63v53Ev
  virtual void  v54(); // _ZN6S215C63v54Ev
  virtual void  v55(); // _ZN6S215C63v55Ev
  virtual void  v56(); // _ZN6S215C63v56Ev
  virtual void  v57(); // _ZN6S215C63v57Ev
  virtual void  v58(); // _ZN6S215C63v58Ev
  virtual void  v59(); // _ZN6S215C63v59Ev
  virtual void  v60(); // _ZN6S215C63v60Ev
  virtual void  v61(); // _ZN6S215C63v61Ev
  virtual void  v62(); // _ZN6S215C63v62Ev
  virtual void  v63(); // _ZN6S215C63v63Ev
  virtual void  v64(); // _ZN6S215C63v64Ev
  virtual void  v65(); // _ZN6S215C63v65Ev
  virtual void  v66(); // _ZN6S215C63v66Ev
  virtual void  v67(); // _ZN6S215C63v67Ev
  S215C6(); // tgen
};
//SIG(-1 S215C6) 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]}


 S215C6 ::~S215C6(){ note_dtor("S215C6", this);}
void  S215C6 ::v4(){vfunc_called(this, "_ZN6S215C62v4Ev");}
void  S215C6 ::v5(){vfunc_called(this, "_ZN6S215C62v5Ev");}
void  S215C6 ::v6(){vfunc_called(this, "_ZN6S215C62v6Ev");}
void  S215C6 ::v7(){vfunc_called(this, "_ZN6S215C62v7Ev");}
void  S215C6 ::v8(){vfunc_called(this, "_ZN6S215C62v8Ev");}
void  S215C6 ::v9(){vfunc_called(this, "_ZN6S215C62v9Ev");}
void  S215C6 ::v10(){vfunc_called(this, "_ZN6S215C63v10Ev");}
void  S215C6 ::v11(){vfunc_called(this, "_ZN6S215C63v11Ev");}
void  S215C6 ::v12(){vfunc_called(this, "_ZN6S215C63v12Ev");}
void  S215C6 ::v13(){vfunc_called(this, "_ZN6S215C63v13Ev");}
void  S215C6 ::v14(){vfunc_called(this, "_ZN6S215C63v14Ev");}
void  S215C6 ::v15(){vfunc_called(this, "_ZN6S215C63v15Ev");}
void  S215C6 ::v16(){vfunc_called(this, "_ZN6S215C63v16Ev");}
void  S215C6 ::v17(){vfunc_called(this, "_ZN6S215C63v17Ev");}
void  S215C6 ::v18(){vfunc_called(this, "_ZN6S215C63v18Ev");}
void  S215C6 ::v19(){vfunc_called(this, "_ZN6S215C63v19Ev");}
void  S215C6 ::v20(){vfunc_called(this, "_ZN6S215C63v20Ev");}
void  S215C6 ::v21(){vfunc_called(this, "_ZN6S215C63v21Ev");}
void  S215C6 ::v22(){vfunc_called(this, "_ZN6S215C63v22Ev");}
void  S215C6 ::v23(){vfunc_called(this, "_ZN6S215C63v23Ev");}
void  S215C6 ::v24(){vfunc_called(this, "_ZN6S215C63v24Ev");}
void  S215C6 ::v25(){vfunc_called(this, "_ZN6S215C63v25Ev");}
void  S215C6 ::v26(){vfunc_called(this, "_ZN6S215C63v26Ev");}
void  S215C6 ::v27(){vfunc_called(this, "_ZN6S215C63v27Ev");}
void  S215C6 ::v28(){vfunc_called(this, "_ZN6S215C63v28Ev");}
void  S215C6 ::v29(){vfunc_called(this, "_ZN6S215C63v29Ev");}
void  S215C6 ::v30(){vfunc_called(this, "_ZN6S215C63v30Ev");}
void  S215C6 ::v31(){vfunc_called(this, "_ZN6S215C63v31Ev");}
void  S215C6 ::v32(){vfunc_called(this, "_ZN6S215C63v32Ev");}
void  S215C6 ::v33(){vfunc_called(this, "_ZN6S215C63v33Ev");}
void  S215C6 ::v34(){vfunc_called(this, "_ZN6S215C63v34Ev");}
void  S215C6 ::v35(){vfunc_called(this, "_ZN6S215C63v35Ev");}
void  S215C6 ::v36(){vfunc_called(this, "_ZN6S215C63v36Ev");}
void  S215C6 ::v37(){vfunc_called(this, "_ZN6S215C63v37Ev");}
void  S215C6 ::v38(){vfunc_called(this, "_ZN6S215C63v38Ev");}
void  S215C6 ::v39(){vfunc_called(this, "_ZN6S215C63v39Ev");}
void  S215C6 ::v40(){vfunc_called(this, "_ZN6S215C63v40Ev");}
void  S215C6 ::v41(){vfunc_called(this, "_ZN6S215C63v41Ev");}
void  S215C6 ::v42(){vfunc_called(this, "_ZN6S215C63v42Ev");}
void  S215C6 ::v43(){vfunc_called(this, "_ZN6S215C63v43Ev");}
void  S215C6 ::v44(){vfunc_called(this, "_ZN6S215C63v44Ev");}
void  S215C6 ::v45(){vfunc_called(this, "_ZN6S215C63v45Ev");}
void  S215C6 ::v46(){vfunc_called(this, "_ZN6S215C63v46Ev");}
void  S215C6 ::v47(){vfunc_called(this, "_ZN6S215C63v47Ev");}
void  S215C6 ::v48(){vfunc_called(this, "_ZN6S215C63v48Ev");}
void  S215C6 ::v49(){vfunc_called(this, "_ZN6S215C63v49Ev");}
void  S215C6 ::v50(){vfunc_called(this, "_ZN6S215C63v50Ev");}
void  S215C6 ::v51(){vfunc_called(this, "_ZN6S215C63v51Ev");}
void  S215C6 ::v52(){vfunc_called(this, "_ZN6S215C63v52Ev");}
void  S215C6 ::v53(){vfunc_called(this, "_ZN6S215C63v53Ev");}
void  S215C6 ::v54(){vfunc_called(this, "_ZN6S215C63v54Ev");}
void  S215C6 ::v55(){vfunc_called(this, "_ZN6S215C63v55Ev");}
void  S215C6 ::v56(){vfunc_called(this, "_ZN6S215C63v56Ev");}
void  S215C6 ::v57(){vfunc_called(this, "_ZN6S215C63v57Ev");}
void  S215C6 ::v58(){vfunc_called(this, "_ZN6S215C63v58Ev");}
void  S215C6 ::v59(){vfunc_called(this, "_ZN6S215C63v59Ev");}
void  S215C6 ::v60(){vfunc_called(this, "_ZN6S215C63v60Ev");}
void  S215C6 ::v61(){vfunc_called(this, "_ZN6S215C63v61Ev");}
void  S215C6 ::v62(){vfunc_called(this, "_ZN6S215C63v62Ev");}
void  S215C6 ::v63(){vfunc_called(this, "_ZN6S215C63v63Ev");}
void  S215C6 ::v64(){vfunc_called(this, "_ZN6S215C63v64Ev");}
void  S215C6 ::v65(){vfunc_called(this, "_ZN6S215C63v65Ev");}
void  S215C6 ::v66(){vfunc_called(this, "_ZN6S215C63v66Ev");}
void  S215C6 ::v67(){vfunc_called(this, "_ZN6S215C63v67Ev");}
S215C6 ::S215C6(){ note_ctor("S215C6", this);} // tgen

static void Test_S215C6()
{
  extern Class_Descriptor cd_S215C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S215C6, buf);
    S215C6 *dp, &lv = *(dp=new (buf) S215C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S215C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S215C6)");
    check_field_offset(lv, s215c6f0, ABISELECT(8,4), "S215C6.s215c6f0");
    check_field_offset(lv, s215c6f1, ABISELECT(16,8), "S215C6.s215c6f1");
    check_field_offset(lv, s215c6f2, ABISELECT(24,16), "S215C6.s215c6f2");
    check_field_offset(lv, s215c6f3, ABISELECT(56,32), "S215C6.s215c6f3");
    check_field_offset(lv, s215c6f4, ABISELECT(64,40), "S215C6.s215c6f4");
    check_field_offset(lv, s215c6f5, ABISELECT(72,44), "S215C6.s215c6f5");
    check_field_offset(lv, s215c6f6, ABISELECT(80,52), "S215C6.s215c6f6");
    test_class_info(&lv, &cd_S215C6);
    dp->~S215C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS215C6(Test_S215C6, "S215C6", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S215C6C1Ev();
extern void _ZN6S215C6D1Ev();
Name_Map name_map_S215C6[] = {
  NSPAIR(_ZN6S215C6C1Ev),
  NSPAIR(_ZN6S215C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S215C6[];
extern void _ZN6S215C6D1Ev();
extern void _ZN6S215C6D0Ev();
extern void _ZN6S215C62v4Ev();
extern void _ZN6S215C62v5Ev();
extern void _ZN6S215C62v6Ev();
extern void _ZN6S215C62v7Ev();
extern void _ZN6S215C62v8Ev();
extern void _ZN6S215C62v9Ev();
extern void _ZN6S215C63v10Ev();
extern void _ZN6S215C63v11Ev();
extern void _ZN6S215C63v12Ev();
extern void _ZN6S215C63v13Ev();
extern void _ZN6S215C63v14Ev();
extern void _ZN6S215C63v15Ev();
extern void _ZN6S215C63v16Ev();
extern void _ZN6S215C63v17Ev();
extern void _ZN6S215C63v18Ev();
extern void _ZN6S215C63v19Ev();
extern void _ZN6S215C63v20Ev();
extern void _ZN6S215C63v21Ev();
extern void _ZN6S215C63v22Ev();
extern void _ZN6S215C63v23Ev();
extern void _ZN6S215C63v24Ev();
extern void _ZN6S215C63v25Ev();
extern void _ZN6S215C63v26Ev();
extern void _ZN6S215C63v27Ev();
extern void _ZN6S215C63v28Ev();
extern void _ZN6S215C63v29Ev();
extern void _ZN6S215C63v30Ev();
extern void _ZN6S215C63v31Ev();
extern void _ZN6S215C63v32Ev();
extern void _ZN6S215C63v33Ev();
extern void _ZN6S215C63v34Ev();
extern void _ZN6S215C63v35Ev();
extern void _ZN6S215C63v36Ev();
extern void _ZN6S215C63v37Ev();
extern void _ZN6S215C63v38Ev();
extern void _ZN6S215C63v39Ev();
extern void _ZN6S215C63v40Ev();
extern void _ZN6S215C63v41Ev();
extern void _ZN6S215C63v42Ev();
extern void _ZN6S215C63v43Ev();
extern void _ZN6S215C63v44Ev();
extern void _ZN6S215C63v45Ev();
extern void _ZN6S215C63v46Ev();
extern void _ZN6S215C63v47Ev();
extern void _ZN6S215C63v48Ev();
extern void _ZN6S215C63v49Ev();
extern void _ZN6S215C63v50Ev();
extern void _ZN6S215C63v51Ev();
extern void _ZN6S215C63v52Ev();
extern void _ZN6S215C63v53Ev();
extern void _ZN6S215C63v54Ev();
extern void _ZN6S215C63v55Ev();
extern void _ZN6S215C63v56Ev();
extern void _ZN6S215C63v57Ev();
extern void _ZN6S215C63v58Ev();
extern void _ZN6S215C63v59Ev();
extern void _ZN6S215C63v60Ev();
extern void _ZN6S215C63v61Ev();
extern void _ZN6S215C63v62Ev();
extern void _ZN6S215C63v63Ev();
extern void _ZN6S215C63v64Ev();
extern void _ZN6S215C63v65Ev();
extern void _ZN6S215C63v66Ev();
extern void _ZN6S215C63v67Ev();
static  VTBL_ENTRY vtc_S215C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S215C6[0]),
  (VTBL_ENTRY)&_ZN6S215C6D1Ev,
  (VTBL_ENTRY)&_ZN6S215C6D0Ev,
  (VTBL_ENTRY)&_ZN6S215C62v4Ev,
  (VTBL_ENTRY)&_ZN6S215C62v5Ev,
  (VTBL_ENTRY)&_ZN6S215C62v6Ev,
  (VTBL_ENTRY)&_ZN6S215C62v7Ev,
  (VTBL_ENTRY)&_ZN6S215C62v8Ev,
  (VTBL_ENTRY)&_ZN6S215C62v9Ev,
  (VTBL_ENTRY)&_ZN6S215C63v10Ev,
  (VTBL_ENTRY)&_ZN6S215C63v11Ev,
  (VTBL_ENTRY)&_ZN6S215C63v12Ev,
  (VTBL_ENTRY)&_ZN6S215C63v13Ev,
  (VTBL_ENTRY)&_ZN6S215C63v14Ev,
  (VTBL_ENTRY)&_ZN6S215C63v15Ev,
  (VTBL_ENTRY)&_ZN6S215C63v16Ev,
  (VTBL_ENTRY)&_ZN6S215C63v17Ev,
  (VTBL_ENTRY)&_ZN6S215C63v18Ev,
  (VTBL_ENTRY)&_ZN6S215C63v19Ev,
  (VTBL_ENTRY)&_ZN6S215C63v20Ev,
  (VTBL_ENTRY)&_ZN6S215C63v21Ev,
  (VTBL_ENTRY)&_ZN6S215C63v22Ev,
  (VTBL_ENTRY)&_ZN6S215C63v23Ev,
  (VTBL_ENTRY)&_ZN6S215C63v24Ev,
  (VTBL_ENTRY)&_ZN6S215C63v25Ev,
  (VTBL_ENTRY)&_ZN6S215C63v26Ev,
  (VTBL_ENTRY)&_ZN6S215C63v27Ev,
  (VTBL_ENTRY)&_ZN6S215C63v28Ev,
  (VTBL_ENTRY)&_ZN6S215C63v29Ev,
  (VTBL_ENTRY)&_ZN6S215C63v30Ev,
  (VTBL_ENTRY)&_ZN6S215C63v31Ev,
  (VTBL_ENTRY)&_ZN6S215C63v32Ev,
  (VTBL_ENTRY)&_ZN6S215C63v33Ev,
  (VTBL_ENTRY)&_ZN6S215C63v34Ev,
  (VTBL_ENTRY)&_ZN6S215C63v35Ev,
  (VTBL_ENTRY)&_ZN6S215C63v36Ev,
  (VTBL_ENTRY)&_ZN6S215C63v37Ev,
  (VTBL_ENTRY)&_ZN6S215C63v38Ev,
  (VTBL_ENTRY)&_ZN6S215C63v39Ev,
  (VTBL_ENTRY)&_ZN6S215C63v40Ev,
  (VTBL_ENTRY)&_ZN6S215C63v41Ev,
  (VTBL_ENTRY)&_ZN6S215C63v42Ev,
  (VTBL_ENTRY)&_ZN6S215C63v43Ev,
  (VTBL_ENTRY)&_ZN6S215C63v44Ev,
  (VTBL_ENTRY)&_ZN6S215C63v45Ev,
  (VTBL_ENTRY)&_ZN6S215C63v46Ev,
  (VTBL_ENTRY)&_ZN6S215C63v47Ev,
  (VTBL_ENTRY)&_ZN6S215C63v48Ev,
  (VTBL_ENTRY)&_ZN6S215C63v49Ev,
  (VTBL_ENTRY)&_ZN6S215C63v50Ev,
  (VTBL_ENTRY)&_ZN6S215C63v51Ev,
  (VTBL_ENTRY)&_ZN6S215C63v52Ev,
  (VTBL_ENTRY)&_ZN6S215C63v53Ev,
  (VTBL_ENTRY)&_ZN6S215C63v54Ev,
  (VTBL_ENTRY)&_ZN6S215C63v55Ev,
  (VTBL_ENTRY)&_ZN6S215C63v56Ev,
  (VTBL_ENTRY)&_ZN6S215C63v57Ev,
  (VTBL_ENTRY)&_ZN6S215C63v58Ev,
  (VTBL_ENTRY)&_ZN6S215C63v59Ev,
  (VTBL_ENTRY)&_ZN6S215C63v60Ev,
  (VTBL_ENTRY)&_ZN6S215C63v61Ev,
  (VTBL_ENTRY)&_ZN6S215C63v62Ev,
  (VTBL_ENTRY)&_ZN6S215C63v63Ev,
  (VTBL_ENTRY)&_ZN6S215C63v64Ev,
  (VTBL_ENTRY)&_ZN6S215C63v65Ev,
  (VTBL_ENTRY)&_ZN6S215C63v66Ev,
  (VTBL_ENTRY)&_ZN6S215C63v67Ev,
};
extern VTBL_ENTRY _ZTI6S215C6[];
extern  VTBL_ENTRY _ZTV6S215C6[];
Class_Descriptor cd_S215C6 = {  "S215C6", // class name
  0,0,//no base classes
  &(vtc_S215C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S215C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S215C6),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  S215C5  : S215C6 {
  int s215c5f0[2];
  void *s215c5f1;
  int s215c5f2[2];
  ::S287C8_nt s215c5f3;
  ::S287C8_nt s215c5f4;
  ::S2121C38 s215c5f5;
  ::S287C8_nt s215c5f6;
  unsigned int s215c5f7:1;
  unsigned int s215c5f8:1;
  unsigned int s215c5f9:1;
  unsigned int s215c5f10:1;
  unsigned int s215c5f11:1;
  int s215c5f12[2];
  virtual  ~S215C5(); // _ZN6S215C5D1Ev
  virtual void  v68(); // _ZN6S215C53v68Ev
  virtual void  v69(); // _ZN6S215C53v69Ev
  virtual void  v70(); // _ZN6S215C53v70Ev
  virtual void  v71(); // _ZN6S215C53v71Ev
  virtual void  v72(); // _ZN6S215C53v72Ev
  virtual void  v73(); // _ZN6S215C53v73Ev
  virtual void  v74(); // _ZN6S215C53v74Ev
  virtual void  v75(); // _ZN6S215C53v75Ev
  virtual void  v76(); // _ZN6S215C53v76Ev
  virtual void  v77(); // _ZN6S215C53v77Ev
  virtual void  v78(); // _ZN6S215C53v78Ev
  virtual void  v79(); // _ZN6S215C53v79Ev
  virtual void  v80(); // _ZN6S215C53v80Ev
  virtual void  v81(); // _ZN6S215C53v81Ev
  virtual void  v82(); // _ZN6S215C53v82Ev
  virtual void  v83(); // _ZN6S215C53v83Ev
  virtual void  v84(); // _ZN6S215C53v84Ev
  virtual void  v85(); // _ZN6S215C53v85Ev
  virtual void  v86(); // _ZN6S215C53v86Ev
  virtual void  v87(); // _ZN6S215C53v87Ev
  virtual void  v88(); // _ZN6S215C53v88Ev
  virtual void  v89(); // _ZN6S215C53v89Ev
  S215C5(); // tgen
};
//SIG(-1 S215C5) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S215C5 ::~S215C5(){ note_dtor("S215C5", this);}
void  S215C5 ::v68(){vfunc_called(this, "_ZN6S215C53v68Ev");}
void  S215C5 ::v69(){vfunc_called(this, "_ZN6S215C53v69Ev");}
void  S215C5 ::v70(){vfunc_called(this, "_ZN6S215C53v70Ev");}
void  S215C5 ::v71(){vfunc_called(this, "_ZN6S215C53v71Ev");}
void  S215C5 ::v72(){vfunc_called(this, "_ZN6S215C53v72Ev");}
void  S215C5 ::v73(){vfunc_called(this, "_ZN6S215C53v73Ev");}
void  S215C5 ::v74(){vfunc_called(this, "_ZN6S215C53v74Ev");}
void  S215C5 ::v75(){vfunc_called(this, "_ZN6S215C53v75Ev");}
void  S215C5 ::v76(){vfunc_called(this, "_ZN6S215C53v76Ev");}
void  S215C5 ::v77(){vfunc_called(this, "_ZN6S215C53v77Ev");}
void  S215C5 ::v78(){vfunc_called(this, "_ZN6S215C53v78Ev");}
void  S215C5 ::v79(){vfunc_called(this, "_ZN6S215C53v79Ev");}
void  S215C5 ::v80(){vfunc_called(this, "_ZN6S215C53v80Ev");}
void  S215C5 ::v81(){vfunc_called(this, "_ZN6S215C53v81Ev");}
void  S215C5 ::v82(){vfunc_called(this, "_ZN6S215C53v82Ev");}
void  S215C5 ::v83(){vfunc_called(this, "_ZN6S215C53v83Ev");}
void  S215C5 ::v84(){vfunc_called(this, "_ZN6S215C53v84Ev");}
void  S215C5 ::v85(){vfunc_called(this, "_ZN6S215C53v85Ev");}
void  S215C5 ::v86(){vfunc_called(this, "_ZN6S215C53v86Ev");}
void  S215C5 ::v87(){vfunc_called(this, "_ZN6S215C53v87Ev");}
void  S215C5 ::v88(){vfunc_called(this, "_ZN6S215C53v88Ev");}
void  S215C5 ::v89(){vfunc_called(this, "_ZN6S215C53v89Ev");}
S215C5 ::S215C5(){ note_ctor("S215C5", this);} // tgen

static void Test_S215C5()
{
  extern Class_Descriptor cd_S215C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S215C5, buf);
    S215C5 *dp, &lv = *(dp=new (buf) S215C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S215C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S215C5)");
    check_base_class_offset(lv, (S215C6*), 0, "S215C5");
    check_field_offset(lv, s215c5f0, ABISELECT(96,60), "S215C5.s215c5f0");
    check_field_offset(lv, s215c5f1, ABISELECT(104,68), "S215C5.s215c5f1");
    check_field_offset(lv, s215c5f2, ABISELECT(112,72), "S215C5.s215c5f2");
    check_field_offset(lv, s215c5f3, ABISELECT(120,80), "S215C5.s215c5f3");
    check_field_offset(lv, s215c5f4, ABISELECT(136,92), "S215C5.s215c5f4");
    check_field_offset(lv, s215c5f5, ABISELECT(152,104), "S215C5.s215c5f5");
    check_field_offset(lv, s215c5f6, ABISELECT(160,108), "S215C5.s215c5f6");
    set_bf_and_test(lv, s215c5f7, ABISELECT(176,120), 0, 1, 1, "S215C5");
    set_bf_and_test(lv, s215c5f8, ABISELECT(176,120), 1, 1, 1, "S215C5");
    set_bf_and_test(lv, s215c5f9, ABISELECT(176,120), 2, 1, 1, "S215C5");
    set_bf_and_test(lv, s215c5f10, ABISELECT(176,120), 3, 1, 1, "S215C5");
    set_bf_and_test(lv, s215c5f11, ABISELECT(176,120), 4, 1, 1, "S215C5");
    check_field_offset(lv, s215c5f12, ABISELECT(180,124), "S215C5.s215c5f12");
    test_class_info(&lv, &cd_S215C5);
    dp->~S215C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS215C5(Test_S215C5, "S215C5", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN6S215C5C1Ev();
extern void _ZN6S215C5D1Ev();
Name_Map name_map_S215C5[] = {
  NSPAIR(_ZN6S215C5C1Ev),
  NSPAIR(_ZN6S215C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S215C6;
extern VTBL_ENTRY _ZTI6S215C6[];
extern  VTBL_ENTRY _ZTV6S215C6[];
static Base_Class bases_S215C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S215C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI6S215C5[];
extern void _ZN6S215C5D1Ev();
extern void _ZN6S215C5D0Ev();
extern void _ZN6S215C62v4Ev();
extern void _ZN6S215C62v5Ev();
extern void _ZN6S215C62v6Ev();
extern void _ZN6S215C62v7Ev();
extern void _ZN6S215C62v8Ev();
extern void _ZN6S215C62v9Ev();
extern void _ZN6S215C63v10Ev();
extern void _ZN6S215C63v11Ev();
extern void _ZN6S215C63v12Ev();
extern void _ZN6S215C63v13Ev();
extern void _ZN6S215C63v14Ev();
extern void _ZN6S215C63v15Ev();
extern void _ZN6S215C63v16Ev();
extern void _ZN6S215C63v17Ev();
extern void _ZN6S215C63v18Ev();
extern void _ZN6S215C63v19Ev();
extern void _ZN6S215C63v20Ev();
extern void _ZN6S215C63v21Ev();
extern void _ZN6S215C63v22Ev();
extern void _ZN6S215C63v23Ev();
extern void _ZN6S215C63v24Ev();
extern void _ZN6S215C63v25Ev();
extern void _ZN6S215C63v26Ev();
extern void _ZN6S215C63v27Ev();
extern void _ZN6S215C63v28Ev();
extern void _ZN6S215C63v29Ev();
extern void _ZN6S215C63v30Ev();
extern void _ZN6S215C63v31Ev();
extern void _ZN6S215C63v32Ev();
extern void _ZN6S215C63v33Ev();
extern void _ZN6S215C63v34Ev();
extern void _ZN6S215C63v35Ev();
extern void _ZN6S215C63v36Ev();
extern void _ZN6S215C63v37Ev();
extern void _ZN6S215C63v38Ev();
extern void _ZN6S215C63v39Ev();
extern void _ZN6S215C63v40Ev();
extern void _ZN6S215C63v41Ev();
extern void _ZN6S215C63v42Ev();
extern void _ZN6S215C63v43Ev();
extern void _ZN6S215C63v44Ev();
extern void _ZN6S215C63v45Ev();
extern void _ZN6S215C63v46Ev();
extern void _ZN6S215C63v47Ev();
extern void _ZN6S215C63v48Ev();
extern void _ZN6S215C63v49Ev();
extern void _ZN6S215C63v50Ev();
extern void _ZN6S215C63v51Ev();
extern void _ZN6S215C63v52Ev();
extern void _ZN6S215C63v53Ev();
extern void _ZN6S215C63v54Ev();
extern void _ZN6S215C63v55Ev();
extern void _ZN6S215C63v56Ev();
extern void _ZN6S215C63v57Ev();
extern void _ZN6S215C63v58Ev();
extern void _ZN6S215C63v59Ev();
extern void _ZN6S215C63v60Ev();
extern void _ZN6S215C63v61Ev();
extern void _ZN6S215C63v62Ev();
extern void _ZN6S215C63v63Ev();
extern void _ZN6S215C63v64Ev();
extern void _ZN6S215C63v65Ev();
extern void _ZN6S215C63v66Ev();
extern void _ZN6S215C63v67Ev();
extern void _ZN6S215C53v68Ev();
extern void _ZN6S215C53v69Ev();
extern void _ZN6S215C53v70Ev();
extern void _ZN6S215C53v71Ev();
extern void _ZN6S215C53v72Ev();
extern void _ZN6S215C53v73Ev();
extern void _ZN6S215C53v74Ev();
extern void _ZN6S215C53v75Ev();
extern void _ZN6S215C53v76Ev();
extern void _ZN6S215C53v77Ev();
extern void _ZN6S215C53v78Ev();
extern void _ZN6S215C53v79Ev();
extern void _ZN6S215C53v80Ev();
extern void _ZN6S215C53v81Ev();
extern void _ZN6S215C53v82Ev();
extern void _ZN6S215C53v83Ev();
extern void _ZN6S215C53v84Ev();
extern void _ZN6S215C53v85Ev();
extern void _ZN6S215C53v86Ev();
extern void _ZN6S215C53v87Ev();
extern void _ZN6S215C53v88Ev();
extern void _ZN6S215C53v89Ev();
static  VTBL_ENTRY vtc_S215C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S215C5[0]),
  (VTBL_ENTRY)&_ZN6S215C5D1Ev,
  (VTBL_ENTRY)&_ZN6S215C5D0Ev,
  (VTBL_ENTRY)&_ZN6S215C62v4Ev,
  (VTBL_ENTRY)&_ZN6S215C62v5Ev,
  (VTBL_ENTRY)&_ZN6S215C62v6Ev,
  (VTBL_ENTRY)&_ZN6S215C62v7Ev,
  (VTBL_ENTRY)&_ZN6S215C62v8Ev,
  (VTBL_ENTRY)&_ZN6S215C62v9Ev,
  (VTBL_ENTRY)&_ZN6S215C63v10Ev,
  (VTBL_ENTRY)&_ZN6S215C63v11Ev,
  (VTBL_ENTRY)&_ZN6S215C63v12Ev,
  (VTBL_ENTRY)&_ZN6S215C63v13Ev,
  (VTBL_ENTRY)&_ZN6S215C63v14Ev,
  (VTBL_ENTRY)&_ZN6S215C63v15Ev,
  (VTBL_ENTRY)&_ZN6S215C63v16Ev,
  (VTBL_ENTRY)&_ZN6S215C63v17Ev,
  (VTBL_ENTRY)&_ZN6S215C63v18Ev,
  (VTBL_ENTRY)&_ZN6S215C63v19Ev,
  (VTBL_ENTRY)&_ZN6S215C63v20Ev,
  (VTBL_ENTRY)&_ZN6S215C63v21Ev,
  (VTBL_ENTRY)&_ZN6S215C63v22Ev,
  (VTBL_ENTRY)&_ZN6S215C63v23Ev,
  (VTBL_ENTRY)&_ZN6S215C63v24Ev,
  (VTBL_ENTRY)&_ZN6S215C63v25Ev,
  (VTBL_ENTRY)&_ZN6S215C63v26Ev,
  (VTBL_ENTRY)&_ZN6S215C63v27Ev,
  (VTBL_ENTRY)&_ZN6S215C63v28Ev,
  (VTBL_ENTRY)&_ZN6S215C63v29Ev,
  (VTBL_ENTRY)&_ZN6S215C63v30Ev,
  (VTBL_ENTRY)&_ZN6S215C63v31Ev,
  (VTBL_ENTRY)&_ZN6S215C63v32Ev,
  (VTBL_ENTRY)&_ZN6S215C63v33Ev,
  (VTBL_ENTRY)&_ZN6S215C63v34Ev,
  (VTBL_ENTRY)&_ZN6S215C63v35Ev,
  (VTBL_ENTRY)&_ZN6S215C63v36Ev,
  (VTBL_ENTRY)&_ZN6S215C63v37Ev,
  (VTBL_ENTRY)&_ZN6S215C63v38Ev,
  (VTBL_ENTRY)&_ZN6S215C63v39Ev,
  (VTBL_ENTRY)&_ZN6S215C63v40Ev,
  (VTBL_ENTRY)&_ZN6S215C63v41Ev,
  (VTBL_ENTRY)&_ZN6S215C63v42Ev,
  (VTBL_ENTRY)&_ZN6S215C63v43Ev,
  (VTBL_ENTRY)&_ZN6S215C63v44Ev,
  (VTBL_ENTRY)&_ZN6S215C63v45Ev,
  (VTBL_ENTRY)&_ZN6S215C63v46Ev,
  (VTBL_ENTRY)&_ZN6S215C63v47Ev,
  (VTBL_ENTRY)&_ZN6S215C63v48Ev,
  (VTBL_ENTRY)&_ZN6S215C63v49Ev,
  (VTBL_ENTRY)&_ZN6S215C63v50Ev,
  (VTBL_ENTRY)&_ZN6S215C63v51Ev,
  (VTBL_ENTRY)&_ZN6S215C63v52Ev,
  (VTBL_ENTRY)&_ZN6S215C63v53Ev,
  (VTBL_ENTRY)&_ZN6S215C63v54Ev,
  (VTBL_ENTRY)&_ZN6S215C63v55Ev,
  (VTBL_ENTRY)&_ZN6S215C63v56Ev,
  (VTBL_ENTRY)&_ZN6S215C63v57Ev,
  (VTBL_ENTRY)&_ZN6S215C63v58Ev,
  (VTBL_ENTRY)&_ZN6S215C63v59Ev,
  (VTBL_ENTRY)&_ZN6S215C63v60Ev,
  (VTBL_ENTRY)&_ZN6S215C63v61Ev,
  (VTBL_ENTRY)&_ZN6S215C63v62Ev,
  (VTBL_ENTRY)&_ZN6S215C63v63Ev,
  (VTBL_ENTRY)&_ZN6S215C63v64Ev,
  (VTBL_ENTRY)&_ZN6S215C63v65Ev,
  (VTBL_ENTRY)&_ZN6S215C63v66Ev,
  (VTBL_ENTRY)&_ZN6S215C63v67Ev,
  (VTBL_ENTRY)&_ZN6S215C53v68Ev,
  (VTBL_ENTRY)&_ZN6S215C53v69Ev,
  (VTBL_ENTRY)&_ZN6S215C53v70Ev,
  (VTBL_ENTRY)&_ZN6S215C53v71Ev,
  (VTBL_ENTRY)&_ZN6S215C53v72Ev,
  (VTBL_ENTRY)&_ZN6S215C53v73Ev,
  (VTBL_ENTRY)&_ZN6S215C53v74Ev,
  (VTBL_ENTRY)&_ZN6S215C53v75Ev,
  (VTBL_ENTRY)&_ZN6S215C53v76Ev,
  (VTBL_ENTRY)&_ZN6S215C53v77Ev,
  (VTBL_ENTRY)&_ZN6S215C53v78Ev,
  (VTBL_ENTRY)&_ZN6S215C53v79Ev,
  (VTBL_ENTRY)&_ZN6S215C53v80Ev,
  (VTBL_ENTRY)&_ZN6S215C53v81Ev,
  (VTBL_ENTRY)&_ZN6S215C53v82Ev,
  (VTBL_ENTRY)&_ZN6S215C53v83Ev,
  (VTBL_ENTRY)&_ZN6S215C53v84Ev,
  (VTBL_ENTRY)&_ZN6S215C53v85Ev,
  (VTBL_ENTRY)&_ZN6S215C53v86Ev,
  (VTBL_ENTRY)&_ZN6S215C53v87Ev,
  (VTBL_ENTRY)&_ZN6S215C53v88Ev,
  (VTBL_ENTRY)&_ZN6S215C53v89Ev,
};
extern VTBL_ENTRY _ZTI6S215C5[];
extern  VTBL_ENTRY _ZTV6S215C5[];
Class_Descriptor cd_S215C5 = {  "S215C5", // class name
  bases_S215C5, 1,
  &(vtc_S215C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI6S215C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S215C5),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S215C4  : S215C5 {
  unsigned int s215c4f0:1;
  unsigned int s215c4f1:1;
  unsigned int s215c4f2:1;
  ::S3350C17 s215c4f3;
  ::S3350C11 s215c4f4;
  ::S3350C5_nt s215c4f5;
  ::S287C27 s215c4f6;
  int s215c4f7[3];
  virtual  ~S215C4(); // _ZN6S215C4D1Ev
  virtual void  v90(); // _ZN6S215C43v90Ev
  virtual void  v91(); // _ZN6S215C43v91Ev
  virtual void  v92(); // _ZN6S215C43v92Ev
  virtual void  v93(); // _ZN6S215C43v93Ev
  virtual void  v94(); // _ZN6S215C43v94Ev
  virtual void  v95(); // _ZN6S215C43v95Ev
  virtual void  v96(); // _ZN6S215C43v96Ev
  virtual void  v97(); // _ZN6S215C43v97Ev
  virtual void  v98(); // _ZN6S215C43v98Ev
  virtual void  v99(); // _ZN6S215C43v99Ev
  virtual void  v100(); // _ZN6S215C44v100Ev
  virtual void  v101(); // _ZN6S215C44v101Ev
  virtual void  v102(); // _ZN6S215C44v102Ev
  virtual void  v103(); // _ZN6S215C44v103Ev
  virtual void  v104(); // _ZN6S215C44v104Ev
  virtual void  v105(); // _ZN6S215C44v105Ev
  virtual void  v106(); // _ZN6S215C44v106Ev
  virtual void  v107(); // _ZN6S215C44v107Ev
  virtual void  v108(); // _ZN6S215C44v108Ev
  virtual void  v109(); // _ZN6S215C44v109Ev
  S215C4(); // tgen
};
//SIG(-1 S215C4) C1{ BC2{ BC3{ vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 FC10{ BC11{ BC8}} FC12{ BC13{ BC8}} FC14{ BC15{ BC8}} FC16{ BC17{ BC8}} Fi[3]}


 S215C4 ::~S215C4(){ note_dtor("S215C4", this);}
void  S215C4 ::v90(){vfunc_called(this, "_ZN6S215C43v90Ev");}
void  S215C4 ::v91(){vfunc_called(this, "_ZN6S215C43v91Ev");}
void  S215C4 ::v92(){vfunc_called(this, "_ZN6S215C43v92Ev");}
void  S215C4 ::v93(){vfunc_called(this, "_ZN6S215C43v93Ev");}
void  S215C4 ::v94(){vfunc_called(this, "_ZN6S215C43v94Ev");}
void  S215C4 ::v95(){vfunc_called(this, "_ZN6S215C43v95Ev");}
void  S215C4 ::v96(){vfunc_called(this, "_ZN6S215C43v96Ev");}
void  S215C4 ::v97(){vfunc_called(this, "_ZN6S215C43v97Ev");}
void  S215C4 ::v98(){vfunc_called(this, "_ZN6S215C43v98Ev");}
void  S215C4 ::v99(){vfunc_called(this, "_ZN6S215C43v99Ev");}
void  S215C4 ::v100(){vfunc_called(this, "_ZN6S215C44v100Ev");}
void  S215C4 ::v101(){vfunc_called(this, "_ZN6S215C44v101Ev");}
void  S215C4 ::v102(){vfunc_called(this, "_ZN6S215C44v102Ev");}
void  S215C4 ::v103(){vfunc_called(this, "_ZN6S215C44v103Ev");}
void  S215C4 ::v104(){vfunc_called(this, "_ZN6S215C44v104Ev");}
void  S215C4 ::v105(){vfunc_called(this, "_ZN6S215C44v105Ev");}
void  S215C4 ::v106(){vfunc_called(this, "_ZN6S215C44v106Ev");}
void  S215C4 ::v107(){vfunc_called(this, "_ZN6S215C44v107Ev");}
void  S215C4 ::v108(){vfunc_called(this, "_ZN6S215C44v108Ev");}
void  S215C4 ::v109(){vfunc_called(this, "_ZN6S215C44v109Ev");}
S215C4 ::S215C4(){ note_ctor("S215C4", this);} // tgen

static void Test_S215C4()
{
  extern Class_Descriptor cd_S215C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S215C4, buf);
    S215C4 *dp, &lv = *(dp=new (buf) S215C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S215C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S215C4)");
    check_base_class_offset(lv, (S215C6*)(S215C5*), 0, "S215C4");
    check_base_class_offset(lv, (S215C5*), 0, "S215C4");
    set_bf_and_test(lv, s215c4f0, ABISELECT(188,132), 0, 1, 1, "S215C4");
    set_bf_and_test(lv, s215c4f1, ABISELECT(188,132), 1, 1, 1, "S215C4");
    set_bf_and_test(lv, s215c4f2, ABISELECT(188,132), 2, 1, 1, "S215C4");
    check_field_offset(lv, s215c4f3, ABISELECT(192,136), "S215C4.s215c4f3");
    check_field_offset(lv, s215c4f4, ABISELECT(208,148), "S215C4.s215c4f4");
    check_field_offset(lv, s215c4f5, ABISELECT(224,160), "S215C4.s215c4f5");
    check_field_offset(lv, s215c4f6, ABISELECT(240,172), "S215C4.s215c4f6");
    check_field_offset(lv, s215c4f7, ABISELECT(256,184), "S215C4.s215c4f7");
    test_class_info(&lv, &cd_S215C4);
    dp->~S215C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS215C4(Test_S215C4, "S215C4", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN6S215C4C1Ev();
extern void _ZN6S215C4D1Ev();
Name_Map name_map_S215C4[] = {
  NSPAIR(_ZN6S215C4C1Ev),
  NSPAIR(_ZN6S215C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S215C6;
extern VTBL_ENTRY _ZTI6S215C6[];
extern  VTBL_ENTRY _ZTV6S215C6[];
extern Class_Descriptor cd_S215C5;
extern VTBL_ENTRY _ZTI6S215C5[];
extern  VTBL_ENTRY _ZTV6S215C5[];
static Base_Class bases_S215C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S215C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S215C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S215C4[];
extern void _ZN6S215C4D1Ev();
extern void _ZN6S215C4D0Ev();
extern void _ZN6S215C62v4Ev();
extern void _ZN6S215C62v5Ev();
extern void _ZN6S215C62v6Ev();
extern void _ZN6S215C62v7Ev();
extern void _ZN6S215C62v8Ev();
extern void _ZN6S215C62v9Ev();
extern void _ZN6S215C63v10Ev();
extern void _ZN6S215C63v11Ev();
extern void _ZN6S215C63v12Ev();
extern void _ZN6S215C63v13Ev();
extern void _ZN6S215C63v14Ev();
extern void _ZN6S215C63v15Ev();
extern void _ZN6S215C63v16Ev();
extern void _ZN6S215C63v17Ev();
extern void _ZN6S215C63v18Ev();
extern void _ZN6S215C63v19Ev();
extern void _ZN6S215C63v20Ev();
extern void _ZN6S215C63v21Ev();
extern void _ZN6S215C63v22Ev();
extern void _ZN6S215C63v23Ev();
extern void _ZN6S215C63v24Ev();
extern void _ZN6S215C63v25Ev();
extern void _ZN6S215C63v26Ev();
extern void _ZN6S215C63v27Ev();
extern void _ZN6S215C63v28Ev();
extern void _ZN6S215C63v29Ev();
extern void _ZN6S215C63v30Ev();
extern void _ZN6S215C63v31Ev();
extern void _ZN6S215C63v32Ev();
extern void _ZN6S215C63v33Ev();
extern void _ZN6S215C63v34Ev();
extern void _ZN6S215C63v35Ev();
extern void _ZN6S215C63v36Ev();
extern void _ZN6S215C63v37Ev();
extern void _ZN6S215C63v38Ev();
extern void _ZN6S215C63v39Ev();
extern void _ZN6S215C63v40Ev();
extern void _ZN6S215C63v41Ev();
extern void _ZN6S215C63v42Ev();
extern void _ZN6S215C63v43Ev();
extern void _ZN6S215C63v44Ev();
extern void _ZN6S215C63v45Ev();
extern void _ZN6S215C63v46Ev();
extern void _ZN6S215C63v47Ev();
extern void _ZN6S215C63v48Ev();
extern void _ZN6S215C63v49Ev();
extern void _ZN6S215C63v50Ev();
extern void _ZN6S215C63v51Ev();
extern void _ZN6S215C63v52Ev();
extern void _ZN6S215C63v53Ev();
extern void _ZN6S215C63v54Ev();
extern void _ZN6S215C63v55Ev();
extern void _ZN6S215C63v56Ev();
extern void _ZN6S215C63v57Ev();
extern void _ZN6S215C63v58Ev();
extern void _ZN6S215C63v59Ev();
extern void _ZN6S215C63v60Ev();
extern void _ZN6S215C63v61Ev();
extern void _ZN6S215C63v62Ev();
extern void _ZN6S215C63v63Ev();
extern void _ZN6S215C63v64Ev();
extern void _ZN6S215C63v65Ev();
extern void _ZN6S215C63v66Ev();
extern void _ZN6S215C63v67Ev();
extern void _ZN6S215C53v68Ev();
extern void _ZN6S215C53v69Ev();
extern void _ZN6S215C53v70Ev();
extern void _ZN6S215C53v71Ev();
extern void _ZN6S215C53v72Ev();
extern void _ZN6S215C53v73Ev();
extern void _ZN6S215C53v74Ev();
extern void _ZN6S215C53v75Ev();
extern void _ZN6S215C53v76Ev();
extern void _ZN6S215C53v77Ev();
extern void _ZN6S215C53v78Ev();
extern void _ZN6S215C53v79Ev();
extern void _ZN6S215C53v80Ev();
extern void _ZN6S215C53v81Ev();
extern void _ZN6S215C53v82Ev();
extern void _ZN6S215C53v83Ev();
extern void _ZN6S215C53v84Ev();
extern void _ZN6S215C53v85Ev();
extern void _ZN6S215C53v86Ev();
extern void _ZN6S215C53v87Ev();
extern void _ZN6S215C53v88Ev();
extern void _ZN6S215C53v89Ev();
extern void _ZN6S215C43v90Ev();
extern void _ZN6S215C43v91Ev();
extern void _ZN6S215C43v92Ev();
extern void _ZN6S215C43v93Ev();
extern void _ZN6S215C43v94Ev();
extern void _ZN6S215C43v95Ev();
extern void _ZN6S215C43v96Ev();
extern void _ZN6S215C43v97Ev();
extern void _ZN6S215C43v98Ev();
extern void _ZN6S215C43v99Ev();
extern void _ZN6S215C44v100Ev();
extern void _ZN6S215C44v101Ev();
extern void _ZN6S215C44v102Ev();
extern void _ZN6S215C44v103Ev();
extern void _ZN6S215C44v104Ev();
extern void _ZN6S215C44v105Ev();
extern void _ZN6S215C44v106Ev();
extern void _ZN6S215C44v107Ev();
extern void _ZN6S215C44v108Ev();
extern void _ZN6S215C44v109Ev();
static  VTBL_ENTRY vtc_S215C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S215C4[0]),
  (VTBL_ENTRY)&_ZN6S215C4D1Ev,
  (VTBL_ENTRY)&_ZN6S215C4D0Ev,
  (VTBL_ENTRY)&_ZN6S215C62v4Ev,
  (VTBL_ENTRY)&_ZN6S215C62v5Ev,
  (VTBL_ENTRY)&_ZN6S215C62v6Ev,
  (VTBL_ENTRY)&_ZN6S215C62v7Ev,
  (VTBL_ENTRY)&_ZN6S215C62v8Ev,
  (VTBL_ENTRY)&_ZN6S215C62v9Ev,
  (VTBL_ENTRY)&_ZN6S215C63v10Ev,
  (VTBL_ENTRY)&_ZN6S215C63v11Ev,
  (VTBL_ENTRY)&_ZN6S215C63v12Ev,
  (VTBL_ENTRY)&_ZN6S215C63v13Ev,
  (VTBL_ENTRY)&_ZN6S215C63v14Ev,
  (VTBL_ENTRY)&_ZN6S215C63v15Ev,
  (VTBL_ENTRY)&_ZN6S215C63v16Ev,
  (VTBL_ENTRY)&_ZN6S215C63v17Ev,
  (VTBL_ENTRY)&_ZN6S215C63v18Ev,
  (VTBL_ENTRY)&_ZN6S215C63v19Ev,
  (VTBL_ENTRY)&_ZN6S215C63v20Ev,
  (VTBL_ENTRY)&_ZN6S215C63v21Ev,
  (VTBL_ENTRY)&_ZN6S215C63v22Ev,
  (VTBL_ENTRY)&_ZN6S215C63v23Ev,
  (VTBL_ENTRY)&_ZN6S215C63v24Ev,
  (VTBL_ENTRY)&_ZN6S215C63v25Ev,
  (VTBL_ENTRY)&_ZN6S215C63v26Ev,
  (VTBL_ENTRY)&_ZN6S215C63v27Ev,
  (VTBL_ENTRY)&_ZN6S215C63v28Ev,
  (VTBL_ENTRY)&_ZN6S215C63v29Ev,
  (VTBL_ENTRY)&_ZN6S215C63v30Ev,
  (VTBL_ENTRY)&_ZN6S215C63v31Ev,
  (VTBL_ENTRY)&_ZN6S215C63v32Ev,
  (VTBL_ENTRY)&_ZN6S215C63v33Ev,
  (VTBL_ENTRY)&_ZN6S215C63v34Ev,
  (VTBL_ENTRY)&_ZN6S215C63v35Ev,
  (VTBL_ENTRY)&_ZN6S215C63v36Ev,
  (VTBL_ENTRY)&_ZN6S215C63v37Ev,
  (VTBL_ENTRY)&_ZN6S215C63v38Ev,
  (VTBL_ENTRY)&_ZN6S215C63v39Ev,
  (VTBL_ENTRY)&_ZN6S215C63v40Ev,
  (VTBL_ENTRY)&_ZN6S215C63v41Ev,
  (VTBL_ENTRY)&_ZN6S215C63v42Ev,
  (VTBL_ENTRY)&_ZN6S215C63v43Ev,
  (VTBL_ENTRY)&_ZN6S215C63v44Ev,
  (VTBL_ENTRY)&_ZN6S215C63v45Ev,
  (VTBL_ENTRY)&_ZN6S215C63v46Ev,
  (VTBL_ENTRY)&_ZN6S215C63v47Ev,
  (VTBL_ENTRY)&_ZN6S215C63v48Ev,
  (VTBL_ENTRY)&_ZN6S215C63v49Ev,
  (VTBL_ENTRY)&_ZN6S215C63v50Ev,
  (VTBL_ENTRY)&_ZN6S215C63v51Ev,
  (VTBL_ENTRY)&_ZN6S215C63v52Ev,
  (VTBL_ENTRY)&_ZN6S215C63v53Ev,
  (VTBL_ENTRY)&_ZN6S215C63v54Ev,
  (VTBL_ENTRY)&_ZN6S215C63v55Ev,
  (VTBL_ENTRY)&_ZN6S215C63v56Ev,
  (VTBL_ENTRY)&_ZN6S215C63v57Ev,
  (VTBL_ENTRY)&_ZN6S215C63v58Ev,
  (VTBL_ENTRY)&_ZN6S215C63v59Ev,
  (VTBL_ENTRY)&_ZN6S215C63v60Ev,
  (VTBL_ENTRY)&_ZN6S215C63v61Ev,
  (VTBL_ENTRY)&_ZN6S215C63v62Ev,
  (VTBL_ENTRY)&_ZN6S215C63v63Ev,
  (VTBL_ENTRY)&_ZN6S215C63v64Ev,
  (VTBL_ENTRY)&_ZN6S215C63v65Ev,
  (VTBL_ENTRY)&_ZN6S215C63v66Ev,
  (VTBL_ENTRY)&_ZN6S215C63v67Ev,
  (VTBL_ENTRY)&_ZN6S215C53v68Ev,
  (VTBL_ENTRY)&_ZN6S215C53v69Ev,
  (VTBL_ENTRY)&_ZN6S215C53v70Ev,
  (VTBL_ENTRY)&_ZN6S215C53v71Ev,
  (VTBL_ENTRY)&_ZN6S215C53v72Ev,
  (VTBL_ENTRY)&_ZN6S215C53v73Ev,
  (VTBL_ENTRY)&_ZN6S215C53v74Ev,
  (VTBL_ENTRY)&_ZN6S215C53v75Ev,
  (VTBL_ENTRY)&_ZN6S215C53v76Ev,
  (VTBL_ENTRY)&_ZN6S215C53v77Ev,
  (VTBL_ENTRY)&_ZN6S215C53v78Ev,
  (VTBL_ENTRY)&_ZN6S215C53v79Ev,
  (VTBL_ENTRY)&_ZN6S215C53v80Ev,
  (VTBL_ENTRY)&_ZN6S215C53v81Ev,
  (VTBL_ENTRY)&_ZN6S215C53v82Ev,
  (VTBL_ENTRY)&_ZN6S215C53v83Ev,
  (VTBL_ENTRY)&_ZN6S215C53v84Ev,
  (VTBL_ENTRY)&_ZN6S215C53v85Ev,
  (VTBL_ENTRY)&_ZN6S215C53v86Ev,
  (VTBL_ENTRY)&_ZN6S215C53v87Ev,
  (VTBL_ENTRY)&_ZN6S215C53v88Ev,
  (VTBL_ENTRY)&_ZN6S215C53v89Ev,
  (VTBL_ENTRY)&_ZN6S215C43v90Ev,
  (VTBL_ENTRY)&_ZN6S215C43v91Ev,
  (VTBL_ENTRY)&_ZN6S215C43v92Ev,
  (VTBL_ENTRY)&_ZN6S215C43v93Ev,
  (VTBL_ENTRY)&_ZN6S215C43v94Ev,
  (VTBL_ENTRY)&_ZN6S215C43v95Ev,
  (VTBL_ENTRY)&_ZN6S215C43v96Ev,
  (VTBL_ENTRY)&_ZN6S215C43v97Ev,
  (VTBL_ENTRY)&_ZN6S215C43v98Ev,
  (VTBL_ENTRY)&_ZN6S215C43v99Ev,
  (VTBL_ENTRY)&_ZN6S215C44v100Ev,
  (VTBL_ENTRY)&_ZN6S215C44v101Ev,
  (VTBL_ENTRY)&_ZN6S215C44v102Ev,
  (VTBL_ENTRY)&_ZN6S215C44v103Ev,
  (VTBL_ENTRY)&_ZN6S215C44v104Ev,
  (VTBL_ENTRY)&_ZN6S215C44v105Ev,
  (VTBL_ENTRY)&_ZN6S215C44v106Ev,
  (VTBL_ENTRY)&_ZN6S215C44v107Ev,
  (VTBL_ENTRY)&_ZN6S215C44v108Ev,
  (VTBL_ENTRY)&_ZN6S215C44v109Ev,
};
extern VTBL_ENTRY _ZTI6S215C4[];
extern  VTBL_ENTRY _ZTV6S215C4[];
Class_Descriptor cd_S215C4 = {  "S215C4", // class name
  bases_S215C4, 2,
  &(vtc_S215C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI6S215C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S215C4),110, //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  S215C3  : S215C4 {
  void *s215c3f0[2];
  int s215c3f1[4];
  unsigned int s215c3f2:1;
  unsigned int s215c3f3:1;
  unsigned int s215c3f4:1;
  char s215c3f5;
  int s215c3f6;
  unsigned int s215c3f7:1;
  ::S287C23 s215c3f8;
  virtual  ~S215C3(); // _ZN6S215C3D1Ev
  virtual void  v110(); // _ZN6S215C34v110Ev
  virtual void  v111(); // _ZN6S215C34v111Ev
  virtual void  v112(); // _ZN6S215C34v112Ev
  virtual void  v113(); // _ZN6S215C34v113Ev
  virtual void  v114(); // _ZN6S215C34v114Ev
  virtual void  v115(); // _ZN6S215C34v115Ev
  virtual void  v116(); // _ZN6S215C34v116Ev
  virtual void  v117(); // _ZN6S215C34v117Ev
  virtual void  v118(); // _ZN6S215C34v118Ev
  virtual void  v119(); // _ZN6S215C34v119Ev
  virtual void  v120(); // _ZN6S215C34v120Ev
  virtual void  v121(); // _ZN6S215C34v121Ev
  virtual void  v122(); // _ZN6S215C34v122Ev
  virtual void  v123(); // _ZN6S215C34v123Ev
  S215C3(); // tgen
};
//SIG(-1 S215C3) C1{ BC2{ BC3{ BC4{ 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 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 Fi:1 Fi:1 Fi:1 FC11{ BC12{ BC9}} FC13{ BC14{ BC9}} FC15{ BC16{ BC9}} FC17{ BC18{ BC9}} Fi[3]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC19{ BC20{ BC9}}}


 S215C3 ::~S215C3(){ note_dtor("S215C3", this);}
void  S215C3 ::v110(){vfunc_called(this, "_ZN6S215C34v110Ev");}
void  S215C3 ::v111(){vfunc_called(this, "_ZN6S215C34v111Ev");}
void  S215C3 ::v112(){vfunc_called(this, "_ZN6S215C34v112Ev");}
void  S215C3 ::v113(){vfunc_called(this, "_ZN6S215C34v113Ev");}
void  S215C3 ::v114(){vfunc_called(this, "_ZN6S215C34v114Ev");}
void  S215C3 ::v115(){vfunc_called(this, "_ZN6S215C34v115Ev");}
void  S215C3 ::v116(){vfunc_called(this, "_ZN6S215C34v116Ev");}
void  S215C3 ::v117(){vfunc_called(this, "_ZN6S215C34v117Ev");}
void  S215C3 ::v118(){vfunc_called(this, "_ZN6S215C34v118Ev");}
void  S215C3 ::v119(){vfunc_called(this, "_ZN6S215C34v119Ev");}
void  S215C3 ::v120(){vfunc_called(this, "_ZN6S215C34v120Ev");}
void  S215C3 ::v121(){vfunc_called(this, "_ZN6S215C34v121Ev");}
void  S215C3 ::v122(){vfunc_called(this, "_ZN6S215C34v122Ev");}
void  S215C3 ::v123(){vfunc_called(this, "_ZN6S215C34v123Ev");}
S215C3 ::S215C3(){ note_ctor("S215C3", this);} // tgen

static void Test_S215C3()
{
  extern Class_Descriptor cd_S215C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(43,62)];
    init_test(&cd_S215C3, buf);
    S215C3 *dp, &lv = *(dp=new (buf) S215C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,244), "sizeof(S215C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S215C3)");
    check_base_class_offset(lv, (S215C6*)(S215C5*)(S215C4*), 0, "S215C3");
    check_base_class_offset(lv, (S215C5*)(S215C4*), 0, "S215C3");
    check_base_class_offset(lv, (S215C4*), 0, "S215C3");
    check_field_offset(lv, s215c3f0, ABISELECT(272,196), "S215C3.s215c3f0");
    check_field_offset(lv, s215c3f1, ABISELECT(288,204), "S215C3.s215c3f1");
    set_bf_and_test(lv, s215c3f2, ABISELECT(304,220), 0, 1, 1, "S215C3");
    set_bf_and_test(lv, s215c3f3, ABISELECT(304,220), 1, 1, 1, "S215C3");
    set_bf_and_test(lv, s215c3f4, ABISELECT(304,220), 2, 1, 1, "S215C3");
    check_field_offset(lv, s215c3f5, ABISELECT(305,221), "S215C3.s215c3f5");
    check_field_offset(lv, s215c3f6, ABISELECT(308,224), "S215C3.s215c3f6");
    set_bf_and_test(lv, s215c3f7, ABISELECT(312,228), 0, 1, 1, "S215C3");
    check_field_offset(lv, s215c3f8, ABISELECT(320,232), "S215C3.s215c3f8");
    test_class_info(&lv, &cd_S215C3);
    dp->~S215C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS215C3(Test_S215C3, "S215C3", ABISELECT(336,244));

#else // __cplusplus

extern void _ZN6S215C3C1Ev();
extern void _ZN6S215C3D1Ev();
Name_Map name_map_S215C3[] = {
  NSPAIR(_ZN6S215C3C1Ev),
  NSPAIR(_ZN6S215C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S215C6;
extern VTBL_ENTRY _ZTI6S215C6[];
extern  VTBL_ENTRY _ZTV6S215C6[];
extern Class_Descriptor cd_S215C5;
extern VTBL_ENTRY _ZTI6S215C5[];
extern  VTBL_ENTRY _ZTV6S215C5[];
extern Class_Descriptor cd_S215C4;
extern VTBL_ENTRY _ZTI6S215C4[];
extern  VTBL_ENTRY _ZTV6S215C4[];
static Base_Class bases_S215C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S215C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S215C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S215C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S215C3[];
extern void _ZN6S215C3D1Ev();
extern void _ZN6S215C3D0Ev();
extern void _ZN6S215C62v4Ev();
extern void _ZN6S215C62v5Ev();
extern void _ZN6S215C62v6Ev();
extern void _ZN6S215C62v7Ev();
extern void _ZN6S215C62v8Ev();
extern void _ZN6S215C62v9Ev();
extern void _ZN6S215C63v10Ev();
extern void _ZN6S215C63v11Ev();
extern void _ZN6S215C63v12Ev();
extern void _ZN6S215C63v13Ev();
extern void _ZN6S215C63v14Ev();
extern void _ZN6S215C63v15Ev();
extern void _ZN6S215C63v16Ev();
extern void _ZN6S215C63v17Ev();
extern void _ZN6S215C63v18Ev();
extern void _ZN6S215C63v19Ev();
extern void _ZN6S215C63v20Ev();
extern void _ZN6S215C63v21Ev();
extern void _ZN6S215C63v22Ev();
extern void _ZN6S215C63v23Ev();
extern void _ZN6S215C63v24Ev();
extern void _ZN6S215C63v25Ev();
extern void _ZN6S215C63v26Ev();
extern void _ZN6S215C63v27Ev();
extern void _ZN6S215C63v28Ev();
extern void _ZN6S215C63v29Ev();
extern void _ZN6S215C63v30Ev();
extern void _ZN6S215C63v31Ev();
extern void _ZN6S215C63v32Ev();
extern void _ZN6S215C63v33Ev();
extern void _ZN6S215C63v34Ev();
extern void _ZN6S215C63v35Ev();
extern void _ZN6S215C63v36Ev();
extern void _ZN6S215C63v37Ev();
extern void _ZN6S215C63v38Ev();
extern void _ZN6S215C63v39Ev();
extern void _ZN6S215C63v40Ev();
extern void _ZN6S215C63v41Ev();
extern void _ZN6S215C63v42Ev();
extern void _ZN6S215C63v43Ev();
extern void _ZN6S215C63v44Ev();
extern void _ZN6S215C63v45Ev();
extern void _ZN6S215C63v46Ev();
extern void _ZN6S215C63v47Ev();
extern void _ZN6S215C63v48Ev();
extern void _ZN6S215C63v49Ev();
extern void _ZN6S215C63v50Ev();
extern void _ZN6S215C63v51Ev();
extern void _ZN6S215C63v52Ev();
extern void _ZN6S215C63v53Ev();
extern void _ZN6S215C63v54Ev();
extern void _ZN6S215C63v55Ev();
extern void _ZN6S215C63v56Ev();
extern void _ZN6S215C63v57Ev();
extern void _ZN6S215C63v58Ev();
extern void _ZN6S215C63v59Ev();
extern void _ZN6S215C63v60Ev();
extern void _ZN6S215C63v61Ev();
extern void _ZN6S215C63v62Ev();
extern void _ZN6S215C63v63Ev();
extern void _ZN6S215C63v64Ev();
extern void _ZN6S215C63v65Ev();
extern void _ZN6S215C63v66Ev();
extern void _ZN6S215C63v67Ev();
extern void _ZN6S215C53v68Ev();
extern void _ZN6S215C53v69Ev();
extern void _ZN6S215C53v70Ev();
extern void _ZN6S215C53v71Ev();
extern void _ZN6S215C53v72Ev();
extern void _ZN6S215C53v73Ev();
extern void _ZN6S215C53v74Ev();
extern void _ZN6S215C53v75Ev();
extern void _ZN6S215C53v76Ev();
extern void _ZN6S215C53v77Ev();
extern void _ZN6S215C53v78Ev();
extern void _ZN6S215C53v79Ev();
extern void _ZN6S215C53v80Ev();
extern void _ZN6S215C53v81Ev();
extern void _ZN6S215C53v82Ev();
extern void _ZN6S215C53v83Ev();
extern void _ZN6S215C53v84Ev();
extern void _ZN6S215C53v85Ev();
extern void _ZN6S215C53v86Ev();
extern void _ZN6S215C53v87Ev();
extern void _ZN6S215C53v88Ev();
extern void _ZN6S215C53v89Ev();
extern void _ZN6S215C43v90Ev();
extern void _ZN6S215C43v91Ev();
extern void _ZN6S215C43v92Ev();
extern void _ZN6S215C43v93Ev();
extern void _ZN6S215C43v94Ev();
extern void _ZN6S215C43v95Ev();
extern void _ZN6S215C43v96Ev();
extern void _ZN6S215C43v97Ev();
extern void _ZN6S215C43v98Ev();
extern void _ZN6S215C43v99Ev();
extern void _ZN6S215C44v100Ev();
extern void _ZN6S215C44v101Ev();
extern void _ZN6S215C44v102Ev();
extern void _ZN6S215C44v103Ev();
extern void _ZN6S215C44v104Ev();
extern void _ZN6S215C44v105Ev();
extern void _ZN6S215C44v106Ev();
extern void _ZN6S215C44v107Ev();
extern void _ZN6S215C44v108Ev();
extern void _ZN6S215C44v109Ev();
extern void _ZN6S215C34v110Ev();
extern void _ZN6S215C34v111Ev();
extern void _ZN6S215C34v112Ev();
extern void _ZN6S215C34v113Ev();
extern void _ZN6S215C34v114Ev();
extern void _ZN6S215C34v115Ev();
extern void _ZN6S215C34v116Ev();
extern void _ZN6S215C34v117Ev();
extern void _ZN6S215C34v118Ev();
extern void _ZN6S215C34v119Ev();
extern void _ZN6S215C34v120Ev();
extern void _ZN6S215C34v121Ev();
extern void _ZN6S215C34v122Ev();
extern void _ZN6S215C34v123Ev();
static  VTBL_ENTRY vtc_S215C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S215C3[0]),
  (VTBL_ENTRY)&_ZN6S215C3D1Ev,
  (VTBL_ENTRY)&_ZN6S215C3D0Ev,
  (VTBL_ENTRY)&_ZN6S215C62v4Ev,
  (VTBL_ENTRY)&_ZN6S215C62v5Ev,
  (VTBL_ENTRY)&_ZN6S215C62v6Ev,
  (VTBL_ENTRY)&_ZN6S215C62v7Ev,
  (VTBL_ENTRY)&_ZN6S215C62v8Ev,
  (VTBL_ENTRY)&_ZN6S215C62v9Ev,
  (VTBL_ENTRY)&_ZN6S215C63v10Ev,
  (VTBL_ENTRY)&_ZN6S215C63v11Ev,
  (VTBL_ENTRY)&_ZN6S215C63v12Ev,
  (VTBL_ENTRY)&_ZN6S215C63v13Ev,
  (VTBL_ENTRY)&_ZN6S215C63v14Ev,
  (VTBL_ENTRY)&_ZN6S215C63v15Ev,
  (VTBL_ENTRY)&_ZN6S215C63v16Ev,
  (VTBL_ENTRY)&_ZN6S215C63v17Ev,
  (VTBL_ENTRY)&_ZN6S215C63v18Ev,
  (VTBL_ENTRY)&_ZN6S215C63v19Ev,
  (VTBL_ENTRY)&_ZN6S215C63v20Ev,
  (VTBL_ENTRY)&_ZN6S215C63v21Ev,
  (VTBL_ENTRY)&_ZN6S215C63v22Ev,
  (VTBL_ENTRY)&_ZN6S215C63v23Ev,
  (VTBL_ENTRY)&_ZN6S215C63v24Ev,
  (VTBL_ENTRY)&_ZN6S215C63v25Ev,
  (VTBL_ENTRY)&_ZN6S215C63v26Ev,
  (VTBL_ENTRY)&_ZN6S215C63v27Ev,
  (VTBL_ENTRY)&_ZN6S215C63v28Ev,
  (VTBL_ENTRY)&_ZN6S215C63v29Ev,
  (VTBL_ENTRY)&_ZN6S215C63v30Ev,
  (VTBL_ENTRY)&_ZN6S215C63v31Ev,
  (VTBL_ENTRY)&_ZN6S215C63v32Ev,
  (VTBL_ENTRY)&_ZN6S215C63v33Ev,
  (VTBL_ENTRY)&_ZN6S215C63v34Ev,
  (VTBL_ENTRY)&_ZN6S215C63v35Ev,
  (VTBL_ENTRY)&_ZN6S215C63v36Ev,
  (VTBL_ENTRY)&_ZN6S215C63v37Ev,
  (VTBL_ENTRY)&_ZN6S215C63v38Ev,
  (VTBL_ENTRY)&_ZN6S215C63v39Ev,
  (VTBL_ENTRY)&_ZN6S215C63v40Ev,
  (VTBL_ENTRY)&_ZN6S215C63v41Ev,
  (VTBL_ENTRY)&_ZN6S215C63v42Ev,
  (VTBL_ENTRY)&_ZN6S215C63v43Ev,
  (VTBL_ENTRY)&_ZN6S215C63v44Ev,
  (VTBL_ENTRY)&_ZN6S215C63v45Ev,
  (VTBL_ENTRY)&_ZN6S215C63v46Ev,
  (VTBL_ENTRY)&_ZN6S215C63v47Ev,
  (VTBL_ENTRY)&_ZN6S215C63v48Ev,
  (VTBL_ENTRY)&_ZN6S215C63v49Ev,
  (VTBL_ENTRY)&_ZN6S215C63v50Ev,
  (VTBL_ENTRY)&_ZN6S215C63v51Ev,
  (VTBL_ENTRY)&_ZN6S215C63v52Ev,
  (VTBL_ENTRY)&_ZN6S215C63v53Ev,
  (VTBL_ENTRY)&_ZN6S215C63v54Ev,
  (VTBL_ENTRY)&_ZN6S215C63v55Ev,
  (VTBL_ENTRY)&_ZN6S215C63v56Ev,
  (VTBL_ENTRY)&_ZN6S215C63v57Ev,
  (VTBL_ENTRY)&_ZN6S215C63v58Ev,
  (VTBL_ENTRY)&_ZN6S215C63v59Ev,
  (VTBL_ENTRY)&_ZN6S215C63v60Ev,
  (VTBL_ENTRY)&_ZN6S215C63v61Ev,
  (VTBL_ENTRY)&_ZN6S215C63v62Ev,
  (VTBL_ENTRY)&_ZN6S215C63v63Ev,
  (VTBL_ENTRY)&_ZN6S215C63v64Ev,
  (VTBL_ENTRY)&_ZN6S215C63v65Ev,
  (VTBL_ENTRY)&_ZN6S215C63v66Ev,
  (VTBL_ENTRY)&_ZN6S215C63v67Ev,
  (VTBL_ENTRY)&_ZN6S215C53v68Ev,
  (VTBL_ENTRY)&_ZN6S215C53v69Ev,
  (VTBL_ENTRY)&_ZN6S215C53v70Ev,
  (VTBL_ENTRY)&_ZN6S215C53v71Ev,
  (VTBL_ENTRY)&_ZN6S215C53v72Ev,
  (VTBL_ENTRY)&_ZN6S215C53v73Ev,
  (VTBL_ENTRY)&_ZN6S215C53v74Ev,
  (VTBL_ENTRY)&_ZN6S215C53v75Ev,
  (VTBL_ENTRY)&_ZN6S215C53v76Ev,
  (VTBL_ENTRY)&_ZN6S215C53v77Ev,
  (VTBL_ENTRY)&_ZN6S215C53v78Ev,
  (VTBL_ENTRY)&_ZN6S215C53v79Ev,
  (VTBL_ENTRY)&_ZN6S215C53v80Ev,
  (VTBL_ENTRY)&_ZN6S215C53v81Ev,
  (VTBL_ENTRY)&_ZN6S215C53v82Ev,
  (VTBL_ENTRY)&_ZN6S215C53v83Ev,
  (VTBL_ENTRY)&_ZN6S215C53v84Ev,
  (VTBL_ENTRY)&_ZN6S215C53v85Ev,
  (VTBL_ENTRY)&_ZN6S215C53v86Ev,
  (VTBL_ENTRY)&_ZN6S215C53v87Ev,
  (VTBL_ENTRY)&_ZN6S215C53v88Ev,
  (VTBL_ENTRY)&_ZN6S215C53v89Ev,
  (VTBL_ENTRY)&_ZN6S215C43v90Ev,
  (VTBL_ENTRY)&_ZN6S215C43v91Ev,
  (VTBL_ENTRY)&_ZN6S215C43v92Ev,
  (VTBL_ENTRY)&_ZN6S215C43v93Ev,
  (VTBL_ENTRY)&_ZN6S215C43v94Ev,
  (VTBL_ENTRY)&_ZN6S215C43v95Ev,
  (VTBL_ENTRY)&_ZN6S215C43v96Ev,
  (VTBL_ENTRY)&_ZN6S215C43v97Ev,
  (VTBL_ENTRY)&_ZN6S215C43v98Ev,
  (VTBL_ENTRY)&_ZN6S215C43v99Ev,
  (VTBL_ENTRY)&_ZN6S215C44v100Ev,
  (VTBL_ENTRY)&_ZN6S215C44v101Ev,
  (VTBL_ENTRY)&_ZN6S215C44v102Ev,
  (VTBL_ENTRY)&_ZN6S215C44v103Ev,
  (VTBL_ENTRY)&_ZN6S215C44v104Ev,
  (VTBL_ENTRY)&_ZN6S215C44v105Ev,
  (VTBL_ENTRY)&_ZN6S215C44v106Ev,
  (VTBL_ENTRY)&_ZN6S215C44v107Ev,
  (VTBL_ENTRY)&_ZN6S215C44v108Ev,
  (VTBL_ENTRY)&_ZN6S215C44v109Ev,
  (VTBL_ENTRY)&_ZN6S215C34v110Ev,
  (VTBL_ENTRY)&_ZN6S215C34v111Ev,
  (VTBL_ENTRY)&_ZN6S215C34v112Ev,
  (VTBL_ENTRY)&_ZN6S215C34v113Ev,
  (VTBL_ENTRY)&_ZN6S215C34v114Ev,
  (VTBL_ENTRY)&_ZN6S215C34v115Ev,
  (VTBL_ENTRY)&_ZN6S215C34v116Ev,
  (VTBL_ENTRY)&_ZN6S215C34v117Ev,
  (VTBL_ENTRY)&_ZN6S215C34v118Ev,
  (VTBL_ENTRY)&_ZN6S215C34v119Ev,
  (VTBL_ENTRY)&_ZN6S215C34v120Ev,
  (VTBL_ENTRY)&_ZN6S215C34v121Ev,
  (VTBL_ENTRY)&_ZN6S215C34v122Ev,
  (VTBL_ENTRY)&_ZN6S215C34v123Ev,
};
extern VTBL_ENTRY _ZTI6S215C3[];
extern  VTBL_ENTRY _ZTV6S215C3[];
Class_Descriptor cd_S215C3 = {  "S215C3", // class name
  bases_S215C3, 3,
  &(vtc_S215C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(336,244), // object size
  NSPAIRA(_ZTI6S215C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S215C3),124, //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  S215C2  : S215C3 {
  ::S287C19 s215c2f0;
  ::S287C19 s215c2f1;
  unsigned int s215c2f2:1;
  unsigned int s215c2f3:1;
  unsigned int s215c2f4:1;
  ::S287C9 s215c2f5;
  virtual  ~S215C2(); // _ZN6S215C2D1Ev
  virtual void  v124(); // _ZN6S215C24v124Ev
  virtual void  v125(); // _ZN6S215C24v125Ev
  virtual void  v126(); // _ZN6S215C24v126Ev
  virtual void  v127(); // _ZN6S215C24v127Ev
  virtual void  v128(); // _ZN6S215C24v128Ev
  S215C2(); // tgen
};
//SIG(-1 S215C2) C1{ BC2{ BC3{ BC4{ BC5{ vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 Fi[2] Fp Fi[2] FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} FC7 FC11{ m} FC7 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 Fi:1 Fi:1 Fi:1 FC12{ BC13{ BC10}} FC14{ BC15{ BC10}} FC16{ BC17{ BC10}} FC18{ BC19{ BC10}} Fi[3]} vd v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC20{ BC21{ BC10}}} vd v1 v2 v3 v4 v5 FC22{ BC23{ BC10}} FC22 Fi:1 Fi:1 Fi:1 FC8}


 S215C2 ::~S215C2(){ note_dtor("S215C2", this);}
void  S215C2 ::v124(){vfunc_called(this, "_ZN6S215C24v124Ev");}
void  S215C2 ::v125(){vfunc_called(this, "_ZN6S215C24v125Ev");}
void  S215C2 ::v126(){vfunc_called(this, "_ZN6S215C24v126Ev");}
void  S215C2 ::v127(){vfunc_called(this, "_ZN6S215C24v127Ev");}
void  S215C2 ::v128(){vfunc_called(this, "_ZN6S215C24v128Ev");}
S215C2 ::S215C2(){ note_ctor("S215C2", this);} // tgen

static void Test_S215C2()
{
  extern Class_Descriptor cd_S215C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(50,72)];
    init_test(&cd_S215C2, buf);
    S215C2 *dp, &lv = *(dp=new (buf) S215C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(392,284), "sizeof(S215C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S215C2)");
    check_base_class_offset(lv, (S215C6*)(S215C5*)(S215C4*)(S215C3*), 0, "S215C2");
    check_base_class_offset(lv, (S215C5*)(S215C4*)(S215C3*), 0, "S215C2");
    check_base_class_offset(lv, (S215C4*)(S215C3*), 0, "S215C2");
    check_base_class_offset(lv, (S215C3*), 0, "S215C2");
    check_field_offset(lv, s215c2f0, ABISELECT(336,244), "S215C2.s215c2f0");
    check_field_offset(lv, s215c2f1, ABISELECT(352,256), "S215C2.s215c2f1");
    set_bf_and_test(lv, s215c2f2, ABISELECT(368,268), 0, 1, 1, "S215C2");
    set_bf_and_test(lv, s215c2f3, ABISELECT(368,268), 1, 1, 1, "S215C2");
    set_bf_and_test(lv, s215c2f4, ABISELECT(368,268), 2, 1, 1, "S215C2");
    check_field_offset(lv, s215c2f5, ABISELECT(376,272), "S215C2.s215c2f5");
    test_class_info(&lv, &cd_S215C2);
    dp->~S215C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS215C2(Test_S215C2, "S215C2", ABISELECT(392,284));

#else // __cplusplus

extern void _ZN6S215C2C1Ev();
extern void _ZN6S215C2D1Ev();
Name_Map name_map_S215C2[] = {
  NSPAIR(_ZN6S215C2C1Ev),
  NSPAIR(_ZN6S215C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S215C6;
extern VTBL_ENTRY _ZTI6S215C6[];
extern  VTBL_ENTRY _ZTV6S215C6[];
extern Class_Descriptor cd_S215C5;
extern VTBL_ENTRY _ZTI6S215C5[];
extern  VTBL_ENTRY _ZTV6S215C5[];
extern Class_Descriptor cd_S215C4;
extern VTBL_ENTRY _ZTI6S215C4[];
extern  VTBL_ENTRY _ZTV6S215C4[];
extern Class_Descriptor cd_S215C3;
extern VTBL_ENTRY _ZTI6S215C3[];
extern  VTBL_ENTRY _ZTV6S215C3[];
static Base_Class bases_S215C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S215C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S215C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S215C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S215C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S215C2[];
extern void _ZN6S215C2D1Ev();
extern void _ZN6S215C2D0Ev();
extern void _ZN6S215C62v4Ev();
extern void _ZN6S215C62v5Ev();
extern void _ZN6S215C62v6Ev();
extern void _ZN6S215C62v7Ev();
extern void _ZN6S215C62v8Ev();
extern void _ZN6S215C62v9Ev();
extern void _ZN6S215C63v10Ev();
extern void _ZN6S215C63v11Ev();
extern void _ZN6S215C63v12Ev();
extern void _ZN6S215C63v13Ev();
extern void _ZN6S215C63v14Ev();
extern void _ZN6S215C63v15Ev();
extern void _ZN6S215C63v16Ev();
extern void _ZN6S215C63v17Ev();
extern void _ZN6S215C63v18Ev();
extern void _ZN6S215C63v19Ev();
extern void _ZN6S215C63v20Ev();
extern void _ZN6S215C63v21Ev();
extern void _ZN6S215C63v22Ev();
extern void _ZN6S215C63v23Ev();
extern void _ZN6S215C63v24Ev();
extern void _ZN6S215C63v25Ev();
extern void _ZN6S215C63v26Ev();
extern void _ZN6S215C63v27Ev();
extern void _ZN6S215C63v28Ev();
extern void _ZN6S215C63v29Ev();
extern void _ZN6S215C63v30Ev();
extern void _ZN6S215C63v31Ev();
extern void _ZN6S215C63v32Ev();
extern void _ZN6S215C63v33Ev();
extern void _ZN6S215C63v34Ev();
extern void _ZN6S215C63v35Ev();
extern void _ZN6S215C63v36Ev();
extern void _ZN6S215C63v37Ev();
extern void _ZN6S215C63v38Ev();
extern void _ZN6S215C63v39Ev();
extern void _ZN6S215C63v40Ev();
extern void _ZN6S215C63v41Ev();
extern void _ZN6S215C63v42Ev();
extern void _ZN6S215C63v43Ev();
extern void _ZN6S215C63v44Ev();
extern void _ZN6S215C63v45Ev();
extern void _ZN6S215C63v46Ev();
extern void _ZN6S215C63v47Ev();
extern void _ZN6S215C63v48Ev();
extern void _ZN6S215C63v49Ev();
extern void _ZN6S215C63v50Ev();
extern void _ZN6S215C63v51Ev();
extern void _ZN6S215C63v52Ev();
extern void _ZN6S215C63v53Ev();
extern void _ZN6S215C63v54Ev();
extern void _ZN6S215C63v55Ev();
extern void _ZN6S215C63v56Ev();
extern void _ZN6S215C63v57Ev();
extern void _ZN6S215C63v58Ev();
extern void _ZN6S215C63v59Ev();
extern void _ZN6S215C63v60Ev();
extern void _ZN6S215C63v61Ev();
extern void _ZN6S215C63v62Ev();
extern void _ZN6S215C63v63Ev();
extern void _ZN6S215C63v64Ev();
extern void _ZN6S215C63v65Ev();
extern void _ZN6S215C63v66Ev();
extern void _ZN6S215C63v67Ev();
extern void _ZN6S215C53v68Ev();
extern void _ZN6S215C53v69Ev();
extern void _ZN6S215C53v70Ev();
extern void _ZN6S215C53v71Ev();
extern void _ZN6S215C53v72Ev();
extern void _ZN6S215C53v73Ev();
extern void _ZN6S215C53v74Ev();
extern void _ZN6S215C53v75Ev();
extern void _ZN6S215C53v76Ev();
extern void _ZN6S215C53v77Ev();
extern void _ZN6S215C53v78Ev();
extern void _ZN6S215C53v79Ev();
extern void _ZN6S215C53v80Ev();
extern void _ZN6S215C53v81Ev();
extern void _ZN6S215C53v82Ev();
extern void _ZN6S215C53v83Ev();
extern void _ZN6S215C53v84Ev();
extern void _ZN6S215C53v85Ev();
extern void _ZN6S215C53v86Ev();
extern void _ZN6S215C53v87Ev();
extern void _ZN6S215C53v88Ev();
extern void _ZN6S215C53v89Ev();
extern void _ZN6S215C43v90Ev();
extern void _ZN6S215C43v91Ev();
extern void _ZN6S215C43v92Ev();
extern void _ZN6S215C43v93Ev();
extern void _ZN6S215C43v94Ev();
extern void _ZN6S215C43v95Ev();
extern void _ZN6S215C43v96Ev();
extern void _ZN6S215C43v97Ev();
extern void _ZN6S215C43v98Ev();
extern void _ZN6S215C43v99Ev();
extern void _ZN6S215C44v100Ev();
extern void _ZN6S215C44v101Ev();
extern void _ZN6S215C44v102Ev();
extern void _ZN6S215C44v103Ev();
extern void _ZN6S215C44v104Ev();
extern void _ZN6S215C44v105Ev();
extern void _ZN6S215C44v106Ev();
extern void _ZN6S215C44v107Ev();
extern void _ZN6S215C44v108Ev();
extern void _ZN6S215C44v109Ev();
extern void _ZN6S215C34v110Ev();
extern void _ZN6S215C34v111Ev();
extern void _ZN6S215C34v112Ev();
extern void _ZN6S215C34v113Ev();
extern void _ZN6S215C34v114Ev();
extern void _ZN6S215C34v115Ev();
extern void _ZN6S215C34v116Ev();
extern void _ZN6S215C34v117Ev();
extern void _ZN6S215C34v118Ev();
extern void _ZN6S215C34v119Ev();
extern void _ZN6S215C34v120Ev();
extern void _ZN6S215C34v121Ev();
extern void _ZN6S215C34v122Ev();
extern void _ZN6S215C34v123Ev();
extern void _ZN6S215C24v124Ev();
extern void _ZN6S215C24v125Ev();
extern void _ZN6S215C24v126Ev();
extern void _ZN6S215C24v127Ev();
extern void _ZN6S215C24v128Ev();
static  VTBL_ENTRY vtc_S215C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S215C2[0]),
  (VTBL_ENTRY)&_ZN6S215C2D1Ev,
  (VTBL_ENTRY)&_ZN6S215C2D0Ev,
  (VTBL_ENTRY)&_ZN6S215C62v4Ev,
  (VTBL_ENTRY)&_ZN6S215C62v5Ev,
  (VTBL_ENTRY)&_ZN6S215C62v6Ev,
  (VTBL_ENTRY)&_ZN6S215C62v7Ev,
  (VTBL_ENTRY)&_ZN6S215C62v8Ev,
  (VTBL_ENTRY)&_ZN6S215C62v9Ev,
  (VTBL_ENTRY)&_ZN6S215C63v10Ev,
  (VTBL_ENTRY)&_ZN6S215C63v11Ev,
  (VTBL_ENTRY)&_ZN6S215C63v12Ev,
  (VTBL_ENTRY)&_ZN6S215C63v13Ev,
  (VTBL_ENTRY)&_ZN6S215C63v14Ev,
  (VTBL_ENTRY)&_ZN6S215C63v15Ev,
  (VTBL_ENTRY)&_ZN6S215C63v16Ev,
  (VTBL_ENTRY)&_ZN6S215C63v17Ev,
  (VTBL_ENTRY)&_ZN6S215C63v18Ev,
  (VTBL_ENTRY)&_ZN6S215C63v19Ev,
  (VTBL_ENTRY)&_ZN6S215C63v20Ev,
  (VTBL_ENTRY)&_ZN6S215C63v21Ev,
  (VTBL_ENTRY)&_ZN6S215C63v22Ev,
  (VTBL_ENTRY)&_ZN6S215C63v23Ev,
  (VTBL_ENTRY)&_ZN6S215C63v24Ev,
  (VTBL_ENTRY)&_ZN6S215C63v25Ev,
  (VTBL_ENTRY)&_ZN6S215C63v26Ev,
  (VTBL_ENTRY)&_ZN6S215C63v27Ev,
  (VTBL_ENTRY)&_ZN6S215C63v28Ev,
  (VTBL_ENTRY)&_ZN6S215C63v29Ev,
  (VTBL_ENTRY)&_ZN6S215C63v30Ev,
  (VTBL_ENTRY)&_ZN6S215C63v31Ev,
  (VTBL_ENTRY)&_ZN6S215C63v32Ev,
  (VTBL_ENTRY)&_ZN6S215C63v33Ev,
  (VTBL_ENTRY)&_ZN6S215C63v34Ev,
  (VTBL_ENTRY)&_ZN6S215C63v35Ev,
  (VTBL_ENTRY)&_ZN6S215C63v36Ev,
  (VTBL_ENTRY)&_ZN6S215C63v37Ev,
  (VTBL_ENTRY)&_ZN6S215C63v38Ev,
  (VTBL_ENTRY)&_ZN6S215C63v39Ev,
  (VTBL_ENTRY)&_ZN6S215C63v40Ev,
  (VTBL_ENTRY)&_ZN6S215C63v41Ev,
  (VTBL_ENTRY)&_ZN6S215C63v42Ev,
  (VTBL_ENTRY)&_ZN6S215C63v43Ev,
  (VTBL_ENTRY)&_ZN6S215C63v44Ev,
  (VTBL_ENTRY)&_ZN6S215C63v45Ev,
  (VTBL_ENTRY)&_ZN6S215C63v46Ev,
  (VTBL_ENTRY)&_ZN6S215C63v47Ev,
  (VTBL_ENTRY)&_ZN6S215C63v48Ev,
  (VTBL_ENTRY)&_ZN6S215C63v49Ev,
  (VTBL_ENTRY)&_ZN6S215C63v50Ev,
  (VTBL_ENTRY)&_ZN6S215C63v51Ev,
  (VTBL_ENTRY)&_ZN6S215C63v52Ev,
  (VTBL_ENTRY)&_ZN6S215C63v53Ev,
  (VTBL_ENTRY)&_ZN6S215C63v54Ev,
  (VTBL_ENTRY)&_ZN6S215C63v55Ev,
  (VTBL_ENTRY)&_ZN6S215C63v56Ev,
  (VTBL_ENTRY)&_ZN6S215C63v57Ev,
  (VTBL_ENTRY)&_ZN6S215C63v58Ev,
  (VTBL_ENTRY)&_ZN6S215C63v59Ev,
  (VTBL_ENTRY)&_ZN6S215C63v60Ev,
  (VTBL_ENTRY)&_ZN6S215C63v61Ev,
  (VTBL_ENTRY)&_ZN6S215C63v62Ev,
  (VTBL_ENTRY)&_ZN6S215C63v63Ev,
  (VTBL_ENTRY)&_ZN6S215C63v64Ev,
  (VTBL_ENTRY)&_ZN6S215C63v65Ev,
  (VTBL_ENTRY)&_ZN6S215C63v66Ev,
  (VTBL_ENTRY)&_ZN6S215C63v67Ev,
  (VTBL_ENTRY)&_ZN6S215C53v68Ev,
  (VTBL_ENTRY)&_ZN6S215C53v69Ev,
  (VTBL_ENTRY)&_ZN6S215C53v70Ev,
  (VTBL_ENTRY)&_ZN6S215C53v71Ev,
  (VTBL_ENTRY)&_ZN6S215C53v72Ev,
  (VTBL_ENTRY)&_ZN6S215C53v73Ev,
  (VTBL_ENTRY)&_ZN6S215C53v74Ev,
  (VTBL_ENTRY)&_ZN6S215C53v75Ev,
  (VTBL_ENTRY)&_ZN6S215C53v76Ev,
  (VTBL_ENTRY)&_ZN6S215C53v77Ev,
  (VTBL_ENTRY)&_ZN6S215C53v78Ev,
  (VTBL_ENTRY)&_ZN6S215C53v79Ev,
  (VTBL_ENTRY)&_ZN6S215C53v80Ev,
  (VTBL_ENTRY)&_ZN6S215C53v81Ev,
  (VTBL_ENTRY)&_ZN6S215C53v82Ev,
  (VTBL_ENTRY)&_ZN6S215C53v83Ev,
  (VTBL_ENTRY)&_ZN6S215C53v84Ev,
  (VTBL_ENTRY)&_ZN6S215C53v85Ev,
  (VTBL_ENTRY)&_ZN6S215C53v86Ev,
  (VTBL_ENTRY)&_ZN6S215C53v87Ev,
  (VTBL_ENTRY)&_ZN6S215C53v88Ev,
  (VTBL_ENTRY)&_ZN6S215C53v89Ev,
  (VTBL_ENTRY)&_ZN6S215C43v90Ev,
  (VTBL_ENTRY)&_ZN6S215C43v91Ev,
  (VTBL_ENTRY)&_ZN6S215C43v92Ev,
  (VTBL_ENTRY)&_ZN6S215C43v93Ev,
  (VTBL_ENTRY)&_ZN6S215C43v94Ev,
  (VTBL_ENTRY)&_ZN6S215C43v95Ev,
  (VTBL_ENTRY)&_ZN6S215C43v96Ev,
  (VTBL_ENTRY)&_ZN6S215C43v97Ev,
  (VTBL_ENTRY)&_ZN6S215C43v98Ev,
  (VTBL_ENTRY)&_ZN6S215C43v99Ev,
  (VTBL_ENTRY)&_ZN6S215C44v100Ev,
  (VTBL_ENTRY)&_ZN6S215C44v101Ev,
  (VTBL_ENTRY)&_ZN6S215C44v102Ev,
  (VTBL_ENTRY)&_ZN6S215C44v103Ev,
  (VTBL_ENTRY)&_ZN6S215C44v104Ev,
  (VTBL_ENTRY)&_ZN6S215C44v105Ev,
  (VTBL_ENTRY)&_ZN6S215C44v106Ev,
  (VTBL_ENTRY)&_ZN6S215C44v107Ev,
  (VTBL_ENTRY)&_ZN6S215C44v108Ev,
  (VTBL_ENTRY)&_ZN6S215C44v109Ev,
  (VTBL_ENTRY)&_ZN6S215C34v110Ev,
  (VTBL_ENTRY)&_ZN6S215C34v111Ev,
  (VTBL_ENTRY)&_ZN6S215C34v112Ev,
  (VTBL_ENTRY)&_ZN6S215C34v113Ev,
  (VTBL_ENTRY)&_ZN6S215C34v114Ev,
  (VTBL_ENTRY)&_ZN6S215C34v115Ev,
  (VTBL_ENTRY)&_ZN6S215C34v116Ev,
  (VTBL_ENTRY)&_ZN6S215C34v117Ev,
  (VTBL_ENTRY)&_ZN6S215C34v118Ev,
  (VTBL_ENTRY)&_ZN6S215C34v119Ev,
  (VTBL_ENTRY)&_ZN6S215C34v120Ev,
  (VTBL_ENTRY)&_ZN6S215C34v121Ev,
  (VTBL_ENTRY)&_ZN6S215C34v122Ev,
  (VTBL_ENTRY)&_ZN6S215C34v123Ev,
  (VTBL_ENTRY)&_ZN6S215C24v124Ev,
  (VTBL_ENTRY)&_ZN6S215C24v125Ev,
  (VTBL_ENTRY)&_ZN6S215C24v126Ev,
  (VTBL_ENTRY)&_ZN6S215C24v127Ev,
  (VTBL_ENTRY)&_ZN6S215C24v128Ev,
};
extern VTBL_ENTRY _ZTI6S215C2[];
extern  VTBL_ENTRY _ZTV6S215C2[];
Class_Descriptor cd_S215C2 = {  "S215C2", // class name
  bases_S215C2, 4,
  &(vtc_S215C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(392,284), // object size
  NSPAIRA(_ZTI6S215C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S215C2),129, //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  S215C1  : S215C2 {
  unsigned int s215c1f0:1;
  virtual  ~S215C1(); // _ZN6S215C1D1Ev
  virtual void  v1(); // _ZN6S215C12v1Ev
  virtual void  v2(); // _ZN6S215C12v2Ev
  virtual void  v3(); // _ZN6S215C12v3Ev
  S215C1(); // tgen
};
//SIG(1 S215C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 Fi FL Fp[4] Fi[2] Fp FC7{ m Fi[2]} Fp[2]} vd v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 Fi[2] Fp Fi[2] FC8{ BC9{ BC10{ BC11{ m Fp Fi[2]}}}} FC8 FC12{ m} FC8 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 Fi:1 Fi:1 Fi:1 FC13{ BC14{ BC11}} FC15{ BC16{ BC11}} FC17{ BC18{ BC11}} FC19{ BC20{ BC11}} Fi[3]} vd v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC21{ BC22{ BC11}}} vd v124 v125 v126 v127 v128 FC23{ BC24{ BC11}} FC23 Fi:1 Fi:1 Fi:1 FC9} vd v1 v2 v3 Fi:1}


 S215C1 ::~S215C1(){ note_dtor("S215C1", this);}
void  S215C1 ::v1(){vfunc_called(this, "_ZN6S215C12v1Ev");}
void  S215C1 ::v2(){vfunc_called(this, "_ZN6S215C12v2Ev");}
void  S215C1 ::v3(){vfunc_called(this, "_ZN6S215C12v3Ev");}
S215C1 ::S215C1(){ note_ctor("S215C1", this);} // tgen

static void Test_S215C1()
{
  extern Class_Descriptor cd_S215C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(51,73)];
    init_test(&cd_S215C1, buf);
    S215C1 *dp, &lv = *(dp=new (buf) S215C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(400,288), "sizeof(S215C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S215C1)");
    check_base_class_offset(lv, (S215C6*)(S215C5*)(S215C4*)(S215C3*)(S215C2*), 0, "S215C1");
    check_base_class_offset(lv, (S215C5*)(S215C4*)(S215C3*)(S215C2*), 0, "S215C1");
    check_base_class_offset(lv, (S215C4*)(S215C3*)(S215C2*), 0, "S215C1");
    check_base_class_offset(lv, (S215C3*)(S215C2*), 0, "S215C1");
    check_base_class_offset(lv, (S215C2*), 0, "S215C1");
    set_bf_and_test(lv, s215c1f0, ABISELECT(392,284), 0, 1, 1, "S215C1");
    test_class_info(&lv, &cd_S215C1);
    dp->~S215C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS215C1(Test_S215C1, "S215C1", ABISELECT(400,288));

#else // __cplusplus

extern void _ZN6S215C1C1Ev();
extern void _ZN6S215C1D1Ev();
Name_Map name_map_S215C1[] = {
  NSPAIR(_ZN6S215C1C1Ev),
  NSPAIR(_ZN6S215C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S215C6;
extern VTBL_ENTRY _ZTI6S215C6[];
extern  VTBL_ENTRY _ZTV6S215C6[];
extern Class_Descriptor cd_S215C5;
extern VTBL_ENTRY _ZTI6S215C5[];
extern  VTBL_ENTRY _ZTV6S215C5[];
extern Class_Descriptor cd_S215C4;
extern VTBL_ENTRY _ZTI6S215C4[];
extern  VTBL_ENTRY _ZTV6S215C4[];
extern Class_Descriptor cd_S215C3;
extern VTBL_ENTRY _ZTI6S215C3[];
extern  VTBL_ENTRY _ZTV6S215C3[];
extern Class_Descriptor cd_S215C2;
extern VTBL_ENTRY _ZTI6S215C2[];
extern  VTBL_ENTRY _ZTV6S215C2[];
static Base_Class bases_S215C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S215C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S215C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S215C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S215C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S215C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S215C1[];
extern void _ZN6S215C1D1Ev();
extern void _ZN6S215C1D0Ev();
extern void _ZN6S215C62v4Ev();
extern void _ZN6S215C62v5Ev();
extern void _ZN6S215C62v6Ev();
extern void _ZN6S215C62v7Ev();
extern void _ZN6S215C62v8Ev();
extern void _ZN6S215C62v9Ev();
extern void _ZN6S215C63v10Ev();
extern void _ZN6S215C63v11Ev();
extern void _ZN6S215C63v12Ev();
extern void _ZN6S215C63v13Ev();
extern void _ZN6S215C63v14Ev();
extern void _ZN6S215C63v15Ev();
extern void _ZN6S215C63v16Ev();
extern void _ZN6S215C63v17Ev();
extern void _ZN6S215C63v18Ev();
extern void _ZN6S215C63v19Ev();
extern void _ZN6S215C63v20Ev();
extern void _ZN6S215C63v21Ev();
extern void _ZN6S215C63v22Ev();
extern void _ZN6S215C63v23Ev();
extern void _ZN6S215C63v24Ev();
extern void _ZN6S215C63v25Ev();
extern void _ZN6S215C63v26Ev();
extern void _ZN6S215C63v27Ev();
extern void _ZN6S215C63v28Ev();
extern void _ZN6S215C63v29Ev();
extern void _ZN6S215C63v30Ev();
extern void _ZN6S215C63v31Ev();
extern void _ZN6S215C63v32Ev();
extern void _ZN6S215C63v33Ev();
extern void _ZN6S215C63v34Ev();
extern void _ZN6S215C63v35Ev();
extern void _ZN6S215C63v36Ev();
extern void _ZN6S215C63v37Ev();
extern void _ZN6S215C63v38Ev();
extern void _ZN6S215C63v39Ev();
extern void _ZN6S215C63v40Ev();
extern void _ZN6S215C63v41Ev();
extern void _ZN6S215C63v42Ev();
extern void _ZN6S215C63v43Ev();
extern void _ZN6S215C63v44Ev();
extern void _ZN6S215C63v45Ev();
extern void _ZN6S215C63v46Ev();
extern void _ZN6S215C63v47Ev();
extern void _ZN6S215C63v48Ev();
extern void _ZN6S215C63v49Ev();
extern void _ZN6S215C63v50Ev();
extern void _ZN6S215C63v51Ev();
extern void _ZN6S215C63v52Ev();
extern void _ZN6S215C63v53Ev();
extern void _ZN6S215C63v54Ev();
extern void _ZN6S215C63v55Ev();
extern void _ZN6S215C63v56Ev();
extern void _ZN6S215C63v57Ev();
extern void _ZN6S215C63v58Ev();
extern void _ZN6S215C63v59Ev();
extern void _ZN6S215C63v60Ev();
extern void _ZN6S215C63v61Ev();
extern void _ZN6S215C63v62Ev();
extern void _ZN6S215C63v63Ev();
extern void _ZN6S215C63v64Ev();
extern void _ZN6S215C63v65Ev();
extern void _ZN6S215C63v66Ev();
extern void _ZN6S215C63v67Ev();
extern void _ZN6S215C53v68Ev();
extern void _ZN6S215C53v69Ev();
extern void _ZN6S215C53v70Ev();
extern void _ZN6S215C53v71Ev();
extern void _ZN6S215C53v72Ev();
extern void _ZN6S215C53v73Ev();
extern void _ZN6S215C53v74Ev();
extern void _ZN6S215C53v75Ev();
extern void _ZN6S215C53v76Ev();
extern void _ZN6S215C53v77Ev();
extern void _ZN6S215C53v78Ev();
extern void _ZN6S215C53v79Ev();
extern void _ZN6S215C53v80Ev();
extern void _ZN6S215C53v81Ev();
extern void _ZN6S215C53v82Ev();
extern void _ZN6S215C53v83Ev();
extern void _ZN6S215C53v84Ev();
extern void _ZN6S215C53v85Ev();
extern void _ZN6S215C53v86Ev();
extern void _ZN6S215C53v87Ev();
extern void _ZN6S215C53v88Ev();
extern void _ZN6S215C53v89Ev();
extern void _ZN6S215C43v90Ev();
extern void _ZN6S215C43v91Ev();
extern void _ZN6S215C43v92Ev();
extern void _ZN6S215C43v93Ev();
extern void _ZN6S215C43v94Ev();
extern void _ZN6S215C43v95Ev();
extern void _ZN6S215C43v96Ev();
extern void _ZN6S215C43v97Ev();
extern void _ZN6S215C43v98Ev();
extern void _ZN6S215C43v99Ev();
extern void _ZN6S215C44v100Ev();
extern void _ZN6S215C44v101Ev();
extern void _ZN6S215C44v102Ev();
extern void _ZN6S215C44v103Ev();
extern void _ZN6S215C44v104Ev();
extern void _ZN6S215C44v105Ev();
extern void _ZN6S215C44v106Ev();
extern void _ZN6S215C44v107Ev();
extern void _ZN6S215C44v108Ev();
extern void _ZN6S215C44v109Ev();
extern void _ZN6S215C34v110Ev();
extern void _ZN6S215C34v111Ev();
extern void _ZN6S215C34v112Ev();
extern void _ZN6S215C34v113Ev();
extern void _ZN6S215C34v114Ev();
extern void _ZN6S215C34v115Ev();
extern void _ZN6S215C34v116Ev();
extern void _ZN6S215C34v117Ev();
extern void _ZN6S215C34v118Ev();
extern void _ZN6S215C34v119Ev();
extern void _ZN6S215C34v120Ev();
extern void _ZN6S215C34v121Ev();
extern void _ZN6S215C34v122Ev();
extern void _ZN6S215C34v123Ev();
extern void _ZN6S215C24v124Ev();
extern void _ZN6S215C24v125Ev();
extern void _ZN6S215C24v126Ev();
extern void _ZN6S215C24v127Ev();
extern void _ZN6S215C24v128Ev();
extern void _ZN6S215C12v1Ev();
extern void _ZN6S215C12v2Ev();
extern void _ZN6S215C12v3Ev();
static  VTBL_ENTRY vtc_S215C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S215C1[0]),
  (VTBL_ENTRY)&_ZN6S215C1D1Ev,
  (VTBL_ENTRY)&_ZN6S215C1D0Ev,
  (VTBL_ENTRY)&_ZN6S215C62v4Ev,
  (VTBL_ENTRY)&_ZN6S215C62v5Ev,
  (VTBL_ENTRY)&_ZN6S215C62v6Ev,
  (VTBL_ENTRY)&_ZN6S215C62v7Ev,
  (VTBL_ENTRY)&_ZN6S215C62v8Ev,
  (VTBL_ENTRY)&_ZN6S215C62v9Ev,
  (VTBL_ENTRY)&_ZN6S215C63v10Ev,
  (VTBL_ENTRY)&_ZN6S215C63v11Ev,
  (VTBL_ENTRY)&_ZN6S215C63v12Ev,
  (VTBL_ENTRY)&_ZN6S215C63v13Ev,
  (VTBL_ENTRY)&_ZN6S215C63v14Ev,
  (VTBL_ENTRY)&_ZN6S215C63v15Ev,
  (VTBL_ENTRY)&_ZN6S215C63v16Ev,
  (VTBL_ENTRY)&_ZN6S215C63v17Ev,
  (VTBL_ENTRY)&_ZN6S215C63v18Ev,
  (VTBL_ENTRY)&_ZN6S215C63v19Ev,
  (VTBL_ENTRY)&_ZN6S215C63v20Ev,
  (VTBL_ENTRY)&_ZN6S215C63v21Ev,
  (VTBL_ENTRY)&_ZN6S215C63v22Ev,
  (VTBL_ENTRY)&_ZN6S215C63v23Ev,
  (VTBL_ENTRY)&_ZN6S215C63v24Ev,
  (VTBL_ENTRY)&_ZN6S215C63v25Ev,
  (VTBL_ENTRY)&_ZN6S215C63v26Ev,
  (VTBL_ENTRY)&_ZN6S215C63v27Ev,
  (VTBL_ENTRY)&_ZN6S215C63v28Ev,
  (VTBL_ENTRY)&_ZN6S215C63v29Ev,
  (VTBL_ENTRY)&_ZN6S215C63v30Ev,
  (VTBL_ENTRY)&_ZN6S215C63v31Ev,
  (VTBL_ENTRY)&_ZN6S215C63v32Ev,
  (VTBL_ENTRY)&_ZN6S215C63v33Ev,
  (VTBL_ENTRY)&_ZN6S215C63v34Ev,
  (VTBL_ENTRY)&_ZN6S215C63v35Ev,
  (VTBL_ENTRY)&_ZN6S215C63v36Ev,
  (VTBL_ENTRY)&_ZN6S215C63v37Ev,
  (VTBL_ENTRY)&_ZN6S215C63v38Ev,
  (VTBL_ENTRY)&_ZN6S215C63v39Ev,
  (VTBL_ENTRY)&_ZN6S215C63v40Ev,
  (VTBL_ENTRY)&_ZN6S215C63v41Ev,
  (VTBL_ENTRY)&_ZN6S215C63v42Ev,
  (VTBL_ENTRY)&_ZN6S215C63v43Ev,
  (VTBL_ENTRY)&_ZN6S215C63v44Ev,
  (VTBL_ENTRY)&_ZN6S215C63v45Ev,
  (VTBL_ENTRY)&_ZN6S215C63v46Ev,
  (VTBL_ENTRY)&_ZN6S215C63v47Ev,
  (VTBL_ENTRY)&_ZN6S215C63v48Ev,
  (VTBL_ENTRY)&_ZN6S215C63v49Ev,
  (VTBL_ENTRY)&_ZN6S215C63v50Ev,
  (VTBL_ENTRY)&_ZN6S215C63v51Ev,
  (VTBL_ENTRY)&_ZN6S215C63v52Ev,
  (VTBL_ENTRY)&_ZN6S215C63v53Ev,
  (VTBL_ENTRY)&_ZN6S215C63v54Ev,
  (VTBL_ENTRY)&_ZN6S215C63v55Ev,
  (VTBL_ENTRY)&_ZN6S215C63v56Ev,
  (VTBL_ENTRY)&_ZN6S215C63v57Ev,
  (VTBL_ENTRY)&_ZN6S215C63v58Ev,
  (VTBL_ENTRY)&_ZN6S215C63v59Ev,
  (VTBL_ENTRY)&_ZN6S215C63v60Ev,
  (VTBL_ENTRY)&_ZN6S215C63v61Ev,
  (VTBL_ENTRY)&_ZN6S215C63v62Ev,
  (VTBL_ENTRY)&_ZN6S215C63v63Ev,
  (VTBL_ENTRY)&_ZN6S215C63v64Ev,
  (VTBL_ENTRY)&_ZN6S215C63v65Ev,
  (VTBL_ENTRY)&_ZN6S215C63v66Ev,
  (VTBL_ENTRY)&_ZN6S215C63v67Ev,
  (VTBL_ENTRY)&_ZN6S215C53v68Ev,
  (VTBL_ENTRY)&_ZN6S215C53v69Ev,
  (VTBL_ENTRY)&_ZN6S215C53v70Ev,
  (VTBL_ENTRY)&_ZN6S215C53v71Ev,
  (VTBL_ENTRY)&_ZN6S215C53v72Ev,
  (VTBL_ENTRY)&_ZN6S215C53v73Ev,
  (VTBL_ENTRY)&_ZN6S215C53v74Ev,
  (VTBL_ENTRY)&_ZN6S215C53v75Ev,
  (VTBL_ENTRY)&_ZN6S215C53v76Ev,
  (VTBL_ENTRY)&_ZN6S215C53v77Ev,
  (VTBL_ENTRY)&_ZN6S215C53v78Ev,
  (VTBL_ENTRY)&_ZN6S215C53v79Ev,
  (VTBL_ENTRY)&_ZN6S215C53v80Ev,
  (VTBL_ENTRY)&_ZN6S215C53v81Ev,
  (VTBL_ENTRY)&_ZN6S215C53v82Ev,
  (VTBL_ENTRY)&_ZN6S215C53v83Ev,
  (VTBL_ENTRY)&_ZN6S215C53v84Ev,
  (VTBL_ENTRY)&_ZN6S215C53v85Ev,
  (VTBL_ENTRY)&_ZN6S215C53v86Ev,
  (VTBL_ENTRY)&_ZN6S215C53v87Ev,
  (VTBL_ENTRY)&_ZN6S215C53v88Ev,
  (VTBL_ENTRY)&_ZN6S215C53v89Ev,
  (VTBL_ENTRY)&_ZN6S215C43v90Ev,
  (VTBL_ENTRY)&_ZN6S215C43v91Ev,
  (VTBL_ENTRY)&_ZN6S215C43v92Ev,
  (VTBL_ENTRY)&_ZN6S215C43v93Ev,
  (VTBL_ENTRY)&_ZN6S215C43v94Ev,
  (VTBL_ENTRY)&_ZN6S215C43v95Ev,
  (VTBL_ENTRY)&_ZN6S215C43v96Ev,
  (VTBL_ENTRY)&_ZN6S215C43v97Ev,
  (VTBL_ENTRY)&_ZN6S215C43v98Ev,
  (VTBL_ENTRY)&_ZN6S215C43v99Ev,
  (VTBL_ENTRY)&_ZN6S215C44v100Ev,
  (VTBL_ENTRY)&_ZN6S215C44v101Ev,
  (VTBL_ENTRY)&_ZN6S215C44v102Ev,
  (VTBL_ENTRY)&_ZN6S215C44v103Ev,
  (VTBL_ENTRY)&_ZN6S215C44v104Ev,
  (VTBL_ENTRY)&_ZN6S215C44v105Ev,
  (VTBL_ENTRY)&_ZN6S215C44v106Ev,
  (VTBL_ENTRY)&_ZN6S215C44v107Ev,
  (VTBL_ENTRY)&_ZN6S215C44v108Ev,
  (VTBL_ENTRY)&_ZN6S215C44v109Ev,
  (VTBL_ENTRY)&_ZN6S215C34v110Ev,
  (VTBL_ENTRY)&_ZN6S215C34v111Ev,
  (VTBL_ENTRY)&_ZN6S215C34v112Ev,
  (VTBL_ENTRY)&_ZN6S215C34v113Ev,
  (VTBL_ENTRY)&_ZN6S215C34v114Ev,
  (VTBL_ENTRY)&_ZN6S215C34v115Ev,
  (VTBL_ENTRY)&_ZN6S215C34v116Ev,
  (VTBL_ENTRY)&_ZN6S215C34v117Ev,
  (VTBL_ENTRY)&_ZN6S215C34v118Ev,
  (VTBL_ENTRY)&_ZN6S215C34v119Ev,
  (VTBL_ENTRY)&_ZN6S215C34v120Ev,
  (VTBL_ENTRY)&_ZN6S215C34v121Ev,
  (VTBL_ENTRY)&_ZN6S215C34v122Ev,
  (VTBL_ENTRY)&_ZN6S215C34v123Ev,
  (VTBL_ENTRY)&_ZN6S215C24v124Ev,
  (VTBL_ENTRY)&_ZN6S215C24v125Ev,
  (VTBL_ENTRY)&_ZN6S215C24v126Ev,
  (VTBL_ENTRY)&_ZN6S215C24v127Ev,
  (VTBL_ENTRY)&_ZN6S215C24v128Ev,
  (VTBL_ENTRY)&_ZN6S215C12v1Ev,
  (VTBL_ENTRY)&_ZN6S215C12v2Ev,
  (VTBL_ENTRY)&_ZN6S215C12v3Ev,
};
extern VTBL_ENTRY _ZTI6S215C1[];
extern  VTBL_ENTRY _ZTV6S215C1[];
Class_Descriptor cd_S215C1 = {  "S215C1", // class name
  bases_S215C1, 5,
  &(vtc_S215C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(400,288), // object size
  NSPAIRA(_ZTI6S215C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S215C1),132, //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  S32C8  {
  int s32c8f0;
  __tsi64 s32c8f1;
  void *s32c8f2[4];
  int s32c8f3[2];
  void *s32c8f4;
  ::S3350C4_nt s32c8f5;
  void *s32c8f6[2];
  virtual  ~S32C8(); // _ZN5S32C8D1Ev
  virtual void  v4(); // _ZN5S32C82v4Ev
  virtual void  v5(); // _ZN5S32C82v5Ev
  virtual void  v6(); // _ZN5S32C82v6Ev
  virtual void  v7(); // _ZN5S32C82v7Ev
  virtual void  v8(); // _ZN5S32C82v8Ev
  virtual void  v9(); // _ZN5S32C82v9Ev
  virtual void  v10(); // _ZN5S32C83v10Ev
  virtual void  v11(); // _ZN5S32C83v11Ev
  virtual void  v12(); // _ZN5S32C83v12Ev
  virtual void  v13(); // _ZN5S32C83v13Ev
  virtual void  v14(); // _ZN5S32C83v14Ev
  virtual void  v15(); // _ZN5S32C83v15Ev
  virtual void  v16(); // _ZN5S32C83v16Ev
  virtual void  v17(); // _ZN5S32C83v17Ev
  virtual void  v18(); // _ZN5S32C83v18Ev
  virtual void  v19(); // _ZN5S32C83v19Ev
  virtual void  v20(); // _ZN5S32C83v20Ev
  virtual void  v21(); // _ZN5S32C83v21Ev
  virtual void  v22(); // _ZN5S32C83v22Ev
  virtual void  v23(); // _ZN5S32C83v23Ev
  virtual void  v24(); // _ZN5S32C83v24Ev
  virtual void  v25(); // _ZN5S32C83v25Ev
  virtual void  v26(); // _ZN5S32C83v26Ev
  virtual void  v27(); // _ZN5S32C83v27Ev
  virtual void  v28(); // _ZN5S32C83v28Ev
  virtual void  v29(); // _ZN5S32C83v29Ev
  virtual void  v30(); // _ZN5S32C83v30Ev
  virtual void  v31(); // _ZN5S32C83v31Ev
  virtual void  v32(); // _ZN5S32C83v32Ev
  virtual void  v33(); // _ZN5S32C83v33Ev
  virtual void  v34(); // _ZN5S32C83v34Ev
  virtual void  v35(); // _ZN5S32C83v35Ev
  virtual void  v36(); // _ZN5S32C83v36Ev
  virtual void  v37(); // _ZN5S32C83v37Ev
  virtual void  v38(); // _ZN5S32C83v38Ev
  virtual void  v39(); // _ZN5S32C83v39Ev
  virtual void  v40(); // _ZN5S32C83v40Ev
  virtual void  v41(); // _ZN5S32C83v41Ev
  virtual void  v42(); // _ZN5S32C83v42Ev
  virtual void  v43(); // _ZN5S32C83v43Ev
  virtual void  v44(); // _ZN5S32C83v44Ev
  virtual void  v45(); // _ZN5S32C83v45Ev
  virtual void  v46(); // _ZN5S32C83v46Ev
  virtual void  v47(); // _ZN5S32C83v47Ev
  virtual void  v48(); // _ZN5S32C83v48Ev
  virtual void  v49(); // _ZN5S32C83v49Ev
  virtual void  v50(); // _ZN5S32C83v50Ev
  virtual void  v51(); // _ZN5S32C83v51Ev
  virtual void  v52(); // _ZN5S32C83v52Ev
  virtual void  v53(); // _ZN5S32C83v53Ev
  virtual void  v54(); // _ZN5S32C83v54Ev
  virtual void  v55(); // _ZN5S32C83v55Ev
  virtual void  v56(); // _ZN5S32C83v56Ev
  virtual void  v57(); // _ZN5S32C83v57Ev
  virtual void  v58(); // _ZN5S32C83v58Ev
  virtual void  v59(); // _ZN5S32C83v59Ev
  virtual void  v60(); // _ZN5S32C83v60Ev
  virtual void  v61(); // _ZN5S32C83v61Ev
  virtual void  v62(); // _ZN5S32C83v62Ev
  virtual void  v63(); // _ZN5S32C83v63Ev
  virtual void  v64(); // _ZN5S32C83v64Ev
  virtual void  v65(); // _ZN5S32C83v65Ev
  virtual void  v66(); // _ZN5S32C83v66Ev
  virtual void  v67(); // _ZN5S32C83v67Ev
  S32C8(); // tgen
};
//SIG(-1 S32C8) 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]}


 S32C8 ::~S32C8(){ note_dtor("S32C8", this);}
void  S32C8 ::v4(){vfunc_called(this, "_ZN5S32C82v4Ev");}
void  S32C8 ::v5(){vfunc_called(this, "_ZN5S32C82v5Ev");}
void  S32C8 ::v6(){vfunc_called(this, "_ZN5S32C82v6Ev");}
void  S32C8 ::v7(){vfunc_called(this, "_ZN5S32C82v7Ev");}
void  S32C8 ::v8(){vfunc_called(this, "_ZN5S32C82v8Ev");}
void  S32C8 ::v9(){vfunc_called(this, "_ZN5S32C82v9Ev");}
void  S32C8 ::v10(){vfunc_called(this, "_ZN5S32C83v10Ev");}
void  S32C8 ::v11(){vfunc_called(this, "_ZN5S32C83v11Ev");}
void  S32C8 ::v12(){vfunc_called(this, "_ZN5S32C83v12Ev");}
void  S32C8 ::v13(){vfunc_called(this, "_ZN5S32C83v13Ev");}
void  S32C8 ::v14(){vfunc_called(this, "_ZN5S32C83v14Ev");}
void  S32C8 ::v15(){vfunc_called(this, "_ZN5S32C83v15Ev");}
void  S32C8 ::v16(){vfunc_called(this, "_ZN5S32C83v16Ev");}
void  S32C8 ::v17(){vfunc_called(this, "_ZN5S32C83v17Ev");}
void  S32C8 ::v18(){vfunc_called(this, "_ZN5S32C83v18Ev");}
void  S32C8 ::v19(){vfunc_called(this, "_ZN5S32C83v19Ev");}
void  S32C8 ::v20(){vfunc_called(this, "_ZN5S32C83v20Ev");}
void  S32C8 ::v21(){vfunc_called(this, "_ZN5S32C83v21Ev");}
void  S32C8 ::v22(){vfunc_called(this, "_ZN5S32C83v22Ev");}
void  S32C8 ::v23(){vfunc_called(this, "_ZN5S32C83v23Ev");}
void  S32C8 ::v24(){vfunc_called(this, "_ZN5S32C83v24Ev");}
void  S32C8 ::v25(){vfunc_called(this, "_ZN5S32C83v25Ev");}
void  S32C8 ::v26(){vfunc_called(this, "_ZN5S32C83v26Ev");}
void  S32C8 ::v27(){vfunc_called(this, "_ZN5S32C83v27Ev");}
void  S32C8 ::v28(){vfunc_called(this, "_ZN5S32C83v28Ev");}
void  S32C8 ::v29(){vfunc_called(this, "_ZN5S32C83v29Ev");}
void  S32C8 ::v30(){vfunc_called(this, "_ZN5S32C83v30Ev");}
void  S32C8 ::v31(){vfunc_called(this, "_ZN5S32C83v31Ev");}
void  S32C8 ::v32(){vfunc_called(this, "_ZN5S32C83v32Ev");}
void  S32C8 ::v33(){vfunc_called(this, "_ZN5S32C83v33Ev");}
void  S32C8 ::v34(){vfunc_called(this, "_ZN5S32C83v34Ev");}
void  S32C8 ::v35(){vfunc_called(this, "_ZN5S32C83v35Ev");}
void  S32C8 ::v36(){vfunc_called(this, "_ZN5S32C83v36Ev");}
void  S32C8 ::v37(){vfunc_called(this, "_ZN5S32C83v37Ev");}
void  S32C8 ::v38(){vfunc_called(this, "_ZN5S32C83v38Ev");}
void  S32C8 ::v39(){vfunc_called(this, "_ZN5S32C83v39Ev");}
void  S32C8 ::v40(){vfunc_called(this, "_ZN5S32C83v40Ev");}
void  S32C8 ::v41(){vfunc_called(this, "_ZN5S32C83v41Ev");}
void  S32C8 ::v42(){vfunc_called(this, "_ZN5S32C83v42Ev");}
void  S32C8 ::v43(){vfunc_called(this, "_ZN5S32C83v43Ev");}
void  S32C8 ::v44(){vfunc_called(this, "_ZN5S32C83v44Ev");}
void  S32C8 ::v45(){vfunc_called(this, "_ZN5S32C83v45Ev");}
void  S32C8 ::v46(){vfunc_called(this, "_ZN5S32C83v46Ev");}
void  S32C8 ::v47(){vfunc_called(this, "_ZN5S32C83v47Ev");}
void  S32C8 ::v48(){vfunc_called(this, "_ZN5S32C83v48Ev");}
void  S32C8 ::v49(){vfunc_called(this, "_ZN5S32C83v49Ev");}
void  S32C8 ::v50(){vfunc_called(this, "_ZN5S32C83v50Ev");}
void  S32C8 ::v51(){vfunc_called(this, "_ZN5S32C83v51Ev");}
void  S32C8 ::v52(){vfunc_called(this, "_ZN5S32C83v52Ev");}
void  S32C8 ::v53(){vfunc_called(this, "_ZN5S32C83v53Ev");}
void  S32C8 ::v54(){vfunc_called(this, "_ZN5S32C83v54Ev");}
void  S32C8 ::v55(){vfunc_called(this, "_ZN5S32C83v55Ev");}
void  S32C8 ::v56(){vfunc_called(this, "_ZN5S32C83v56Ev");}
void  S32C8 ::v57(){vfunc_called(this, "_ZN5S32C83v57Ev");}
void  S32C8 ::v58(){vfunc_called(this, "_ZN5S32C83v58Ev");}
void  S32C8 ::v59(){vfunc_called(this, "_ZN5S32C83v59Ev");}
void  S32C8 ::v60(){vfunc_called(this, "_ZN5S32C83v60Ev");}
void  S32C8 ::v61(){vfunc_called(this, "_ZN5S32C83v61Ev");}
void  S32C8 ::v62(){vfunc_called(this, "_ZN5S32C83v62Ev");}
void  S32C8 ::v63(){vfunc_called(this, "_ZN5S32C83v63Ev");}
void  S32C8 ::v64(){vfunc_called(this, "_ZN5S32C83v64Ev");}
void  S32C8 ::v65(){vfunc_called(this, "_ZN5S32C83v65Ev");}
void  S32C8 ::v66(){vfunc_called(this, "_ZN5S32C83v66Ev");}
void  S32C8 ::v67(){vfunc_called(this, "_ZN5S32C83v67Ev");}
S32C8 ::S32C8(){ note_ctor("S32C8", this);} // tgen

static void Test_S32C8()
{
  extern Class_Descriptor cd_S32C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S32C8, buf);
    S32C8 *dp, &lv = *(dp=new (buf) S32C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S32C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S32C8)");
    check_field_offset(lv, s32c8f0, ABISELECT(8,4), "S32C8.s32c8f0");
    check_field_offset(lv, s32c8f1, ABISELECT(16,8), "S32C8.s32c8f1");
    check_field_offset(lv, s32c8f2, ABISELECT(24,16), "S32C8.s32c8f2");
    check_field_offset(lv, s32c8f3, ABISELECT(56,32), "S32C8.s32c8f3");
    check_field_offset(lv, s32c8f4, ABISELECT(64,40), "S32C8.s32c8f4");
    check_field_offset(lv, s32c8f5, ABISELECT(72,44), "S32C8.s32c8f5");
    check_field_offset(lv, s32c8f6, ABISELECT(80,52), "S32C8.s32c8f6");
    test_class_info(&lv, &cd_S32C8);
    dp->~S32C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS32C8(Test_S32C8, "S32C8", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN5S32C8C1Ev();
extern void _ZN5S32C8D1Ev();
Name_Map name_map_S32C8[] = {
  NSPAIR(_ZN5S32C8C1Ev),
  NSPAIR(_ZN5S32C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI5S32C8[];
extern void _ZN5S32C8D1Ev();
extern void _ZN5S32C8D0Ev();
extern void _ZN5S32C82v4Ev();
extern void _ZN5S32C82v5Ev();
extern void _ZN5S32C82v6Ev();
extern void _ZN5S32C82v7Ev();
extern void _ZN5S32C82v8Ev();
extern void _ZN5S32C82v9Ev();
extern void _ZN5S32C83v10Ev();
extern void _ZN5S32C83v11Ev();
extern void _ZN5S32C83v12Ev();
extern void _ZN5S32C83v13Ev();
extern void _ZN5S32C83v14Ev();
extern void _ZN5S32C83v15Ev();
extern void _ZN5S32C83v16Ev();
extern void _ZN5S32C83v17Ev();
extern void _ZN5S32C83v18Ev();
extern void _ZN5S32C83v19Ev();
extern void _ZN5S32C83v20Ev();
extern void _ZN5S32C83v21Ev();
extern void _ZN5S32C83v22Ev();
extern void _ZN5S32C83v23Ev();
extern void _ZN5S32C83v24Ev();
extern void _ZN5S32C83v25Ev();
extern void _ZN5S32C83v26Ev();
extern void _ZN5S32C83v27Ev();
extern void _ZN5S32C83v28Ev();
extern void _ZN5S32C83v29Ev();
extern void _ZN5S32C83v30Ev();
extern void _ZN5S32C83v31Ev();
extern void _ZN5S32C83v32Ev();
extern void _ZN5S32C83v33Ev();
extern void _ZN5S32C83v34Ev();
extern void _ZN5S32C83v35Ev();
extern void _ZN5S32C83v36Ev();
extern void _ZN5S32C83v37Ev();
extern void _ZN5S32C83v38Ev();
extern void _ZN5S32C83v39Ev();
extern void _ZN5S32C83v40Ev();
extern void _ZN5S32C83v41Ev();
extern void _ZN5S32C83v42Ev();
extern void _ZN5S32C83v43Ev();
extern void _ZN5S32C83v44Ev();
extern void _ZN5S32C83v45Ev();
extern void _ZN5S32C83v46Ev();
extern void _ZN5S32C83v47Ev();
extern void _ZN5S32C83v48Ev();
extern void _ZN5S32C83v49Ev();
extern void _ZN5S32C83v50Ev();
extern void _ZN5S32C83v51Ev();
extern void _ZN5S32C83v52Ev();
extern void _ZN5S32C83v53Ev();
extern void _ZN5S32C83v54Ev();
extern void _ZN5S32C83v55Ev();
extern void _ZN5S32C83v56Ev();
extern void _ZN5S32C83v57Ev();
extern void _ZN5S32C83v58Ev();
extern void _ZN5S32C83v59Ev();
extern void _ZN5S32C83v60Ev();
extern void _ZN5S32C83v61Ev();
extern void _ZN5S32C83v62Ev();
extern void _ZN5S32C83v63Ev();
extern void _ZN5S32C83v64Ev();
extern void _ZN5S32C83v65Ev();
extern void _ZN5S32C83v66Ev();
extern void _ZN5S32C83v67Ev();
static  VTBL_ENTRY vtc_S32C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S32C8[0]),
  (VTBL_ENTRY)&_ZN5S32C8D1Ev,
  (VTBL_ENTRY)&_ZN5S32C8D0Ev,
  (VTBL_ENTRY)&_ZN5S32C82v4Ev,
  (VTBL_ENTRY)&_ZN5S32C82v5Ev,
  (VTBL_ENTRY)&_ZN5S32C82v6Ev,
  (VTBL_ENTRY)&_ZN5S32C82v7Ev,
  (VTBL_ENTRY)&_ZN5S32C82v8Ev,
  (VTBL_ENTRY)&_ZN5S32C82v9Ev,
  (VTBL_ENTRY)&_ZN5S32C83v10Ev,
  (VTBL_ENTRY)&_ZN5S32C83v11Ev,
  (VTBL_ENTRY)&_ZN5S32C83v12Ev,
  (VTBL_ENTRY)&_ZN5S32C83v13Ev,
  (VTBL_ENTRY)&_ZN5S32C83v14Ev,
  (VTBL_ENTRY)&_ZN5S32C83v15Ev,
  (VTBL_ENTRY)&_ZN5S32C83v16Ev,
  (VTBL_ENTRY)&_ZN5S32C83v17Ev,
  (VTBL_ENTRY)&_ZN5S32C83v18Ev,
  (VTBL_ENTRY)&_ZN5S32C83v19Ev,
  (VTBL_ENTRY)&_ZN5S32C83v20Ev,
  (VTBL_ENTRY)&_ZN5S32C83v21Ev,
  (VTBL_ENTRY)&_ZN5S32C83v22Ev,
  (VTBL_ENTRY)&_ZN5S32C83v23Ev,
  (VTBL_ENTRY)&_ZN5S32C83v24Ev,
  (VTBL_ENTRY)&_ZN5S32C83v25Ev,
  (VTBL_ENTRY)&_ZN5S32C83v26Ev,
  (VTBL_ENTRY)&_ZN5S32C83v27Ev,
  (VTBL_ENTRY)&_ZN5S32C83v28Ev,
  (VTBL_ENTRY)&_ZN5S32C83v29Ev,
  (VTBL_ENTRY)&_ZN5S32C83v30Ev,
  (VTBL_ENTRY)&_ZN5S32C83v31Ev,
  (VTBL_ENTRY)&_ZN5S32C83v32Ev,
  (VTBL_ENTRY)&_ZN5S32C83v33Ev,
  (VTBL_ENTRY)&_ZN5S32C83v34Ev,
  (VTBL_ENTRY)&_ZN5S32C83v35Ev,
  (VTBL_ENTRY)&_ZN5S32C83v36Ev,
  (VTBL_ENTRY)&_ZN5S32C83v37Ev,
  (VTBL_ENTRY)&_ZN5S32C83v38Ev,
  (VTBL_ENTRY)&_ZN5S32C83v39Ev,
  (VTBL_ENTRY)&_ZN5S32C83v40Ev,
  (VTBL_ENTRY)&_ZN5S32C83v41Ev,
  (VTBL_ENTRY)&_ZN5S32C83v42Ev,
  (VTBL_ENTRY)&_ZN5S32C83v43Ev,
  (VTBL_ENTRY)&_ZN5S32C83v44Ev,
  (VTBL_ENTRY)&_ZN5S32C83v45Ev,
  (VTBL_ENTRY)&_ZN5S32C83v46Ev,
  (VTBL_ENTRY)&_ZN5S32C83v47Ev,
  (VTBL_ENTRY)&_ZN5S32C83v48Ev,
  (VTBL_ENTRY)&_ZN5S32C83v49Ev,
  (VTBL_ENTRY)&_ZN5S32C83v50Ev,
  (VTBL_ENTRY)&_ZN5S32C83v51Ev,
  (VTBL_ENTRY)&_ZN5S32C83v52Ev,
  (VTBL_ENTRY)&_ZN5S32C83v53Ev,
  (VTBL_ENTRY)&_ZN5S32C83v54Ev,
  (VTBL_ENTRY)&_ZN5S32C83v55Ev,
  (VTBL_ENTRY)&_ZN5S32C83v56Ev,
  (VTBL_ENTRY)&_ZN5S32C83v57Ev,
  (VTBL_ENTRY)&_ZN5S32C83v58Ev,
  (VTBL_ENTRY)&_ZN5S32C83v59Ev,
  (VTBL_ENTRY)&_ZN5S32C83v60Ev,
  (VTBL_ENTRY)&_ZN5S32C83v61Ev,
  (VTBL_ENTRY)&_ZN5S32C83v62Ev,
  (VTBL_ENTRY)&_ZN5S32C83v63Ev,
  (VTBL_ENTRY)&_ZN5S32C83v64Ev,
  (VTBL_ENTRY)&_ZN5S32C83v65Ev,
  (VTBL_ENTRY)&_ZN5S32C83v66Ev,
  (VTBL_ENTRY)&_ZN5S32C83v67Ev,
};
extern VTBL_ENTRY _ZTI5S32C8[];
extern  VTBL_ENTRY _ZTV5S32C8[];
Class_Descriptor cd_S32C8 = {  "S32C8", // class name
  0,0,//no base classes
  &(vtc_S32C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI5S32C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV5S32C8),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  S32C7  : S32C8 {
  int s32c7f0[2];
  void *s32c7f1;
  int s32c7f2[2];
  ::S287C8_nt s32c7f3;
  ::S287C8_nt s32c7f4;
  ::S2121C38 s32c7f5;
  ::S287C8_nt s32c7f6;
  unsigned int s32c7f7:1;
  unsigned int s32c7f8:1;
  unsigned int s32c7f9:1;
  unsigned int s32c7f10:1;
  unsigned int s32c7f11:1;
  int s32c7f12[2];
  virtual  ~S32C7(); // _ZN5S32C7D1Ev
  virtual void  v68(); // _ZN5S32C73v68Ev
  virtual void  v69(); // _ZN5S32C73v69Ev
  virtual void  v70(); // _ZN5S32C73v70Ev
  virtual void  v71(); // _ZN5S32C73v71Ev
  virtual void  v72(); // _ZN5S32C73v72Ev
  virtual void  v73(); // _ZN5S32C73v73Ev
  virtual void  v74(); // _ZN5S32C73v74Ev
  virtual void  v75(); // _ZN5S32C73v75Ev
  virtual void  v76(); // _ZN5S32C73v76Ev
  virtual void  v77(); // _ZN5S32C73v77Ev
  virtual void  v78(); // _ZN5S32C73v78Ev
  virtual void  v79(); // _ZN5S32C73v79Ev
  virtual void  v80(); // _ZN5S32C73v80Ev
  virtual void  v81(); // _ZN5S32C73v81Ev
  virtual void  v82(); // _ZN5S32C73v82Ev
  virtual void  v83(); // _ZN5S32C73v83Ev
  virtual void  v84(); // _ZN5S32C73v84Ev
  virtual void  v85(); // _ZN5S32C73v85Ev
  virtual void  v86(); // _ZN5S32C73v86Ev
  virtual void  v87(); // _ZN5S32C73v87Ev
  virtual void  v88(); // _ZN5S32C73v88Ev
  virtual void  v89(); // _ZN5S32C73v89Ev
  S32C7(); // tgen
};
//SIG(-1 S32C7) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S32C7 ::~S32C7(){ note_dtor("S32C7", this);}
void  S32C7 ::v68(){vfunc_called(this, "_ZN5S32C73v68Ev");}
void  S32C7 ::v69(){vfunc_called(this, "_ZN5S32C73v69Ev");}
void  S32C7 ::v70(){vfunc_called(this, "_ZN5S32C73v70Ev");}
void  S32C7 ::v71(){vfunc_called(this, "_ZN5S32C73v71Ev");}
void  S32C7 ::v72(){vfunc_called(this, "_ZN5S32C73v72Ev");}
void  S32C7 ::v73(){vfunc_called(this, "_ZN5S32C73v73Ev");}
void  S32C7 ::v74(){vfunc_called(this, "_ZN5S32C73v74Ev");}
void  S32C7 ::v75(){vfunc_called(this, "_ZN5S32C73v75Ev");}
void  S32C7 ::v76(){vfunc_called(this, "_ZN5S32C73v76Ev");}
void  S32C7 ::v77(){vfunc_called(this, "_ZN5S32C73v77Ev");}
void  S32C7 ::v78(){vfunc_called(this, "_ZN5S32C73v78Ev");}
void  S32C7 ::v79(){vfunc_called(this, "_ZN5S32C73v79Ev");}
void  S32C7 ::v80(){vfunc_called(this, "_ZN5S32C73v80Ev");}
void  S32C7 ::v81(){vfunc_called(this, "_ZN5S32C73v81Ev");}
void  S32C7 ::v82(){vfunc_called(this, "_ZN5S32C73v82Ev");}
void  S32C7 ::v83(){vfunc_called(this, "_ZN5S32C73v83Ev");}
void  S32C7 ::v84(){vfunc_called(this, "_ZN5S32C73v84Ev");}
void  S32C7 ::v85(){vfunc_called(this, "_ZN5S32C73v85Ev");}
void  S32C7 ::v86(){vfunc_called(this, "_ZN5S32C73v86Ev");}
void  S32C7 ::v87(){vfunc_called(this, "_ZN5S32C73v87Ev");}
void  S32C7 ::v88(){vfunc_called(this, "_ZN5S32C73v88Ev");}
void  S32C7 ::v89(){vfunc_called(this, "_ZN5S32C73v89Ev");}
S32C7 ::S32C7(){ note_ctor("S32C7", this);} // tgen

static void Test_S32C7()
{
  extern Class_Descriptor cd_S32C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S32C7, buf);
    S32C7 *dp, &lv = *(dp=new (buf) S32C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S32C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S32C7)");
    check_base_class_offset(lv, (S32C8*), 0, "S32C7");
    check_field_offset(lv, s32c7f0, ABISELECT(96,60), "S32C7.s32c7f0");
    check_field_offset(lv, s32c7f1, ABISELECT(104,68), "S32C7.s32c7f1");
    check_field_offset(lv, s32c7f2, ABISELECT(112,72), "S32C7.s32c7f2");
    check_field_offset(lv, s32c7f3, ABISELECT(120,80), "S32C7.s32c7f3");
    check_field_offset(lv, s32c7f4, ABISELECT(136,92), "S32C7.s32c7f4");
    check_field_offset(lv, s32c7f5, ABISELECT(152,104), "S32C7.s32c7f5");
    check_field_offset(lv, s32c7f6, ABISELECT(160,108), "S32C7.s32c7f6");
    set_bf_and_test(lv, s32c7f7, ABISELECT(176,120), 0, 1, 1, "S32C7");
    set_bf_and_test(lv, s32c7f8, ABISELECT(176,120), 1, 1, 1, "S32C7");
    set_bf_and_test(lv, s32c7f9, ABISELECT(176,120), 2, 1, 1, "S32C7");
    set_bf_and_test(lv, s32c7f10, ABISELECT(176,120), 3, 1, 1, "S32C7");
    set_bf_and_test(lv, s32c7f11, ABISELECT(176,120), 4, 1, 1, "S32C7");
    check_field_offset(lv, s32c7f12, ABISELECT(180,124), "S32C7.s32c7f12");
    test_class_info(&lv, &cd_S32C7);
    dp->~S32C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS32C7(Test_S32C7, "S32C7", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN5S32C7C1Ev();
extern void _ZN5S32C7D1Ev();
Name_Map name_map_S32C7[] = {
  NSPAIR(_ZN5S32C7C1Ev),
  NSPAIR(_ZN5S32C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S32C8;
extern VTBL_ENTRY _ZTI5S32C8[];
extern  VTBL_ENTRY _ZTV5S32C8[];
static Base_Class bases_S32C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S32C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI5S32C7[];
extern void _ZN5S32C7D1Ev();
extern void _ZN5S32C7D0Ev();
extern void _ZN5S32C82v4Ev();
extern void _ZN5S32C82v5Ev();
extern void _ZN5S32C82v6Ev();
extern void _ZN5S32C82v7Ev();
extern void _ZN5S32C82v8Ev();
extern void _ZN5S32C82v9Ev();
extern void _ZN5S32C83v10Ev();
extern void _ZN5S32C83v11Ev();
extern void _ZN5S32C83v12Ev();
extern void _ZN5S32C83v13Ev();
extern void _ZN5S32C83v14Ev();
extern void _ZN5S32C83v15Ev();
extern void _ZN5S32C83v16Ev();
extern void _ZN5S32C83v17Ev();
extern void _ZN5S32C83v18Ev();
extern void _ZN5S32C83v19Ev();
extern void _ZN5S32C83v20Ev();
extern void _ZN5S32C83v21Ev();
extern void _ZN5S32C83v22Ev();
extern void _ZN5S32C83v23Ev();
extern void _ZN5S32C83v24Ev();
extern void _ZN5S32C83v25Ev();
extern void _ZN5S32C83v26Ev();
extern void _ZN5S32C83v27Ev();
extern void _ZN5S32C83v28Ev();
extern void _ZN5S32C83v29Ev();
extern void _ZN5S32C83v30Ev();
extern void _ZN5S32C83v31Ev();
extern void _ZN5S32C83v32Ev();
extern void _ZN5S32C83v33Ev();
extern void _ZN5S32C83v34Ev();
extern void _ZN5S32C83v35Ev();
extern void _ZN5S32C83v36Ev();
extern void _ZN5S32C83v37Ev();
extern void _ZN5S32C83v38Ev();
extern void _ZN5S32C83v39Ev();
extern void _ZN5S32C83v40Ev();
extern void _ZN5S32C83v41Ev();
extern void _ZN5S32C83v42Ev();
extern void _ZN5S32C83v43Ev();
extern void _ZN5S32C83v44Ev();
extern void _ZN5S32C83v45Ev();
extern void _ZN5S32C83v46Ev();
extern void _ZN5S32C83v47Ev();
extern void _ZN5S32C83v48Ev();
extern void _ZN5S32C83v49Ev();
extern void _ZN5S32C83v50Ev();
extern void _ZN5S32C83v51Ev();
extern void _ZN5S32C83v52Ev();
extern void _ZN5S32C83v53Ev();
extern void _ZN5S32C83v54Ev();
extern void _ZN5S32C83v55Ev();
extern void _ZN5S32C83v56Ev();
extern void _ZN5S32C83v57Ev();
extern void _ZN5S32C83v58Ev();
extern void _ZN5S32C83v59Ev();
extern void _ZN5S32C83v60Ev();
extern void _ZN5S32C83v61Ev();
extern void _ZN5S32C83v62Ev();
extern void _ZN5S32C83v63Ev();
extern void _ZN5S32C83v64Ev();
extern void _ZN5S32C83v65Ev();
extern void _ZN5S32C83v66Ev();
extern void _ZN5S32C83v67Ev();
extern void _ZN5S32C73v68Ev();
extern void _ZN5S32C73v69Ev();
extern void _ZN5S32C73v70Ev();
extern void _ZN5S32C73v71Ev();
extern void _ZN5S32C73v72Ev();
extern void _ZN5S32C73v73Ev();
extern void _ZN5S32C73v74Ev();
extern void _ZN5S32C73v75Ev();
extern void _ZN5S32C73v76Ev();
extern void _ZN5S32C73v77Ev();
extern void _ZN5S32C73v78Ev();
extern void _ZN5S32C73v79Ev();
extern void _ZN5S32C73v80Ev();
extern void _ZN5S32C73v81Ev();
extern void _ZN5S32C73v82Ev();
extern void _ZN5S32C73v83Ev();
extern void _ZN5S32C73v84Ev();
extern void _ZN5S32C73v85Ev();
extern void _ZN5S32C73v86Ev();
extern void _ZN5S32C73v87Ev();
extern void _ZN5S32C73v88Ev();
extern void _ZN5S32C73v89Ev();
static  VTBL_ENTRY vtc_S32C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S32C7[0]),
  (VTBL_ENTRY)&_ZN5S32C7D1Ev,
  (VTBL_ENTRY)&_ZN5S32C7D0Ev,
  (VTBL_ENTRY)&_ZN5S32C82v4Ev,
  (VTBL_ENTRY)&_ZN5S32C82v5Ev,
  (VTBL_ENTRY)&_ZN5S32C82v6Ev,
  (VTBL_ENTRY)&_ZN5S32C82v7Ev,
  (VTBL_ENTRY)&_ZN5S32C82v8Ev,
  (VTBL_ENTRY)&_ZN5S32C82v9Ev,
  (VTBL_ENTRY)&_ZN5S32C83v10Ev,
  (VTBL_ENTRY)&_ZN5S32C83v11Ev,
  (VTBL_ENTRY)&_ZN5S32C83v12Ev,
  (VTBL_ENTRY)&_ZN5S32C83v13Ev,
  (VTBL_ENTRY)&_ZN5S32C83v14Ev,
  (VTBL_ENTRY)&_ZN5S32C83v15Ev,
  (VTBL_ENTRY)&_ZN5S32C83v16Ev,
  (VTBL_ENTRY)&_ZN5S32C83v17Ev,
  (VTBL_ENTRY)&_ZN5S32C83v18Ev,
  (VTBL_ENTRY)&_ZN5S32C83v19Ev,
  (VTBL_ENTRY)&_ZN5S32C83v20Ev,
  (VTBL_ENTRY)&_ZN5S32C83v21Ev,
  (VTBL_ENTRY)&_ZN5S32C83v22Ev,
  (VTBL_ENTRY)&_ZN5S32C83v23Ev,
  (VTBL_ENTRY)&_ZN5S32C83v24Ev,
  (VTBL_ENTRY)&_ZN5S32C83v25Ev,
  (VTBL_ENTRY)&_ZN5S32C83v26Ev,
  (VTBL_ENTRY)&_ZN5S32C83v27Ev,
  (VTBL_ENTRY)&_ZN5S32C83v28Ev,
  (VTBL_ENTRY)&_ZN5S32C83v29Ev,
  (VTBL_ENTRY)&_ZN5S32C83v30Ev,
  (VTBL_ENTRY)&_ZN5S32C83v31Ev,
  (VTBL_ENTRY)&_ZN5S32C83v32Ev,
  (VTBL_ENTRY)&_ZN5S32C83v33Ev,
  (VTBL_ENTRY)&_ZN5S32C83v34Ev,
  (VTBL_ENTRY)&_ZN5S32C83v35Ev,
  (VTBL_ENTRY)&_ZN5S32C83v36Ev,
  (VTBL_ENTRY)&_ZN5S32C83v37Ev,
  (VTBL_ENTRY)&_ZN5S32C83v38Ev,
  (VTBL_ENTRY)&_ZN5S32C83v39Ev,
  (VTBL_ENTRY)&_ZN5S32C83v40Ev,
  (VTBL_ENTRY)&_ZN5S32C83v41Ev,
  (VTBL_ENTRY)&_ZN5S32C83v42Ev,
  (VTBL_ENTRY)&_ZN5S32C83v43Ev,
  (VTBL_ENTRY)&_ZN5S32C83v44Ev,
  (VTBL_ENTRY)&_ZN5S32C83v45Ev,
  (VTBL_ENTRY)&_ZN5S32C83v46Ev,
  (VTBL_ENTRY)&_ZN5S32C83v47Ev,
  (VTBL_ENTRY)&_ZN5S32C83v48Ev,
  (VTBL_ENTRY)&_ZN5S32C83v49Ev,
  (VTBL_ENTRY)&_ZN5S32C83v50Ev,
  (VTBL_ENTRY)&_ZN5S32C83v51Ev,
  (VTBL_ENTRY)&_ZN5S32C83v52Ev,
  (VTBL_ENTRY)&_ZN5S32C83v53Ev,
  (VTBL_ENTRY)&_ZN5S32C83v54Ev,
  (VTBL_ENTRY)&_ZN5S32C83v55Ev,
  (VTBL_ENTRY)&_ZN5S32C83v56Ev,
  (VTBL_ENTRY)&_ZN5S32C83v57Ev,
  (VTBL_ENTRY)&_ZN5S32C83v58Ev,
  (VTBL_ENTRY)&_ZN5S32C83v59Ev,
  (VTBL_ENTRY)&_ZN5S32C83v60Ev,
  (VTBL_ENTRY)&_ZN5S32C83v61Ev,
  (VTBL_ENTRY)&_ZN5S32C83v62Ev,
  (VTBL_ENTRY)&_ZN5S32C83v63Ev,
  (VTBL_ENTRY)&_ZN5S32C83v64Ev,
  (VTBL_ENTRY)&_ZN5S32C83v65Ev,
  (VTBL_ENTRY)&_ZN5S32C83v66Ev,
  (VTBL_ENTRY)&_ZN5S32C83v67Ev,
  (VTBL_ENTRY)&_ZN5S32C73v68Ev,
  (VTBL_ENTRY)&_ZN5S32C73v69Ev,
  (VTBL_ENTRY)&_ZN5S32C73v70Ev,
  (VTBL_ENTRY)&_ZN5S32C73v71Ev,
  (VTBL_ENTRY)&_ZN5S32C73v72Ev,
  (VTBL_ENTRY)&_ZN5S32C73v73Ev,
  (VTBL_ENTRY)&_ZN5S32C73v74Ev,
  (VTBL_ENTRY)&_ZN5S32C73v75Ev,
  (VTBL_ENTRY)&_ZN5S32C73v76Ev,
  (VTBL_ENTRY)&_ZN5S32C73v77Ev,
  (VTBL_ENTRY)&_ZN5S32C73v78Ev,
  (VTBL_ENTRY)&_ZN5S32C73v79Ev,
  (VTBL_ENTRY)&_ZN5S32C73v80Ev,
  (VTBL_ENTRY)&_ZN5S32C73v81Ev,
  (VTBL_ENTRY)&_ZN5S32C73v82Ev,
  (VTBL_ENTRY)&_ZN5S32C73v83Ev,
  (VTBL_ENTRY)&_ZN5S32C73v84Ev,
  (VTBL_ENTRY)&_ZN5S32C73v85Ev,
  (VTBL_ENTRY)&_ZN5S32C73v86Ev,
  (VTBL_ENTRY)&_ZN5S32C73v87Ev,
  (VTBL_ENTRY)&_ZN5S32C73v88Ev,
  (VTBL_ENTRY)&_ZN5S32C73v89Ev,
};
extern VTBL_ENTRY _ZTI5S32C7[];
extern  VTBL_ENTRY _ZTV5S32C7[];
Class_Descriptor cd_S32C7 = {  "S32C7", // class name
  bases_S32C7, 1,
  &(vtc_S32C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI5S32C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S32C7),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S32C6  : S32C7 {
  unsigned int s32c6f0:1;
  unsigned int s32c6f1:1;
  unsigned int s32c6f2:1;
  ::S3350C17 s32c6f3;
  ::S3350C11 s32c6f4;
  ::S3350C5_nt s32c6f5;
  ::S287C27 s32c6f6;
  int s32c6f7[3];
  virtual  ~S32C6(); // _ZN5S32C6D1Ev
  virtual void  v90(); // _ZN5S32C63v90Ev
  virtual void  v91(); // _ZN5S32C63v91Ev
  virtual void  v92(); // _ZN5S32C63v92Ev
  virtual void  v93(); // _ZN5S32C63v93Ev
  virtual void  v94(); // _ZN5S32C63v94Ev
  virtual void  v95(); // _ZN5S32C63v95Ev
  virtual void  v96(); // _ZN5S32C63v96Ev
  virtual void  v97(); // _ZN5S32C63v97Ev
  virtual void  v98(); // _ZN5S32C63v98Ev
  virtual void  v99(); // _ZN5S32C63v99Ev
  virtual void  v100(); // _ZN5S32C64v100Ev
  virtual void  v101(); // _ZN5S32C64v101Ev
  virtual void  v102(); // _ZN5S32C64v102Ev
  virtual void  v103(); // _ZN5S32C64v103Ev
  virtual void  v104(); // _ZN5S32C64v104Ev
  virtual void  v105(); // _ZN5S32C64v105Ev
  virtual void  v106(); // _ZN5S32C64v106Ev
  virtual void  v107(); // _ZN5S32C64v107Ev
  virtual void  v108(); // _ZN5S32C64v108Ev
  virtual void  v109(); // _ZN5S32C64v109Ev
  S32C6(); // tgen
};
//SIG(-1 S32C6) C1{ BC2{ BC3{ vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 FC10{ BC11{ BC8}} FC12{ BC13{ BC8}} FC14{ BC15{ BC8}} FC16{ BC17{ BC8}} Fi[3]}


 S32C6 ::~S32C6(){ note_dtor("S32C6", this);}
void  S32C6 ::v90(){vfunc_called(this, "_ZN5S32C63v90Ev");}
void  S32C6 ::v91(){vfunc_called(this, "_ZN5S32C63v91Ev");}
void  S32C6 ::v92(){vfunc_called(this, "_ZN5S32C63v92Ev");}
void  S32C6 ::v93(){vfunc_called(this, "_ZN5S32C63v93Ev");}
void  S32C6 ::v94(){vfunc_called(this, "_ZN5S32C63v94Ev");}
void  S32C6 ::v95(){vfunc_called(this, "_ZN5S32C63v95Ev");}
void  S32C6 ::v96(){vfunc_called(this, "_ZN5S32C63v96Ev");}
void  S32C6 ::v97(){vfunc_called(this, "_ZN5S32C63v97Ev");}
void  S32C6 ::v98(){vfunc_called(this, "_ZN5S32C63v98Ev");}
void  S32C6 ::v99(){vfunc_called(this, "_ZN5S32C63v99Ev");}
void  S32C6 ::v100(){vfunc_called(this, "_ZN5S32C64v100Ev");}
void  S32C6 ::v101(){vfunc_called(this, "_ZN5S32C64v101Ev");}
void  S32C6 ::v102(){vfunc_called(this, "_ZN5S32C64v102Ev");}
void  S32C6 ::v103(){vfunc_called(this, "_ZN5S32C64v103Ev");}
void  S32C6 ::v104(){vfunc_called(this, "_ZN5S32C64v104Ev");}
void  S32C6 ::v105(){vfunc_called(this, "_ZN5S32C64v105Ev");}
void  S32C6 ::v106(){vfunc_called(this, "_ZN5S32C64v106Ev");}
void  S32C6 ::v107(){vfunc_called(this, "_ZN5S32C64v107Ev");}
void  S32C6 ::v108(){vfunc_called(this, "_ZN5S32C64v108Ev");}
void  S32C6 ::v109(){vfunc_called(this, "_ZN5S32C64v109Ev");}
S32C6 ::S32C6(){ note_ctor("S32C6", this);} // tgen

static void Test_S32C6()
{
  extern Class_Descriptor cd_S32C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S32C6, buf);
    S32C6 *dp, &lv = *(dp=new (buf) S32C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S32C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S32C6)");
    check_base_class_offset(lv, (S32C8*)(S32C7*), 0, "S32C6");
    check_base_class_offset(lv, (S32C7*), 0, "S32C6");
    set_bf_and_test(lv, s32c6f0, ABISELECT(188,132), 0, 1, 1, "S32C6");
    set_bf_and_test(lv, s32c6f1, ABISELECT(188,132), 1, 1, 1, "S32C6");
    set_bf_and_test(lv, s32c6f2, ABISELECT(188,132), 2, 1, 1, "S32C6");
    check_field_offset(lv, s32c6f3, ABISELECT(192,136), "S32C6.s32c6f3");
    check_field_offset(lv, s32c6f4, ABISELECT(208,148), "S32C6.s32c6f4");
    check_field_offset(lv, s32c6f5, ABISELECT(224,160), "S32C6.s32c6f5");
    check_field_offset(lv, s32c6f6, ABISELECT(240,172), "S32C6.s32c6f6");
    check_field_offset(lv, s32c6f7, ABISELECT(256,184), "S32C6.s32c6f7");
    test_class_info(&lv, &cd_S32C6);
    dp->~S32C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS32C6(Test_S32C6, "S32C6", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN5S32C6C1Ev();
extern void _ZN5S32C6D1Ev();
Name_Map name_map_S32C6[] = {
  NSPAIR(_ZN5S32C6C1Ev),
  NSPAIR(_ZN5S32C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S32C8;
extern VTBL_ENTRY _ZTI5S32C8[];
extern  VTBL_ENTRY _ZTV5S32C8[];
extern Class_Descriptor cd_S32C7;
extern VTBL_ENTRY _ZTI5S32C7[];
extern  VTBL_ENTRY _ZTV5S32C7[];
static Base_Class bases_S32C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S32C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S32C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S32C6[];
extern void _ZN5S32C6D1Ev();
extern void _ZN5S32C6D0Ev();
extern void _ZN5S32C82v4Ev();
extern void _ZN5S32C82v5Ev();
extern void _ZN5S32C82v6Ev();
extern void _ZN5S32C82v7Ev();
extern void _ZN5S32C82v8Ev();
extern void _ZN5S32C82v9Ev();
extern void _ZN5S32C83v10Ev();
extern void _ZN5S32C83v11Ev();
extern void _ZN5S32C83v12Ev();
extern void _ZN5S32C83v13Ev();
extern void _ZN5S32C83v14Ev();
extern void _ZN5S32C83v15Ev();
extern void _ZN5S32C83v16Ev();
extern void _ZN5S32C83v17Ev();
extern void _ZN5S32C83v18Ev();
extern void _ZN5S32C83v19Ev();
extern void _ZN5S32C83v20Ev();
extern void _ZN5S32C83v21Ev();
extern void _ZN5S32C83v22Ev();
extern void _ZN5S32C83v23Ev();
extern void _ZN5S32C83v24Ev();
extern void _ZN5S32C83v25Ev();
extern void _ZN5S32C83v26Ev();
extern void _ZN5S32C83v27Ev();
extern void _ZN5S32C83v28Ev();
extern void _ZN5S32C83v29Ev();
extern void _ZN5S32C83v30Ev();
extern void _ZN5S32C83v31Ev();
extern void _ZN5S32C83v32Ev();
extern void _ZN5S32C83v33Ev();
extern void _ZN5S32C83v34Ev();
extern void _ZN5S32C83v35Ev();
extern void _ZN5S32C83v36Ev();
extern void _ZN5S32C83v37Ev();
extern void _ZN5S32C83v38Ev();
extern void _ZN5S32C83v39Ev();
extern void _ZN5S32C83v40Ev();
extern void _ZN5S32C83v41Ev();
extern void _ZN5S32C83v42Ev();
extern void _ZN5S32C83v43Ev();
extern void _ZN5S32C83v44Ev();
extern void _ZN5S32C83v45Ev();
extern void _ZN5S32C83v46Ev();
extern void _ZN5S32C83v47Ev();
extern void _ZN5S32C83v48Ev();
extern void _ZN5S32C83v49Ev();
extern void _ZN5S32C83v50Ev();
extern void _ZN5S32C83v51Ev();
extern void _ZN5S32C83v52Ev();
extern void _ZN5S32C83v53Ev();
extern void _ZN5S32C83v54Ev();
extern void _ZN5S32C83v55Ev();
extern void _ZN5S32C83v56Ev();
extern void _ZN5S32C83v57Ev();
extern void _ZN5S32C83v58Ev();
extern void _ZN5S32C83v59Ev();
extern void _ZN5S32C83v60Ev();
extern void _ZN5S32C83v61Ev();
extern void _ZN5S32C83v62Ev();
extern void _ZN5S32C83v63Ev();
extern void _ZN5S32C83v64Ev();
extern void _ZN5S32C83v65Ev();
extern void _ZN5S32C83v66Ev();
extern void _ZN5S32C83v67Ev();
extern void _ZN5S32C73v68Ev();
extern void _ZN5S32C73v69Ev();
extern void _ZN5S32C73v70Ev();
extern void _ZN5S32C73v71Ev();
extern void _ZN5S32C73v72Ev();
extern void _ZN5S32C73v73Ev();
extern void _ZN5S32C73v74Ev();
extern void _ZN5S32C73v75Ev();
extern void _ZN5S32C73v76Ev();
extern void _ZN5S32C73v77Ev();
extern void _ZN5S32C73v78Ev();
extern void _ZN5S32C73v79Ev();
extern void _ZN5S32C73v80Ev();
extern void _ZN5S32C73v81Ev();
extern void _ZN5S32C73v82Ev();
extern void _ZN5S32C73v83Ev();
extern void _ZN5S32C73v84Ev();
extern void _ZN5S32C73v85Ev();
extern void _ZN5S32C73v86Ev();
extern void _ZN5S32C73v87Ev();
extern void _ZN5S32C73v88Ev();
extern void _ZN5S32C73v89Ev();
extern void _ZN5S32C63v90Ev();
extern void _ZN5S32C63v91Ev();
extern void _ZN5S32C63v92Ev();
extern void _ZN5S32C63v93Ev();
extern void _ZN5S32C63v94Ev();
extern void _ZN5S32C63v95Ev();
extern void _ZN5S32C63v96Ev();
extern void _ZN5S32C63v97Ev();
extern void _ZN5S32C63v98Ev();
extern void _ZN5S32C63v99Ev();
extern void _ZN5S32C64v100Ev();
extern void _ZN5S32C64v101Ev();
extern void _ZN5S32C64v102Ev();
extern void _ZN5S32C64v103Ev();
extern void _ZN5S32C64v104Ev();
extern void _ZN5S32C64v105Ev();
extern void _ZN5S32C64v106Ev();
extern void _ZN5S32C64v107Ev();
extern void _ZN5S32C64v108Ev();
extern void _ZN5S32C64v109Ev();
static  VTBL_ENTRY vtc_S32C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S32C6[0]),
  (VTBL_ENTRY)&_ZN5S32C6D1Ev,
  (VTBL_ENTRY)&_ZN5S32C6D0Ev,
  (VTBL_ENTRY)&_ZN5S32C82v4Ev,
  (VTBL_ENTRY)&_ZN5S32C82v5Ev,
  (VTBL_ENTRY)&_ZN5S32C82v6Ev,
  (VTBL_ENTRY)&_ZN5S32C82v7Ev,
  (VTBL_ENTRY)&_ZN5S32C82v8Ev,
  (VTBL_ENTRY)&_ZN5S32C82v9Ev,
  (VTBL_ENTRY)&_ZN5S32C83v10Ev,
  (VTBL_ENTRY)&_ZN5S32C83v11Ev,
  (VTBL_ENTRY)&_ZN5S32C83v12Ev,
  (VTBL_ENTRY)&_ZN5S32C83v13Ev,
  (VTBL_ENTRY)&_ZN5S32C83v14Ev,
  (VTBL_ENTRY)&_ZN5S32C83v15Ev,
  (VTBL_ENTRY)&_ZN5S32C83v16Ev,
  (VTBL_ENTRY)&_ZN5S32C83v17Ev,
  (VTBL_ENTRY)&_ZN5S32C83v18Ev,
  (VTBL_ENTRY)&_ZN5S32C83v19Ev,
  (VTBL_ENTRY)&_ZN5S32C83v20Ev,
  (VTBL_ENTRY)&_ZN5S32C83v21Ev,
  (VTBL_ENTRY)&_ZN5S32C83v22Ev,
  (VTBL_ENTRY)&_ZN5S32C83v23Ev,
  (VTBL_ENTRY)&_ZN5S32C83v24Ev,
  (VTBL_ENTRY)&_ZN5S32C83v25Ev,
  (VTBL_ENTRY)&_ZN5S32C83v26Ev,
  (VTBL_ENTRY)&_ZN5S32C83v27Ev,
  (VTBL_ENTRY)&_ZN5S32C83v28Ev,
  (VTBL_ENTRY)&_ZN5S32C83v29Ev,
  (VTBL_ENTRY)&_ZN5S32C83v30Ev,
  (VTBL_ENTRY)&_ZN5S32C83v31Ev,
  (VTBL_ENTRY)&_ZN5S32C83v32Ev,
  (VTBL_ENTRY)&_ZN5S32C83v33Ev,
  (VTBL_ENTRY)&_ZN5S32C83v34Ev,
  (VTBL_ENTRY)&_ZN5S32C83v35Ev,
  (VTBL_ENTRY)&_ZN5S32C83v36Ev,
  (VTBL_ENTRY)&_ZN5S32C83v37Ev,
  (VTBL_ENTRY)&_ZN5S32C83v38Ev,
  (VTBL_ENTRY)&_ZN5S32C83v39Ev,
  (VTBL_ENTRY)&_ZN5S32C83v40Ev,
  (VTBL_ENTRY)&_ZN5S32C83v41Ev,
  (VTBL_ENTRY)&_ZN5S32C83v42Ev,
  (VTBL_ENTRY)&_ZN5S32C83v43Ev,
  (VTBL_ENTRY)&_ZN5S32C83v44Ev,
  (VTBL_ENTRY)&_ZN5S32C83v45Ev,
  (VTBL_ENTRY)&_ZN5S32C83v46Ev,
  (VTBL_ENTRY)&_ZN5S32C83v47Ev,
  (VTBL_ENTRY)&_ZN5S32C83v48Ev,
  (VTBL_ENTRY)&_ZN5S32C83v49Ev,
  (VTBL_ENTRY)&_ZN5S32C83v50Ev,
  (VTBL_ENTRY)&_ZN5S32C83v51Ev,
  (VTBL_ENTRY)&_ZN5S32C83v52Ev,
  (VTBL_ENTRY)&_ZN5S32C83v53Ev,
  (VTBL_ENTRY)&_ZN5S32C83v54Ev,
  (VTBL_ENTRY)&_ZN5S32C83v55Ev,
  (VTBL_ENTRY)&_ZN5S32C83v56Ev,
  (VTBL_ENTRY)&_ZN5S32C83v57Ev,
  (VTBL_ENTRY)&_ZN5S32C83v58Ev,
  (VTBL_ENTRY)&_ZN5S32C83v59Ev,
  (VTBL_ENTRY)&_ZN5S32C83v60Ev,
  (VTBL_ENTRY)&_ZN5S32C83v61Ev,
  (VTBL_ENTRY)&_ZN5S32C83v62Ev,
  (VTBL_ENTRY)&_ZN5S32C83v63Ev,
  (VTBL_ENTRY)&_ZN5S32C83v64Ev,
  (VTBL_ENTRY)&_ZN5S32C83v65Ev,
  (VTBL_ENTRY)&_ZN5S32C83v66Ev,
  (VTBL_ENTRY)&_ZN5S32C83v67Ev,
  (VTBL_ENTRY)&_ZN5S32C73v68Ev,
  (VTBL_ENTRY)&_ZN5S32C73v69Ev,
  (VTBL_ENTRY)&_ZN5S32C73v70Ev,
  (VTBL_ENTRY)&_ZN5S32C73v71Ev,
  (VTBL_ENTRY)&_ZN5S32C73v72Ev,
  (VTBL_ENTRY)&_ZN5S32C73v73Ev,
  (VTBL_ENTRY)&_ZN5S32C73v74Ev,
  (VTBL_ENTRY)&_ZN5S32C73v75Ev,
  (VTBL_ENTRY)&_ZN5S32C73v76Ev,
  (VTBL_ENTRY)&_ZN5S32C73v77Ev,
  (VTBL_ENTRY)&_ZN5S32C73v78Ev,
  (VTBL_ENTRY)&_ZN5S32C73v79Ev,
  (VTBL_ENTRY)&_ZN5S32C73v80Ev,
  (VTBL_ENTRY)&_ZN5S32C73v81Ev,
  (VTBL_ENTRY)&_ZN5S32C73v82Ev,
  (VTBL_ENTRY)&_ZN5S32C73v83Ev,
  (VTBL_ENTRY)&_ZN5S32C73v84Ev,
  (VTBL_ENTRY)&_ZN5S32C73v85Ev,
  (VTBL_ENTRY)&_ZN5S32C73v86Ev,
  (VTBL_ENTRY)&_ZN5S32C73v87Ev,
  (VTBL_ENTRY)&_ZN5S32C73v88Ev,
  (VTBL_ENTRY)&_ZN5S32C73v89Ev,
  (VTBL_ENTRY)&_ZN5S32C63v90Ev,
  (VTBL_ENTRY)&_ZN5S32C63v91Ev,
  (VTBL_ENTRY)&_ZN5S32C63v92Ev,
  (VTBL_ENTRY)&_ZN5S32C63v93Ev,
  (VTBL_ENTRY)&_ZN5S32C63v94Ev,
  (VTBL_ENTRY)&_ZN5S32C63v95Ev,
  (VTBL_ENTRY)&_ZN5S32C63v96Ev,
  (VTBL_ENTRY)&_ZN5S32C63v97Ev,
  (VTBL_ENTRY)&_ZN5S32C63v98Ev,
  (VTBL_ENTRY)&_ZN5S32C63v99Ev,
  (VTBL_ENTRY)&_ZN5S32C64v100Ev,
  (VTBL_ENTRY)&_ZN5S32C64v101Ev,
  (VTBL_ENTRY)&_ZN5S32C64v102Ev,
  (VTBL_ENTRY)&_ZN5S32C64v103Ev,
  (VTBL_ENTRY)&_ZN5S32C64v104Ev,
  (VTBL_ENTRY)&_ZN5S32C64v105Ev,
  (VTBL_ENTRY)&_ZN5S32C64v106Ev,
  (VTBL_ENTRY)&_ZN5S32C64v107Ev,
  (VTBL_ENTRY)&_ZN5S32C64v108Ev,
  (VTBL_ENTRY)&_ZN5S32C64v109Ev,
};
extern VTBL_ENTRY _ZTI5S32C6[];
extern  VTBL_ENTRY _ZTV5S32C6[];
Class_Descriptor cd_S32C6 = {  "S32C6", // class name
  bases_S32C6, 2,
  &(vtc_S32C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI5S32C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S32C6),110, //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  S32C5  : S32C6 {
  ::S3350C4_nt s32c5f0;
  unsigned int s32c5f1:1;
  ::S287C23 s32c5f2;
  virtual  ~S32C5(); // _ZN5S32C5D1Ev
  virtual void  v110(); // _ZN5S32C54v110Ev
  virtual void  v111(); // _ZN5S32C54v111Ev
  virtual void  v112(); // _ZN5S32C54v112Ev
  virtual void  v113(); // _ZN5S32C54v113Ev
  S32C5(); // tgen
};
//SIG(-1 S32C5) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 Fi:1 Fi:1 Fi:1 FC11{ BC12{ BC9}} FC13{ BC14{ BC9}} FC15{ BC16{ BC9}} FC17{ BC18{ BC9}} Fi[3]} vd v1 v2 v3 v4 FC5 Fi:1 FC19{ BC20{ BC9}}}


 S32C5 ::~S32C5(){ note_dtor("S32C5", this);}
void  S32C5 ::v110(){vfunc_called(this, "_ZN5S32C54v110Ev");}
void  S32C5 ::v111(){vfunc_called(this, "_ZN5S32C54v111Ev");}
void  S32C5 ::v112(){vfunc_called(this, "_ZN5S32C54v112Ev");}
void  S32C5 ::v113(){vfunc_called(this, "_ZN5S32C54v113Ev");}
S32C5 ::S32C5(){ note_ctor("S32C5", this);} // tgen

static void Test_S32C5()
{
  extern Class_Descriptor cd_S32C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,56)];
    init_test(&cd_S32C5, buf);
    S32C5 *dp, &lv = *(dp=new (buf) S32C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,220), "sizeof(S32C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S32C5)");
    check_base_class_offset(lv, (S32C8*)(S32C7*)(S32C6*), 0, "S32C5");
    check_base_class_offset(lv, (S32C7*)(S32C6*), 0, "S32C5");
    check_base_class_offset(lv, (S32C6*), 0, "S32C5");
    check_field_offset(lv, s32c5f0, ABISELECT(268,196), "S32C5.s32c5f0");
    set_bf_and_test(lv, s32c5f1, ABISELECT(276,204), 0, 1, 1, "S32C5");
    check_field_offset(lv, s32c5f2, ABISELECT(280,208), "S32C5.s32c5f2");
    test_class_info(&lv, &cd_S32C5);
    dp->~S32C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS32C5(Test_S32C5, "S32C5", ABISELECT(296,220));

#else // __cplusplus

extern void _ZN5S32C5C1Ev();
extern void _ZN5S32C5D1Ev();
Name_Map name_map_S32C5[] = {
  NSPAIR(_ZN5S32C5C1Ev),
  NSPAIR(_ZN5S32C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S32C8;
extern VTBL_ENTRY _ZTI5S32C8[];
extern  VTBL_ENTRY _ZTV5S32C8[];
extern Class_Descriptor cd_S32C7;
extern VTBL_ENTRY _ZTI5S32C7[];
extern  VTBL_ENTRY _ZTV5S32C7[];
extern Class_Descriptor cd_S32C6;
extern VTBL_ENTRY _ZTI5S32C6[];
extern  VTBL_ENTRY _ZTV5S32C6[];
static Base_Class bases_S32C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S32C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S32C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S32C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S32C5[];
extern void _ZN5S32C5D1Ev();
extern void _ZN5S32C5D0Ev();
extern void _ZN5S32C82v4Ev();
extern void _ZN5S32C82v5Ev();
extern void _ZN5S32C82v6Ev();
extern void _ZN5S32C82v7Ev();
extern void _ZN5S32C82v8Ev();
extern void _ZN5S32C82v9Ev();
extern void _ZN5S32C83v10Ev();
extern void _ZN5S32C83v11Ev();
extern void _ZN5S32C83v12Ev();
extern void _ZN5S32C83v13Ev();
extern void _ZN5S32C83v14Ev();
extern void _ZN5S32C83v15Ev();
extern void _ZN5S32C83v16Ev();
extern void _ZN5S32C83v17Ev();
extern void _ZN5S32C83v18Ev();
extern void _ZN5S32C83v19Ev();
extern void _ZN5S32C83v20Ev();
extern void _ZN5S32C83v21Ev();
extern void _ZN5S32C83v22Ev();
extern void _ZN5S32C83v23Ev();
extern void _ZN5S32C83v24Ev();
extern void _ZN5S32C83v25Ev();
extern void _ZN5S32C83v26Ev();
extern void _ZN5S32C83v27Ev();
extern void _ZN5S32C83v28Ev();
extern void _ZN5S32C83v29Ev();
extern void _ZN5S32C83v30Ev();
extern void _ZN5S32C83v31Ev();
extern void _ZN5S32C83v32Ev();
extern void _ZN5S32C83v33Ev();
extern void _ZN5S32C83v34Ev();
extern void _ZN5S32C83v35Ev();
extern void _ZN5S32C83v36Ev();
extern void _ZN5S32C83v37Ev();
extern void _ZN5S32C83v38Ev();
extern void _ZN5S32C83v39Ev();
extern void _ZN5S32C83v40Ev();
extern void _ZN5S32C83v41Ev();
extern void _ZN5S32C83v42Ev();
extern void _ZN5S32C83v43Ev();
extern void _ZN5S32C83v44Ev();
extern void _ZN5S32C83v45Ev();
extern void _ZN5S32C83v46Ev();
extern void _ZN5S32C83v47Ev();
extern void _ZN5S32C83v48Ev();
extern void _ZN5S32C83v49Ev();
extern void _ZN5S32C83v50Ev();
extern void _ZN5S32C83v51Ev();
extern void _ZN5S32C83v52Ev();
extern void _ZN5S32C83v53Ev();
extern void _ZN5S32C83v54Ev();
extern void _ZN5S32C83v55Ev();
extern void _ZN5S32C83v56Ev();
extern void _ZN5S32C83v57Ev();
extern void _ZN5S32C83v58Ev();
extern void _ZN5S32C83v59Ev();
extern void _ZN5S32C83v60Ev();
extern void _ZN5S32C83v61Ev();
extern void _ZN5S32C83v62Ev();
extern void _ZN5S32C83v63Ev();
extern void _ZN5S32C83v64Ev();
extern void _ZN5S32C83v65Ev();
extern void _ZN5S32C83v66Ev();
extern void _ZN5S32C83v67Ev();
extern void _ZN5S32C73v68Ev();
extern void _ZN5S32C73v69Ev();
extern void _ZN5S32C73v70Ev();
extern void _ZN5S32C73v71Ev();
extern void _ZN5S32C73v72Ev();
extern void _ZN5S32C73v73Ev();
extern void _ZN5S32C73v74Ev();
extern void _ZN5S32C73v75Ev();
extern void _ZN5S32C73v76Ev();
extern void _ZN5S32C73v77Ev();
extern void _ZN5S32C73v78Ev();
extern void _ZN5S32C73v79Ev();
extern void _ZN5S32C73v80Ev();
extern void _ZN5S32C73v81Ev();
extern void _ZN5S32C73v82Ev();
extern void _ZN5S32C73v83Ev();
extern void _ZN5S32C73v84Ev();
extern void _ZN5S32C73v85Ev();
extern void _ZN5S32C73v86Ev();
extern void _ZN5S32C73v87Ev();
extern void _ZN5S32C73v88Ev();
extern void _ZN5S32C73v89Ev();
extern void _ZN5S32C63v90Ev();
extern void _ZN5S32C63v91Ev();
extern void _ZN5S32C63v92Ev();
extern void _ZN5S32C63v93Ev();
extern void _ZN5S32C63v94Ev();
extern void _ZN5S32C63v95Ev();
extern void _ZN5S32C63v96Ev();
extern void _ZN5S32C63v97Ev();
extern void _ZN5S32C63v98Ev();
extern void _ZN5S32C63v99Ev();
extern void _ZN5S32C64v100Ev();
extern void _ZN5S32C64v101Ev();
extern void _ZN5S32C64v102Ev();
extern void _ZN5S32C64v103Ev();
extern void _ZN5S32C64v104Ev();
extern void _ZN5S32C64v105Ev();
extern void _ZN5S32C64v106Ev();
extern void _ZN5S32C64v107Ev();
extern void _ZN5S32C64v108Ev();
extern void _ZN5S32C64v109Ev();
extern void _ZN5S32C54v110Ev();
extern void _ZN5S32C54v111Ev();
extern void _ZN5S32C54v112Ev();
extern void _ZN5S32C54v113Ev();
static  VTBL_ENTRY vtc_S32C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S32C5[0]),
  (VTBL_ENTRY)&_ZN5S32C5D1Ev,
  (VTBL_ENTRY)&_ZN5S32C5D0Ev,
  (VTBL_ENTRY)&_ZN5S32C82v4Ev,
  (VTBL_ENTRY)&_ZN5S32C82v5Ev,
  (VTBL_ENTRY)&_ZN5S32C82v6Ev,
  (VTBL_ENTRY)&_ZN5S32C82v7Ev,
  (VTBL_ENTRY)&_ZN5S32C82v8Ev,
  (VTBL_ENTRY)&_ZN5S32C82v9Ev,
  (VTBL_ENTRY)&_ZN5S32C83v10Ev,
  (VTBL_ENTRY)&_ZN5S32C83v11Ev,
  (VTBL_ENTRY)&_ZN5S32C83v12Ev,
  (VTBL_ENTRY)&_ZN5S32C83v13Ev,
  (VTBL_ENTRY)&_ZN5S32C83v14Ev,
  (VTBL_ENTRY)&_ZN5S32C83v15Ev,
  (VTBL_ENTRY)&_ZN5S32C83v16Ev,
  (VTBL_ENTRY)&_ZN5S32C83v17Ev,
  (VTBL_ENTRY)&_ZN5S32C83v18Ev,
  (VTBL_ENTRY)&_ZN5S32C83v19Ev,
  (VTBL_ENTRY)&_ZN5S32C83v20Ev,
  (VTBL_ENTRY)&_ZN5S32C83v21Ev,
  (VTBL_ENTRY)&_ZN5S32C83v22Ev,
  (VTBL_ENTRY)&_ZN5S32C83v23Ev,
  (VTBL_ENTRY)&_ZN5S32C83v24Ev,
  (VTBL_ENTRY)&_ZN5S32C83v25Ev,
  (VTBL_ENTRY)&_ZN5S32C83v26Ev,
  (VTBL_ENTRY)&_ZN5S32C83v27Ev,
  (VTBL_ENTRY)&_ZN5S32C83v28Ev,
  (VTBL_ENTRY)&_ZN5S32C83v29Ev,
  (VTBL_ENTRY)&_ZN5S32C83v30Ev,
  (VTBL_ENTRY)&_ZN5S32C83v31Ev,
  (VTBL_ENTRY)&_ZN5S32C83v32Ev,
  (VTBL_ENTRY)&_ZN5S32C83v33Ev,
  (VTBL_ENTRY)&_ZN5S32C83v34Ev,
  (VTBL_ENTRY)&_ZN5S32C83v35Ev,
  (VTBL_ENTRY)&_ZN5S32C83v36Ev,
  (VTBL_ENTRY)&_ZN5S32C83v37Ev,
  (VTBL_ENTRY)&_ZN5S32C83v38Ev,
  (VTBL_ENTRY)&_ZN5S32C83v39Ev,
  (VTBL_ENTRY)&_ZN5S32C83v40Ev,
  (VTBL_ENTRY)&_ZN5S32C83v41Ev,
  (VTBL_ENTRY)&_ZN5S32C83v42Ev,
  (VTBL_ENTRY)&_ZN5S32C83v43Ev,
  (VTBL_ENTRY)&_ZN5S32C83v44Ev,
  (VTBL_ENTRY)&_ZN5S32C83v45Ev,
  (VTBL_ENTRY)&_ZN5S32C83v46Ev,
  (VTBL_ENTRY)&_ZN5S32C83v47Ev,
  (VTBL_ENTRY)&_ZN5S32C83v48Ev,
  (VTBL_ENTRY)&_ZN5S32C83v49Ev,
  (VTBL_ENTRY)&_ZN5S32C83v50Ev,
  (VTBL_ENTRY)&_ZN5S32C83v51Ev,
  (VTBL_ENTRY)&_ZN5S32C83v52Ev,
  (VTBL_ENTRY)&_ZN5S32C83v53Ev,
  (VTBL_ENTRY)&_ZN5S32C83v54Ev,
  (VTBL_ENTRY)&_ZN5S32C83v55Ev,
  (VTBL_ENTRY)&_ZN5S32C83v56Ev,
  (VTBL_ENTRY)&_ZN5S32C83v57Ev,
  (VTBL_ENTRY)&_ZN5S32C83v58Ev,
  (VTBL_ENTRY)&_ZN5S32C83v59Ev,
  (VTBL_ENTRY)&_ZN5S32C83v60Ev,
  (VTBL_ENTRY)&_ZN5S32C83v61Ev,
  (VTBL_ENTRY)&_ZN5S32C83v62Ev,
  (VTBL_ENTRY)&_ZN5S32C83v63Ev,
  (VTBL_ENTRY)&_ZN5S32C83v64Ev,
  (VTBL_ENTRY)&_ZN5S32C83v65Ev,
  (VTBL_ENTRY)&_ZN5S32C83v66Ev,
  (VTBL_ENTRY)&_ZN5S32C83v67Ev,
  (VTBL_ENTRY)&_ZN5S32C73v68Ev,
  (VTBL_ENTRY)&_ZN5S32C73v69Ev,
  (VTBL_ENTRY)&_ZN5S32C73v70Ev,
  (VTBL_ENTRY)&_ZN5S32C73v71Ev,
  (VTBL_ENTRY)&_ZN5S32C73v72Ev,
  (VTBL_ENTRY)&_ZN5S32C73v73Ev,
  (VTBL_ENTRY)&_ZN5S32C73v74Ev,
  (VTBL_ENTRY)&_ZN5S32C73v75Ev,
  (VTBL_ENTRY)&_ZN5S32C73v76Ev,
  (VTBL_ENTRY)&_ZN5S32C73v77Ev,
  (VTBL_ENTRY)&_ZN5S32C73v78Ev,
  (VTBL_ENTRY)&_ZN5S32C73v79Ev,
  (VTBL_ENTRY)&_ZN5S32C73v80Ev,
  (VTBL_ENTRY)&_ZN5S32C73v81Ev,
  (VTBL_ENTRY)&_ZN5S32C73v82Ev,
  (VTBL_ENTRY)&_ZN5S32C73v83Ev,
  (VTBL_ENTRY)&_ZN5S32C73v84Ev,
  (VTBL_ENTRY)&_ZN5S32C73v85Ev,
  (VTBL_ENTRY)&_ZN5S32C73v86Ev,
  (VTBL_ENTRY)&_ZN5S32C73v87Ev,
  (VTBL_ENTRY)&_ZN5S32C73v88Ev,
  (VTBL_ENTRY)&_ZN5S32C73v89Ev,
  (VTBL_ENTRY)&_ZN5S32C63v90Ev,
  (VTBL_ENTRY)&_ZN5S32C63v91Ev,
  (VTBL_ENTRY)&_ZN5S32C63v92Ev,
  (VTBL_ENTRY)&_ZN5S32C63v93Ev,
  (VTBL_ENTRY)&_ZN5S32C63v94Ev,
  (VTBL_ENTRY)&_ZN5S32C63v95Ev,
  (VTBL_ENTRY)&_ZN5S32C63v96Ev,
  (VTBL_ENTRY)&_ZN5S32C63v97Ev,
  (VTBL_ENTRY)&_ZN5S32C63v98Ev,
  (VTBL_ENTRY)&_ZN5S32C63v99Ev,
  (VTBL_ENTRY)&_ZN5S32C64v100Ev,
  (VTBL_ENTRY)&_ZN5S32C64v101Ev,
  (VTBL_ENTRY)&_ZN5S32C64v102Ev,
  (VTBL_ENTRY)&_ZN5S32C64v103Ev,
  (VTBL_ENTRY)&_ZN5S32C64v104Ev,
  (VTBL_ENTRY)&_ZN5S32C64v105Ev,
  (VTBL_ENTRY)&_ZN5S32C64v106Ev,
  (VTBL_ENTRY)&_ZN5S32C64v107Ev,
  (VTBL_ENTRY)&_ZN5S32C64v108Ev,
  (VTBL_ENTRY)&_ZN5S32C64v109Ev,
  (VTBL_ENTRY)&_ZN5S32C54v110Ev,
  (VTBL_ENTRY)&_ZN5S32C54v111Ev,
  (VTBL_ENTRY)&_ZN5S32C54v112Ev,
  (VTBL_ENTRY)&_ZN5S32C54v113Ev,
};
extern VTBL_ENTRY _ZTI5S32C5[];
extern  VTBL_ENTRY _ZTV5S32C5[];
Class_Descriptor cd_S32C5 = {  "S32C5", // class name
  bases_S32C5, 3,
  &(vtc_S32C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,220), // object size
  NSPAIRA(_ZTI5S32C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S32C5),114, //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  S32C4  : S32C5 {
  int s32c4f0;
  unsigned int s32c4f1:1;
  virtual  ~S32C4(); // _ZN5S32C4D1Ev
  virtual void  v114(); // _ZN5S32C44v114Ev
  virtual void  v115(); // _ZN5S32C44v115Ev
  virtual void  v116(); // _ZN5S32C44v116Ev
  virtual void  v117(); // _ZN5S32C44v117Ev
  virtual void  v118(); // _ZN5S32C44v118Ev
  virtual void  v119(); // _ZN5S32C44v119Ev
  virtual void  v120(); // _ZN5S32C44v120Ev
  virtual void  v121(); // _ZN5S32C44v121Ev
  S32C4(); // tgen
};
//SIG(-1 S32C4) C1{ BC2{ BC3{ BC4{ BC5{ vd v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 Fi[2] Fp Fi[2] FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} FC7 FC11{ m} FC7 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 Fi:1 Fi:1 Fi:1 FC12{ BC13{ BC10}} FC14{ BC15{ BC10}} FC16{ BC17{ BC10}} FC18{ BC19{ BC10}} Fi[3]} vd v115 v116 v117 v118 FC6 Fi:1 FC20{ BC21{ BC10}}} vd v1 v2 v3 v4 v5 v6 v7 v8 Fi Fi:1}


 S32C4 ::~S32C4(){ note_dtor("S32C4", this);}
void  S32C4 ::v114(){vfunc_called(this, "_ZN5S32C44v114Ev");}
void  S32C4 ::v115(){vfunc_called(this, "_ZN5S32C44v115Ev");}
void  S32C4 ::v116(){vfunc_called(this, "_ZN5S32C44v116Ev");}
void  S32C4 ::v117(){vfunc_called(this, "_ZN5S32C44v117Ev");}
void  S32C4 ::v118(){vfunc_called(this, "_ZN5S32C44v118Ev");}
void  S32C4 ::v119(){vfunc_called(this, "_ZN5S32C44v119Ev");}
void  S32C4 ::v120(){vfunc_called(this, "_ZN5S32C44v120Ev");}
void  S32C4 ::v121(){vfunc_called(this, "_ZN5S32C44v121Ev");}
S32C4 ::S32C4(){ note_ctor("S32C4", this);} // tgen

static void Test_S32C4()
{
  extern Class_Descriptor cd_S32C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(39,58)];
    init_test(&cd_S32C4, buf);
    S32C4 *dp, &lv = *(dp=new (buf) S32C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,228), "sizeof(S32C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S32C4)");
    check_base_class_offset(lv, (S32C8*)(S32C7*)(S32C6*)(S32C5*), 0, "S32C4");
    check_base_class_offset(lv, (S32C7*)(S32C6*)(S32C5*), 0, "S32C4");
    check_base_class_offset(lv, (S32C6*)(S32C5*), 0, "S32C4");
    check_base_class_offset(lv, (S32C5*), 0, "S32C4");
    check_field_offset(lv, s32c4f0, ABISELECT(296,220), "S32C4.s32c4f0");
    set_bf_and_test(lv, s32c4f1, ABISELECT(300,224), 0, 1, 1, "S32C4");
    test_class_info(&lv, &cd_S32C4);
    dp->~S32C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS32C4(Test_S32C4, "S32C4", ABISELECT(304,228));

#else // __cplusplus

extern void _ZN5S32C4C1Ev();
extern void _ZN5S32C4D1Ev();
Name_Map name_map_S32C4[] = {
  NSPAIR(_ZN5S32C4C1Ev),
  NSPAIR(_ZN5S32C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S32C8;
extern VTBL_ENTRY _ZTI5S32C8[];
extern  VTBL_ENTRY _ZTV5S32C8[];
extern Class_Descriptor cd_S32C7;
extern VTBL_ENTRY _ZTI5S32C7[];
extern  VTBL_ENTRY _ZTV5S32C7[];
extern Class_Descriptor cd_S32C6;
extern VTBL_ENTRY _ZTI5S32C6[];
extern  VTBL_ENTRY _ZTV5S32C6[];
extern Class_Descriptor cd_S32C5;
extern VTBL_ENTRY _ZTI5S32C5[];
extern  VTBL_ENTRY _ZTV5S32C5[];
static Base_Class bases_S32C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S32C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S32C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S32C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S32C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S32C4[];
extern void _ZN5S32C4D1Ev();
extern void _ZN5S32C4D0Ev();
extern void _ZN5S32C82v4Ev();
extern void _ZN5S32C82v5Ev();
extern void _ZN5S32C82v6Ev();
extern void _ZN5S32C82v7Ev();
extern void _ZN5S32C82v8Ev();
extern void _ZN5S32C82v9Ev();
extern void _ZN5S32C83v10Ev();
extern void _ZN5S32C83v11Ev();
extern void _ZN5S32C83v12Ev();
extern void _ZN5S32C83v13Ev();
extern void _ZN5S32C83v14Ev();
extern void _ZN5S32C83v15Ev();
extern void _ZN5S32C83v16Ev();
extern void _ZN5S32C83v17Ev();
extern void _ZN5S32C83v18Ev();
extern void _ZN5S32C83v19Ev();
extern void _ZN5S32C83v20Ev();
extern void _ZN5S32C83v21Ev();
extern void _ZN5S32C83v22Ev();
extern void _ZN5S32C83v23Ev();
extern void _ZN5S32C83v24Ev();
extern void _ZN5S32C83v25Ev();
extern void _ZN5S32C83v26Ev();
extern void _ZN5S32C83v27Ev();
extern void _ZN5S32C83v28Ev();
extern void _ZN5S32C83v29Ev();
extern void _ZN5S32C83v30Ev();
extern void _ZN5S32C83v31Ev();
extern void _ZN5S32C83v32Ev();
extern void _ZN5S32C83v33Ev();
extern void _ZN5S32C83v34Ev();
extern void _ZN5S32C83v35Ev();
extern void _ZN5S32C83v36Ev();
extern void _ZN5S32C83v37Ev();
extern void _ZN5S32C83v38Ev();
extern void _ZN5S32C83v39Ev();
extern void _ZN5S32C83v40Ev();
extern void _ZN5S32C83v41Ev();
extern void _ZN5S32C83v42Ev();
extern void _ZN5S32C83v43Ev();
extern void _ZN5S32C83v44Ev();
extern void _ZN5S32C83v45Ev();
extern void _ZN5S32C83v46Ev();
extern void _ZN5S32C83v47Ev();
extern void _ZN5S32C83v48Ev();
extern void _ZN5S32C83v49Ev();
extern void _ZN5S32C83v50Ev();
extern void _ZN5S32C83v51Ev();
extern void _ZN5S32C83v52Ev();
extern void _ZN5S32C83v53Ev();
extern void _ZN5S32C83v54Ev();
extern void _ZN5S32C83v55Ev();
extern void _ZN5S32C83v56Ev();
extern void _ZN5S32C83v57Ev();
extern void _ZN5S32C83v58Ev();
extern void _ZN5S32C83v59Ev();
extern void _ZN5S32C83v60Ev();
extern void _ZN5S32C83v61Ev();
extern void _ZN5S32C83v62Ev();
extern void _ZN5S32C83v63Ev();
extern void _ZN5S32C83v64Ev();
extern void _ZN5S32C83v65Ev();
extern void _ZN5S32C83v66Ev();
extern void _ZN5S32C83v67Ev();
extern void _ZN5S32C73v68Ev();
extern void _ZN5S32C73v69Ev();
extern void _ZN5S32C73v70Ev();
extern void _ZN5S32C73v71Ev();
extern void _ZN5S32C73v72Ev();
extern void _ZN5S32C73v73Ev();
extern void _ZN5S32C73v74Ev();
extern void _ZN5S32C73v75Ev();
extern void _ZN5S32C73v76Ev();
extern void _ZN5S32C73v77Ev();
extern void _ZN5S32C73v78Ev();
extern void _ZN5S32C73v79Ev();
extern void _ZN5S32C73v80Ev();
extern void _ZN5S32C73v81Ev();
extern void _ZN5S32C73v82Ev();
extern void _ZN5S32C73v83Ev();
extern void _ZN5S32C73v84Ev();
extern void _ZN5S32C73v85Ev();
extern void _ZN5S32C73v86Ev();
extern void _ZN5S32C73v87Ev();
extern void _ZN5S32C73v88Ev();
extern void _ZN5S32C73v89Ev();
extern void _ZN5S32C63v90Ev();
extern void _ZN5S32C63v91Ev();
extern void _ZN5S32C63v92Ev();
extern void _ZN5S32C63v93Ev();
extern void _ZN5S32C63v94Ev();
extern void _ZN5S32C63v95Ev();
extern void _ZN5S32C63v96Ev();
extern void _ZN5S32C63v97Ev();
extern void _ZN5S32C63v98Ev();
extern void _ZN5S32C63v99Ev();
extern void _ZN5S32C64v100Ev();
extern void _ZN5S32C64v101Ev();
extern void _ZN5S32C64v102Ev();
extern void _ZN5S32C64v103Ev();
extern void _ZN5S32C64v104Ev();
extern void _ZN5S32C64v105Ev();
extern void _ZN5S32C64v106Ev();
extern void _ZN5S32C64v107Ev();
extern void _ZN5S32C64v108Ev();
extern void _ZN5S32C64v109Ev();
extern void _ZN5S32C54v110Ev();
extern void _ZN5S32C54v111Ev();
extern void _ZN5S32C54v112Ev();
extern void _ZN5S32C54v113Ev();
extern void _ZN5S32C44v114Ev();
extern void _ZN5S32C44v115Ev();
extern void _ZN5S32C44v116Ev();
extern void _ZN5S32C44v117Ev();
extern void _ZN5S32C44v118Ev();
extern void _ZN5S32C44v119Ev();
extern void _ZN5S32C44v120Ev();
extern void _ZN5S32C44v121Ev();
static  VTBL_ENTRY vtc_S32C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S32C4[0]),
  (VTBL_ENTRY)&_ZN5S32C4D1Ev,
  (VTBL_ENTRY)&_ZN5S32C4D0Ev,
  (VTBL_ENTRY)&_ZN5S32C82v4Ev,
  (VTBL_ENTRY)&_ZN5S32C82v5Ev,
  (VTBL_ENTRY)&_ZN5S32C82v6Ev,
  (VTBL_ENTRY)&_ZN5S32C82v7Ev,
  (VTBL_ENTRY)&_ZN5S32C82v8Ev,
  (VTBL_ENTRY)&_ZN5S32C82v9Ev,
  (VTBL_ENTRY)&_ZN5S32C83v10Ev,
  (VTBL_ENTRY)&_ZN5S32C83v11Ev,
  (VTBL_ENTRY)&_ZN5S32C83v12Ev,
  (VTBL_ENTRY)&_ZN5S32C83v13Ev,
  (VTBL_ENTRY)&_ZN5S32C83v14Ev,
  (VTBL_ENTRY)&_ZN5S32C83v15Ev,
  (VTBL_ENTRY)&_ZN5S32C83v16Ev,
  (VTBL_ENTRY)&_ZN5S32C83v17Ev,
  (VTBL_ENTRY)&_ZN5S32C83v18Ev,
  (VTBL_ENTRY)&_ZN5S32C83v19Ev,
  (VTBL_ENTRY)&_ZN5S32C83v20Ev,
  (VTBL_ENTRY)&_ZN5S32C83v21Ev,
  (VTBL_ENTRY)&_ZN5S32C83v22Ev,
  (VTBL_ENTRY)&_ZN5S32C83v23Ev,
  (VTBL_ENTRY)&_ZN5S32C83v24Ev,
  (VTBL_ENTRY)&_ZN5S32C83v25Ev,
  (VTBL_ENTRY)&_ZN5S32C83v26Ev,
  (VTBL_ENTRY)&_ZN5S32C83v27Ev,
  (VTBL_ENTRY)&_ZN5S32C83v28Ev,
  (VTBL_ENTRY)&_ZN5S32C83v29Ev,
  (VTBL_ENTRY)&_ZN5S32C83v30Ev,
  (VTBL_ENTRY)&_ZN5S32C83v31Ev,
  (VTBL_ENTRY)&_ZN5S32C83v32Ev,
  (VTBL_ENTRY)&_ZN5S32C83v33Ev,
  (VTBL_ENTRY)&_ZN5S32C83v34Ev,
  (VTBL_ENTRY)&_ZN5S32C83v35Ev,
  (VTBL_ENTRY)&_ZN5S32C83v36Ev,
  (VTBL_ENTRY)&_ZN5S32C83v37Ev,
  (VTBL_ENTRY)&_ZN5S32C83v38Ev,
  (VTBL_ENTRY)&_ZN5S32C83v39Ev,
  (VTBL_ENTRY)&_ZN5S32C83v40Ev,
  (VTBL_ENTRY)&_ZN5S32C83v41Ev,
  (VTBL_ENTRY)&_ZN5S32C83v42Ev,
  (VTBL_ENTRY)&_ZN5S32C83v43Ev,
  (VTBL_ENTRY)&_ZN5S32C83v44Ev,
  (VTBL_ENTRY)&_ZN5S32C83v45Ev,
  (VTBL_ENTRY)&_ZN5S32C83v46Ev,
  (VTBL_ENTRY)&_ZN5S32C83v47Ev,
  (VTBL_ENTRY)&_ZN5S32C83v48Ev,
  (VTBL_ENTRY)&_ZN5S32C83v49Ev,
  (VTBL_ENTRY)&_ZN5S32C83v50Ev,
  (VTBL_ENTRY)&_ZN5S32C83v51Ev,
  (VTBL_ENTRY)&_ZN5S32C83v52Ev,
  (VTBL_ENTRY)&_ZN5S32C83v53Ev,
  (VTBL_ENTRY)&_ZN5S32C83v54Ev,
  (VTBL_ENTRY)&_ZN5S32C83v55Ev,
  (VTBL_ENTRY)&_ZN5S32C83v56Ev,
  (VTBL_ENTRY)&_ZN5S32C83v57Ev,
  (VTBL_ENTRY)&_ZN5S32C83v58Ev,
  (VTBL_ENTRY)&_ZN5S32C83v59Ev,
  (VTBL_ENTRY)&_ZN5S32C83v60Ev,
  (VTBL_ENTRY)&_ZN5S32C83v61Ev,
  (VTBL_ENTRY)&_ZN5S32C83v62Ev,
  (VTBL_ENTRY)&_ZN5S32C83v63Ev,
  (VTBL_ENTRY)&_ZN5S32C83v64Ev,
  (VTBL_ENTRY)&_ZN5S32C83v65Ev,
  (VTBL_ENTRY)&_ZN5S32C83v66Ev,
  (VTBL_ENTRY)&_ZN5S32C83v67Ev,
  (VTBL_ENTRY)&_ZN5S32C73v68Ev,
  (VTBL_ENTRY)&_ZN5S32C73v69Ev,
  (VTBL_ENTRY)&_ZN5S32C73v70Ev,
  (VTBL_ENTRY)&_ZN5S32C73v71Ev,
  (VTBL_ENTRY)&_ZN5S32C73v72Ev,
  (VTBL_ENTRY)&_ZN5S32C73v73Ev,
  (VTBL_ENTRY)&_ZN5S32C73v74Ev,
  (VTBL_ENTRY)&_ZN5S32C73v75Ev,
  (VTBL_ENTRY)&_ZN5S32C73v76Ev,
  (VTBL_ENTRY)&_ZN5S32C73v77Ev,
  (VTBL_ENTRY)&_ZN5S32C73v78Ev,
  (VTBL_ENTRY)&_ZN5S32C73v79Ev,
  (VTBL_ENTRY)&_ZN5S32C73v80Ev,
  (VTBL_ENTRY)&_ZN5S32C73v81Ev,
  (VTBL_ENTRY)&_ZN5S32C73v82Ev,
  (VTBL_ENTRY)&_ZN5S32C73v83Ev,
  (VTBL_ENTRY)&_ZN5S32C73v84Ev,
  (VTBL_ENTRY)&_ZN5S32C73v85Ev,
  (VTBL_ENTRY)&_ZN5S32C73v86Ev,
  (VTBL_ENTRY)&_ZN5S32C73v87Ev,
  (VTBL_ENTRY)&_ZN5S32C73v88Ev,
  (VTBL_ENTRY)&_ZN5S32C73v89Ev,
  (VTBL_ENTRY)&_ZN5S32C63v90Ev,
  (VTBL_ENTRY)&_ZN5S32C63v91Ev,
  (VTBL_ENTRY)&_ZN5S32C63v92Ev,
  (VTBL_ENTRY)&_ZN5S32C63v93Ev,
  (VTBL_ENTRY)&_ZN5S32C63v94Ev,
  (VTBL_ENTRY)&_ZN5S32C63v95Ev,
  (VTBL_ENTRY)&_ZN5S32C63v96Ev,
  (VTBL_ENTRY)&_ZN5S32C63v97Ev,
  (VTBL_ENTRY)&_ZN5S32C63v98Ev,
  (VTBL_ENTRY)&_ZN5S32C63v99Ev,
  (VTBL_ENTRY)&_ZN5S32C64v100Ev,
  (VTBL_ENTRY)&_ZN5S32C64v101Ev,
  (VTBL_ENTRY)&_ZN5S32C64v102Ev,
  (VTBL_ENTRY)&_ZN5S32C64v103Ev,
  (VTBL_ENTRY)&_ZN5S32C64v104Ev,
  (VTBL_ENTRY)&_ZN5S32C64v105Ev,
  (VTBL_ENTRY)&_ZN5S32C64v106Ev,
  (VTBL_ENTRY)&_ZN5S32C64v107Ev,
  (VTBL_ENTRY)&_ZN5S32C64v108Ev,
  (VTBL_ENTRY)&_ZN5S32C64v109Ev,
  (VTBL_ENTRY)&_ZN5S32C54v110Ev,
  (VTBL_ENTRY)&_ZN5S32C54v111Ev,
  (VTBL_ENTRY)&_ZN5S32C54v112Ev,
  (VTBL_ENTRY)&_ZN5S32C54v113Ev,
  (VTBL_ENTRY)&_ZN5S32C44v114Ev,
  (VTBL_ENTRY)&_ZN5S32C44v115Ev,
  (VTBL_ENTRY)&_ZN5S32C44v116Ev,
  (VTBL_ENTRY)&_ZN5S32C44v117Ev,
  (VTBL_ENTRY)&_ZN5S32C44v118Ev,
  (VTBL_ENTRY)&_ZN5S32C44v119Ev,
  (VTBL_ENTRY)&_ZN5S32C44v120Ev,
  (VTBL_ENTRY)&_ZN5S32C44v121Ev,
};
extern VTBL_ENTRY _ZTI5S32C4[];
extern  VTBL_ENTRY _ZTV5S32C4[];
Class_Descriptor cd_S32C4 = {  "S32C4", // class name
  bases_S32C4, 4,
  &(vtc_S32C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(304,228), // object size
  NSPAIRA(_ZTI5S32C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S32C4),122, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S32C3  : S32C4 {
  int s32c3f0;
  virtual  ~S32C3(); // _ZN5S32C3D1Ev
  virtual void  v122(); // _ZN5S32C34v122Ev
  virtual void  v123(); // _ZN5S32C34v123Ev
  S32C3(); // tgen
};
//SIG(-1 S32C3) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ 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 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 Fi FL Fp[4] Fi[2] Fp FC7{ m Fi[2]} Fp[2]} vd v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fi[2] Fp Fi[2] FC8{ BC9{ BC10{ BC11{ m Fp Fi[2]}}}} FC8 FC12{ m} FC8 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 Fi:1 Fi:1 Fi:1 FC13{ BC14{ BC11}} FC15{ BC16{ BC11}} FC17{ BC18{ BC11}} FC19{ BC20{ BC11}} Fi[3]} vd v109 v110 v111 v112 FC7 Fi:1 FC21{ BC22{ BC11}}} vd v113 v114 v115 v116 v117 v118 v119 v120 Fi Fi:1} vd v1 v2 Fi}


 S32C3 ::~S32C3(){ note_dtor("S32C3", this);}
void  S32C3 ::v122(){vfunc_called(this, "_ZN5S32C34v122Ev");}
void  S32C3 ::v123(){vfunc_called(this, "_ZN5S32C34v123Ev");}
S32C3 ::S32C3(){ note_ctor("S32C3", this);} // tgen

static void Test_S32C3()
{
  extern Class_Descriptor cd_S32C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(40,59)];
    init_test(&cd_S32C3, buf);
    S32C3 *dp, &lv = *(dp=new (buf) S32C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(312,232), "sizeof(S32C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S32C3)");
    check_base_class_offset(lv, (S32C8*)(S32C7*)(S32C6*)(S32C5*)(S32C4*), 0, "S32C3");
    check_base_class_offset(lv, (S32C7*)(S32C6*)(S32C5*)(S32C4*), 0, "S32C3");
    check_base_class_offset(lv, (S32C6*)(S32C5*)(S32C4*), 0, "S32C3");
    check_base_class_offset(lv, (S32C5*)(S32C4*), 0, "S32C3");
    check_base_class_offset(lv, (S32C4*), 0, "S32C3");
    check_field_offset(lv, s32c3f0, ABISELECT(304,228), "S32C3.s32c3f0");
    test_class_info(&lv, &cd_S32C3);
    dp->~S32C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS32C3(Test_S32C3, "S32C3", ABISELECT(312,232));

#else // __cplusplus

extern void _ZN5S32C3C1Ev();
extern void _ZN5S32C3D1Ev();
Name_Map name_map_S32C3[] = {
  NSPAIR(_ZN5S32C3C1Ev),
  NSPAIR(_ZN5S32C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S32C8;
extern VTBL_ENTRY _ZTI5S32C8[];
extern  VTBL_ENTRY _ZTV5S32C8[];
extern Class_Descriptor cd_S32C7;
extern VTBL_ENTRY _ZTI5S32C7[];
extern  VTBL_ENTRY _ZTV5S32C7[];
extern Class_Descriptor cd_S32C6;
extern VTBL_ENTRY _ZTI5S32C6[];
extern  VTBL_ENTRY _ZTV5S32C6[];
extern Class_Descriptor cd_S32C5;
extern VTBL_ENTRY _ZTI5S32C5[];
extern  VTBL_ENTRY _ZTV5S32C5[];
extern Class_Descriptor cd_S32C4;
extern VTBL_ENTRY _ZTI5S32C4[];
extern  VTBL_ENTRY _ZTV5S32C4[];
static Base_Class bases_S32C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S32C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S32C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S32C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S32C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S32C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S32C3[];
extern void _ZN5S32C3D1Ev();
extern void _ZN5S32C3D0Ev();
extern void _ZN5S32C82v4Ev();
extern void _ZN5S32C82v5Ev();
extern void _ZN5S32C82v6Ev();
extern void _ZN5S32C82v7Ev();
extern void _ZN5S32C82v8Ev();
extern void _ZN5S32C82v9Ev();
extern void _ZN5S32C83v10Ev();
extern void _ZN5S32C83v11Ev();
extern void _ZN5S32C83v12Ev();
extern void _ZN5S32C83v13Ev();
extern void _ZN5S32C83v14Ev();
extern void _ZN5S32C83v15Ev();
extern void _ZN5S32C83v16Ev();
extern void _ZN5S32C83v17Ev();
extern void _ZN5S32C83v18Ev();
extern void _ZN5S32C83v19Ev();
extern void _ZN5S32C83v20Ev();
extern void _ZN5S32C83v21Ev();
extern void _ZN5S32C83v22Ev();
extern void _ZN5S32C83v23Ev();
extern void _ZN5S32C83v24Ev();
extern void _ZN5S32C83v25Ev();
extern void _ZN5S32C83v26Ev();
extern void _ZN5S32C83v27Ev();
extern void _ZN5S32C83v28Ev();
extern void _ZN5S32C83v29Ev();
extern void _ZN5S32C83v30Ev();
extern void _ZN5S32C83v31Ev();
extern void _ZN5S32C83v32Ev();
extern void _ZN5S32C83v33Ev();
extern void _ZN5S32C83v34Ev();
extern void _ZN5S32C83v35Ev();
extern void _ZN5S32C83v36Ev();
extern void _ZN5S32C83v37Ev();
extern void _ZN5S32C83v38Ev();
extern void _ZN5S32C83v39Ev();
extern void _ZN5S32C83v40Ev();
extern void _ZN5S32C83v41Ev();
extern void _ZN5S32C83v42Ev();
extern void _ZN5S32C83v43Ev();
extern void _ZN5S32C83v44Ev();
extern void _ZN5S32C83v45Ev();
extern void _ZN5S32C83v46Ev();
extern void _ZN5S32C83v47Ev();
extern void _ZN5S32C83v48Ev();
extern void _ZN5S32C83v49Ev();
extern void _ZN5S32C83v50Ev();
extern void _ZN5S32C83v51Ev();
extern void _ZN5S32C83v52Ev();
extern void _ZN5S32C83v53Ev();
extern void _ZN5S32C83v54Ev();
extern void _ZN5S32C83v55Ev();
extern void _ZN5S32C83v56Ev();
extern void _ZN5S32C83v57Ev();
extern void _ZN5S32C83v58Ev();
extern void _ZN5S32C83v59Ev();
extern void _ZN5S32C83v60Ev();
extern void _ZN5S32C83v61Ev();
extern void _ZN5S32C83v62Ev();
extern void _ZN5S32C83v63Ev();
extern void _ZN5S32C83v64Ev();
extern void _ZN5S32C83v65Ev();
extern void _ZN5S32C83v66Ev();
extern void _ZN5S32C83v67Ev();
extern void _ZN5S32C73v68Ev();
extern void _ZN5S32C73v69Ev();
extern void _ZN5S32C73v70Ev();
extern void _ZN5S32C73v71Ev();
extern void _ZN5S32C73v72Ev();
extern void _ZN5S32C73v73Ev();
extern void _ZN5S32C73v74Ev();
extern void _ZN5S32C73v75Ev();
extern void _ZN5S32C73v76Ev();
extern void _ZN5S32C73v77Ev();
extern void _ZN5S32C73v78Ev();
extern void _ZN5S32C73v79Ev();
extern void _ZN5S32C73v80Ev();
extern void _ZN5S32C73v81Ev();
extern void _ZN5S32C73v82Ev();
extern void _ZN5S32C73v83Ev();
extern void _ZN5S32C73v84Ev();
extern void _ZN5S32C73v85Ev();
extern void _ZN5S32C73v86Ev();
extern void _ZN5S32C73v87Ev();
extern void _ZN5S32C73v88Ev();
extern void _ZN5S32C73v89Ev();
extern void _ZN5S32C63v90Ev();
extern void _ZN5S32C63v91Ev();
extern void _ZN5S32C63v92Ev();
extern void _ZN5S32C63v93Ev();
extern void _ZN5S32C63v94Ev();
extern void _ZN5S32C63v95Ev();
extern void _ZN5S32C63v96Ev();
extern void _ZN5S32C63v97Ev();
extern void _ZN5S32C63v98Ev();
extern void _ZN5S32C63v99Ev();
extern void _ZN5S32C64v100Ev();
extern void _ZN5S32C64v101Ev();
extern void _ZN5S32C64v102Ev();
extern void _ZN5S32C64v103Ev();
extern void _ZN5S32C64v104Ev();
extern void _ZN5S32C64v105Ev();
extern void _ZN5S32C64v106Ev();
extern void _ZN5S32C64v107Ev();
extern void _ZN5S32C64v108Ev();
extern void _ZN5S32C64v109Ev();
extern void _ZN5S32C54v110Ev();
extern void _ZN5S32C54v111Ev();
extern void _ZN5S32C54v112Ev();
extern void _ZN5S32C54v113Ev();
extern void _ZN5S32C44v114Ev();
extern void _ZN5S32C44v115Ev();
extern void _ZN5S32C44v116Ev();
extern void _ZN5S32C44v117Ev();
extern void _ZN5S32C44v118Ev();
extern void _ZN5S32C44v119Ev();
extern void _ZN5S32C44v120Ev();
extern void _ZN5S32C44v121Ev();
extern void _ZN5S32C34v122Ev();
extern void _ZN5S32C34v123Ev();
static  VTBL_ENTRY vtc_S32C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S32C3[0]),
  (VTBL_ENTRY)&_ZN5S32C3D1Ev,
  (VTBL_ENTRY)&_ZN5S32C3D0Ev,
  (VTBL_ENTRY)&_ZN5S32C82v4Ev,
  (VTBL_ENTRY)&_ZN5S32C82v5Ev,
  (VTBL_ENTRY)&_ZN5S32C82v6Ev,
  (VTBL_ENTRY)&_ZN5S32C82v7Ev,
  (VTBL_ENTRY)&_ZN5S32C82v8Ev,
  (VTBL_ENTRY)&_ZN5S32C82v9Ev,
  (VTBL_ENTRY)&_ZN5S32C83v10Ev,
  (VTBL_ENTRY)&_ZN5S32C83v11Ev,
  (VTBL_ENTRY)&_ZN5S32C83v12Ev,
  (VTBL_ENTRY)&_ZN5S32C83v13Ev,
  (VTBL_ENTRY)&_ZN5S32C83v14Ev,
  (VTBL_ENTRY)&_ZN5S32C83v15Ev,
  (VTBL_ENTRY)&_ZN5S32C83v16Ev,
  (VTBL_ENTRY)&_ZN5S32C83v17Ev,
  (VTBL_ENTRY)&_ZN5S32C83v18Ev,
  (VTBL_ENTRY)&_ZN5S32C83v19Ev,
  (VTBL_ENTRY)&_ZN5S32C83v20Ev,
  (VTBL_ENTRY)&_ZN5S32C83v21Ev,
  (VTBL_ENTRY)&_ZN5S32C83v22Ev,
  (VTBL_ENTRY)&_ZN5S32C83v23Ev,
  (VTBL_ENTRY)&_ZN5S32C83v24Ev,
  (VTBL_ENTRY)&_ZN5S32C83v25Ev,
  (VTBL_ENTRY)&_ZN5S32C83v26Ev,
  (VTBL_ENTRY)&_ZN5S32C83v27Ev,
  (VTBL_ENTRY)&_ZN5S32C83v28Ev,
  (VTBL_ENTRY)&_ZN5S32C83v29Ev,
  (VTBL_ENTRY)&_ZN5S32C83v30Ev,
  (VTBL_ENTRY)&_ZN5S32C83v31Ev,
  (VTBL_ENTRY)&_ZN5S32C83v32Ev,
  (VTBL_ENTRY)&_ZN5S32C83v33Ev,
  (VTBL_ENTRY)&_ZN5S32C83v34Ev,
  (VTBL_ENTRY)&_ZN5S32C83v35Ev,
  (VTBL_ENTRY)&_ZN5S32C83v36Ev,
  (VTBL_ENTRY)&_ZN5S32C83v37Ev,
  (VTBL_ENTRY)&_ZN5S32C83v38Ev,
  (VTBL_ENTRY)&_ZN5S32C83v39Ev,
  (VTBL_ENTRY)&_ZN5S32C83v40Ev,
  (VTBL_ENTRY)&_ZN5S32C83v41Ev,
  (VTBL_ENTRY)&_ZN5S32C83v42Ev,
  (VTBL_ENTRY)&_ZN5S32C83v43Ev,
  (VTBL_ENTRY)&_ZN5S32C83v44Ev,
  (VTBL_ENTRY)&_ZN5S32C83v45Ev,
  (VTBL_ENTRY)&_ZN5S32C83v46Ev,
  (VTBL_ENTRY)&_ZN5S32C83v47Ev,
  (VTBL_ENTRY)&_ZN5S32C83v48Ev,
  (VTBL_ENTRY)&_ZN5S32C83v49Ev,
  (VTBL_ENTRY)&_ZN5S32C83v50Ev,
  (VTBL_ENTRY)&_ZN5S32C83v51Ev,
  (VTBL_ENTRY)&_ZN5S32C83v52Ev,
  (VTBL_ENTRY)&_ZN5S32C83v53Ev,
  (VTBL_ENTRY)&_ZN5S32C83v54Ev,
  (VTBL_ENTRY)&_ZN5S32C83v55Ev,
  (VTBL_ENTRY)&_ZN5S32C83v56Ev,
  (VTBL_ENTRY)&_ZN5S32C83v57Ev,
  (VTBL_ENTRY)&_ZN5S32C83v58Ev,
  (VTBL_ENTRY)&_ZN5S32C83v59Ev,
  (VTBL_ENTRY)&_ZN5S32C83v60Ev,
  (VTBL_ENTRY)&_ZN5S32C83v61Ev,
  (VTBL_ENTRY)&_ZN5S32C83v62Ev,
  (VTBL_ENTRY)&_ZN5S32C83v63Ev,
  (VTBL_ENTRY)&_ZN5S32C83v64Ev,
  (VTBL_ENTRY)&_ZN5S32C83v65Ev,
  (VTBL_ENTRY)&_ZN5S32C83v66Ev,
  (VTBL_ENTRY)&_ZN5S32C83v67Ev,
  (VTBL_ENTRY)&_ZN5S32C73v68Ev,
  (VTBL_ENTRY)&_ZN5S32C73v69Ev,
  (VTBL_ENTRY)&_ZN5S32C73v70Ev,
  (VTBL_ENTRY)&_ZN5S32C73v71Ev,
  (VTBL_ENTRY)&_ZN5S32C73v72Ev,
  (VTBL_ENTRY)&_ZN5S32C73v73Ev,
  (VTBL_ENTRY)&_ZN5S32C73v74Ev,
  (VTBL_ENTRY)&_ZN5S32C73v75Ev,
  (VTBL_ENTRY)&_ZN5S32C73v76Ev,
  (VTBL_ENTRY)&_ZN5S32C73v77Ev,
  (VTBL_ENTRY)&_ZN5S32C73v78Ev,
  (VTBL_ENTRY)&_ZN5S32C73v79Ev,
  (VTBL_ENTRY)&_ZN5S32C73v80Ev,
  (VTBL_ENTRY)&_ZN5S32C73v81Ev,
  (VTBL_ENTRY)&_ZN5S32C73v82Ev,
  (VTBL_ENTRY)&_ZN5S32C73v83Ev,
  (VTBL_ENTRY)&_ZN5S32C73v84Ev,
  (VTBL_ENTRY)&_ZN5S32C73v85Ev,
  (VTBL_ENTRY)&_ZN5S32C73v86Ev,
  (VTBL_ENTRY)&_ZN5S32C73v87Ev,
  (VTBL_ENTRY)&_ZN5S32C73v88Ev,
  (VTBL_ENTRY)&_ZN5S32C73v89Ev,
  (VTBL_ENTRY)&_ZN5S32C63v90Ev,
  (VTBL_ENTRY)&_ZN5S32C63v91Ev,
  (VTBL_ENTRY)&_ZN5S32C63v92Ev,
  (VTBL_ENTRY)&_ZN5S32C63v93Ev,
  (VTBL_ENTRY)&_ZN5S32C63v94Ev,
  (VTBL_ENTRY)&_ZN5S32C63v95Ev,
  (VTBL_ENTRY)&_ZN5S32C63v96Ev,
  (VTBL_ENTRY)&_ZN5S32C63v97Ev,
  (VTBL_ENTRY)&_ZN5S32C63v98Ev,
  (VTBL_ENTRY)&_ZN5S32C63v99Ev,
  (VTBL_ENTRY)&_ZN5S32C64v100Ev,
  (VTBL_ENTRY)&_ZN5S32C64v101Ev,
  (VTBL_ENTRY)&_ZN5S32C64v102Ev,
  (VTBL_ENTRY)&_ZN5S32C64v103Ev,
  (VTBL_ENTRY)&_ZN5S32C64v104Ev,
  (VTBL_ENTRY)&_ZN5S32C64v105Ev,
  (VTBL_ENTRY)&_ZN5S32C64v106Ev,
  (VTBL_ENTRY)&_ZN5S32C64v107Ev,
  (VTBL_ENTRY)&_ZN5S32C64v108Ev,
  (VTBL_ENTRY)&_ZN5S32C64v109Ev,
  (VTBL_ENTRY)&_ZN5S32C54v110Ev,
  (VTBL_ENTRY)&_ZN5S32C54v111Ev,
  (VTBL_ENTRY)&_ZN5S32C54v112Ev,
  (VTBL_ENTRY)&_ZN5S32C54v113Ev,
  (VTBL_ENTRY)&_ZN5S32C44v114Ev,
  (VTBL_ENTRY)&_ZN5S32C44v115Ev,
  (VTBL_ENTRY)&_ZN5S32C44v116Ev,
  (VTBL_ENTRY)&_ZN5S32C44v117Ev,
  (VTBL_ENTRY)&_ZN5S32C44v118Ev,
  (VTBL_ENTRY)&_ZN5S32C44v119Ev,
  (VTBL_ENTRY)&_ZN5S32C44v120Ev,
  (VTBL_ENTRY)&_ZN5S32C44v121Ev,
  (VTBL_ENTRY)&_ZN5S32C34v122Ev,
  (VTBL_ENTRY)&_ZN5S32C34v123Ev,
};
extern VTBL_ENTRY _ZTI5S32C3[];
extern  VTBL_ENTRY _ZTV5S32C3[];
Class_Descriptor cd_S32C3 = {  "S32C3", // class name
  bases_S32C3, 5,
  &(vtc_S32C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(312,232), // object size
  NSPAIRA(_ZTI5S32C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S32C3),124, //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  S32C2  : S32C3 {
  void *s32c2f0;
  ::S287C8_nt s32c2f1;
  virtual  ~S32C2(); // _ZN5S32C2D1Ev
  virtual void  v124(); // _ZN5S32C24v124Ev
  virtual void  v125(); // _ZN5S32C24v125Ev
  S32C2(); // tgen
};
//SIG(-1 S32C2) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ 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 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 Fi FL Fp[4] Fi[2] Fp FC8{ m Fi[2]} Fp[2]} vd v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fi[2] Fp Fi[2] FC9{ BC10{ BC11{ BC12{ m Fp Fi[2]}}}} FC9 FC13{ m} FC9 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 Fi:1 Fi:1 Fi:1 FC14{ BC15{ BC12}} FC16{ BC17{ BC12}} FC18{ BC19{ BC12}} FC20{ BC21{ BC12}} Fi[3]} vd v109 v110 v111 v112 FC8 Fi:1 FC22{ BC23{ BC12}}} vd v113 v114 v115 v116 v117 v118 v119 v120 Fi Fi:1} vd v121 v122 Fi} vd v1 v2 Fp FC9}


 S32C2 ::~S32C2(){ note_dtor("S32C2", this);}
void  S32C2 ::v124(){vfunc_called(this, "_ZN5S32C24v124Ev");}
void  S32C2 ::v125(){vfunc_called(this, "_ZN5S32C24v125Ev");}
S32C2 ::S32C2(){ note_ctor("S32C2", this);} // tgen

static void Test_S32C2()
{
  extern Class_Descriptor cd_S32C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(43,63)];
    init_test(&cd_S32C2, buf);
    S32C2 *dp, &lv = *(dp=new (buf) S32C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,248), "sizeof(S32C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S32C2)");
    check_base_class_offset(lv, (S32C8*)(S32C7*)(S32C6*)(S32C5*)(S32C4*)(S32C3*), 0, "S32C2");
    check_base_class_offset(lv, (S32C7*)(S32C6*)(S32C5*)(S32C4*)(S32C3*), 0, "S32C2");
    check_base_class_offset(lv, (S32C6*)(S32C5*)(S32C4*)(S32C3*), 0, "S32C2");
    check_base_class_offset(lv, (S32C5*)(S32C4*)(S32C3*), 0, "S32C2");
    check_base_class_offset(lv, (S32C4*)(S32C3*), 0, "S32C2");
    check_base_class_offset(lv, (S32C3*), 0, "S32C2");
    check_field_offset(lv, s32c2f0, ABISELECT(312,232), "S32C2.s32c2f0");
    check_field_offset(lv, s32c2f1, ABISELECT(320,236), "S32C2.s32c2f1");
    test_class_info(&lv, &cd_S32C2);
    dp->~S32C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS32C2(Test_S32C2, "S32C2", ABISELECT(336,248));

#else // __cplusplus

extern void _ZN5S32C2C1Ev();
extern void _ZN5S32C2D1Ev();
Name_Map name_map_S32C2[] = {
  NSPAIR(_ZN5S32C2C1Ev),
  NSPAIR(_ZN5S32C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S32C8;
extern VTBL_ENTRY _ZTI5S32C8[];
extern  VTBL_ENTRY _ZTV5S32C8[];
extern Class_Descriptor cd_S32C7;
extern VTBL_ENTRY _ZTI5S32C7[];
extern  VTBL_ENTRY _ZTV5S32C7[];
extern Class_Descriptor cd_S32C6;
extern VTBL_ENTRY _ZTI5S32C6[];
extern  VTBL_ENTRY _ZTV5S32C6[];
extern Class_Descriptor cd_S32C5;
extern VTBL_ENTRY _ZTI5S32C5[];
extern  VTBL_ENTRY _ZTV5S32C5[];
extern Class_Descriptor cd_S32C4;
extern VTBL_ENTRY _ZTI5S32C4[];
extern  VTBL_ENTRY _ZTV5S32C4[];
extern Class_Descriptor cd_S32C3;
extern VTBL_ENTRY _ZTI5S32C3[];
extern  VTBL_ENTRY _ZTV5S32C3[];
static Base_Class bases_S32C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S32C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S32C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S32C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S32C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S32C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S32C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S32C2[];
extern void _ZN5S32C2D1Ev();
extern void _ZN5S32C2D0Ev();
extern void _ZN5S32C82v4Ev();
extern void _ZN5S32C82v5Ev();
extern void _ZN5S32C82v6Ev();
extern void _ZN5S32C82v7Ev();
extern void _ZN5S32C82v8Ev();
extern void _ZN5S32C82v9Ev();
extern void _ZN5S32C83v10Ev();
extern void _ZN5S32C83v11Ev();
extern void _ZN5S32C83v12Ev();
extern void _ZN5S32C83v13Ev();
extern void _ZN5S32C83v14Ev();
extern void _ZN5S32C83v15Ev();
extern void _ZN5S32C83v16Ev();
extern void _ZN5S32C83v17Ev();
extern void _ZN5S32C83v18Ev();
extern void _ZN5S32C83v19Ev();
extern void _ZN5S32C83v20Ev();
extern void _ZN5S32C83v21Ev();
extern void _ZN5S32C83v22Ev();
extern void _ZN5S32C83v23Ev();
extern void _ZN5S32C83v24Ev();
extern void _ZN5S32C83v25Ev();
extern void _ZN5S32C83v26Ev();
extern void _ZN5S32C83v27Ev();
extern void _ZN5S32C83v28Ev();
extern void _ZN5S32C83v29Ev();
extern void _ZN5S32C83v30Ev();
extern void _ZN5S32C83v31Ev();
extern void _ZN5S32C83v32Ev();
extern void _ZN5S32C83v33Ev();
extern void _ZN5S32C83v34Ev();
extern void _ZN5S32C83v35Ev();
extern void _ZN5S32C83v36Ev();
extern void _ZN5S32C83v37Ev();
extern void _ZN5S32C83v38Ev();
extern void _ZN5S32C83v39Ev();
extern void _ZN5S32C83v40Ev();
extern void _ZN5S32C83v41Ev();
extern void _ZN5S32C83v42Ev();
extern void _ZN5S32C83v43Ev();
extern void _ZN5S32C83v44Ev();
extern void _ZN5S32C83v45Ev();
extern void _ZN5S32C83v46Ev();
extern void _ZN5S32C83v47Ev();
extern void _ZN5S32C83v48Ev();
extern void _ZN5S32C83v49Ev();
extern void _ZN5S32C83v50Ev();
extern void _ZN5S32C83v51Ev();
extern void _ZN5S32C83v52Ev();
extern void _ZN5S32C83v53Ev();
extern void _ZN5S32C83v54Ev();
extern void _ZN5S32C83v55Ev();
extern void _ZN5S32C83v56Ev();
extern void _ZN5S32C83v57Ev();
extern void _ZN5S32C83v58Ev();
extern void _ZN5S32C83v59Ev();
extern void _ZN5S32C83v60Ev();
extern void _ZN5S32C83v61Ev();
extern void _ZN5S32C83v62Ev();
extern void _ZN5S32C83v63Ev();
extern void _ZN5S32C83v64Ev();
extern void _ZN5S32C83v65Ev();
extern void _ZN5S32C83v66Ev();
extern void _ZN5S32C83v67Ev();
extern void _ZN5S32C73v68Ev();
extern void _ZN5S32C73v69Ev();
extern void _ZN5S32C73v70Ev();
extern void _ZN5S32C73v71Ev();
extern void _ZN5S32C73v72Ev();
extern void _ZN5S32C73v73Ev();
extern void _ZN5S32C73v74Ev();
extern void _ZN5S32C73v75Ev();
extern void _ZN5S32C73v76Ev();
extern void _ZN5S32C73v77Ev();
extern void _ZN5S32C73v78Ev();
extern void _ZN5S32C73v79Ev();
extern void _ZN5S32C73v80Ev();
extern void _ZN5S32C73v81Ev();
extern void _ZN5S32C73v82Ev();
extern void _ZN5S32C73v83Ev();
extern void _ZN5S32C73v84Ev();
extern void _ZN5S32C73v85Ev();
extern void _ZN5S32C73v86Ev();
extern void _ZN5S32C73v87Ev();
extern void _ZN5S32C73v88Ev();
extern void _ZN5S32C73v89Ev();
extern void _ZN5S32C63v90Ev();
extern void _ZN5S32C63v91Ev();
extern void _ZN5S32C63v92Ev();
extern void _ZN5S32C63v93Ev();
extern void _ZN5S32C63v94Ev();
extern void _ZN5S32C63v95Ev();
extern void _ZN5S32C63v96Ev();
extern void _ZN5S32C63v97Ev();
extern void _ZN5S32C63v98Ev();
extern void _ZN5S32C63v99Ev();
extern void _ZN5S32C64v100Ev();
extern void _ZN5S32C64v101Ev();
extern void _ZN5S32C64v102Ev();
extern void _ZN5S32C64v103Ev();
extern void _ZN5S32C64v104Ev();
extern void _ZN5S32C64v105Ev();
extern void _ZN5S32C64v106Ev();
extern void _ZN5S32C64v107Ev();
extern void _ZN5S32C64v108Ev();
extern void _ZN5S32C64v109Ev();
extern void _ZN5S32C54v110Ev();
extern void _ZN5S32C54v111Ev();
extern void _ZN5S32C54v112Ev();
extern void _ZN5S32C54v113Ev();
extern void _ZN5S32C44v114Ev();
extern void _ZN5S32C44v115Ev();
extern void _ZN5S32C44v116Ev();
extern void _ZN5S32C44v117Ev();
extern void _ZN5S32C44v118Ev();
extern void _ZN5S32C44v119Ev();
extern void _ZN5S32C44v120Ev();
extern void _ZN5S32C44v121Ev();
extern void _ZN5S32C34v122Ev();
extern void _ZN5S32C34v123Ev();
extern void _ZN5S32C24v124Ev();
extern void _ZN5S32C24v125Ev();
static  VTBL_ENTRY vtc_S32C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S32C2[0]),
  (VTBL_ENTRY)&_ZN5S32C2D1Ev,
  (VTBL_ENTRY)&_ZN5S32C2D0Ev,
  (VTBL_ENTRY)&_ZN5S32C82v4Ev,
  (VTBL_ENTRY)&_ZN5S32C82v5Ev,
  (VTBL_ENTRY)&_ZN5S32C82v6Ev,
  (VTBL_ENTRY)&_ZN5S32C82v7Ev,
  (VTBL_ENTRY)&_ZN5S32C82v8Ev,
  (VTBL_ENTRY)&_ZN5S32C82v9Ev,
  (VTBL_ENTRY)&_ZN5S32C83v10Ev,
  (VTBL_ENTRY)&_ZN5S32C83v11Ev,
  (VTBL_ENTRY)&_ZN5S32C83v12Ev,
  (VTBL_ENTRY)&_ZN5S32C83v13Ev,
  (VTBL_ENTRY)&_ZN5S32C83v14Ev,
  (VTBL_ENTRY)&_ZN5S32C83v15Ev,
  (VTBL_ENTRY)&_ZN5S32C83v16Ev,
  (VTBL_ENTRY)&_ZN5S32C83v17Ev,
  (VTBL_ENTRY)&_ZN5S32C83v18Ev,
  (VTBL_ENTRY)&_ZN5S32C83v19Ev,
  (VTBL_ENTRY)&_ZN5S32C83v20Ev,
  (VTBL_ENTRY)&_ZN5S32C83v21Ev,
  (VTBL_ENTRY)&_ZN5S32C83v22Ev,
  (VTBL_ENTRY)&_ZN5S32C83v23Ev,
  (VTBL_ENTRY)&_ZN5S32C83v24Ev,
  (VTBL_ENTRY)&_ZN5S32C83v25Ev,
  (VTBL_ENTRY)&_ZN5S32C83v26Ev,
  (VTBL_ENTRY)&_ZN5S32C83v27Ev,
  (VTBL_ENTRY)&_ZN5S32C83v28Ev,
  (VTBL_ENTRY)&_ZN5S32C83v29Ev,
  (VTBL_ENTRY)&_ZN5S32C83v30Ev,
  (VTBL_ENTRY)&_ZN5S32C83v31Ev,
  (VTBL_ENTRY)&_ZN5S32C83v32Ev,
  (VTBL_ENTRY)&_ZN5S32C83v33Ev,
  (VTBL_ENTRY)&_ZN5S32C83v34Ev,
  (VTBL_ENTRY)&_ZN5S32C83v35Ev,
  (VTBL_ENTRY)&_ZN5S32C83v36Ev,
  (VTBL_ENTRY)&_ZN5S32C83v37Ev,
  (VTBL_ENTRY)&_ZN5S32C83v38Ev,
  (VTBL_ENTRY)&_ZN5S32C83v39Ev,
  (VTBL_ENTRY)&_ZN5S32C83v40Ev,
  (VTBL_ENTRY)&_ZN5S32C83v41Ev,
  (VTBL_ENTRY)&_ZN5S32C83v42Ev,
  (VTBL_ENTRY)&_ZN5S32C83v43Ev,
  (VTBL_ENTRY)&_ZN5S32C83v44Ev,
  (VTBL_ENTRY)&_ZN5S32C83v45Ev,
  (VTBL_ENTRY)&_ZN5S32C83v46Ev,
  (VTBL_ENTRY)&_ZN5S32C83v47Ev,
  (VTBL_ENTRY)&_ZN5S32C83v48Ev,
  (VTBL_ENTRY)&_ZN5S32C83v49Ev,
  (VTBL_ENTRY)&_ZN5S32C83v50Ev,
  (VTBL_ENTRY)&_ZN5S32C83v51Ev,
  (VTBL_ENTRY)&_ZN5S32C83v52Ev,
  (VTBL_ENTRY)&_ZN5S32C83v53Ev,
  (VTBL_ENTRY)&_ZN5S32C83v54Ev,
  (VTBL_ENTRY)&_ZN5S32C83v55Ev,
  (VTBL_ENTRY)&_ZN5S32C83v56Ev,
  (VTBL_ENTRY)&_ZN5S32C83v57Ev,
  (VTBL_ENTRY)&_ZN5S32C83v58Ev,
  (VTBL_ENTRY)&_ZN5S32C83v59Ev,
  (VTBL_ENTRY)&_ZN5S32C83v60Ev,
  (VTBL_ENTRY)&_ZN5S32C83v61Ev,
  (VTBL_ENTRY)&_ZN5S32C83v62Ev,
  (VTBL_ENTRY)&_ZN5S32C83v63Ev,
  (VTBL_ENTRY)&_ZN5S32C83v64Ev,
  (VTBL_ENTRY)&_ZN5S32C83v65Ev,
  (VTBL_ENTRY)&_ZN5S32C83v66Ev,
  (VTBL_ENTRY)&_ZN5S32C83v67Ev,
  (VTBL_ENTRY)&_ZN5S32C73v68Ev,
  (VTBL_ENTRY)&_ZN5S32C73v69Ev,
  (VTBL_ENTRY)&_ZN5S32C73v70Ev,
  (VTBL_ENTRY)&_ZN5S32C73v71Ev,
  (VTBL_ENTRY)&_ZN5S32C73v72Ev,
  (VTBL_ENTRY)&_ZN5S32C73v73Ev,
  (VTBL_ENTRY)&_ZN5S32C73v74Ev,
  (VTBL_ENTRY)&_ZN5S32C73v75Ev,
  (VTBL_ENTRY)&_ZN5S32C73v76Ev,
  (VTBL_ENTRY)&_ZN5S32C73v77Ev,
  (VTBL_ENTRY)&_ZN5S32C73v78Ev,
  (VTBL_ENTRY)&_ZN5S32C73v79Ev,
  (VTBL_ENTRY)&_ZN5S32C73v80Ev,
  (VTBL_ENTRY)&_ZN5S32C73v81Ev,
  (VTBL_ENTRY)&_ZN5S32C73v82Ev,
  (VTBL_ENTRY)&_ZN5S32C73v83Ev,
  (VTBL_ENTRY)&_ZN5S32C73v84Ev,
  (VTBL_ENTRY)&_ZN5S32C73v85Ev,
  (VTBL_ENTRY)&_ZN5S32C73v86Ev,
  (VTBL_ENTRY)&_ZN5S32C73v87Ev,
  (VTBL_ENTRY)&_ZN5S32C73v88Ev,
  (VTBL_ENTRY)&_ZN5S32C73v89Ev,
  (VTBL_ENTRY)&_ZN5S32C63v90Ev,
  (VTBL_ENTRY)&_ZN5S32C63v91Ev,
  (VTBL_ENTRY)&_ZN5S32C63v92Ev,
  (VTBL_ENTRY)&_ZN5S32C63v93Ev,
  (VTBL_ENTRY)&_ZN5S32C63v94Ev,
  (VTBL_ENTRY)&_ZN5S32C63v95Ev,
  (VTBL_ENTRY)&_ZN5S32C63v96Ev,
  (VTBL_ENTRY)&_ZN5S32C63v97Ev,
  (VTBL_ENTRY)&_ZN5S32C63v98Ev,
  (VTBL_ENTRY)&_ZN5S32C63v99Ev,
  (VTBL_ENTRY)&_ZN5S32C64v100Ev,
  (VTBL_ENTRY)&_ZN5S32C64v101Ev,
  (VTBL_ENTRY)&_ZN5S32C64v102Ev,
  (VTBL_ENTRY)&_ZN5S32C64v103Ev,
  (VTBL_ENTRY)&_ZN5S32C64v104Ev,
  (VTBL_ENTRY)&_ZN5S32C64v105Ev,
  (VTBL_ENTRY)&_ZN5S32C64v106Ev,
  (VTBL_ENTRY)&_ZN5S32C64v107Ev,
  (VTBL_ENTRY)&_ZN5S32C64v108Ev,
  (VTBL_ENTRY)&_ZN5S32C64v109Ev,
  (VTBL_ENTRY)&_ZN5S32C54v110Ev,
  (VTBL_ENTRY)&_ZN5S32C54v111Ev,
  (VTBL_ENTRY)&_ZN5S32C54v112Ev,
  (VTBL_ENTRY)&_ZN5S32C54v113Ev,
  (VTBL_ENTRY)&_ZN5S32C44v114Ev,
  (VTBL_ENTRY)&_ZN5S32C44v115Ev,
  (VTBL_ENTRY)&_ZN5S32C44v116Ev,
  (VTBL_ENTRY)&_ZN5S32C44v117Ev,
  (VTBL_ENTRY)&_ZN5S32C44v118Ev,
  (VTBL_ENTRY)&_ZN5S32C44v119Ev,
  (VTBL_ENTRY)&_ZN5S32C44v120Ev,
  (VTBL_ENTRY)&_ZN5S32C44v121Ev,
  (VTBL_ENTRY)&_ZN5S32C34v122Ev,
  (VTBL_ENTRY)&_ZN5S32C34v123Ev,
  (VTBL_ENTRY)&_ZN5S32C24v124Ev,
  (VTBL_ENTRY)&_ZN5S32C24v125Ev,
};
extern VTBL_ENTRY _ZTI5S32C2[];
extern  VTBL_ENTRY _ZTV5S32C2[];
Class_Descriptor cd_S32C2 = {  "S32C2", // class name
  bases_S32C2, 6,
  &(vtc_S32C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(336,248), // object size
  NSPAIRA(_ZTI5S32C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S32C2),126, //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  S32C27_nt  {
  int s32c27f0[4];
  unsigned int s32c27f1:1;
  void  mf32c27(); // _ZN9S32C27_nt7mf32c27Ev
};
//SIG(-1 S32C27_nt) C1{ m Fi[4] Fi:1}


void  S32C27_nt ::mf32c27(){}

//skip512 S32C27_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S32C1  : S32C2 {
  ::S287C8_nt s32c1f0;
  void *s32c1f1;
  ::S287C19 s32c1f2;
  ::S32C27_nt s32c1f3;
  unsigned int s32c1f4:1;
  virtual  ~S32C1(); // _ZN5S32C1D1Ev
  virtual void  v1(); // _ZN5S32C12v1Ev
  virtual void  v2(); // _ZN5S32C12v2Ev
  virtual void  v3(); // _ZN5S32C12v3Ev
  S32C1(); // tgen
};
//SIG(1 S32C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ BC7{ BC8{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 Fi FL Fp[4] Fi[2] Fp FC9{ m Fi[2]} Fp[2]} vd v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 Fi[2] Fp Fi[2] FC10{ BC11{ BC12{ BC13{ m Fp Fi[2]}}}} FC10 FC14{ m} FC10 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 Fi:1 Fi:1 Fi:1 FC15{ BC16{ BC13}} FC17{ BC18{ BC13}} FC19{ BC20{ BC13}} FC21{ BC22{ BC13}} Fi[3]} vd v110 v111 v112 v113 FC9 Fi:1 FC23{ BC24{ BC13}}} vd v114 v115 v116 v117 v118 v119 v120 v121 Fi Fi:1} vd v122 v123 Fi} vd v124 v125 Fp FC10} vd v1 v2 v3 FC10 Fp FC25{ BC26{ BC13}} FC27{ m Fi[4] Fi:1} Fi:1}


 S32C1 ::~S32C1(){ note_dtor("S32C1", this);}
void  S32C1 ::v1(){vfunc_called(this, "_ZN5S32C12v1Ev");}
void  S32C1 ::v2(){vfunc_called(this, "_ZN5S32C12v2Ev");}
void  S32C1 ::v3(){vfunc_called(this, "_ZN5S32C12v3Ev");}
S32C1 ::S32C1(){ note_ctor("S32C1", this);} // tgen

static void Test_S32C1()
{
  extern Class_Descriptor cd_S32C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(51,76)];
    init_test(&cd_S32C1, buf);
    S32C1 *dp, &lv = *(dp=new (buf) S32C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(400,300), "sizeof(S32C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S32C1)");
    check_base_class_offset(lv, (S32C8*)(S32C7*)(S32C6*)(S32C5*)(S32C4*)(S32C3*)(S32C2*), 0, "S32C1");
    check_base_class_offset(lv, (S32C7*)(S32C6*)(S32C5*)(S32C4*)(S32C3*)(S32C2*), 0, "S32C1");
    check_base_class_offset(lv, (S32C6*)(S32C5*)(S32C4*)(S32C3*)(S32C2*), 0, "S32C1");
    check_base_class_offset(lv, (S32C5*)(S32C4*)(S32C3*)(S32C2*), 0, "S32C1");
    check_base_class_offset(lv, (S32C4*)(S32C3*)(S32C2*), 0, "S32C1");
    check_base_class_offset(lv, (S32C3*)(S32C2*), 0, "S32C1");
    check_base_class_offset(lv, (S32C2*), 0, "S32C1");
    check_field_offset(lv, s32c1f0, ABISELECT(336,248), "S32C1.s32c1f0");
    check_field_offset(lv, s32c1f1, ABISELECT(352,260), "S32C1.s32c1f1");
    check_field_offset(lv, s32c1f2, ABISELECT(360,264), "S32C1.s32c1f2");
    check_field_offset(lv, s32c1f3, ABISELECT(376,276), "S32C1.s32c1f3");
    set_bf_and_test(lv, s32c1f4, ABISELECT(396,296), 0, 1, 1, "S32C1");
    test_class_info(&lv, &cd_S32C1);
    dp->~S32C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS32C1(Test_S32C1, "S32C1", ABISELECT(400,300));

#else // __cplusplus

extern void _ZN5S32C1C1Ev();
extern void _ZN5S32C1D1Ev();
Name_Map name_map_S32C1[] = {
  NSPAIR(_ZN5S32C1C1Ev),
  NSPAIR(_ZN5S32C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S32C8;
extern VTBL_ENTRY _ZTI5S32C8[];
extern  VTBL_ENTRY _ZTV5S32C8[];
extern Class_Descriptor cd_S32C7;
extern VTBL_ENTRY _ZTI5S32C7[];
extern  VTBL_ENTRY _ZTV5S32C7[];
extern Class_Descriptor cd_S32C6;
extern VTBL_ENTRY _ZTI5S32C6[];
extern  VTBL_ENTRY _ZTV5S32C6[];
extern Class_Descriptor cd_S32C5;
extern VTBL_ENTRY _ZTI5S32C5[];
extern  VTBL_ENTRY _ZTV5S32C5[];
extern Class_Descriptor cd_S32C4;
extern VTBL_ENTRY _ZTI5S32C4[];
extern  VTBL_ENTRY _ZTV5S32C4[];
extern Class_Descriptor cd_S32C3;
extern VTBL_ENTRY _ZTI5S32C3[];
extern  VTBL_ENTRY _ZTV5S32C3[];
extern Class_Descriptor cd_S32C2;
extern VTBL_ENTRY _ZTI5S32C2[];
extern  VTBL_ENTRY _ZTV5S32C2[];
static Base_Class bases_S32C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S32C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S32C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S32C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S32C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S32C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S32C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S32C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S32C1[];
extern void _ZN5S32C1D1Ev();
extern void _ZN5S32C1D0Ev();
extern void _ZN5S32C82v4Ev();
extern void _ZN5S32C82v5Ev();
extern void _ZN5S32C82v6Ev();
extern void _ZN5S32C82v7Ev();
extern void _ZN5S32C82v8Ev();
extern void _ZN5S32C82v9Ev();
extern void _ZN5S32C83v10Ev();
extern void _ZN5S32C83v11Ev();
extern void _ZN5S32C83v12Ev();
extern void _ZN5S32C83v13Ev();
extern void _ZN5S32C83v14Ev();
extern void _ZN5S32C83v15Ev();
extern void _ZN5S32C83v16Ev();
extern void _ZN5S32C83v17Ev();
extern void _ZN5S32C83v18Ev();
extern void _ZN5S32C83v19Ev();
extern void _ZN5S32C83v20Ev();
extern void _ZN5S32C83v21Ev();
extern void _ZN5S32C83v22Ev();
extern void _ZN5S32C83v23Ev();
extern void _ZN5S32C83v24Ev();
extern void _ZN5S32C83v25Ev();
extern void _ZN5S32C83v26Ev();
extern void _ZN5S32C83v27Ev();
extern void _ZN5S32C83v28Ev();
extern void _ZN5S32C83v29Ev();
extern void _ZN5S32C83v30Ev();
extern void _ZN5S32C83v31Ev();
extern void _ZN5S32C83v32Ev();
extern void _ZN5S32C83v33Ev();
extern void _ZN5S32C83v34Ev();
extern void _ZN5S32C83v35Ev();
extern void _ZN5S32C83v36Ev();
extern void _ZN5S32C83v37Ev();
extern void _ZN5S32C83v38Ev();
extern void _ZN5S32C83v39Ev();
extern void _ZN5S32C83v40Ev();
extern void _ZN5S32C83v41Ev();
extern void _ZN5S32C83v42Ev();
extern void _ZN5S32C83v43Ev();
extern void _ZN5S32C83v44Ev();
extern void _ZN5S32C83v45Ev();
extern void _ZN5S32C83v46Ev();
extern void _ZN5S32C83v47Ev();
extern void _ZN5S32C83v48Ev();
extern void _ZN5S32C83v49Ev();
extern void _ZN5S32C83v50Ev();
extern void _ZN5S32C83v51Ev();
extern void _ZN5S32C83v52Ev();
extern void _ZN5S32C83v53Ev();
extern void _ZN5S32C83v54Ev();
extern void _ZN5S32C83v55Ev();
extern void _ZN5S32C83v56Ev();
extern void _ZN5S32C83v57Ev();
extern void _ZN5S32C83v58Ev();
extern void _ZN5S32C83v59Ev();
extern void _ZN5S32C83v60Ev();
extern void _ZN5S32C83v61Ev();
extern void _ZN5S32C83v62Ev();
extern void _ZN5S32C83v63Ev();
extern void _ZN5S32C83v64Ev();
extern void _ZN5S32C83v65Ev();
extern void _ZN5S32C83v66Ev();
extern void _ZN5S32C83v67Ev();
extern void _ZN5S32C73v68Ev();
extern void _ZN5S32C73v69Ev();
extern void _ZN5S32C73v70Ev();
extern void _ZN5S32C73v71Ev();
extern void _ZN5S32C73v72Ev();
extern void _ZN5S32C73v73Ev();
extern void _ZN5S32C73v74Ev();
extern void _ZN5S32C73v75Ev();
extern void _ZN5S32C73v76Ev();
extern void _ZN5S32C73v77Ev();
extern void _ZN5S32C73v78Ev();
extern void _ZN5S32C73v79Ev();
extern void _ZN5S32C73v80Ev();
extern void _ZN5S32C73v81Ev();
extern void _ZN5S32C73v82Ev();
extern void _ZN5S32C73v83Ev();
extern void _ZN5S32C73v84Ev();
extern void _ZN5S32C73v85Ev();
extern void _ZN5S32C73v86Ev();
extern void _ZN5S32C73v87Ev();
extern void _ZN5S32C73v88Ev();
extern void _ZN5S32C73v89Ev();
extern void _ZN5S32C63v90Ev();
extern void _ZN5S32C63v91Ev();
extern void _ZN5S32C63v92Ev();
extern void _ZN5S32C63v93Ev();
extern void _ZN5S32C63v94Ev();
extern void _ZN5S32C63v95Ev();
extern void _ZN5S32C63v96Ev();
extern void _ZN5S32C63v97Ev();
extern void _ZN5S32C63v98Ev();
extern void _ZN5S32C63v99Ev();
extern void _ZN5S32C64v100Ev();
extern void _ZN5S32C64v101Ev();
extern void _ZN5S32C64v102Ev();
extern void _ZN5S32C64v103Ev();
extern void _ZN5S32C64v104Ev();
extern void _ZN5S32C64v105Ev();
extern void _ZN5S32C64v106Ev();
extern void _ZN5S32C64v107Ev();
extern void _ZN5S32C64v108Ev();
extern void _ZN5S32C64v109Ev();
extern void _ZN5S32C54v110Ev();
extern void _ZN5S32C54v111Ev();
extern void _ZN5S32C54v112Ev();
extern void _ZN5S32C54v113Ev();
extern void _ZN5S32C44v114Ev();
extern void _ZN5S32C44v115Ev();
extern void _ZN5S32C44v116Ev();
extern void _ZN5S32C44v117Ev();
extern void _ZN5S32C44v118Ev();
extern void _ZN5S32C44v119Ev();
extern void _ZN5S32C44v120Ev();
extern void _ZN5S32C44v121Ev();
extern void _ZN5S32C34v122Ev();
extern void _ZN5S32C34v123Ev();
extern void _ZN5S32C24v124Ev();
extern void _ZN5S32C24v125Ev();
extern void _ZN5S32C12v1Ev();
extern void _ZN5S32C12v2Ev();
extern void _ZN5S32C12v3Ev();
static  VTBL_ENTRY vtc_S32C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S32C1[0]),
  (VTBL_ENTRY)&_ZN5S32C1D1Ev,
  (VTBL_ENTRY)&_ZN5S32C1D0Ev,
  (VTBL_ENTRY)&_ZN5S32C82v4Ev,
  (VTBL_ENTRY)&_ZN5S32C82v5Ev,
  (VTBL_ENTRY)&_ZN5S32C82v6Ev,
  (VTBL_ENTRY)&_ZN5S32C82v7Ev,
  (VTBL_ENTRY)&_ZN5S32C82v8Ev,
  (VTBL_ENTRY)&_ZN5S32C82v9Ev,
  (VTBL_ENTRY)&_ZN5S32C83v10Ev,
  (VTBL_ENTRY)&_ZN5S32C83v11Ev,
  (VTBL_ENTRY)&_ZN5S32C83v12Ev,
  (VTBL_ENTRY)&_ZN5S32C83v13Ev,
  (VTBL_ENTRY)&_ZN5S32C83v14Ev,
  (VTBL_ENTRY)&_ZN5S32C83v15Ev,
  (VTBL_ENTRY)&_ZN5S32C83v16Ev,
  (VTBL_ENTRY)&_ZN5S32C83v17Ev,
  (VTBL_ENTRY)&_ZN5S32C83v18Ev,
  (VTBL_ENTRY)&_ZN5S32C83v19Ev,
  (VTBL_ENTRY)&_ZN5S32C83v20Ev,
  (VTBL_ENTRY)&_ZN5S32C83v21Ev,
  (VTBL_ENTRY)&_ZN5S32C83v22Ev,
  (VTBL_ENTRY)&_ZN5S32C83v23Ev,
  (VTBL_ENTRY)&_ZN5S32C83v24Ev,
  (VTBL_ENTRY)&_ZN5S32C83v25Ev,
  (VTBL_ENTRY)&_ZN5S32C83v26Ev,
  (VTBL_ENTRY)&_ZN5S32C83v27Ev,
  (VTBL_ENTRY)&_ZN5S32C83v28Ev,
  (VTBL_ENTRY)&_ZN5S32C83v29Ev,
  (VTBL_ENTRY)&_ZN5S32C83v30Ev,
  (VTBL_ENTRY)&_ZN5S32C83v31Ev,
  (VTBL_ENTRY)&_ZN5S32C83v32Ev,
  (VTBL_ENTRY)&_ZN5S32C83v33Ev,
  (VTBL_ENTRY)&_ZN5S32C83v34Ev,
  (VTBL_ENTRY)&_ZN5S32C83v35Ev,
  (VTBL_ENTRY)&_ZN5S32C83v36Ev,
  (VTBL_ENTRY)&_ZN5S32C83v37Ev,
  (VTBL_ENTRY)&_ZN5S32C83v38Ev,
  (VTBL_ENTRY)&_ZN5S32C83v39Ev,
  (VTBL_ENTRY)&_ZN5S32C83v40Ev,
  (VTBL_ENTRY)&_ZN5S32C83v41Ev,
  (VTBL_ENTRY)&_ZN5S32C83v42Ev,
  (VTBL_ENTRY)&_ZN5S32C83v43Ev,
  (VTBL_ENTRY)&_ZN5S32C83v44Ev,
  (VTBL_ENTRY)&_ZN5S32C83v45Ev,
  (VTBL_ENTRY)&_ZN5S32C83v46Ev,
  (VTBL_ENTRY)&_ZN5S32C83v47Ev,
  (VTBL_ENTRY)&_ZN5S32C83v48Ev,
  (VTBL_ENTRY)&_ZN5S32C83v49Ev,
  (VTBL_ENTRY)&_ZN5S32C83v50Ev,
  (VTBL_ENTRY)&_ZN5S32C83v51Ev,
  (VTBL_ENTRY)&_ZN5S32C83v52Ev,
  (VTBL_ENTRY)&_ZN5S32C83v53Ev,
  (VTBL_ENTRY)&_ZN5S32C83v54Ev,
  (VTBL_ENTRY)&_ZN5S32C83v55Ev,
  (VTBL_ENTRY)&_ZN5S32C83v56Ev,
  (VTBL_ENTRY)&_ZN5S32C83v57Ev,
  (VTBL_ENTRY)&_ZN5S32C83v58Ev,
  (VTBL_ENTRY)&_ZN5S32C83v59Ev,
  (VTBL_ENTRY)&_ZN5S32C83v60Ev,
  (VTBL_ENTRY)&_ZN5S32C83v61Ev,
  (VTBL_ENTRY)&_ZN5S32C83v62Ev,
  (VTBL_ENTRY)&_ZN5S32C83v63Ev,
  (VTBL_ENTRY)&_ZN5S32C83v64Ev,
  (VTBL_ENTRY)&_ZN5S32C83v65Ev,
  (VTBL_ENTRY)&_ZN5S32C83v66Ev,
  (VTBL_ENTRY)&_ZN5S32C83v67Ev,
  (VTBL_ENTRY)&_ZN5S32C73v68Ev,
  (VTBL_ENTRY)&_ZN5S32C73v69Ev,
  (VTBL_ENTRY)&_ZN5S32C73v70Ev,
  (VTBL_ENTRY)&_ZN5S32C73v71Ev,
  (VTBL_ENTRY)&_ZN5S32C73v72Ev,
  (VTBL_ENTRY)&_ZN5S32C73v73Ev,
  (VTBL_ENTRY)&_ZN5S32C73v74Ev,
  (VTBL_ENTRY)&_ZN5S32C73v75Ev,
  (VTBL_ENTRY)&_ZN5S32C73v76Ev,
  (VTBL_ENTRY)&_ZN5S32C73v77Ev,
  (VTBL_ENTRY)&_ZN5S32C73v78Ev,
  (VTBL_ENTRY)&_ZN5S32C73v79Ev,
  (VTBL_ENTRY)&_ZN5S32C73v80Ev,
  (VTBL_ENTRY)&_ZN5S32C73v81Ev,
  (VTBL_ENTRY)&_ZN5S32C73v82Ev,
  (VTBL_ENTRY)&_ZN5S32C73v83Ev,
  (VTBL_ENTRY)&_ZN5S32C73v84Ev,
  (VTBL_ENTRY)&_ZN5S32C73v85Ev,
  (VTBL_ENTRY)&_ZN5S32C73v86Ev,
  (VTBL_ENTRY)&_ZN5S32C73v87Ev,
  (VTBL_ENTRY)&_ZN5S32C73v88Ev,
  (VTBL_ENTRY)&_ZN5S32C73v89Ev,
  (VTBL_ENTRY)&_ZN5S32C63v90Ev,
  (VTBL_ENTRY)&_ZN5S32C63v91Ev,
  (VTBL_ENTRY)&_ZN5S32C63v92Ev,
  (VTBL_ENTRY)&_ZN5S32C63v93Ev,
  (VTBL_ENTRY)&_ZN5S32C63v94Ev,
  (VTBL_ENTRY)&_ZN5S32C63v95Ev,
  (VTBL_ENTRY)&_ZN5S32C63v96Ev,
  (VTBL_ENTRY)&_ZN5S32C63v97Ev,
  (VTBL_ENTRY)&_ZN5S32C63v98Ev,
  (VTBL_ENTRY)&_ZN5S32C63v99Ev,
  (VTBL_ENTRY)&_ZN5S32C64v100Ev,
  (VTBL_ENTRY)&_ZN5S32C64v101Ev,
  (VTBL_ENTRY)&_ZN5S32C64v102Ev,
  (VTBL_ENTRY)&_ZN5S32C64v103Ev,
  (VTBL_ENTRY)&_ZN5S32C64v104Ev,
  (VTBL_ENTRY)&_ZN5S32C64v105Ev,
  (VTBL_ENTRY)&_ZN5S32C64v106Ev,
  (VTBL_ENTRY)&_ZN5S32C64v107Ev,
  (VTBL_ENTRY)&_ZN5S32C64v108Ev,
  (VTBL_ENTRY)&_ZN5S32C64v109Ev,
  (VTBL_ENTRY)&_ZN5S32C54v110Ev,
  (VTBL_ENTRY)&_ZN5S32C54v111Ev,
  (VTBL_ENTRY)&_ZN5S32C54v112Ev,
  (VTBL_ENTRY)&_ZN5S32C54v113Ev,
  (VTBL_ENTRY)&_ZN5S32C44v114Ev,
  (VTBL_ENTRY)&_ZN5S32C44v115Ev,
  (VTBL_ENTRY)&_ZN5S32C44v116Ev,
  (VTBL_ENTRY)&_ZN5S32C44v117Ev,
  (VTBL_ENTRY)&_ZN5S32C44v118Ev,
  (VTBL_ENTRY)&_ZN5S32C44v119Ev,
  (VTBL_ENTRY)&_ZN5S32C44v120Ev,
  (VTBL_ENTRY)&_ZN5S32C44v121Ev,
  (VTBL_ENTRY)&_ZN5S32C34v122Ev,
  (VTBL_ENTRY)&_ZN5S32C34v123Ev,
  (VTBL_ENTRY)&_ZN5S32C24v124Ev,
  (VTBL_ENTRY)&_ZN5S32C24v125Ev,
  (VTBL_ENTRY)&_ZN5S32C12v1Ev,
  (VTBL_ENTRY)&_ZN5S32C12v2Ev,
  (VTBL_ENTRY)&_ZN5S32C12v3Ev,
};
extern VTBL_ENTRY _ZTI5S32C1[];
extern  VTBL_ENTRY _ZTV5S32C1[];
Class_Descriptor cd_S32C1 = {  "S32C1", // class name
  bases_S32C1, 7,
  &(vtc_S32C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(400,300), // object size
  NSPAIRA(_ZTI5S32C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S32C1),129, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  7, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S33C8  {
  int s33c8f0;
  __tsi64 s33c8f1;
  void *s33c8f2[4];
  int s33c8f3[2];
  void *s33c8f4;
  ::S3350C4_nt s33c8f5;
  void *s33c8f6[2];
  virtual  ~S33C8(); // _ZN5S33C8D1Ev
  virtual void  v4(); // _ZN5S33C82v4Ev
  virtual void  v5(); // _ZN5S33C82v5Ev
  virtual void  v6(); // _ZN5S33C82v6Ev
  virtual void  v7(); // _ZN5S33C82v7Ev
  virtual void  v8(); // _ZN5S33C82v8Ev
  virtual void  v9(); // _ZN5S33C82v9Ev
  virtual void  v10(); // _ZN5S33C83v10Ev
  virtual void  v11(); // _ZN5S33C83v11Ev
  virtual void  v12(); // _ZN5S33C83v12Ev
  virtual void  v13(); // _ZN5S33C83v13Ev
  virtual void  v14(); // _ZN5S33C83v14Ev
  virtual void  v15(); // _ZN5S33C83v15Ev
  virtual void  v16(); // _ZN5S33C83v16Ev
  virtual void  v17(); // _ZN5S33C83v17Ev
  virtual void  v18(); // _ZN5S33C83v18Ev
  virtual void  v19(); // _ZN5S33C83v19Ev
  virtual void  v20(); // _ZN5S33C83v20Ev
  virtual void  v21(); // _ZN5S33C83v21Ev
  virtual void  v22(); // _ZN5S33C83v22Ev
  virtual void  v23(); // _ZN5S33C83v23Ev
  virtual void  v24(); // _ZN5S33C83v24Ev
  virtual void  v25(); // _ZN5S33C83v25Ev
  virtual void  v26(); // _ZN5S33C83v26Ev
  virtual void  v27(); // _ZN5S33C83v27Ev
  virtual void  v28(); // _ZN5S33C83v28Ev
  virtual void  v29(); // _ZN5S33C83v29Ev
  virtual void  v30(); // _ZN5S33C83v30Ev
  virtual void  v31(); // _ZN5S33C83v31Ev
  virtual void  v32(); // _ZN5S33C83v32Ev
  virtual void  v33(); // _ZN5S33C83v33Ev
  virtual void  v34(); // _ZN5S33C83v34Ev
  virtual void  v35(); // _ZN5S33C83v35Ev
  virtual void  v36(); // _ZN5S33C83v36Ev
  virtual void  v37(); // _ZN5S33C83v37Ev
  virtual void  v38(); // _ZN5S33C83v38Ev
  virtual void  v39(); // _ZN5S33C83v39Ev
  virtual void  v40(); // _ZN5S33C83v40Ev
  virtual void  v41(); // _ZN5S33C83v41Ev
  virtual void  v42(); // _ZN5S33C83v42Ev
  virtual void  v43(); // _ZN5S33C83v43Ev
  virtual void  v44(); // _ZN5S33C83v44Ev
  virtual void  v45(); // _ZN5S33C83v45Ev
  virtual void  v46(); // _ZN5S33C83v46Ev
  virtual void  v47(); // _ZN5S33C83v47Ev
  virtual void  v48(); // _ZN5S33C83v48Ev
  virtual void  v49(); // _ZN5S33C83v49Ev
  virtual void  v50(); // _ZN5S33C83v50Ev
  virtual void  v51(); // _ZN5S33C83v51Ev
  virtual void  v52(); // _ZN5S33C83v52Ev
  virtual void  v53(); // _ZN5S33C83v53Ev
  virtual void  v54(); // _ZN5S33C83v54Ev
  virtual void  v55(); // _ZN5S33C83v55Ev
  virtual void  v56(); // _ZN5S33C83v56Ev
  virtual void  v57(); // _ZN5S33C83v57Ev
  virtual void  v58(); // _ZN5S33C83v58Ev
  virtual void  v59(); // _ZN5S33C83v59Ev
  virtual void  v60(); // _ZN5S33C83v60Ev
  virtual void  v61(); // _ZN5S33C83v61Ev
  virtual void  v62(); // _ZN5S33C83v62Ev
  virtual void  v63(); // _ZN5S33C83v63Ev
  virtual void  v64(); // _ZN5S33C83v64Ev
  virtual void  v65(); // _ZN5S33C83v65Ev
  virtual void  v66(); // _ZN5S33C83v66Ev
  virtual void  v67(); // _ZN5S33C83v67Ev
  S33C8(); // tgen
};
//SIG(-1 S33C8) 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]}


 S33C8 ::~S33C8(){ note_dtor("S33C8", this);}
void  S33C8 ::v4(){vfunc_called(this, "_ZN5S33C82v4Ev");}
void  S33C8 ::v5(){vfunc_called(this, "_ZN5S33C82v5Ev");}
void  S33C8 ::v6(){vfunc_called(this, "_ZN5S33C82v6Ev");}
void  S33C8 ::v7(){vfunc_called(this, "_ZN5S33C82v7Ev");}
void  S33C8 ::v8(){vfunc_called(this, "_ZN5S33C82v8Ev");}
void  S33C8 ::v9(){vfunc_called(this, "_ZN5S33C82v9Ev");}
void  S33C8 ::v10(){vfunc_called(this, "_ZN5S33C83v10Ev");}
void  S33C8 ::v11(){vfunc_called(this, "_ZN5S33C83v11Ev");}
void  S33C8 ::v12(){vfunc_called(this, "_ZN5S33C83v12Ev");}
void  S33C8 ::v13(){vfunc_called(this, "_ZN5S33C83v13Ev");}
void  S33C8 ::v14(){vfunc_called(this, "_ZN5S33C83v14Ev");}
void  S33C8 ::v15(){vfunc_called(this, "_ZN5S33C83v15Ev");}
void  S33C8 ::v16(){vfunc_called(this, "_ZN5S33C83v16Ev");}
void  S33C8 ::v17(){vfunc_called(this, "_ZN5S33C83v17Ev");}
void  S33C8 ::v18(){vfunc_called(this, "_ZN5S33C83v18Ev");}
void  S33C8 ::v19(){vfunc_called(this, "_ZN5S33C83v19Ev");}
void  S33C8 ::v20(){vfunc_called(this, "_ZN5S33C83v20Ev");}
void  S33C8 ::v21(){vfunc_called(this, "_ZN5S33C83v21Ev");}
void  S33C8 ::v22(){vfunc_called(this, "_ZN5S33C83v22Ev");}
void  S33C8 ::v23(){vfunc_called(this, "_ZN5S33C83v23Ev");}
void  S33C8 ::v24(){vfunc_called(this, "_ZN5S33C83v24Ev");}
void  S33C8 ::v25(){vfunc_called(this, "_ZN5S33C83v25Ev");}
void  S33C8 ::v26(){vfunc_called(this, "_ZN5S33C83v26Ev");}
void  S33C8 ::v27(){vfunc_called(this, "_ZN5S33C83v27Ev");}
void  S33C8 ::v28(){vfunc_called(this, "_ZN5S33C83v28Ev");}
void  S33C8 ::v29(){vfunc_called(this, "_ZN5S33C83v29Ev");}
void  S33C8 ::v30(){vfunc_called(this, "_ZN5S33C83v30Ev");}
void  S33C8 ::v31(){vfunc_called(this, "_ZN5S33C83v31Ev");}
void  S33C8 ::v32(){vfunc_called(this, "_ZN5S33C83v32Ev");}
void  S33C8 ::v33(){vfunc_called(this, "_ZN5S33C83v33Ev");}
void  S33C8 ::v34(){vfunc_called(this, "_ZN5S33C83v34Ev");}
void  S33C8 ::v35(){vfunc_called(this, "_ZN5S33C83v35Ev");}
void  S33C8 ::v36(){vfunc_called(this, "_ZN5S33C83v36Ev");}
void  S33C8 ::v37(){vfunc_called(this, "_ZN5S33C83v37Ev");}
void  S33C8 ::v38(){vfunc_called(this, "_ZN5S33C83v38Ev");}
void  S33C8 ::v39(){vfunc_called(this, "_ZN5S33C83v39Ev");}
void  S33C8 ::v40(){vfunc_called(this, "_ZN5S33C83v40Ev");}
void  S33C8 ::v41(){vfunc_called(this, "_ZN5S33C83v41Ev");}
void  S33C8 ::v42(){vfunc_called(this, "_ZN5S33C83v42Ev");}
void  S33C8 ::v43(){vfunc_called(this, "_ZN5S33C83v43Ev");}
void  S33C8 ::v44(){vfunc_called(this, "_ZN5S33C83v44Ev");}
void  S33C8 ::v45(){vfunc_called(this, "_ZN5S33C83v45Ev");}
void  S33C8 ::v46(){vfunc_called(this, "_ZN5S33C83v46Ev");}
void  S33C8 ::v47(){vfunc_called(this, "_ZN5S33C83v47Ev");}
void  S33C8 ::v48(){vfunc_called(this, "_ZN5S33C83v48Ev");}
void  S33C8 ::v49(){vfunc_called(this, "_ZN5S33C83v49Ev");}
void  S33C8 ::v50(){vfunc_called(this, "_ZN5S33C83v50Ev");}
void  S33C8 ::v51(){vfunc_called(this, "_ZN5S33C83v51Ev");}
void  S33C8 ::v52(){vfunc_called(this, "_ZN5S33C83v52Ev");}
void  S33C8 ::v53(){vfunc_called(this, "_ZN5S33C83v53Ev");}
void  S33C8 ::v54(){vfunc_called(this, "_ZN5S33C83v54Ev");}
void  S33C8 ::v55(){vfunc_called(this, "_ZN5S33C83v55Ev");}
void  S33C8 ::v56(){vfunc_called(this, "_ZN5S33C83v56Ev");}
void  S33C8 ::v57(){vfunc_called(this, "_ZN5S33C83v57Ev");}
void  S33C8 ::v58(){vfunc_called(this, "_ZN5S33C83v58Ev");}
void  S33C8 ::v59(){vfunc_called(this, "_ZN5S33C83v59Ev");}
void  S33C8 ::v60(){vfunc_called(this, "_ZN5S33C83v60Ev");}
void  S33C8 ::v61(){vfunc_called(this, "_ZN5S33C83v61Ev");}
void  S33C8 ::v62(){vfunc_called(this, "_ZN5S33C83v62Ev");}
void  S33C8 ::v63(){vfunc_called(this, "_ZN5S33C83v63Ev");}
void  S33C8 ::v64(){vfunc_called(this, "_ZN5S33C83v64Ev");}
void  S33C8 ::v65(){vfunc_called(this, "_ZN5S33C83v65Ev");}
void  S33C8 ::v66(){vfunc_called(this, "_ZN5S33C83v66Ev");}
void  S33C8 ::v67(){vfunc_called(this, "_ZN5S33C83v67Ev");}
S33C8 ::S33C8(){ note_ctor("S33C8", this);} // tgen

static void Test_S33C8()
{
  extern Class_Descriptor cd_S33C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S33C8, buf);
    S33C8 *dp, &lv = *(dp=new (buf) S33C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S33C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S33C8)");
    check_field_offset(lv, s33c8f0, ABISELECT(8,4), "S33C8.s33c8f0");
    check_field_offset(lv, s33c8f1, ABISELECT(16,8), "S33C8.s33c8f1");
    check_field_offset(lv, s33c8f2, ABISELECT(24,16), "S33C8.s33c8f2");
    check_field_offset(lv, s33c8f3, ABISELECT(56,32), "S33C8.s33c8f3");
    check_field_offset(lv, s33c8f4, ABISELECT(64,40), "S33C8.s33c8f4");
    check_field_offset(lv, s33c8f5, ABISELECT(72,44), "S33C8.s33c8f5");
    check_field_offset(lv, s33c8f6, ABISELECT(80,52), "S33C8.s33c8f6");
    test_class_info(&lv, &cd_S33C8);
    dp->~S33C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS33C8(Test_S33C8, "S33C8", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN5S33C8C1Ev();
extern void _ZN5S33C8D1Ev();
Name_Map name_map_S33C8[] = {
  NSPAIR(_ZN5S33C8C1Ev),
  NSPAIR(_ZN5S33C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI5S33C8[];
extern void _ZN5S33C8D1Ev();
extern void _ZN5S33C8D0Ev();
extern void _ZN5S33C82v4Ev();
extern void _ZN5S33C82v5Ev();
extern void _ZN5S33C82v6Ev();
extern void _ZN5S33C82v7Ev();
extern void _ZN5S33C82v8Ev();
extern void _ZN5S33C82v9Ev();
extern void _ZN5S33C83v10Ev();
extern void _ZN5S33C83v11Ev();
extern void _ZN5S33C83v12Ev();
extern void _ZN5S33C83v13Ev();
extern void _ZN5S33C83v14Ev();
extern void _ZN5S33C83v15Ev();
extern void _ZN5S33C83v16Ev();
extern void _ZN5S33C83v17Ev();
extern void _ZN5S33C83v18Ev();
extern void _ZN5S33C83v19Ev();
extern void _ZN5S33C83v20Ev();
extern void _ZN5S33C83v21Ev();
extern void _ZN5S33C83v22Ev();
extern void _ZN5S33C83v23Ev();
extern void _ZN5S33C83v24Ev();
extern void _ZN5S33C83v25Ev();
extern void _ZN5S33C83v26Ev();
extern void _ZN5S33C83v27Ev();
extern void _ZN5S33C83v28Ev();
extern void _ZN5S33C83v29Ev();
extern void _ZN5S33C83v30Ev();
extern void _ZN5S33C83v31Ev();
extern void _ZN5S33C83v32Ev();
extern void _ZN5S33C83v33Ev();
extern void _ZN5S33C83v34Ev();
extern void _ZN5S33C83v35Ev();
extern void _ZN5S33C83v36Ev();
extern void _ZN5S33C83v37Ev();
extern void _ZN5S33C83v38Ev();
extern void _ZN5S33C83v39Ev();
extern void _ZN5S33C83v40Ev();
extern void _ZN5S33C83v41Ev();
extern void _ZN5S33C83v42Ev();
extern void _ZN5S33C83v43Ev();
extern void _ZN5S33C83v44Ev();
extern void _ZN5S33C83v45Ev();
extern void _ZN5S33C83v46Ev();
extern void _ZN5S33C83v47Ev();
extern void _ZN5S33C83v48Ev();
extern void _ZN5S33C83v49Ev();
extern void _ZN5S33C83v50Ev();
extern void _ZN5S33C83v51Ev();
extern void _ZN5S33C83v52Ev();
extern void _ZN5S33C83v53Ev();
extern void _ZN5S33C83v54Ev();
extern void _ZN5S33C83v55Ev();
extern void _ZN5S33C83v56Ev();
extern void _ZN5S33C83v57Ev();
extern void _ZN5S33C83v58Ev();
extern void _ZN5S33C83v59Ev();
extern void _ZN5S33C83v60Ev();
extern void _ZN5S33C83v61Ev();
extern void _ZN5S33C83v62Ev();
extern void _ZN5S33C83v63Ev();
extern void _ZN5S33C83v64Ev();
extern void _ZN5S33C83v65Ev();
extern void _ZN5S33C83v66Ev();
extern void _ZN5S33C83v67Ev();
static  VTBL_ENTRY vtc_S33C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S33C8[0]),
  (VTBL_ENTRY)&_ZN5S33C8D1Ev,
  (VTBL_ENTRY)&_ZN5S33C8D0Ev,
  (VTBL_ENTRY)&_ZN5S33C82v4Ev,
  (VTBL_ENTRY)&_ZN5S33C82v5Ev,
  (VTBL_ENTRY)&_ZN5S33C82v6Ev,
  (VTBL_ENTRY)&_ZN5S33C82v7Ev,
  (VTBL_ENTRY)&_ZN5S33C82v8Ev,
  (VTBL_ENTRY)&_ZN5S33C82v9Ev,
  (VTBL_ENTRY)&_ZN5S33C83v10Ev,
  (VTBL_ENTRY)&_ZN5S33C83v11Ev,
  (VTBL_ENTRY)&_ZN5S33C83v12Ev,
  (VTBL_ENTRY)&_ZN5S33C83v13Ev,
  (VTBL_ENTRY)&_ZN5S33C83v14Ev,
  (VTBL_ENTRY)&_ZN5S33C83v15Ev,
  (VTBL_ENTRY)&_ZN5S33C83v16Ev,
  (VTBL_ENTRY)&_ZN5S33C83v17Ev,
  (VTBL_ENTRY)&_ZN5S33C83v18Ev,
  (VTBL_ENTRY)&_ZN5S33C83v19Ev,
  (VTBL_ENTRY)&_ZN5S33C83v20Ev,
  (VTBL_ENTRY)&_ZN5S33C83v21Ev,
  (VTBL_ENTRY)&_ZN5S33C83v22Ev,
  (VTBL_ENTRY)&_ZN5S33C83v23Ev,
  (VTBL_ENTRY)&_ZN5S33C83v24Ev,
  (VTBL_ENTRY)&_ZN5S33C83v25Ev,
  (VTBL_ENTRY)&_ZN5S33C83v26Ev,
  (VTBL_ENTRY)&_ZN5S33C83v27Ev,
  (VTBL_ENTRY)&_ZN5S33C83v28Ev,
  (VTBL_ENTRY)&_ZN5S33C83v29Ev,
  (VTBL_ENTRY)&_ZN5S33C83v30Ev,
  (VTBL_ENTRY)&_ZN5S33C83v31Ev,
  (VTBL_ENTRY)&_ZN5S33C83v32Ev,
  (VTBL_ENTRY)&_ZN5S33C83v33Ev,
  (VTBL_ENTRY)&_ZN5S33C83v34Ev,
  (VTBL_ENTRY)&_ZN5S33C83v35Ev,
  (VTBL_ENTRY)&_ZN5S33C83v36Ev,
  (VTBL_ENTRY)&_ZN5S33C83v37Ev,
  (VTBL_ENTRY)&_ZN5S33C83v38Ev,
  (VTBL_ENTRY)&_ZN5S33C83v39Ev,
  (VTBL_ENTRY)&_ZN5S33C83v40Ev,
  (VTBL_ENTRY)&_ZN5S33C83v41Ev,
  (VTBL_ENTRY)&_ZN5S33C83v42Ev,
  (VTBL_ENTRY)&_ZN5S33C83v43Ev,
  (VTBL_ENTRY)&_ZN5S33C83v44Ev,
  (VTBL_ENTRY)&_ZN5S33C83v45Ev,
  (VTBL_ENTRY)&_ZN5S33C83v46Ev,
  (VTBL_ENTRY)&_ZN5S33C83v47Ev,
  (VTBL_ENTRY)&_ZN5S33C83v48Ev,
  (VTBL_ENTRY)&_ZN5S33C83v49Ev,
  (VTBL_ENTRY)&_ZN5S33C83v50Ev,
  (VTBL_ENTRY)&_ZN5S33C83v51Ev,
  (VTBL_ENTRY)&_ZN5S33C83v52Ev,
  (VTBL_ENTRY)&_ZN5S33C83v53Ev,
  (VTBL_ENTRY)&_ZN5S33C83v54Ev,
  (VTBL_ENTRY)&_ZN5S33C83v55Ev,
  (VTBL_ENTRY)&_ZN5S33C83v56Ev,
  (VTBL_ENTRY)&_ZN5S33C83v57Ev,
  (VTBL_ENTRY)&_ZN5S33C83v58Ev,
  (VTBL_ENTRY)&_ZN5S33C83v59Ev,
  (VTBL_ENTRY)&_ZN5S33C83v60Ev,
  (VTBL_ENTRY)&_ZN5S33C83v61Ev,
  (VTBL_ENTRY)&_ZN5S33C83v62Ev,
  (VTBL_ENTRY)&_ZN5S33C83v63Ev,
  (VTBL_ENTRY)&_ZN5S33C83v64Ev,
  (VTBL_ENTRY)&_ZN5S33C83v65Ev,
  (VTBL_ENTRY)&_ZN5S33C83v66Ev,
  (VTBL_ENTRY)&_ZN5S33C83v67Ev,
};
extern VTBL_ENTRY _ZTI5S33C8[];
extern  VTBL_ENTRY _ZTV5S33C8[];
Class_Descriptor cd_S33C8 = {  "S33C8", // class name
  0,0,//no base classes
  &(vtc_S33C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI5S33C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV5S33C8),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  S33C7  : S33C8 {
  int s33c7f0[2];
  void *s33c7f1;
  int s33c7f2[2];
  ::S287C8_nt s33c7f3;
  ::S287C8_nt s33c7f4;
  ::S2121C38 s33c7f5;
  ::S287C8_nt s33c7f6;
  unsigned int s33c7f7:1;
  unsigned int s33c7f8:1;
  unsigned int s33c7f9:1;
  unsigned int s33c7f10:1;
  unsigned int s33c7f11:1;
  int s33c7f12[2];
  virtual  ~S33C7(); // _ZN5S33C7D1Ev
  virtual void  v68(); // _ZN5S33C73v68Ev
  virtual void  v69(); // _ZN5S33C73v69Ev
  virtual void  v70(); // _ZN5S33C73v70Ev
  virtual void  v71(); // _ZN5S33C73v71Ev
  virtual void  v72(); // _ZN5S33C73v72Ev
  virtual void  v73(); // _ZN5S33C73v73Ev
  virtual void  v74(); // _ZN5S33C73v74Ev
  virtual void  v75(); // _ZN5S33C73v75Ev
  virtual void  v76(); // _ZN5S33C73v76Ev
  virtual void  v77(); // _ZN5S33C73v77Ev
  virtual void  v78(); // _ZN5S33C73v78Ev
  virtual void  v79(); // _ZN5S33C73v79Ev
  virtual void  v80(); // _ZN5S33C73v80Ev
  virtual void  v81(); // _ZN5S33C73v81Ev
  virtual void  v82(); // _ZN5S33C73v82Ev
  virtual void  v83(); // _ZN5S33C73v83Ev
  virtual void  v84(); // _ZN5S33C73v84Ev
  virtual void  v85(); // _ZN5S33C73v85Ev
  virtual void  v86(); // _ZN5S33C73v86Ev
  virtual void  v87(); // _ZN5S33C73v87Ev
  virtual void  v88(); // _ZN5S33C73v88Ev
  virtual void  v89(); // _ZN5S33C73v89Ev
  S33C7(); // tgen
};
//SIG(-1 S33C7) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S33C7 ::~S33C7(){ note_dtor("S33C7", this);}
void  S33C7 ::v68(){vfunc_called(this, "_ZN5S33C73v68Ev");}
void  S33C7 ::v69(){vfunc_called(this, "_ZN5S33C73v69Ev");}
void  S33C7 ::v70(){vfunc_called(this, "_ZN5S33C73v70Ev");}
void  S33C7 ::v71(){vfunc_called(this, "_ZN5S33C73v71Ev");}
void  S33C7 ::v72(){vfunc_called(this, "_ZN5S33C73v72Ev");}
void  S33C7 ::v73(){vfunc_called(this, "_ZN5S33C73v73Ev");}
void  S33C7 ::v74(){vfunc_called(this, "_ZN5S33C73v74Ev");}
void  S33C7 ::v75(){vfunc_called(this, "_ZN5S33C73v75Ev");}
void  S33C7 ::v76(){vfunc_called(this, "_ZN5S33C73v76Ev");}
void  S33C7 ::v77(){vfunc_called(this, "_ZN5S33C73v77Ev");}
void  S33C7 ::v78(){vfunc_called(this, "_ZN5S33C73v78Ev");}
void  S33C7 ::v79(){vfunc_called(this, "_ZN5S33C73v79Ev");}
void  S33C7 ::v80(){vfunc_called(this, "_ZN5S33C73v80Ev");}
void  S33C7 ::v81(){vfunc_called(this, "_ZN5S33C73v81Ev");}
void  S33C7 ::v82(){vfunc_called(this, "_ZN5S33C73v82Ev");}
void  S33C7 ::v83(){vfunc_called(this, "_ZN5S33C73v83Ev");}
void  S33C7 ::v84(){vfunc_called(this, "_ZN5S33C73v84Ev");}
void  S33C7 ::v85(){vfunc_called(this, "_ZN5S33C73v85Ev");}
void  S33C7 ::v86(){vfunc_called(this, "_ZN5S33C73v86Ev");}
void  S33C7 ::v87(){vfunc_called(this, "_ZN5S33C73v87Ev");}
void  S33C7 ::v88(){vfunc_called(this, "_ZN5S33C73v88Ev");}
void  S33C7 ::v89(){vfunc_called(this, "_ZN5S33C73v89Ev");}
S33C7 ::S33C7(){ note_ctor("S33C7", this);} // tgen

static void Test_S33C7()
{
  extern Class_Descriptor cd_S33C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S33C7, buf);
    S33C7 *dp, &lv = *(dp=new (buf) S33C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S33C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S33C7)");
    check_base_class_offset(lv, (S33C8*), 0, "S33C7");
    check_field_offset(lv, s33c7f0, ABISELECT(96,60), "S33C7.s33c7f0");
    check_field_offset(lv, s33c7f1, ABISELECT(104,68), "S33C7.s33c7f1");
    check_field_offset(lv, s33c7f2, ABISELECT(112,72), "S33C7.s33c7f2");
    check_field_offset(lv, s33c7f3, ABISELECT(120,80), "S33C7.s33c7f3");
    check_field_offset(lv, s33c7f4, ABISELECT(136,92), "S33C7.s33c7f4");
    check_field_offset(lv, s33c7f5, ABISELECT(152,104), "S33C7.s33c7f5");
    check_field_offset(lv, s33c7f6, ABISELECT(160,108), "S33C7.s33c7f6");
    set_bf_and_test(lv, s33c7f7, ABISELECT(176,120), 0, 1, 1, "S33C7");
    set_bf_and_test(lv, s33c7f8, ABISELECT(176,120), 1, 1, 1, "S33C7");
    set_bf_and_test(lv, s33c7f9, ABISELECT(176,120), 2, 1, 1, "S33C7");
    set_bf_and_test(lv, s33c7f10, ABISELECT(176,120), 3, 1, 1, "S33C7");
    set_bf_and_test(lv, s33c7f11, ABISELECT(176,120), 4, 1, 1, "S33C7");
    check_field_offset(lv, s33c7f12, ABISELECT(180,124), "S33C7.s33c7f12");
    test_class_info(&lv, &cd_S33C7);
    dp->~S33C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS33C7(Test_S33C7, "S33C7", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN5S33C7C1Ev();
extern void _ZN5S33C7D1Ev();
Name_Map name_map_S33C7[] = {
  NSPAIR(_ZN5S33C7C1Ev),
  NSPAIR(_ZN5S33C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S33C8;
extern VTBL_ENTRY _ZTI5S33C8[];
extern  VTBL_ENTRY _ZTV5S33C8[];
static Base_Class bases_S33C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S33C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI5S33C7[];
extern void _ZN5S33C7D1Ev();
extern void _ZN5S33C7D0Ev();
extern void _ZN5S33C82v4Ev();
extern void _ZN5S33C82v5Ev();
extern void _ZN5S33C82v6Ev();
extern void _ZN5S33C82v7Ev();
extern void _ZN5S33C82v8Ev();
extern void _ZN5S33C82v9Ev();
extern void _ZN5S33C83v10Ev();
extern void _ZN5S33C83v11Ev();
extern void _ZN5S33C83v12Ev();
extern void _ZN5S33C83v13Ev();
extern void _ZN5S33C83v14Ev();
extern void _ZN5S33C83v15Ev();
extern void _ZN5S33C83v16Ev();
extern void _ZN5S33C83v17Ev();
extern void _ZN5S33C83v18Ev();
extern void _ZN5S33C83v19Ev();
extern void _ZN5S33C83v20Ev();
extern void _ZN5S33C83v21Ev();
extern void _ZN5S33C83v22Ev();
extern void _ZN5S33C83v23Ev();
extern void _ZN5S33C83v24Ev();
extern void _ZN5S33C83v25Ev();
extern void _ZN5S33C83v26Ev();
extern void _ZN5S33C83v27Ev();
extern void _ZN5S33C83v28Ev();
extern void _ZN5S33C83v29Ev();
extern void _ZN5S33C83v30Ev();
extern void _ZN5S33C83v31Ev();
extern void _ZN5S33C83v32Ev();
extern void _ZN5S33C83v33Ev();
extern void _ZN5S33C83v34Ev();
extern void _ZN5S33C83v35Ev();
extern void _ZN5S33C83v36Ev();
extern void _ZN5S33C83v37Ev();
extern void _ZN5S33C83v38Ev();
extern void _ZN5S33C83v39Ev();
extern void _ZN5S33C83v40Ev();
extern void _ZN5S33C83v41Ev();
extern void _ZN5S33C83v42Ev();
extern void _ZN5S33C83v43Ev();
extern void _ZN5S33C83v44Ev();
extern void _ZN5S33C83v45Ev();
extern void _ZN5S33C83v46Ev();
extern void _ZN5S33C83v47Ev();
extern void _ZN5S33C83v48Ev();
extern void _ZN5S33C83v49Ev();
extern void _ZN5S33C83v50Ev();
extern void _ZN5S33C83v51Ev();
extern void _ZN5S33C83v52Ev();
extern void _ZN5S33C83v53Ev();
extern void _ZN5S33C83v54Ev();
extern void _ZN5S33C83v55Ev();
extern void _ZN5S33C83v56Ev();
extern void _ZN5S33C83v57Ev();
extern void _ZN5S33C83v58Ev();
extern void _ZN5S33C83v59Ev();
extern void _ZN5S33C83v60Ev();
extern void _ZN5S33C83v61Ev();
extern void _ZN5S33C83v62Ev();
extern void _ZN5S33C83v63Ev();
extern void _ZN5S33C83v64Ev();
extern void _ZN5S33C83v65Ev();
extern void _ZN5S33C83v66Ev();
extern void _ZN5S33C83v67Ev();
extern void _ZN5S33C73v68Ev();
extern void _ZN5S33C73v69Ev();
extern void _ZN5S33C73v70Ev();
extern void _ZN5S33C73v71Ev();
extern void _ZN5S33C73v72Ev();
extern void _ZN5S33C73v73Ev();
extern void _ZN5S33C73v74Ev();
extern void _ZN5S33C73v75Ev();
extern void _ZN5S33C73v76Ev();
extern void _ZN5S33C73v77Ev();
extern void _ZN5S33C73v78Ev();
extern void _ZN5S33C73v79Ev();
extern void _ZN5S33C73v80Ev();
extern void _ZN5S33C73v81Ev();
extern void _ZN5S33C73v82Ev();
extern void _ZN5S33C73v83Ev();
extern void _ZN5S33C73v84Ev();
extern void _ZN5S33C73v85Ev();
extern void _ZN5S33C73v86Ev();
extern void _ZN5S33C73v87Ev();
extern void _ZN5S33C73v88Ev();
extern void _ZN5S33C73v89Ev();
static  VTBL_ENTRY vtc_S33C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S33C7[0]),
  (VTBL_ENTRY)&_ZN5S33C7D1Ev,
  (VTBL_ENTRY)&_ZN5S33C7D0Ev,
  (VTBL_ENTRY)&_ZN5S33C82v4Ev,
  (VTBL_ENTRY)&_ZN5S33C82v5Ev,
  (VTBL_ENTRY)&_ZN5S33C82v6Ev,
  (VTBL_ENTRY)&_ZN5S33C82v7Ev,
  (VTBL_ENTRY)&_ZN5S33C82v8Ev,
  (VTBL_ENTRY)&_ZN5S33C82v9Ev,
  (VTBL_ENTRY)&_ZN5S33C83v10Ev,
  (VTBL_ENTRY)&_ZN5S33C83v11Ev,
  (VTBL_ENTRY)&_ZN5S33C83v12Ev,
  (VTBL_ENTRY)&_ZN5S33C83v13Ev,
  (VTBL_ENTRY)&_ZN5S33C83v14Ev,
  (VTBL_ENTRY)&_ZN5S33C83v15Ev,
  (VTBL_ENTRY)&_ZN5S33C83v16Ev,
  (VTBL_ENTRY)&_ZN5S33C83v17Ev,
  (VTBL_ENTRY)&_ZN5S33C83v18Ev,
  (VTBL_ENTRY)&_ZN5S33C83v19Ev,
  (VTBL_ENTRY)&_ZN5S33C83v20Ev,
  (VTBL_ENTRY)&_ZN5S33C83v21Ev,
  (VTBL_ENTRY)&_ZN5S33C83v22Ev,
  (VTBL_ENTRY)&_ZN5S33C83v23Ev,
  (VTBL_ENTRY)&_ZN5S33C83v24Ev,
  (VTBL_ENTRY)&_ZN5S33C83v25Ev,
  (VTBL_ENTRY)&_ZN5S33C83v26Ev,
  (VTBL_ENTRY)&_ZN5S33C83v27Ev,
  (VTBL_ENTRY)&_ZN5S33C83v28Ev,
  (VTBL_ENTRY)&_ZN5S33C83v29Ev,
  (VTBL_ENTRY)&_ZN5S33C83v30Ev,
  (VTBL_ENTRY)&_ZN5S33C83v31Ev,
  (VTBL_ENTRY)&_ZN5S33C83v32Ev,
  (VTBL_ENTRY)&_ZN5S33C83v33Ev,
  (VTBL_ENTRY)&_ZN5S33C83v34Ev,
  (VTBL_ENTRY)&_ZN5S33C83v35Ev,
  (VTBL_ENTRY)&_ZN5S33C83v36Ev,
  (VTBL_ENTRY)&_ZN5S33C83v37Ev,
  (VTBL_ENTRY)&_ZN5S33C83v38Ev,
  (VTBL_ENTRY)&_ZN5S33C83v39Ev,
  (VTBL_ENTRY)&_ZN5S33C83v40Ev,
  (VTBL_ENTRY)&_ZN5S33C83v41Ev,
  (VTBL_ENTRY)&_ZN5S33C83v42Ev,
  (VTBL_ENTRY)&_ZN5S33C83v43Ev,
  (VTBL_ENTRY)&_ZN5S33C83v44Ev,
  (VTBL_ENTRY)&_ZN5S33C83v45Ev,
  (VTBL_ENTRY)&_ZN5S33C83v46Ev,
  (VTBL_ENTRY)&_ZN5S33C83v47Ev,
  (VTBL_ENTRY)&_ZN5S33C83v48Ev,
  (VTBL_ENTRY)&_ZN5S33C83v49Ev,
  (VTBL_ENTRY)&_ZN5S33C83v50Ev,
  (VTBL_ENTRY)&_ZN5S33C83v51Ev,
  (VTBL_ENTRY)&_ZN5S33C83v52Ev,
  (VTBL_ENTRY)&_ZN5S33C83v53Ev,
  (VTBL_ENTRY)&_ZN5S33C83v54Ev,
  (VTBL_ENTRY)&_ZN5S33C83v55Ev,
  (VTBL_ENTRY)&_ZN5S33C83v56Ev,
  (VTBL_ENTRY)&_ZN5S33C83v57Ev,
  (VTBL_ENTRY)&_ZN5S33C83v58Ev,
  (VTBL_ENTRY)&_ZN5S33C83v59Ev,
  (VTBL_ENTRY)&_ZN5S33C83v60Ev,
  (VTBL_ENTRY)&_ZN5S33C83v61Ev,
  (VTBL_ENTRY)&_ZN5S33C83v62Ev,
  (VTBL_ENTRY)&_ZN5S33C83v63Ev,
  (VTBL_ENTRY)&_ZN5S33C83v64Ev,
  (VTBL_ENTRY)&_ZN5S33C83v65Ev,
  (VTBL_ENTRY)&_ZN5S33C83v66Ev,
  (VTBL_ENTRY)&_ZN5S33C83v67Ev,
  (VTBL_ENTRY)&_ZN5S33C73v68Ev,
  (VTBL_ENTRY)&_ZN5S33C73v69Ev,
  (VTBL_ENTRY)&_ZN5S33C73v70Ev,
  (VTBL_ENTRY)&_ZN5S33C73v71Ev,
  (VTBL_ENTRY)&_ZN5S33C73v72Ev,
  (VTBL_ENTRY)&_ZN5S33C73v73Ev,
  (VTBL_ENTRY)&_ZN5S33C73v74Ev,
  (VTBL_ENTRY)&_ZN5S33C73v75Ev,
  (VTBL_ENTRY)&_ZN5S33C73v76Ev,
  (VTBL_ENTRY)&_ZN5S33C73v77Ev,
  (VTBL_ENTRY)&_ZN5S33C73v78Ev,
  (VTBL_ENTRY)&_ZN5S33C73v79Ev,
  (VTBL_ENTRY)&_ZN5S33C73v80Ev,
  (VTBL_ENTRY)&_ZN5S33C73v81Ev,
  (VTBL_ENTRY)&_ZN5S33C73v82Ev,
  (VTBL_ENTRY)&_ZN5S33C73v83Ev,
  (VTBL_ENTRY)&_ZN5S33C73v84Ev,
  (VTBL_ENTRY)&_ZN5S33C73v85Ev,
  (VTBL_ENTRY)&_ZN5S33C73v86Ev,
  (VTBL_ENTRY)&_ZN5S33C73v87Ev,
  (VTBL_ENTRY)&_ZN5S33C73v88Ev,
  (VTBL_ENTRY)&_ZN5S33C73v89Ev,
};
extern VTBL_ENTRY _ZTI5S33C7[];
extern  VTBL_ENTRY _ZTV5S33C7[];
Class_Descriptor cd_S33C7 = {  "S33C7", // class name
  bases_S33C7, 1,
  &(vtc_S33C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI5S33C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S33C7),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S33C6  : S33C7 {
  unsigned int s33c6f0:1;
  unsigned int s33c6f1:1;
  unsigned int s33c6f2:1;
  ::S3350C17 s33c6f3;
  ::S3350C11 s33c6f4;
  ::S3350C5_nt s33c6f5;
  ::S287C27 s33c6f6;
  int s33c6f7[3];
  virtual  ~S33C6(); // _ZN5S33C6D1Ev
  virtual void  v90(); // _ZN5S33C63v90Ev
  virtual void  v91(); // _ZN5S33C63v91Ev
  virtual void  v92(); // _ZN5S33C63v92Ev
  virtual void  v93(); // _ZN5S33C63v93Ev
  virtual void  v94(); // _ZN5S33C63v94Ev
  virtual void  v95(); // _ZN5S33C63v95Ev
  virtual void  v96(); // _ZN5S33C63v96Ev
  virtual void  v97(); // _ZN5S33C63v97Ev
  virtual void  v98(); // _ZN5S33C63v98Ev
  virtual void  v99(); // _ZN5S33C63v99Ev
  virtual void  v100(); // _ZN5S33C64v100Ev
  virtual void  v101(); // _ZN5S33C64v101Ev
  virtual void  v102(); // _ZN5S33C64v102Ev
  virtual void  v103(); // _ZN5S33C64v103Ev
  virtual void  v104(); // _ZN5S33C64v104Ev
  virtual void  v105(); // _ZN5S33C64v105Ev
  virtual void  v106(); // _ZN5S33C64v106Ev
  virtual void  v107(); // _ZN5S33C64v107Ev
  virtual void  v108(); // _ZN5S33C64v108Ev
  virtual void  v109(); // _ZN5S33C64v109Ev
  S33C6(); // tgen
};
//SIG(-1 S33C6) C1{ BC2{ BC3{ vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 FC10{ BC11{ BC8}} FC12{ BC13{ BC8}} FC14{ BC15{ BC8}} FC16{ BC17{ BC8}} Fi[3]}


 S33C6 ::~S33C6(){ note_dtor("S33C6", this);}
void  S33C6 ::v90(){vfunc_called(this, "_ZN5S33C63v90Ev");}
void  S33C6 ::v91(){vfunc_called(this, "_ZN5S33C63v91Ev");}
void  S33C6 ::v92(){vfunc_called(this, "_ZN5S33C63v92Ev");}
void  S33C6 ::v93(){vfunc_called(this, "_ZN5S33C63v93Ev");}
void  S33C6 ::v94(){vfunc_called(this, "_ZN5S33C63v94Ev");}
void  S33C6 ::v95(){vfunc_called(this, "_ZN5S33C63v95Ev");}
void  S33C6 ::v96(){vfunc_called(this, "_ZN5S33C63v96Ev");}
void  S33C6 ::v97(){vfunc_called(this, "_ZN5S33C63v97Ev");}
void  S33C6 ::v98(){vfunc_called(this, "_ZN5S33C63v98Ev");}
void  S33C6 ::v99(){vfunc_called(this, "_ZN5S33C63v99Ev");}
void  S33C6 ::v100(){vfunc_called(this, "_ZN5S33C64v100Ev");}
void  S33C6 ::v101(){vfunc_called(this, "_ZN5S33C64v101Ev");}
void  S33C6 ::v102(){vfunc_called(this, "_ZN5S33C64v102Ev");}
void  S33C6 ::v103(){vfunc_called(this, "_ZN5S33C64v103Ev");}
void  S33C6 ::v104(){vfunc_called(this, "_ZN5S33C64v104Ev");}
void  S33C6 ::v105(){vfunc_called(this, "_ZN5S33C64v105Ev");}
void  S33C6 ::v106(){vfunc_called(this, "_ZN5S33C64v106Ev");}
void  S33C6 ::v107(){vfunc_called(this, "_ZN5S33C64v107Ev");}
void  S33C6 ::v108(){vfunc_called(this, "_ZN5S33C64v108Ev");}
void  S33C6 ::v109(){vfunc_called(this, "_ZN5S33C64v109Ev");}
S33C6 ::S33C6(){ note_ctor("S33C6", this);} // tgen

static void Test_S33C6()
{
  extern Class_Descriptor cd_S33C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S33C6, buf);
    S33C6 *dp, &lv = *(dp=new (buf) S33C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S33C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S33C6)");
    check_base_class_offset(lv, (S33C8*)(S33C7*), 0, "S33C6");
    check_base_class_offset(lv, (S33C7*), 0, "S33C6");
    set_bf_and_test(lv, s33c6f0, ABISELECT(188,132), 0, 1, 1, "S33C6");
    set_bf_and_test(lv, s33c6f1, ABISELECT(188,132), 1, 1, 1, "S33C6");
    set_bf_and_test(lv, s33c6f2, ABISELECT(188,132), 2, 1, 1, "S33C6");
    check_field_offset(lv, s33c6f3, ABISELECT(192,136), "S33C6.s33c6f3");
    check_field_offset(lv, s33c6f4, ABISELECT(208,148), "S33C6.s33c6f4");
    check_field_offset(lv, s33c6f5, ABISELECT(224,160), "S33C6.s33c6f5");
    check_field_offset(lv, s33c6f6, ABISELECT(240,172), "S33C6.s33c6f6");
    check_field_offset(lv, s33c6f7, ABISELECT(256,184), "S33C6.s33c6f7");
    test_class_info(&lv, &cd_S33C6);
    dp->~S33C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS33C6(Test_S33C6, "S33C6", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN5S33C6C1Ev();
extern void _ZN5S33C6D1Ev();
Name_Map name_map_S33C6[] = {
  NSPAIR(_ZN5S33C6C1Ev),
  NSPAIR(_ZN5S33C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S33C8;
extern VTBL_ENTRY _ZTI5S33C8[];
extern  VTBL_ENTRY _ZTV5S33C8[];
extern Class_Descriptor cd_S33C7;
extern VTBL_ENTRY _ZTI5S33C7[];
extern  VTBL_ENTRY _ZTV5S33C7[];
static Base_Class bases_S33C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S33C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S33C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S33C6[];
extern void _ZN5S33C6D1Ev();
extern void _ZN5S33C6D0Ev();
extern void _ZN5S33C82v4Ev();
extern void _ZN5S33C82v5Ev();
extern void _ZN5S33C82v6Ev();
extern void _ZN5S33C82v7Ev();
extern void _ZN5S33C82v8Ev();
extern void _ZN5S33C82v9Ev();
extern void _ZN5S33C83v10Ev();
extern void _ZN5S33C83v11Ev();
extern void _ZN5S33C83v12Ev();
extern void _ZN5S33C83v13Ev();
extern void _ZN5S33C83v14Ev();
extern void _ZN5S33C83v15Ev();
extern void _ZN5S33C83v16Ev();
extern void _ZN5S33C83v17Ev();
extern void _ZN5S33C83v18Ev();
extern void _ZN5S33C83v19Ev();
extern void _ZN5S33C83v20Ev();
extern void _ZN5S33C83v21Ev();
extern void _ZN5S33C83v22Ev();
extern void _ZN5S33C83v23Ev();
extern void _ZN5S33C83v24Ev();
extern void _ZN5S33C83v25Ev();
extern void _ZN5S33C83v26Ev();
extern void _ZN5S33C83v27Ev();
extern void _ZN5S33C83v28Ev();
extern void _ZN5S33C83v29Ev();
extern void _ZN5S33C83v30Ev();
extern void _ZN5S33C83v31Ev();
extern void _ZN5S33C83v32Ev();
extern void _ZN5S33C83v33Ev();
extern void _ZN5S33C83v34Ev();
extern void _ZN5S33C83v35Ev();
extern void _ZN5S33C83v36Ev();
extern void _ZN5S33C83v37Ev();
extern void _ZN5S33C83v38Ev();
extern void _ZN5S33C83v39Ev();
extern void _ZN5S33C83v40Ev();
extern void _ZN5S33C83v41Ev();
extern void _ZN5S33C83v42Ev();
extern void _ZN5S33C83v43Ev();
extern void _ZN5S33C83v44Ev();
extern void _ZN5S33C83v45Ev();
extern void _ZN5S33C83v46Ev();
extern void _ZN5S33C83v47Ev();
extern void _ZN5S33C83v48Ev();
extern void _ZN5S33C83v49Ev();
extern void _ZN5S33C83v50Ev();
extern void _ZN5S33C83v51Ev();
extern void _ZN5S33C83v52Ev();
extern void _ZN5S33C83v53Ev();
extern void _ZN5S33C83v54Ev();
extern void _ZN5S33C83v55Ev();
extern void _ZN5S33C83v56Ev();
extern void _ZN5S33C83v57Ev();
extern void _ZN5S33C83v58Ev();
extern void _ZN5S33C83v59Ev();
extern void _ZN5S33C83v60Ev();
extern void _ZN5S33C83v61Ev();
extern void _ZN5S33C83v62Ev();
extern void _ZN5S33C83v63Ev();
extern void _ZN5S33C83v64Ev();
extern void _ZN5S33C83v65Ev();
extern void _ZN5S33C83v66Ev();
extern void _ZN5S33C83v67Ev();
extern void _ZN5S33C73v68Ev();
extern void _ZN5S33C73v69Ev();
extern void _ZN5S33C73v70Ev();
extern void _ZN5S33C73v71Ev();
extern void _ZN5S33C73v72Ev();
extern void _ZN5S33C73v73Ev();
extern void _ZN5S33C73v74Ev();
extern void _ZN5S33C73v75Ev();
extern void _ZN5S33C73v76Ev();
extern void _ZN5S33C73v77Ev();
extern void _ZN5S33C73v78Ev();
extern void _ZN5S33C73v79Ev();
extern void _ZN5S33C73v80Ev();
extern void _ZN5S33C73v81Ev();
extern void _ZN5S33C73v82Ev();
extern void _ZN5S33C73v83Ev();
extern void _ZN5S33C73v84Ev();
extern void _ZN5S33C73v85Ev();
extern void _ZN5S33C73v86Ev();
extern void _ZN5S33C73v87Ev();
extern void _ZN5S33C73v88Ev();
extern void _ZN5S33C73v89Ev();
extern void _ZN5S33C63v90Ev();
extern void _ZN5S33C63v91Ev();
extern void _ZN5S33C63v92Ev();
extern void _ZN5S33C63v93Ev();
extern void _ZN5S33C63v94Ev();
extern void _ZN5S33C63v95Ev();
extern void _ZN5S33C63v96Ev();
extern void _ZN5S33C63v97Ev();
extern void _ZN5S33C63v98Ev();
extern void _ZN5S33C63v99Ev();
extern void _ZN5S33C64v100Ev();
extern void _ZN5S33C64v101Ev();
extern void _ZN5S33C64v102Ev();
extern void _ZN5S33C64v103Ev();
extern void _ZN5S33C64v104Ev();
extern void _ZN5S33C64v105Ev();
extern void _ZN5S33C64v106Ev();
extern void _ZN5S33C64v107Ev();
extern void _ZN5S33C64v108Ev();
extern void _ZN5S33C64v109Ev();
static  VTBL_ENTRY vtc_S33C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S33C6[0]),
  (VTBL_ENTRY)&_ZN5S33C6D1Ev,
  (VTBL_ENTRY)&_ZN5S33C6D0Ev,
  (VTBL_ENTRY)&_ZN5S33C82v4Ev,
  (VTBL_ENTRY)&_ZN5S33C82v5Ev,
  (VTBL_ENTRY)&_ZN5S33C82v6Ev,
  (VTBL_ENTRY)&_ZN5S33C82v7Ev,
  (VTBL_ENTRY)&_ZN5S33C82v8Ev,
  (VTBL_ENTRY)&_ZN5S33C82v9Ev,
  (VTBL_ENTRY)&_ZN5S33C83v10Ev,
  (VTBL_ENTRY)&_ZN5S33C83v11Ev,
  (VTBL_ENTRY)&_ZN5S33C83v12Ev,
  (VTBL_ENTRY)&_ZN5S33C83v13Ev,
  (VTBL_ENTRY)&_ZN5S33C83v14Ev,
  (VTBL_ENTRY)&_ZN5S33C83v15Ev,
  (VTBL_ENTRY)&_ZN5S33C83v16Ev,
  (VTBL_ENTRY)&_ZN5S33C83v17Ev,
  (VTBL_ENTRY)&_ZN5S33C83v18Ev,
  (VTBL_ENTRY)&_ZN5S33C83v19Ev,
  (VTBL_ENTRY)&_ZN5S33C83v20Ev,
  (VTBL_ENTRY)&_ZN5S33C83v21Ev,
  (VTBL_ENTRY)&_ZN5S33C83v22Ev,
  (VTBL_ENTRY)&_ZN5S33C83v23Ev,
  (VTBL_ENTRY)&_ZN5S33C83v24Ev,
  (VTBL_ENTRY)&_ZN5S33C83v25Ev,
  (VTBL_ENTRY)&_ZN5S33C83v26Ev,
  (VTBL_ENTRY)&_ZN5S33C83v27Ev,
  (VTBL_ENTRY)&_ZN5S33C83v28Ev,
  (VTBL_ENTRY)&_ZN5S33C83v29Ev,
  (VTBL_ENTRY)&_ZN5S33C83v30Ev,
  (VTBL_ENTRY)&_ZN5S33C83v31Ev,
  (VTBL_ENTRY)&_ZN5S33C83v32Ev,
  (VTBL_ENTRY)&_ZN5S33C83v33Ev,
  (VTBL_ENTRY)&_ZN5S33C83v34Ev,
  (VTBL_ENTRY)&_ZN5S33C83v35Ev,
  (VTBL_ENTRY)&_ZN5S33C83v36Ev,
  (VTBL_ENTRY)&_ZN5S33C83v37Ev,
  (VTBL_ENTRY)&_ZN5S33C83v38Ev,
  (VTBL_ENTRY)&_ZN5S33C83v39Ev,
  (VTBL_ENTRY)&_ZN5S33C83v40Ev,
  (VTBL_ENTRY)&_ZN5S33C83v41Ev,
  (VTBL_ENTRY)&_ZN5S33C83v42Ev,
  (VTBL_ENTRY)&_ZN5S33C83v43Ev,
  (VTBL_ENTRY)&_ZN5S33C83v44Ev,
  (VTBL_ENTRY)&_ZN5S33C83v45Ev,
  (VTBL_ENTRY)&_ZN5S33C83v46Ev,
  (VTBL_ENTRY)&_ZN5S33C83v47Ev,
  (VTBL_ENTRY)&_ZN5S33C83v48Ev,
  (VTBL_ENTRY)&_ZN5S33C83v49Ev,
  (VTBL_ENTRY)&_ZN5S33C83v50Ev,
  (VTBL_ENTRY)&_ZN5S33C83v51Ev,
  (VTBL_ENTRY)&_ZN5S33C83v52Ev,
  (VTBL_ENTRY)&_ZN5S33C83v53Ev,
  (VTBL_ENTRY)&_ZN5S33C83v54Ev,
  (VTBL_ENTRY)&_ZN5S33C83v55Ev,
  (VTBL_ENTRY)&_ZN5S33C83v56Ev,
  (VTBL_ENTRY)&_ZN5S33C83v57Ev,
  (VTBL_ENTRY)&_ZN5S33C83v58Ev,
  (VTBL_ENTRY)&_ZN5S33C83v59Ev,
  (VTBL_ENTRY)&_ZN5S33C83v60Ev,
  (VTBL_ENTRY)&_ZN5S33C83v61Ev,
  (VTBL_ENTRY)&_ZN5S33C83v62Ev,
  (VTBL_ENTRY)&_ZN5S33C83v63Ev,
  (VTBL_ENTRY)&_ZN5S33C83v64Ev,
  (VTBL_ENTRY)&_ZN5S33C83v65Ev,
  (VTBL_ENTRY)&_ZN5S33C83v66Ev,
  (VTBL_ENTRY)&_ZN5S33C83v67Ev,
  (VTBL_ENTRY)&_ZN5S33C73v68Ev,
  (VTBL_ENTRY)&_ZN5S33C73v69Ev,
  (VTBL_ENTRY)&_ZN5S33C73v70Ev,
  (VTBL_ENTRY)&_ZN5S33C73v71Ev,
  (VTBL_ENTRY)&_ZN5S33C73v72Ev,
  (VTBL_ENTRY)&_ZN5S33C73v73Ev,
  (VTBL_ENTRY)&_ZN5S33C73v74Ev,
  (VTBL_ENTRY)&_ZN5S33C73v75Ev,
  (VTBL_ENTRY)&_ZN5S33C73v76Ev,
  (VTBL_ENTRY)&_ZN5S33C73v77Ev,
  (VTBL_ENTRY)&_ZN5S33C73v78Ev,
  (VTBL_ENTRY)&_ZN5S33C73v79Ev,
  (VTBL_ENTRY)&_ZN5S33C73v80Ev,
  (VTBL_ENTRY)&_ZN5S33C73v81Ev,
  (VTBL_ENTRY)&_ZN5S33C73v82Ev,
  (VTBL_ENTRY)&_ZN5S33C73v83Ev,
  (VTBL_ENTRY)&_ZN5S33C73v84Ev,
  (VTBL_ENTRY)&_ZN5S33C73v85Ev,
  (VTBL_ENTRY)&_ZN5S33C73v86Ev,
  (VTBL_ENTRY)&_ZN5S33C73v87Ev,
  (VTBL_ENTRY)&_ZN5S33C73v88Ev,
  (VTBL_ENTRY)&_ZN5S33C73v89Ev,
  (VTBL_ENTRY)&_ZN5S33C63v90Ev,
  (VTBL_ENTRY)&_ZN5S33C63v91Ev,
  (VTBL_ENTRY)&_ZN5S33C63v92Ev,
  (VTBL_ENTRY)&_ZN5S33C63v93Ev,
  (VTBL_ENTRY)&_ZN5S33C63v94Ev,
  (VTBL_ENTRY)&_ZN5S33C63v95Ev,
  (VTBL_ENTRY)&_ZN5S33C63v96Ev,
  (VTBL_ENTRY)&_ZN5S33C63v97Ev,
  (VTBL_ENTRY)&_ZN5S33C63v98Ev,
  (VTBL_ENTRY)&_ZN5S33C63v99Ev,
  (VTBL_ENTRY)&_ZN5S33C64v100Ev,
  (VTBL_ENTRY)&_ZN5S33C64v101Ev,
  (VTBL_ENTRY)&_ZN5S33C64v102Ev,
  (VTBL_ENTRY)&_ZN5S33C64v103Ev,
  (VTBL_ENTRY)&_ZN5S33C64v104Ev,
  (VTBL_ENTRY)&_ZN5S33C64v105Ev,
  (VTBL_ENTRY)&_ZN5S33C64v106Ev,
  (VTBL_ENTRY)&_ZN5S33C64v107Ev,
  (VTBL_ENTRY)&_ZN5S33C64v108Ev,
  (VTBL_ENTRY)&_ZN5S33C64v109Ev,
};
extern VTBL_ENTRY _ZTI5S33C6[];
extern  VTBL_ENTRY _ZTV5S33C6[];
Class_Descriptor cd_S33C6 = {  "S33C6", // class name
  bases_S33C6, 2,
  &(vtc_S33C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI5S33C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S33C6),110, //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  S33C5  : S33C6 {
  ::S3350C4_nt s33c5f0;
  unsigned int s33c5f1:1;
  ::S287C23 s33c5f2;
  virtual  ~S33C5(); // _ZN5S33C5D1Ev
  virtual void  v110(); // _ZN5S33C54v110Ev
  virtual void  v111(); // _ZN5S33C54v111Ev
  virtual void  v112(); // _ZN5S33C54v112Ev
  virtual void  v113(); // _ZN5S33C54v113Ev
  S33C5(); // tgen
};
//SIG(-1 S33C5) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 Fi:1 Fi:1 Fi:1 FC11{ BC12{ BC9}} FC13{ BC14{ BC9}} FC15{ BC16{ BC9}} FC17{ BC18{ BC9}} Fi[3]} vd v1 v2 v3 v4 FC5 Fi:1 FC19{ BC20{ BC9}}}


 S33C5 ::~S33C5(){ note_dtor("S33C5", this);}
void  S33C5 ::v110(){vfunc_called(this, "_ZN5S33C54v110Ev");}
void  S33C5 ::v111(){vfunc_called(this, "_ZN5S33C54v111Ev");}
void  S33C5 ::v112(){vfunc_called(this, "_ZN5S33C54v112Ev");}
void  S33C5 ::v113(){vfunc_called(this, "_ZN5S33C54v113Ev");}
S33C5 ::S33C5(){ note_ctor("S33C5", this);} // tgen

static void Test_S33C5()
{
  extern Class_Descriptor cd_S33C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,56)];
    init_test(&cd_S33C5, buf);
    S33C5 *dp, &lv = *(dp=new (buf) S33C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,220), "sizeof(S33C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S33C5)");
    check_base_class_offset(lv, (S33C8*)(S33C7*)(S33C6*), 0, "S33C5");
    check_base_class_offset(lv, (S33C7*)(S33C6*), 0, "S33C5");
    check_base_class_offset(lv, (S33C6*), 0, "S33C5");
    check_field_offset(lv, s33c5f0, ABISELECT(268,196), "S33C5.s33c5f0");
    set_bf_and_test(lv, s33c5f1, ABISELECT(276,204), 0, 1, 1, "S33C5");
    check_field_offset(lv, s33c5f2, ABISELECT(280,208), "S33C5.s33c5f2");
    test_class_info(&lv, &cd_S33C5);
    dp->~S33C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS33C5(Test_S33C5, "S33C5", ABISELECT(296,220));

#else // __cplusplus

extern void _ZN5S33C5C1Ev();
extern void _ZN5S33C5D1Ev();
Name_Map name_map_S33C5[] = {
  NSPAIR(_ZN5S33C5C1Ev),
  NSPAIR(_ZN5S33C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S33C8;
extern VTBL_ENTRY _ZTI5S33C8[];
extern  VTBL_ENTRY _ZTV5S33C8[];
extern Class_Descriptor cd_S33C7;
extern VTBL_ENTRY _ZTI5S33C7[];
extern  VTBL_ENTRY _ZTV5S33C7[];
extern Class_Descriptor cd_S33C6;
extern VTBL_ENTRY _ZTI5S33C6[];
extern  VTBL_ENTRY _ZTV5S33C6[];
static Base_Class bases_S33C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S33C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S33C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S33C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S33C5[];
extern void _ZN5S33C5D1Ev();
extern void _ZN5S33C5D0Ev();
extern void _ZN5S33C82v4Ev();
extern void _ZN5S33C82v5Ev();
extern void _ZN5S33C82v6Ev();
extern void _ZN5S33C82v7Ev();
extern void _ZN5S33C82v8Ev();
extern void _ZN5S33C82v9Ev();
extern void _ZN5S33C83v10Ev();
extern void _ZN5S33C83v11Ev();
extern void _ZN5S33C83v12Ev();
extern void _ZN5S33C83v13Ev();
extern void _ZN5S33C83v14Ev();
extern void _ZN5S33C83v15Ev();
extern void _ZN5S33C83v16Ev();
extern void _ZN5S33C83v17Ev();
extern void _ZN5S33C83v18Ev();
extern void _ZN5S33C83v19Ev();
extern void _ZN5S33C83v20Ev();
extern void _ZN5S33C83v21Ev();
extern void _ZN5S33C83v22Ev();
extern void _ZN5S33C83v23Ev();
extern void _ZN5S33C83v24Ev();
extern void _ZN5S33C83v25Ev();
extern void _ZN5S33C83v26Ev();
extern void _ZN5S33C83v27Ev();
extern void _ZN5S33C83v28Ev();
extern void _ZN5S33C83v29Ev();
extern void _ZN5S33C83v30Ev();
extern void _ZN5S33C83v31Ev();
extern void _ZN5S33C83v32Ev();
extern void _ZN5S33C83v33Ev();
extern void _ZN5S33C83v34Ev();
extern void _ZN5S33C83v35Ev();
extern void _ZN5S33C83v36Ev();
extern void _ZN5S33C83v37Ev();
extern void _ZN5S33C83v38Ev();
extern void _ZN5S33C83v39Ev();
extern void _ZN5S33C83v40Ev();
extern void _ZN5S33C83v41Ev();
extern void _ZN5S33C83v42Ev();
extern void _ZN5S33C83v43Ev();
extern void _ZN5S33C83v44Ev();
extern void _ZN5S33C83v45Ev();
extern void _ZN5S33C83v46Ev();
extern void _ZN5S33C83v47Ev();
extern void _ZN5S33C83v48Ev();
extern void _ZN5S33C83v49Ev();
extern void _ZN5S33C83v50Ev();
extern void _ZN5S33C83v51Ev();
extern void _ZN5S33C83v52Ev();
extern void _ZN5S33C83v53Ev();
extern void _ZN5S33C83v54Ev();
extern void _ZN5S33C83v55Ev();
extern void _ZN5S33C83v56Ev();
extern void _ZN5S33C83v57Ev();
extern void _ZN5S33C83v58Ev();
extern void _ZN5S33C83v59Ev();
extern void _ZN5S33C83v60Ev();
extern void _ZN5S33C83v61Ev();
extern void _ZN5S33C83v62Ev();
extern void _ZN5S33C83v63Ev();
extern void _ZN5S33C83v64Ev();
extern void _ZN5S33C83v65Ev();
extern void _ZN5S33C83v66Ev();
extern void _ZN5S33C83v67Ev();
extern void _ZN5S33C73v68Ev();
extern void _ZN5S33C73v69Ev();
extern void _ZN5S33C73v70Ev();
extern void _ZN5S33C73v71Ev();
extern void _ZN5S33C73v72Ev();
extern void _ZN5S33C73v73Ev();
extern void _ZN5S33C73v74Ev();
extern void _ZN5S33C73v75Ev();
extern void _ZN5S33C73v76Ev();
extern void _ZN5S33C73v77Ev();
extern void _ZN5S33C73v78Ev();
extern void _ZN5S33C73v79Ev();
extern void _ZN5S33C73v80Ev();
extern void _ZN5S33C73v81Ev();
extern void _ZN5S33C73v82Ev();
extern void _ZN5S33C73v83Ev();
extern void _ZN5S33C73v84Ev();
extern void _ZN5S33C73v85Ev();
extern void _ZN5S33C73v86Ev();
extern void _ZN5S33C73v87Ev();
extern void _ZN5S33C73v88Ev();
extern void _ZN5S33C73v89Ev();
extern void _ZN5S33C63v90Ev();
extern void _ZN5S33C63v91Ev();
extern void _ZN5S33C63v92Ev();
extern void _ZN5S33C63v93Ev();
extern void _ZN5S33C63v94Ev();
extern void _ZN5S33C63v95Ev();
extern void _ZN5S33C63v96Ev();
extern void _ZN5S33C63v97Ev();
extern void _ZN5S33C63v98Ev();
extern void _ZN5S33C63v99Ev();
extern void _ZN5S33C64v100Ev();
extern void _ZN5S33C64v101Ev();
extern void _ZN5S33C64v102Ev();
extern void _ZN5S33C64v103Ev();
extern void _ZN5S33C64v104Ev();
extern void _ZN5S33C64v105Ev();
extern void _ZN5S33C64v106Ev();
extern void _ZN5S33C64v107Ev();
extern void _ZN5S33C64v108Ev();
extern void _ZN5S33C64v109Ev();
extern void _ZN5S33C54v110Ev();
extern void _ZN5S33C54v111Ev();
extern void _ZN5S33C54v112Ev();
extern void _ZN5S33C54v113Ev();
static  VTBL_ENTRY vtc_S33C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S33C5[0]),
  (VTBL_ENTRY)&_ZN5S33C5D1Ev,
  (VTBL_ENTRY)&_ZN5S33C5D0Ev,
  (VTBL_ENTRY)&_ZN5S33C82v4Ev,
  (VTBL_ENTRY)&_ZN5S33C82v5Ev,
  (VTBL_ENTRY)&_ZN5S33C82v6Ev,
  (VTBL_ENTRY)&_ZN5S33C82v7Ev,
  (VTBL_ENTRY)&_ZN5S33C82v8Ev,
  (VTBL_ENTRY)&_ZN5S33C82v9Ev,
  (VTBL_ENTRY)&_ZN5S33C83v10Ev,
  (VTBL_ENTRY)&_ZN5S33C83v11Ev,
  (VTBL_ENTRY)&_ZN5S33C83v12Ev,
  (VTBL_ENTRY)&_ZN5S33C83v13Ev,
  (VTBL_ENTRY)&_ZN5S33C83v14Ev,
  (VTBL_ENTRY)&_ZN5S33C83v15Ev,
  (VTBL_ENTRY)&_ZN5S33C83v16Ev,
  (VTBL_ENTRY)&_ZN5S33C83v17Ev,
  (VTBL_ENTRY)&_ZN5S33C83v18Ev,
  (VTBL_ENTRY)&_ZN5S33C83v19Ev,
  (VTBL_ENTRY)&_ZN5S33C83v20Ev,
  (VTBL_ENTRY)&_ZN5S33C83v21Ev,
  (VTBL_ENTRY)&_ZN5S33C83v22Ev,
  (VTBL_ENTRY)&_ZN5S33C83v23Ev,
  (VTBL_ENTRY)&_ZN5S33C83v24Ev,
  (VTBL_ENTRY)&_ZN5S33C83v25Ev,
  (VTBL_ENTRY)&_ZN5S33C83v26Ev,
  (VTBL_ENTRY)&_ZN5S33C83v27Ev,
  (VTBL_ENTRY)&_ZN5S33C83v28Ev,
  (VTBL_ENTRY)&_ZN5S33C83v29Ev,
  (VTBL_ENTRY)&_ZN5S33C83v30Ev,
  (VTBL_ENTRY)&_ZN5S33C83v31Ev,
  (VTBL_ENTRY)&_ZN5S33C83v32Ev,
  (VTBL_ENTRY)&_ZN5S33C83v33Ev,
  (VTBL_ENTRY)&_ZN5S33C83v34Ev,
  (VTBL_ENTRY)&_ZN5S33C83v35Ev,
  (VTBL_ENTRY)&_ZN5S33C83v36Ev,
  (VTBL_ENTRY)&_ZN5S33C83v37Ev,
  (VTBL_ENTRY)&_ZN5S33C83v38Ev,
  (VTBL_ENTRY)&_ZN5S33C83v39Ev,
  (VTBL_ENTRY)&_ZN5S33C83v40Ev,
  (VTBL_ENTRY)&_ZN5S33C83v41Ev,
  (VTBL_ENTRY)&_ZN5S33C83v42Ev,
  (VTBL_ENTRY)&_ZN5S33C83v43Ev,
  (VTBL_ENTRY)&_ZN5S33C83v44Ev,
  (VTBL_ENTRY)&_ZN5S33C83v45Ev,
  (VTBL_ENTRY)&_ZN5S33C83v46Ev,
  (VTBL_ENTRY)&_ZN5S33C83v47Ev,
  (VTBL_ENTRY)&_ZN5S33C83v48Ev,
  (VTBL_ENTRY)&_ZN5S33C83v49Ev,
  (VTBL_ENTRY)&_ZN5S33C83v50Ev,
  (VTBL_ENTRY)&_ZN5S33C83v51Ev,
  (VTBL_ENTRY)&_ZN5S33C83v52Ev,
  (VTBL_ENTRY)&_ZN5S33C83v53Ev,
  (VTBL_ENTRY)&_ZN5S33C83v54Ev,
  (VTBL_ENTRY)&_ZN5S33C83v55Ev,
  (VTBL_ENTRY)&_ZN5S33C83v56Ev,
  (VTBL_ENTRY)&_ZN5S33C83v57Ev,
  (VTBL_ENTRY)&_ZN5S33C83v58Ev,
  (VTBL_ENTRY)&_ZN5S33C83v59Ev,
  (VTBL_ENTRY)&_ZN5S33C83v60Ev,
  (VTBL_ENTRY)&_ZN5S33C83v61Ev,
  (VTBL_ENTRY)&_ZN5S33C83v62Ev,
  (VTBL_ENTRY)&_ZN5S33C83v63Ev,
  (VTBL_ENTRY)&_ZN5S33C83v64Ev,
  (VTBL_ENTRY)&_ZN5S33C83v65Ev,
  (VTBL_ENTRY)&_ZN5S33C83v66Ev,
  (VTBL_ENTRY)&_ZN5S33C83v67Ev,
  (VTBL_ENTRY)&_ZN5S33C73v68Ev,
  (VTBL_ENTRY)&_ZN5S33C73v69Ev,
  (VTBL_ENTRY)&_ZN5S33C73v70Ev,
  (VTBL_ENTRY)&_ZN5S33C73v71Ev,
  (VTBL_ENTRY)&_ZN5S33C73v72Ev,
  (VTBL_ENTRY)&_ZN5S33C73v73Ev,
  (VTBL_ENTRY)&_ZN5S33C73v74Ev,
  (VTBL_ENTRY)&_ZN5S33C73v75Ev,
  (VTBL_ENTRY)&_ZN5S33C73v76Ev,
  (VTBL_ENTRY)&_ZN5S33C73v77Ev,
  (VTBL_ENTRY)&_ZN5S33C73v78Ev,
  (VTBL_ENTRY)&_ZN5S33C73v79Ev,
  (VTBL_ENTRY)&_ZN5S33C73v80Ev,
  (VTBL_ENTRY)&_ZN5S33C73v81Ev,
  (VTBL_ENTRY)&_ZN5S33C73v82Ev,
  (VTBL_ENTRY)&_ZN5S33C73v83Ev,
  (VTBL_ENTRY)&_ZN5S33C73v84Ev,
  (VTBL_ENTRY)&_ZN5S33C73v85Ev,
  (VTBL_ENTRY)&_ZN5S33C73v86Ev,
  (VTBL_ENTRY)&_ZN5S33C73v87Ev,
  (VTBL_ENTRY)&_ZN5S33C73v88Ev,
  (VTBL_ENTRY)&_ZN5S33C73v89Ev,
  (VTBL_ENTRY)&_ZN5S33C63v90Ev,
  (VTBL_ENTRY)&_ZN5S33C63v91Ev,
  (VTBL_ENTRY)&_ZN5S33C63v92Ev,
  (VTBL_ENTRY)&_ZN5S33C63v93Ev,
  (VTBL_ENTRY)&_ZN5S33C63v94Ev,
  (VTBL_ENTRY)&_ZN5S33C63v95Ev,
  (VTBL_ENTRY)&_ZN5S33C63v96Ev,
  (VTBL_ENTRY)&_ZN5S33C63v97Ev,
  (VTBL_ENTRY)&_ZN5S33C63v98Ev,
  (VTBL_ENTRY)&_ZN5S33C63v99Ev,
  (VTBL_ENTRY)&_ZN5S33C64v100Ev,
  (VTBL_ENTRY)&_ZN5S33C64v101Ev,
  (VTBL_ENTRY)&_ZN5S33C64v102Ev,
  (VTBL_ENTRY)&_ZN5S33C64v103Ev,
  (VTBL_ENTRY)&_ZN5S33C64v104Ev,
  (VTBL_ENTRY)&_ZN5S33C64v105Ev,
  (VTBL_ENTRY)&_ZN5S33C64v106Ev,
  (VTBL_ENTRY)&_ZN5S33C64v107Ev,
  (VTBL_ENTRY)&_ZN5S33C64v108Ev,
  (VTBL_ENTRY)&_ZN5S33C64v109Ev,
  (VTBL_ENTRY)&_ZN5S33C54v110Ev,
  (VTBL_ENTRY)&_ZN5S33C54v111Ev,
  (VTBL_ENTRY)&_ZN5S33C54v112Ev,
  (VTBL_ENTRY)&_ZN5S33C54v113Ev,
};
extern VTBL_ENTRY _ZTI5S33C5[];
extern  VTBL_ENTRY _ZTV5S33C5[];
Class_Descriptor cd_S33C5 = {  "S33C5", // class name
  bases_S33C5, 3,
  &(vtc_S33C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,220), // object size
  NSPAIRA(_ZTI5S33C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S33C5),114, //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  S33C4  : S33C5 {
  int s33c4f0;
  unsigned int s33c4f1:1;
  virtual  ~S33C4(); // _ZN5S33C4D1Ev
  virtual void  v114(); // _ZN5S33C44v114Ev
  virtual void  v115(); // _ZN5S33C44v115Ev
  virtual void  v116(); // _ZN5S33C44v116Ev
  virtual void  v117(); // _ZN5S33C44v117Ev
  virtual void  v118(); // _ZN5S33C44v118Ev
  virtual void  v119(); // _ZN5S33C44v119Ev
  virtual void  v120(); // _ZN5S33C44v120Ev
  virtual void  v121(); // _ZN5S33C44v121Ev
  S33C4(); // tgen
};
//SIG(-1 S33C4) C1{ BC2{ BC3{ BC4{ BC5{ vd v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 Fi[2] Fp Fi[2] FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} FC7 FC11{ m} FC7 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 Fi:1 Fi:1 Fi:1 FC12{ BC13{ BC10}} FC14{ BC15{ BC10}} FC16{ BC17{ BC10}} FC18{ BC19{ BC10}} Fi[3]} vd v115 v116 v117 v118 FC6 Fi:1 FC20{ BC21{ BC10}}} vd v1 v2 v3 v4 v5 v6 v7 v8 Fi Fi:1}


 S33C4 ::~S33C4(){ note_dtor("S33C4", this);}
void  S33C4 ::v114(){vfunc_called(this, "_ZN5S33C44v114Ev");}
void  S33C4 ::v115(){vfunc_called(this, "_ZN5S33C44v115Ev");}
void  S33C4 ::v116(){vfunc_called(this, "_ZN5S33C44v116Ev");}
void  S33C4 ::v117(){vfunc_called(this, "_ZN5S33C44v117Ev");}
void  S33C4 ::v118(){vfunc_called(this, "_ZN5S33C44v118Ev");}
void  S33C4 ::v119(){vfunc_called(this, "_ZN5S33C44v119Ev");}
void  S33C4 ::v120(){vfunc_called(this, "_ZN5S33C44v120Ev");}
void  S33C4 ::v121(){vfunc_called(this, "_ZN5S33C44v121Ev");}
S33C4 ::S33C4(){ note_ctor("S33C4", this);} // tgen

static void Test_S33C4()
{
  extern Class_Descriptor cd_S33C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(39,58)];
    init_test(&cd_S33C4, buf);
    S33C4 *dp, &lv = *(dp=new (buf) S33C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,228), "sizeof(S33C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S33C4)");
    check_base_class_offset(lv, (S33C8*)(S33C7*)(S33C6*)(S33C5*), 0, "S33C4");
    check_base_class_offset(lv, (S33C7*)(S33C6*)(S33C5*), 0, "S33C4");
    check_base_class_offset(lv, (S33C6*)(S33C5*), 0, "S33C4");
    check_base_class_offset(lv, (S33C5*), 0, "S33C4");
    check_field_offset(lv, s33c4f0, ABISELECT(296,220), "S33C4.s33c4f0");
    set_bf_and_test(lv, s33c4f1, ABISELECT(300,224), 0, 1, 1, "S33C4");
    test_class_info(&lv, &cd_S33C4);
    dp->~S33C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS33C4(Test_S33C4, "S33C4", ABISELECT(304,228));

#else // __cplusplus

extern void _ZN5S33C4C1Ev();
extern void _ZN5S33C4D1Ev();
Name_Map name_map_S33C4[] = {
  NSPAIR(_ZN5S33C4C1Ev),
  NSPAIR(_ZN5S33C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S33C8;
extern VTBL_ENTRY _ZTI5S33C8[];
extern  VTBL_ENTRY _ZTV5S33C8[];
extern Class_Descriptor cd_S33C7;
extern VTBL_ENTRY _ZTI5S33C7[];
extern  VTBL_ENTRY _ZTV5S33C7[];
extern Class_Descriptor cd_S33C6;
extern VTBL_ENTRY _ZTI5S33C6[];
extern  VTBL_ENTRY _ZTV5S33C6[];
extern Class_Descriptor cd_S33C5;
extern VTBL_ENTRY _ZTI5S33C5[];
extern  VTBL_ENTRY _ZTV5S33C5[];
static Base_Class bases_S33C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S33C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S33C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S33C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S33C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S33C4[];
extern void _ZN5S33C4D1Ev();
extern void _ZN5S33C4D0Ev();
extern void _ZN5S33C82v4Ev();
extern void _ZN5S33C82v5Ev();
extern void _ZN5S33C82v6Ev();
extern void _ZN5S33C82v7Ev();
extern void _ZN5S33C82v8Ev();
extern void _ZN5S33C82v9Ev();
extern void _ZN5S33C83v10Ev();
extern void _ZN5S33C83v11Ev();
extern void _ZN5S33C83v12Ev();
extern void _ZN5S33C83v13Ev();
extern void _ZN5S33C83v14Ev();
extern void _ZN5S33C83v15Ev();
extern void _ZN5S33C83v16Ev();
extern void _ZN5S33C83v17Ev();
extern void _ZN5S33C83v18Ev();
extern void _ZN5S33C83v19Ev();
extern void _ZN5S33C83v20Ev();
extern void _ZN5S33C83v21Ev();
extern void _ZN5S33C83v22Ev();
extern void _ZN5S33C83v23Ev();
extern void _ZN5S33C83v24Ev();
extern void _ZN5S33C83v25Ev();
extern void _ZN5S33C83v26Ev();
extern void _ZN5S33C83v27Ev();
extern void _ZN5S33C83v28Ev();
extern void _ZN5S33C83v29Ev();
extern void _ZN5S33C83v30Ev();
extern void _ZN5S33C83v31Ev();
extern void _ZN5S33C83v32Ev();
extern void _ZN5S33C83v33Ev();
extern void _ZN5S33C83v34Ev();
extern void _ZN5S33C83v35Ev();
extern void _ZN5S33C83v36Ev();
extern void _ZN5S33C83v37Ev();
extern void _ZN5S33C83v38Ev();
extern void _ZN5S33C83v39Ev();
extern void _ZN5S33C83v40Ev();
extern void _ZN5S33C83v41Ev();
extern void _ZN5S33C83v42Ev();
extern void _ZN5S33C83v43Ev();
extern void _ZN5S33C83v44Ev();
extern void _ZN5S33C83v45Ev();
extern void _ZN5S33C83v46Ev();
extern void _ZN5S33C83v47Ev();
extern void _ZN5S33C83v48Ev();
extern void _ZN5S33C83v49Ev();
extern void _ZN5S33C83v50Ev();
extern void _ZN5S33C83v51Ev();
extern void _ZN5S33C83v52Ev();
extern void _ZN5S33C83v53Ev();
extern void _ZN5S33C83v54Ev();
extern void _ZN5S33C83v55Ev();
extern void _ZN5S33C83v56Ev();
extern void _ZN5S33C83v57Ev();
extern void _ZN5S33C83v58Ev();
extern void _ZN5S33C83v59Ev();
extern void _ZN5S33C83v60Ev();
extern void _ZN5S33C83v61Ev();
extern void _ZN5S33C83v62Ev();
extern void _ZN5S33C83v63Ev();
extern void _ZN5S33C83v64Ev();
extern void _ZN5S33C83v65Ev();
extern void _ZN5S33C83v66Ev();
extern void _ZN5S33C83v67Ev();
extern void _ZN5S33C73v68Ev();
extern void _ZN5S33C73v69Ev();
extern void _ZN5S33C73v70Ev();
extern void _ZN5S33C73v71Ev();
extern void _ZN5S33C73v72Ev();
extern void _ZN5S33C73v73Ev();
extern void _ZN5S33C73v74Ev();
extern void _ZN5S33C73v75Ev();
extern void _ZN5S33C73v76Ev();
extern void _ZN5S33C73v77Ev();
extern void _ZN5S33C73v78Ev();
extern void _ZN5S33C73v79Ev();
extern void _ZN5S33C73v80Ev();
extern void _ZN5S33C73v81Ev();
extern void _ZN5S33C73v82Ev();
extern void _ZN5S33C73v83Ev();
extern void _ZN5S33C73v84Ev();
extern void _ZN5S33C73v85Ev();
extern void _ZN5S33C73v86Ev();
extern void _ZN5S33C73v87Ev();
extern void _ZN5S33C73v88Ev();
extern void _ZN5S33C73v89Ev();
extern void _ZN5S33C63v90Ev();
extern void _ZN5S33C63v91Ev();
extern void _ZN5S33C63v92Ev();
extern void _ZN5S33C63v93Ev();
extern void _ZN5S33C63v94Ev();
extern void _ZN5S33C63v95Ev();
extern void _ZN5S33C63v96Ev();
extern void _ZN5S33C63v97Ev();
extern void _ZN5S33C63v98Ev();
extern void _ZN5S33C63v99Ev();
extern void _ZN5S33C64v100Ev();
extern void _ZN5S33C64v101Ev();
extern void _ZN5S33C64v102Ev();
extern void _ZN5S33C64v103Ev();
extern void _ZN5S33C64v104Ev();
extern void _ZN5S33C64v105Ev();
extern void _ZN5S33C64v106Ev();
extern void _ZN5S33C64v107Ev();
extern void _ZN5S33C64v108Ev();
extern void _ZN5S33C64v109Ev();
extern void _ZN5S33C54v110Ev();
extern void _ZN5S33C54v111Ev();
extern void _ZN5S33C54v112Ev();
extern void _ZN5S33C54v113Ev();
extern void _ZN5S33C44v114Ev();
extern void _ZN5S33C44v115Ev();
extern void _ZN5S33C44v116Ev();
extern void _ZN5S33C44v117Ev();
extern void _ZN5S33C44v118Ev();
extern void _ZN5S33C44v119Ev();
extern void _ZN5S33C44v120Ev();
extern void _ZN5S33C44v121Ev();
static  VTBL_ENTRY vtc_S33C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S33C4[0]),
  (VTBL_ENTRY)&_ZN5S33C4D1Ev,
  (VTBL_ENTRY)&_ZN5S33C4D0Ev,
  (VTBL_ENTRY)&_ZN5S33C82v4Ev,
  (VTBL_ENTRY)&_ZN5S33C82v5Ev,
  (VTBL_ENTRY)&_ZN5S33C82v6Ev,
  (VTBL_ENTRY)&_ZN5S33C82v7Ev,
  (VTBL_ENTRY)&_ZN5S33C82v8Ev,
  (VTBL_ENTRY)&_ZN5S33C82v9Ev,
  (VTBL_ENTRY)&_ZN5S33C83v10Ev,
  (VTBL_ENTRY)&_ZN5S33C83v11Ev,
  (VTBL_ENTRY)&_ZN5S33C83v12Ev,
  (VTBL_ENTRY)&_ZN5S33C83v13Ev,
  (VTBL_ENTRY)&_ZN5S33C83v14Ev,
  (VTBL_ENTRY)&_ZN5S33C83v15Ev,
  (VTBL_ENTRY)&_ZN5S33C83v16Ev,
  (VTBL_ENTRY)&_ZN5S33C83v17Ev,
  (VTBL_ENTRY)&_ZN5S33C83v18Ev,
  (VTBL_ENTRY)&_ZN5S33C83v19Ev,
  (VTBL_ENTRY)&_ZN5S33C83v20Ev,
  (VTBL_ENTRY)&_ZN5S33C83v21Ev,
  (VTBL_ENTRY)&_ZN5S33C83v22Ev,
  (VTBL_ENTRY)&_ZN5S33C83v23Ev,
  (VTBL_ENTRY)&_ZN5S33C83v24Ev,
  (VTBL_ENTRY)&_ZN5S33C83v25Ev,
  (VTBL_ENTRY)&_ZN5S33C83v26Ev,
  (VTBL_ENTRY)&_ZN5S33C83v27Ev,
  (VTBL_ENTRY)&_ZN5S33C83v28Ev,
  (VTBL_ENTRY)&_ZN5S33C83v29Ev,
  (VTBL_ENTRY)&_ZN5S33C83v30Ev,
  (VTBL_ENTRY)&_ZN5S33C83v31Ev,
  (VTBL_ENTRY)&_ZN5S33C83v32Ev,
  (VTBL_ENTRY)&_ZN5S33C83v33Ev,
  (VTBL_ENTRY)&_ZN5S33C83v34Ev,
  (VTBL_ENTRY)&_ZN5S33C83v35Ev,
  (VTBL_ENTRY)&_ZN5S33C83v36Ev,
  (VTBL_ENTRY)&_ZN5S33C83v37Ev,
  (VTBL_ENTRY)&_ZN5S33C83v38Ev,
  (VTBL_ENTRY)&_ZN5S33C83v39Ev,
  (VTBL_ENTRY)&_ZN5S33C83v40Ev,
  (VTBL_ENTRY)&_ZN5S33C83v41Ev,
  (VTBL_ENTRY)&_ZN5S33C83v42Ev,
  (VTBL_ENTRY)&_ZN5S33C83v43Ev,
  (VTBL_ENTRY)&_ZN5S33C83v44Ev,
  (VTBL_ENTRY)&_ZN5S33C83v45Ev,
  (VTBL_ENTRY)&_ZN5S33C83v46Ev,
  (VTBL_ENTRY)&_ZN5S33C83v47Ev,
  (VTBL_ENTRY)&_ZN5S33C83v48Ev,
  (VTBL_ENTRY)&_ZN5S33C83v49Ev,
  (VTBL_ENTRY)&_ZN5S33C83v50Ev,
  (VTBL_ENTRY)&_ZN5S33C83v51Ev,
  (VTBL_ENTRY)&_ZN5S33C83v52Ev,
  (VTBL_ENTRY)&_ZN5S33C83v53Ev,
  (VTBL_ENTRY)&_ZN5S33C83v54Ev,
  (VTBL_ENTRY)&_ZN5S33C83v55Ev,
  (VTBL_ENTRY)&_ZN5S33C83v56Ev,
  (VTBL_ENTRY)&_ZN5S33C83v57Ev,
  (VTBL_ENTRY)&_ZN5S33C83v58Ev,
  (VTBL_ENTRY)&_ZN5S33C83v59Ev,
  (VTBL_ENTRY)&_ZN5S33C83v60Ev,
  (VTBL_ENTRY)&_ZN5S33C83v61Ev,
  (VTBL_ENTRY)&_ZN5S33C83v62Ev,
  (VTBL_ENTRY)&_ZN5S33C83v63Ev,
  (VTBL_ENTRY)&_ZN5S33C83v64Ev,
  (VTBL_ENTRY)&_ZN5S33C83v65Ev,
  (VTBL_ENTRY)&_ZN5S33C83v66Ev,
  (VTBL_ENTRY)&_ZN5S33C83v67Ev,
  (VTBL_ENTRY)&_ZN5S33C73v68Ev,
  (VTBL_ENTRY)&_ZN5S33C73v69Ev,
  (VTBL_ENTRY)&_ZN5S33C73v70Ev,
  (VTBL_ENTRY)&_ZN5S33C73v71Ev,
  (VTBL_ENTRY)&_ZN5S33C73v72Ev,
  (VTBL_ENTRY)&_ZN5S33C73v73Ev,
  (VTBL_ENTRY)&_ZN5S33C73v74Ev,
  (VTBL_ENTRY)&_ZN5S33C73v75Ev,
  (VTBL_ENTRY)&_ZN5S33C73v76Ev,
  (VTBL_ENTRY)&_ZN5S33C73v77Ev,
  (VTBL_ENTRY)&_ZN5S33C73v78Ev,
  (VTBL_ENTRY)&_ZN5S33C73v79Ev,
  (VTBL_ENTRY)&_ZN5S33C73v80Ev,
  (VTBL_ENTRY)&_ZN5S33C73v81Ev,
  (VTBL_ENTRY)&_ZN5S33C73v82Ev,
  (VTBL_ENTRY)&_ZN5S33C73v83Ev,
  (VTBL_ENTRY)&_ZN5S33C73v84Ev,
  (VTBL_ENTRY)&_ZN5S33C73v85Ev,
  (VTBL_ENTRY)&_ZN5S33C73v86Ev,
  (VTBL_ENTRY)&_ZN5S33C73v87Ev,
  (VTBL_ENTRY)&_ZN5S33C73v88Ev,
  (VTBL_ENTRY)&_ZN5S33C73v89Ev,
  (VTBL_ENTRY)&_ZN5S33C63v90Ev,
  (VTBL_ENTRY)&_ZN5S33C63v91Ev,
  (VTBL_ENTRY)&_ZN5S33C63v92Ev,
  (VTBL_ENTRY)&_ZN5S33C63v93Ev,
  (VTBL_ENTRY)&_ZN5S33C63v94Ev,
  (VTBL_ENTRY)&_ZN5S33C63v95Ev,
  (VTBL_ENTRY)&_ZN5S33C63v96Ev,
  (VTBL_ENTRY)&_ZN5S33C63v97Ev,
  (VTBL_ENTRY)&_ZN5S33C63v98Ev,
  (VTBL_ENTRY)&_ZN5S33C63v99Ev,
  (VTBL_ENTRY)&_ZN5S33C64v100Ev,
  (VTBL_ENTRY)&_ZN5S33C64v101Ev,
  (VTBL_ENTRY)&_ZN5S33C64v102Ev,
  (VTBL_ENTRY)&_ZN5S33C64v103Ev,
  (VTBL_ENTRY)&_ZN5S33C64v104Ev,
  (VTBL_ENTRY)&_ZN5S33C64v105Ev,
  (VTBL_ENTRY)&_ZN5S33C64v106Ev,
  (VTBL_ENTRY)&_ZN5S33C64v107Ev,
  (VTBL_ENTRY)&_ZN5S33C64v108Ev,
  (VTBL_ENTRY)&_ZN5S33C64v109Ev,
  (VTBL_ENTRY)&_ZN5S33C54v110Ev,
  (VTBL_ENTRY)&_ZN5S33C54v111Ev,
  (VTBL_ENTRY)&_ZN5S33C54v112Ev,
  (VTBL_ENTRY)&_ZN5S33C54v113Ev,
  (VTBL_ENTRY)&_ZN5S33C44v114Ev,
  (VTBL_ENTRY)&_ZN5S33C44v115Ev,
  (VTBL_ENTRY)&_ZN5S33C44v116Ev,
  (VTBL_ENTRY)&_ZN5S33C44v117Ev,
  (VTBL_ENTRY)&_ZN5S33C44v118Ev,
  (VTBL_ENTRY)&_ZN5S33C44v119Ev,
  (VTBL_ENTRY)&_ZN5S33C44v120Ev,
  (VTBL_ENTRY)&_ZN5S33C44v121Ev,
};
extern VTBL_ENTRY _ZTI5S33C4[];
extern  VTBL_ENTRY _ZTV5S33C4[];
Class_Descriptor cd_S33C4 = {  "S33C4", // class name
  bases_S33C4, 4,
  &(vtc_S33C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(304,228), // object size
  NSPAIRA(_ZTI5S33C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S33C4),122, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S33C3  : S33C4 {
  int s33c3f0;
  virtual  ~S33C3(); // _ZN5S33C3D1Ev
  virtual void  v122(); // _ZN5S33C34v122Ev
  virtual void  v123(); // _ZN5S33C34v123Ev
  S33C3(); // tgen
};
//SIG(-1 S33C3) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ 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 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 Fi FL Fp[4] Fi[2] Fp FC7{ m Fi[2]} Fp[2]} vd v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fi[2] Fp Fi[2] FC8{ BC9{ BC10{ BC11{ m Fp Fi[2]}}}} FC8 FC12{ m} FC8 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 Fi:1 Fi:1 Fi:1 FC13{ BC14{ BC11}} FC15{ BC16{ BC11}} FC17{ BC18{ BC11}} FC19{ BC20{ BC11}} Fi[3]} vd v109 v110 v111 v112 FC7 Fi:1 FC21{ BC22{ BC11}}} vd v113 v114 v115 v116 v117 v118 v119 v120 Fi Fi:1} vd v1 v2 Fi}


 S33C3 ::~S33C3(){ note_dtor("S33C3", this);}
void  S33C3 ::v122(){vfunc_called(this, "_ZN5S33C34v122Ev");}
void  S33C3 ::v123(){vfunc_called(this, "_ZN5S33C34v123Ev");}
S33C3 ::S33C3(){ note_ctor("S33C3", this);} // tgen

static void Test_S33C3()
{
  extern Class_Descriptor cd_S33C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(40,59)];
    init_test(&cd_S33C3, buf);
    S33C3 *dp, &lv = *(dp=new (buf) S33C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(312,232), "sizeof(S33C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S33C3)");
    check_base_class_offset(lv, (S33C8*)(S33C7*)(S33C6*)(S33C5*)(S33C4*), 0, "S33C3");
    check_base_class_offset(lv, (S33C7*)(S33C6*)(S33C5*)(S33C4*), 0, "S33C3");
    check_base_class_offset(lv, (S33C6*)(S33C5*)(S33C4*), 0, "S33C3");
    check_base_class_offset(lv, (S33C5*)(S33C4*), 0, "S33C3");
    check_base_class_offset(lv, (S33C4*), 0, "S33C3");
    check_field_offset(lv, s33c3f0, ABISELECT(304,228), "S33C3.s33c3f0");
    test_class_info(&lv, &cd_S33C3);
    dp->~S33C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS33C3(Test_S33C3, "S33C3", ABISELECT(312,232));

#else // __cplusplus

extern void _ZN5S33C3C1Ev();
extern void _ZN5S33C3D1Ev();
Name_Map name_map_S33C3[] = {
  NSPAIR(_ZN5S33C3C1Ev),
  NSPAIR(_ZN5S33C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S33C8;
extern VTBL_ENTRY _ZTI5S33C8[];
extern  VTBL_ENTRY _ZTV5S33C8[];
extern Class_Descriptor cd_S33C7;
extern VTBL_ENTRY _ZTI5S33C7[];
extern  VTBL_ENTRY _ZTV5S33C7[];
extern Class_Descriptor cd_S33C6;
extern VTBL_ENTRY _ZTI5S33C6[];
extern  VTBL_ENTRY _ZTV5S33C6[];
extern Class_Descriptor cd_S33C5;
extern VTBL_ENTRY _ZTI5S33C5[];
extern  VTBL_ENTRY _ZTV5S33C5[];
extern Class_Descriptor cd_S33C4;
extern VTBL_ENTRY _ZTI5S33C4[];
extern  VTBL_ENTRY _ZTV5S33C4[];
static Base_Class bases_S33C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S33C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S33C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S33C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S33C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S33C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S33C3[];
extern void _ZN5S33C3D1Ev();
extern void _ZN5S33C3D0Ev();
extern void _ZN5S33C82v4Ev();
extern void _ZN5S33C82v5Ev();
extern void _ZN5S33C82v6Ev();
extern void _ZN5S33C82v7Ev();
extern void _ZN5S33C82v8Ev();
extern void _ZN5S33C82v9Ev();
extern void _ZN5S33C83v10Ev();
extern void _ZN5S33C83v11Ev();
extern void _ZN5S33C83v12Ev();
extern void _ZN5S33C83v13Ev();
extern void _ZN5S33C83v14Ev();
extern void _ZN5S33C83v15Ev();
extern void _ZN5S33C83v16Ev();
extern void _ZN5S33C83v17Ev();
extern void _ZN5S33C83v18Ev();
extern void _ZN5S33C83v19Ev();
extern void _ZN5S33C83v20Ev();
extern void _ZN5S33C83v21Ev();
extern void _ZN5S33C83v22Ev();
extern void _ZN5S33C83v23Ev();
extern void _ZN5S33C83v24Ev();
extern void _ZN5S33C83v25Ev();
extern void _ZN5S33C83v26Ev();
extern void _ZN5S33C83v27Ev();
extern void _ZN5S33C83v28Ev();
extern void _ZN5S33C83v29Ev();
extern void _ZN5S33C83v30Ev();
extern void _ZN5S33C83v31Ev();
extern void _ZN5S33C83v32Ev();
extern void _ZN5S33C83v33Ev();
extern void _ZN5S33C83v34Ev();
extern void _ZN5S33C83v35Ev();
extern void _ZN5S33C83v36Ev();
extern void _ZN5S33C83v37Ev();
extern void _ZN5S33C83v38Ev();
extern void _ZN5S33C83v39Ev();
extern void _ZN5S33C83v40Ev();
extern void _ZN5S33C83v41Ev();
extern void _ZN5S33C83v42Ev();
extern void _ZN5S33C83v43Ev();
extern void _ZN5S33C83v44Ev();
extern void _ZN5S33C83v45Ev();
extern void _ZN5S33C83v46Ev();
extern void _ZN5S33C83v47Ev();
extern void _ZN5S33C83v48Ev();
extern void _ZN5S33C83v49Ev();
extern void _ZN5S33C83v50Ev();
extern void _ZN5S33C83v51Ev();
extern void _ZN5S33C83v52Ev();
extern void _ZN5S33C83v53Ev();
extern void _ZN5S33C83v54Ev();
extern void _ZN5S33C83v55Ev();
extern void _ZN5S33C83v56Ev();
extern void _ZN5S33C83v57Ev();
extern void _ZN5S33C83v58Ev();
extern void _ZN5S33C83v59Ev();
extern void _ZN5S33C83v60Ev();
extern void _ZN5S33C83v61Ev();
extern void _ZN5S33C83v62Ev();
extern void _ZN5S33C83v63Ev();
extern void _ZN5S33C83v64Ev();
extern void _ZN5S33C83v65Ev();
extern void _ZN5S33C83v66Ev();
extern void _ZN5S33C83v67Ev();
extern void _ZN5S33C73v68Ev();
extern void _ZN5S33C73v69Ev();
extern void _ZN5S33C73v70Ev();
extern void _ZN5S33C73v71Ev();
extern void _ZN5S33C73v72Ev();
extern void _ZN5S33C73v73Ev();
extern void _ZN5S33C73v74Ev();
extern void _ZN5S33C73v75Ev();
extern void _ZN5S33C73v76Ev();
extern void _ZN5S33C73v77Ev();
extern void _ZN5S33C73v78Ev();
extern void _ZN5S33C73v79Ev();
extern void _ZN5S33C73v80Ev();
extern void _ZN5S33C73v81Ev();
extern void _ZN5S33C73v82Ev();
extern void _ZN5S33C73v83Ev();
extern void _ZN5S33C73v84Ev();
extern void _ZN5S33C73v85Ev();
extern void _ZN5S33C73v86Ev();
extern void _ZN5S33C73v87Ev();
extern void _ZN5S33C73v88Ev();
extern void _ZN5S33C73v89Ev();
extern void _ZN5S33C63v90Ev();
extern void _ZN5S33C63v91Ev();
extern void _ZN5S33C63v92Ev();
extern void _ZN5S33C63v93Ev();
extern void _ZN5S33C63v94Ev();
extern void _ZN5S33C63v95Ev();
extern void _ZN5S33C63v96Ev();
extern void _ZN5S33C63v97Ev();
extern void _ZN5S33C63v98Ev();
extern void _ZN5S33C63v99Ev();
extern void _ZN5S33C64v100Ev();
extern void _ZN5S33C64v101Ev();
extern void _ZN5S33C64v102Ev();
extern void _ZN5S33C64v103Ev();
extern void _ZN5S33C64v104Ev();
extern void _ZN5S33C64v105Ev();
extern void _ZN5S33C64v106Ev();
extern void _ZN5S33C64v107Ev();
extern void _ZN5S33C64v108Ev();
extern void _ZN5S33C64v109Ev();
extern void _ZN5S33C54v110Ev();
extern void _ZN5S33C54v111Ev();
extern void _ZN5S33C54v112Ev();
extern void _ZN5S33C54v113Ev();
extern void _ZN5S33C44v114Ev();
extern void _ZN5S33C44v115Ev();
extern void _ZN5S33C44v116Ev();
extern void _ZN5S33C44v117Ev();
extern void _ZN5S33C44v118Ev();
extern void _ZN5S33C44v119Ev();
extern void _ZN5S33C44v120Ev();
extern void _ZN5S33C44v121Ev();
extern void _ZN5S33C34v122Ev();
extern void _ZN5S33C34v123Ev();
static  VTBL_ENTRY vtc_S33C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S33C3[0]),
  (VTBL_ENTRY)&_ZN5S33C3D1Ev,
  (VTBL_ENTRY)&_ZN5S33C3D0Ev,
  (VTBL_ENTRY)&_ZN5S33C82v4Ev,
  (VTBL_ENTRY)&_ZN5S33C82v5Ev,
  (VTBL_ENTRY)&_ZN5S33C82v6Ev,
  (VTBL_ENTRY)&_ZN5S33C82v7Ev,
  (VTBL_ENTRY)&_ZN5S33C82v8Ev,
  (VTBL_ENTRY)&_ZN5S33C82v9Ev,
  (VTBL_ENTRY)&_ZN5S33C83v10Ev,
  (VTBL_ENTRY)&_ZN5S33C83v11Ev,
  (VTBL_ENTRY)&_ZN5S33C83v12Ev,
  (VTBL_ENTRY)&_ZN5S33C83v13Ev,
  (VTBL_ENTRY)&_ZN5S33C83v14Ev,
  (VTBL_ENTRY)&_ZN5S33C83v15Ev,
  (VTBL_ENTRY)&_ZN5S33C83v16Ev,
  (VTBL_ENTRY)&_ZN5S33C83v17Ev,
  (VTBL_ENTRY)&_ZN5S33C83v18Ev,
  (VTBL_ENTRY)&_ZN5S33C83v19Ev,
  (VTBL_ENTRY)&_ZN5S33C83v20Ev,
  (VTBL_ENTRY)&_ZN5S33C83v21Ev,
  (VTBL_ENTRY)&_ZN5S33C83v22Ev,
  (VTBL_ENTRY)&_ZN5S33C83v23Ev,
  (VTBL_ENTRY)&_ZN5S33C83v24Ev,
  (VTBL_ENTRY)&_ZN5S33C83v25Ev,
  (VTBL_ENTRY)&_ZN5S33C83v26Ev,
  (VTBL_ENTRY)&_ZN5S33C83v27Ev,
  (VTBL_ENTRY)&_ZN5S33C83v28Ev,
  (VTBL_ENTRY)&_ZN5S33C83v29Ev,
  (VTBL_ENTRY)&_ZN5S33C83v30Ev,
  (VTBL_ENTRY)&_ZN5S33C83v31Ev,
  (VTBL_ENTRY)&_ZN5S33C83v32Ev,
  (VTBL_ENTRY)&_ZN5S33C83v33Ev,
  (VTBL_ENTRY)&_ZN5S33C83v34Ev,
  (VTBL_ENTRY)&_ZN5S33C83v35Ev,
  (VTBL_ENTRY)&_ZN5S33C83v36Ev,
  (VTBL_ENTRY)&_ZN5S33C83v37Ev,
  (VTBL_ENTRY)&_ZN5S33C83v38Ev,
  (VTBL_ENTRY)&_ZN5S33C83v39Ev,
  (VTBL_ENTRY)&_ZN5S33C83v40Ev,
  (VTBL_ENTRY)&_ZN5S33C83v41Ev,
  (VTBL_ENTRY)&_ZN5S33C83v42Ev,
  (VTBL_ENTRY)&_ZN5S33C83v43Ev,
  (VTBL_ENTRY)&_ZN5S33C83v44Ev,
  (VTBL_ENTRY)&_ZN5S33C83v45Ev,
  (VTBL_ENTRY)&_ZN5S33C83v46Ev,
  (VTBL_ENTRY)&_ZN5S33C83v47Ev,
  (VTBL_ENTRY)&_ZN5S33C83v48Ev,
  (VTBL_ENTRY)&_ZN5S33C83v49Ev,
  (VTBL_ENTRY)&_ZN5S33C83v50Ev,
  (VTBL_ENTRY)&_ZN5S33C83v51Ev,
  (VTBL_ENTRY)&_ZN5S33C83v52Ev,
  (VTBL_ENTRY)&_ZN5S33C83v53Ev,
  (VTBL_ENTRY)&_ZN5S33C83v54Ev,
  (VTBL_ENTRY)&_ZN5S33C83v55Ev,
  (VTBL_ENTRY)&_ZN5S33C83v56Ev,
  (VTBL_ENTRY)&_ZN5S33C83v57Ev,
  (VTBL_ENTRY)&_ZN5S33C83v58Ev,
  (VTBL_ENTRY)&_ZN5S33C83v59Ev,
  (VTBL_ENTRY)&_ZN5S33C83v60Ev,
  (VTBL_ENTRY)&_ZN5S33C83v61Ev,
  (VTBL_ENTRY)&_ZN5S33C83v62Ev,
  (VTBL_ENTRY)&_ZN5S33C83v63Ev,
  (VTBL_ENTRY)&_ZN5S33C83v64Ev,
  (VTBL_ENTRY)&_ZN5S33C83v65Ev,
  (VTBL_ENTRY)&_ZN5S33C83v66Ev,
  (VTBL_ENTRY)&_ZN5S33C83v67Ev,
  (VTBL_ENTRY)&_ZN5S33C73v68Ev,
  (VTBL_ENTRY)&_ZN5S33C73v69Ev,
  (VTBL_ENTRY)&_ZN5S33C73v70Ev,
  (VTBL_ENTRY)&_ZN5S33C73v71Ev,
  (VTBL_ENTRY)&_ZN5S33C73v72Ev,
  (VTBL_ENTRY)&_ZN5S33C73v73Ev,
  (VTBL_ENTRY)&_ZN5S33C73v74Ev,
  (VTBL_ENTRY)&_ZN5S33C73v75Ev,
  (VTBL_ENTRY)&_ZN5S33C73v76Ev,
  (VTBL_ENTRY)&_ZN5S33C73v77Ev,
  (VTBL_ENTRY)&_ZN5S33C73v78Ev,
  (VTBL_ENTRY)&_ZN5S33C73v79Ev,
  (VTBL_ENTRY)&_ZN5S33C73v80Ev,
  (VTBL_ENTRY)&_ZN5S33C73v81Ev,
  (VTBL_ENTRY)&_ZN5S33C73v82Ev,
  (VTBL_ENTRY)&_ZN5S33C73v83Ev,
  (VTBL_ENTRY)&_ZN5S33C73v84Ev,
  (VTBL_ENTRY)&_ZN5S33C73v85Ev,
  (VTBL_ENTRY)&_ZN5S33C73v86Ev,
  (VTBL_ENTRY)&_ZN5S33C73v87Ev,
  (VTBL_ENTRY)&_ZN5S33C73v88Ev,
  (VTBL_ENTRY)&_ZN5S33C73v89Ev,
  (VTBL_ENTRY)&_ZN5S33C63v90Ev,
  (VTBL_ENTRY)&_ZN5S33C63v91Ev,
  (VTBL_ENTRY)&_ZN5S33C63v92Ev,
  (VTBL_ENTRY)&_ZN5S33C63v93Ev,
  (VTBL_ENTRY)&_ZN5S33C63v94Ev,
  (VTBL_ENTRY)&_ZN5S33C63v95Ev,
  (VTBL_ENTRY)&_ZN5S33C63v96Ev,
  (VTBL_ENTRY)&_ZN5S33C63v97Ev,
  (VTBL_ENTRY)&_ZN5S33C63v98Ev,
  (VTBL_ENTRY)&_ZN5S33C63v99Ev,
  (VTBL_ENTRY)&_ZN5S33C64v100Ev,
  (VTBL_ENTRY)&_ZN5S33C64v101Ev,
  (VTBL_ENTRY)&_ZN5S33C64v102Ev,
  (VTBL_ENTRY)&_ZN5S33C64v103Ev,
  (VTBL_ENTRY)&_ZN5S33C64v104Ev,
  (VTBL_ENTRY)&_ZN5S33C64v105Ev,
  (VTBL_ENTRY)&_ZN5S33C64v106Ev,
  (VTBL_ENTRY)&_ZN5S33C64v107Ev,
  (VTBL_ENTRY)&_ZN5S33C64v108Ev,
  (VTBL_ENTRY)&_ZN5S33C64v109Ev,
  (VTBL_ENTRY)&_ZN5S33C54v110Ev,
  (VTBL_ENTRY)&_ZN5S33C54v111Ev,
  (VTBL_ENTRY)&_ZN5S33C54v112Ev,
  (VTBL_ENTRY)&_ZN5S33C54v113Ev,
  (VTBL_ENTRY)&_ZN5S33C44v114Ev,
  (VTBL_ENTRY)&_ZN5S33C44v115Ev,
  (VTBL_ENTRY)&_ZN5S33C44v116Ev,
  (VTBL_ENTRY)&_ZN5S33C44v117Ev,
  (VTBL_ENTRY)&_ZN5S33C44v118Ev,
  (VTBL_ENTRY)&_ZN5S33C44v119Ev,
  (VTBL_ENTRY)&_ZN5S33C44v120Ev,
  (VTBL_ENTRY)&_ZN5S33C44v121Ev,
  (VTBL_ENTRY)&_ZN5S33C34v122Ev,
  (VTBL_ENTRY)&_ZN5S33C34v123Ev,
};
extern VTBL_ENTRY _ZTI5S33C3[];
extern  VTBL_ENTRY _ZTV5S33C3[];
Class_Descriptor cd_S33C3 = {  "S33C3", // class name
  bases_S33C3, 5,
  &(vtc_S33C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(312,232), // object size
  NSPAIRA(_ZTI5S33C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S33C3),124, //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  S33C2  : S33C3 {
  void *s33c2f0;
  ::S287C8_nt s33c2f1;
  virtual  ~S33C2(); // _ZN5S33C2D1Ev
  virtual void  v124(); // _ZN5S33C24v124Ev
  virtual void  v125(); // _ZN5S33C24v125Ev
  S33C2(); // tgen
};
//SIG(-1 S33C2) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ 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 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 Fi FL Fp[4] Fi[2] Fp FC8{ m Fi[2]} Fp[2]} vd v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fi[2] Fp Fi[2] FC9{ BC10{ BC11{ BC12{ m Fp Fi[2]}}}} FC9 FC13{ m} FC9 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 Fi:1 Fi:1 Fi:1 FC14{ BC15{ BC12}} FC16{ BC17{ BC12}} FC18{ BC19{ BC12}} FC20{ BC21{ BC12}} Fi[3]} vd v109 v110 v111 v112 FC8 Fi:1 FC22{ BC23{ BC12}}} vd v113 v114 v115 v116 v117 v118 v119 v120 Fi Fi:1} vd v121 v122 Fi} vd v1 v2 Fp FC9}


 S33C2 ::~S33C2(){ note_dtor("S33C2", this);}
void  S33C2 ::v124(){vfunc_called(this, "_ZN5S33C24v124Ev");}
void  S33C2 ::v125(){vfunc_called(this, "_ZN5S33C24v125Ev");}
S33C2 ::S33C2(){ note_ctor("S33C2", this);} // tgen

static void Test_S33C2()
{
  extern Class_Descriptor cd_S33C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(43,63)];
    init_test(&cd_S33C2, buf);
    S33C2 *dp, &lv = *(dp=new (buf) S33C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,248), "sizeof(S33C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S33C2)");
    check_base_class_offset(lv, (S33C8*)(S33C7*)(S33C6*)(S33C5*)(S33C4*)(S33C3*), 0, "S33C2");
    check_base_class_offset(lv, (S33C7*)(S33C6*)(S33C5*)(S33C4*)(S33C3*), 0, "S33C2");
    check_base_class_offset(lv, (S33C6*)(S33C5*)(S33C4*)(S33C3*), 0, "S33C2");
    check_base_class_offset(lv, (S33C5*)(S33C4*)(S33C3*), 0, "S33C2");
    check_base_class_offset(lv, (S33C4*)(S33C3*), 0, "S33C2");
    check_base_class_offset(lv, (S33C3*), 0, "S33C2");
    check_field_offset(lv, s33c2f0, ABISELECT(312,232), "S33C2.s33c2f0");
    check_field_offset(lv, s33c2f1, ABISELECT(320,236), "S33C2.s33c2f1");
    test_class_info(&lv, &cd_S33C2);
    dp->~S33C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS33C2(Test_S33C2, "S33C2", ABISELECT(336,248));

#else // __cplusplus

extern void _ZN5S33C2C1Ev();
extern void _ZN5S33C2D1Ev();
Name_Map name_map_S33C2[] = {
  NSPAIR(_ZN5S33C2C1Ev),
  NSPAIR(_ZN5S33C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S33C8;
extern VTBL_ENTRY _ZTI5S33C8[];
extern  VTBL_ENTRY _ZTV5S33C8[];
extern Class_Descriptor cd_S33C7;
extern VTBL_ENTRY _ZTI5S33C7[];
extern  VTBL_ENTRY _ZTV5S33C7[];
extern Class_Descriptor cd_S33C6;
extern VTBL_ENTRY _ZTI5S33C6[];
extern  VTBL_ENTRY _ZTV5S33C6[];
extern Class_Descriptor cd_S33C5;
extern VTBL_ENTRY _ZTI5S33C5[];
extern  VTBL_ENTRY _ZTV5S33C5[];
extern Class_Descriptor cd_S33C4;
extern VTBL_ENTRY _ZTI5S33C4[];
extern  VTBL_ENTRY _ZTV5S33C4[];
extern Class_Descriptor cd_S33C3;
extern VTBL_ENTRY _ZTI5S33C3[];
extern  VTBL_ENTRY _ZTV5S33C3[];
static Base_Class bases_S33C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S33C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S33C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S33C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S33C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S33C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S33C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S33C2[];
extern void _ZN5S33C2D1Ev();
extern void _ZN5S33C2D0Ev();
extern void _ZN5S33C82v4Ev();
extern void _ZN5S33C82v5Ev();
extern void _ZN5S33C82v6Ev();
extern void _ZN5S33C82v7Ev();
extern void _ZN5S33C82v8Ev();
extern void _ZN5S33C82v9Ev();
extern void _ZN5S33C83v10Ev();
extern void _ZN5S33C83v11Ev();
extern void _ZN5S33C83v12Ev();
extern void _ZN5S33C83v13Ev();
extern void _ZN5S33C83v14Ev();
extern void _ZN5S33C83v15Ev();
extern void _ZN5S33C83v16Ev();
extern void _ZN5S33C83v17Ev();
extern void _ZN5S33C83v18Ev();
extern void _ZN5S33C83v19Ev();
extern void _ZN5S33C83v20Ev();
extern void _ZN5S33C83v21Ev();
extern void _ZN5S33C83v22Ev();
extern void _ZN5S33C83v23Ev();
extern void _ZN5S33C83v24Ev();
extern void _ZN5S33C83v25Ev();
extern void _ZN5S33C83v26Ev();
extern void _ZN5S33C83v27Ev();
extern void _ZN5S33C83v28Ev();
extern void _ZN5S33C83v29Ev();
extern void _ZN5S33C83v30Ev();
extern void _ZN5S33C83v31Ev();
extern void _ZN5S33C83v32Ev();
extern void _ZN5S33C83v33Ev();
extern void _ZN5S33C83v34Ev();
extern void _ZN5S33C83v35Ev();
extern void _ZN5S33C83v36Ev();
extern void _ZN5S33C83v37Ev();
extern void _ZN5S33C83v38Ev();
extern void _ZN5S33C83v39Ev();
extern void _ZN5S33C83v40Ev();
extern void _ZN5S33C83v41Ev();
extern void _ZN5S33C83v42Ev();
extern void _ZN5S33C83v43Ev();
extern void _ZN5S33C83v44Ev();
extern void _ZN5S33C83v45Ev();
extern void _ZN5S33C83v46Ev();
extern void _ZN5S33C83v47Ev();
extern void _ZN5S33C83v48Ev();
extern void _ZN5S33C83v49Ev();
extern void _ZN5S33C83v50Ev();
extern void _ZN5S33C83v51Ev();
extern void _ZN5S33C83v52Ev();
extern void _ZN5S33C83v53Ev();
extern void _ZN5S33C83v54Ev();
extern void _ZN5S33C83v55Ev();
extern void _ZN5S33C83v56Ev();
extern void _ZN5S33C83v57Ev();
extern void _ZN5S33C83v58Ev();
extern void _ZN5S33C83v59Ev();
extern void _ZN5S33C83v60Ev();
extern void _ZN5S33C83v61Ev();
extern void _ZN5S33C83v62Ev();
extern void _ZN5S33C83v63Ev();
extern void _ZN5S33C83v64Ev();
extern void _ZN5S33C83v65Ev();
extern void _ZN5S33C83v66Ev();
extern void _ZN5S33C83v67Ev();
extern void _ZN5S33C73v68Ev();
extern void _ZN5S33C73v69Ev();
extern void _ZN5S33C73v70Ev();
extern void _ZN5S33C73v71Ev();
extern void _ZN5S33C73v72Ev();
extern void _ZN5S33C73v73Ev();
extern void _ZN5S33C73v74Ev();
extern void _ZN5S33C73v75Ev();
extern void _ZN5S33C73v76Ev();
extern void _ZN5S33C73v77Ev();
extern void _ZN5S33C73v78Ev();
extern void _ZN5S33C73v79Ev();
extern void _ZN5S33C73v80Ev();
extern void _ZN5S33C73v81Ev();
extern void _ZN5S33C73v82Ev();
extern void _ZN5S33C73v83Ev();
extern void _ZN5S33C73v84Ev();
extern void _ZN5S33C73v85Ev();
extern void _ZN5S33C73v86Ev();
extern void _ZN5S33C73v87Ev();
extern void _ZN5S33C73v88Ev();
extern void _ZN5S33C73v89Ev();
extern void _ZN5S33C63v90Ev();
extern void _ZN5S33C63v91Ev();
extern void _ZN5S33C63v92Ev();
extern void _ZN5S33C63v93Ev();
extern void _ZN5S33C63v94Ev();
extern void _ZN5S33C63v95Ev();
extern void _ZN5S33C63v96Ev();
extern void _ZN5S33C63v97Ev();
extern void _ZN5S33C63v98Ev();
extern void _ZN5S33C63v99Ev();
extern void _ZN5S33C64v100Ev();
extern void _ZN5S33C64v101Ev();
extern void _ZN5S33C64v102Ev();
extern void _ZN5S33C64v103Ev();
extern void _ZN5S33C64v104Ev();
extern void _ZN5S33C64v105Ev();
extern void _ZN5S33C64v106Ev();
extern void _ZN5S33C64v107Ev();
extern void _ZN5S33C64v108Ev();
extern void _ZN5S33C64v109Ev();
extern void _ZN5S33C54v110Ev();
extern void _ZN5S33C54v111Ev();
extern void _ZN5S33C54v112Ev();
extern void _ZN5S33C54v113Ev();
extern void _ZN5S33C44v114Ev();
extern void _ZN5S33C44v115Ev();
extern void _ZN5S33C44v116Ev();
extern void _ZN5S33C44v117Ev();
extern void _ZN5S33C44v118Ev();
extern void _ZN5S33C44v119Ev();
extern void _ZN5S33C44v120Ev();
extern void _ZN5S33C44v121Ev();
extern void _ZN5S33C34v122Ev();
extern void _ZN5S33C34v123Ev();
extern void _ZN5S33C24v124Ev();
extern void _ZN5S33C24v125Ev();
static  VTBL_ENTRY vtc_S33C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S33C2[0]),
  (VTBL_ENTRY)&_ZN5S33C2D1Ev,
  (VTBL_ENTRY)&_ZN5S33C2D0Ev,
  (VTBL_ENTRY)&_ZN5S33C82v4Ev,
  (VTBL_ENTRY)&_ZN5S33C82v5Ev,
  (VTBL_ENTRY)&_ZN5S33C82v6Ev,
  (VTBL_ENTRY)&_ZN5S33C82v7Ev,
  (VTBL_ENTRY)&_ZN5S33C82v8Ev,
  (VTBL_ENTRY)&_ZN5S33C82v9Ev,
  (VTBL_ENTRY)&_ZN5S33C83v10Ev,
  (VTBL_ENTRY)&_ZN5S33C83v11Ev,
  (VTBL_ENTRY)&_ZN5S33C83v12Ev,
  (VTBL_ENTRY)&_ZN5S33C83v13Ev,
  (VTBL_ENTRY)&_ZN5S33C83v14Ev,
  (VTBL_ENTRY)&_ZN5S33C83v15Ev,
  (VTBL_ENTRY)&_ZN5S33C83v16Ev,
  (VTBL_ENTRY)&_ZN5S33C83v17Ev,
  (VTBL_ENTRY)&_ZN5S33C83v18Ev,
  (VTBL_ENTRY)&_ZN5S33C83v19Ev,
  (VTBL_ENTRY)&_ZN5S33C83v20Ev,
  (VTBL_ENTRY)&_ZN5S33C83v21Ev,
  (VTBL_ENTRY)&_ZN5S33C83v22Ev,
  (VTBL_ENTRY)&_ZN5S33C83v23Ev,
  (VTBL_ENTRY)&_ZN5S33C83v24Ev,
  (VTBL_ENTRY)&_ZN5S33C83v25Ev,
  (VTBL_ENTRY)&_ZN5S33C83v26Ev,
  (VTBL_ENTRY)&_ZN5S33C83v27Ev,
  (VTBL_ENTRY)&_ZN5S33C83v28Ev,
  (VTBL_ENTRY)&_ZN5S33C83v29Ev,
  (VTBL_ENTRY)&_ZN5S33C83v30Ev,
  (VTBL_ENTRY)&_ZN5S33C83v31Ev,
  (VTBL_ENTRY)&_ZN5S33C83v32Ev,
  (VTBL_ENTRY)&_ZN5S33C83v33Ev,
  (VTBL_ENTRY)&_ZN5S33C83v34Ev,
  (VTBL_ENTRY)&_ZN5S33C83v35Ev,
  (VTBL_ENTRY)&_ZN5S33C83v36Ev,
  (VTBL_ENTRY)&_ZN5S33C83v37Ev,
  (VTBL_ENTRY)&_ZN5S33C83v38Ev,
  (VTBL_ENTRY)&_ZN5S33C83v39Ev,
  (VTBL_ENTRY)&_ZN5S33C83v40Ev,
  (VTBL_ENTRY)&_ZN5S33C83v41Ev,
  (VTBL_ENTRY)&_ZN5S33C83v42Ev,
  (VTBL_ENTRY)&_ZN5S33C83v43Ev,
  (VTBL_ENTRY)&_ZN5S33C83v44Ev,
  (VTBL_ENTRY)&_ZN5S33C83v45Ev,
  (VTBL_ENTRY)&_ZN5S33C83v46Ev,
  (VTBL_ENTRY)&_ZN5S33C83v47Ev,
  (VTBL_ENTRY)&_ZN5S33C83v48Ev,
  (VTBL_ENTRY)&_ZN5S33C83v49Ev,
  (VTBL_ENTRY)&_ZN5S33C83v50Ev,
  (VTBL_ENTRY)&_ZN5S33C83v51Ev,
  (VTBL_ENTRY)&_ZN5S33C83v52Ev,
  (VTBL_ENTRY)&_ZN5S33C83v53Ev,
  (VTBL_ENTRY)&_ZN5S33C83v54Ev,
  (VTBL_ENTRY)&_ZN5S33C83v55Ev,
  (VTBL_ENTRY)&_ZN5S33C83v56Ev,
  (VTBL_ENTRY)&_ZN5S33C83v57Ev,
  (VTBL_ENTRY)&_ZN5S33C83v58Ev,
  (VTBL_ENTRY)&_ZN5S33C83v59Ev,
  (VTBL_ENTRY)&_ZN5S33C83v60Ev,
  (VTBL_ENTRY)&_ZN5S33C83v61Ev,
  (VTBL_ENTRY)&_ZN5S33C83v62Ev,
  (VTBL_ENTRY)&_ZN5S33C83v63Ev,
  (VTBL_ENTRY)&_ZN5S33C83v64Ev,
  (VTBL_ENTRY)&_ZN5S33C83v65Ev,
  (VTBL_ENTRY)&_ZN5S33C83v66Ev,
  (VTBL_ENTRY)&_ZN5S33C83v67Ev,
  (VTBL_ENTRY)&_ZN5S33C73v68Ev,
  (VTBL_ENTRY)&_ZN5S33C73v69Ev,
  (VTBL_ENTRY)&_ZN5S33C73v70Ev,
  (VTBL_ENTRY)&_ZN5S33C73v71Ev,
  (VTBL_ENTRY)&_ZN5S33C73v72Ev,
  (VTBL_ENTRY)&_ZN5S33C73v73Ev,
  (VTBL_ENTRY)&_ZN5S33C73v74Ev,
  (VTBL_ENTRY)&_ZN5S33C73v75Ev,
  (VTBL_ENTRY)&_ZN5S33C73v76Ev,
  (VTBL_ENTRY)&_ZN5S33C73v77Ev,
  (VTBL_ENTRY)&_ZN5S33C73v78Ev,
  (VTBL_ENTRY)&_ZN5S33C73v79Ev,
  (VTBL_ENTRY)&_ZN5S33C73v80Ev,
  (VTBL_ENTRY)&_ZN5S33C73v81Ev,
  (VTBL_ENTRY)&_ZN5S33C73v82Ev,
  (VTBL_ENTRY)&_ZN5S33C73v83Ev,
  (VTBL_ENTRY)&_ZN5S33C73v84Ev,
  (VTBL_ENTRY)&_ZN5S33C73v85Ev,
  (VTBL_ENTRY)&_ZN5S33C73v86Ev,
  (VTBL_ENTRY)&_ZN5S33C73v87Ev,
  (VTBL_ENTRY)&_ZN5S33C73v88Ev,
  (VTBL_ENTRY)&_ZN5S33C73v89Ev,
  (VTBL_ENTRY)&_ZN5S33C63v90Ev,
  (VTBL_ENTRY)&_ZN5S33C63v91Ev,
  (VTBL_ENTRY)&_ZN5S33C63v92Ev,
  (VTBL_ENTRY)&_ZN5S33C63v93Ev,
  (VTBL_ENTRY)&_ZN5S33C63v94Ev,
  (VTBL_ENTRY)&_ZN5S33C63v95Ev,
  (VTBL_ENTRY)&_ZN5S33C63v96Ev,
  (VTBL_ENTRY)&_ZN5S33C63v97Ev,
  (VTBL_ENTRY)&_ZN5S33C63v98Ev,
  (VTBL_ENTRY)&_ZN5S33C63v99Ev,
  (VTBL_ENTRY)&_ZN5S33C64v100Ev,
  (VTBL_ENTRY)&_ZN5S33C64v101Ev,
  (VTBL_ENTRY)&_ZN5S33C64v102Ev,
  (VTBL_ENTRY)&_ZN5S33C64v103Ev,
  (VTBL_ENTRY)&_ZN5S33C64v104Ev,
  (VTBL_ENTRY)&_ZN5S33C64v105Ev,
  (VTBL_ENTRY)&_ZN5S33C64v106Ev,
  (VTBL_ENTRY)&_ZN5S33C64v107Ev,
  (VTBL_ENTRY)&_ZN5S33C64v108Ev,
  (VTBL_ENTRY)&_ZN5S33C64v109Ev,
  (VTBL_ENTRY)&_ZN5S33C54v110Ev,
  (VTBL_ENTRY)&_ZN5S33C54v111Ev,
  (VTBL_ENTRY)&_ZN5S33C54v112Ev,
  (VTBL_ENTRY)&_ZN5S33C54v113Ev,
  (VTBL_ENTRY)&_ZN5S33C44v114Ev,
  (VTBL_ENTRY)&_ZN5S33C44v115Ev,
  (VTBL_ENTRY)&_ZN5S33C44v116Ev,
  (VTBL_ENTRY)&_ZN5S33C44v117Ev,
  (VTBL_ENTRY)&_ZN5S33C44v118Ev,
  (VTBL_ENTRY)&_ZN5S33C44v119Ev,
  (VTBL_ENTRY)&_ZN5S33C44v120Ev,
  (VTBL_ENTRY)&_ZN5S33C44v121Ev,
  (VTBL_ENTRY)&_ZN5S33C34v122Ev,
  (VTBL_ENTRY)&_ZN5S33C34v123Ev,
  (VTBL_ENTRY)&_ZN5S33C24v124Ev,
  (VTBL_ENTRY)&_ZN5S33C24v125Ev,
};
extern VTBL_ENTRY _ZTI5S33C2[];
extern  VTBL_ENTRY _ZTV5S33C2[];
Class_Descriptor cd_S33C2 = {  "S33C2", // class name
  bases_S33C2, 6,
  &(vtc_S33C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(336,248), // object size
  NSPAIRA(_ZTI5S33C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S33C2),126, //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  S33C1  : S33C2 {
  ::S287C8_nt s33c1f0;
  void *s33c1f1;
  ::S287C19 s33c1f2;
  ::S32C27_nt s33c1f3;
  virtual  ~S33C1(); // _ZN5S33C1D1Ev
  virtual void  v1(); // _ZN5S33C12v1Ev
  virtual void  v2(); // _ZN5S33C12v2Ev
  virtual void  v3(); // _ZN5S33C12v3Ev
  S33C1(); // tgen
};
//SIG(1 S33C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ BC7{ BC8{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 Fi FL Fp[4] Fi[2] Fp FC9{ m Fi[2]} Fp[2]} vd v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 Fi[2] Fp Fi[2] FC10{ BC11{ BC12{ BC13{ m Fp Fi[2]}}}} FC10 FC14{ m} FC10 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 Fi:1 Fi:1 Fi:1 FC15{ BC16{ BC13}} FC17{ BC18{ BC13}} FC19{ BC20{ BC13}} FC21{ BC22{ BC13}} Fi[3]} vd v110 v111 v112 v113 FC9 Fi:1 FC23{ BC24{ BC13}}} vd v114 v115 v116 v117 v118 v119 v120 v121 Fi Fi:1} vd v122 v123 Fi} vd v124 v125 Fp FC10} vd v1 v2 v3 FC10 Fp FC25{ BC26{ BC13}} FC27{ m Fi[4] Fi:1}}


 S33C1 ::~S33C1(){ note_dtor("S33C1", this);}
void  S33C1 ::v1(){vfunc_called(this, "_ZN5S33C12v1Ev");}
void  S33C1 ::v2(){vfunc_called(this, "_ZN5S33C12v2Ev");}
void  S33C1 ::v3(){vfunc_called(this, "_ZN5S33C12v3Ev");}
S33C1 ::S33C1(){ note_ctor("S33C1", this);} // tgen

static void Test_S33C1()
{
  extern Class_Descriptor cd_S33C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(51,75)];
    init_test(&cd_S33C1, buf);
    S33C1 *dp, &lv = *(dp=new (buf) S33C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(400,296), "sizeof(S33C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S33C1)");
    check_base_class_offset(lv, (S33C8*)(S33C7*)(S33C6*)(S33C5*)(S33C4*)(S33C3*)(S33C2*), 0, "S33C1");
    check_base_class_offset(lv, (S33C7*)(S33C6*)(S33C5*)(S33C4*)(S33C3*)(S33C2*), 0, "S33C1");
    check_base_class_offset(lv, (S33C6*)(S33C5*)(S33C4*)(S33C3*)(S33C2*), 0, "S33C1");
    check_base_class_offset(lv, (S33C5*)(S33C4*)(S33C3*)(S33C2*), 0, "S33C1");
    check_base_class_offset(lv, (S33C4*)(S33C3*)(S33C2*), 0, "S33C1");
    check_base_class_offset(lv, (S33C3*)(S33C2*), 0, "S33C1");
    check_base_class_offset(lv, (S33C2*), 0, "S33C1");
    check_field_offset(lv, s33c1f0, ABISELECT(336,248), "S33C1.s33c1f0");
    check_field_offset(lv, s33c1f1, ABISELECT(352,260), "S33C1.s33c1f1");
    check_field_offset(lv, s33c1f2, ABISELECT(360,264), "S33C1.s33c1f2");
    check_field_offset(lv, s33c1f3, ABISELECT(376,276), "S33C1.s33c1f3");
    test_class_info(&lv, &cd_S33C1);
    dp->~S33C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS33C1(Test_S33C1, "S33C1", ABISELECT(400,296));

#else // __cplusplus

extern void _ZN5S33C1C1Ev();
extern void _ZN5S33C1D1Ev();
Name_Map name_map_S33C1[] = {
  NSPAIR(_ZN5S33C1C1Ev),
  NSPAIR(_ZN5S33C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S33C8;
extern VTBL_ENTRY _ZTI5S33C8[];
extern  VTBL_ENTRY _ZTV5S33C8[];
extern Class_Descriptor cd_S33C7;
extern VTBL_ENTRY _ZTI5S33C7[];
extern  VTBL_ENTRY _ZTV5S33C7[];
extern Class_Descriptor cd_S33C6;
extern VTBL_ENTRY _ZTI5S33C6[];
extern  VTBL_ENTRY _ZTV5S33C6[];
extern Class_Descriptor cd_S33C5;
extern VTBL_ENTRY _ZTI5S33C5[];
extern  VTBL_ENTRY _ZTV5S33C5[];
extern Class_Descriptor cd_S33C4;
extern VTBL_ENTRY _ZTI5S33C4[];
extern  VTBL_ENTRY _ZTV5S33C4[];
extern Class_Descriptor cd_S33C3;
extern VTBL_ENTRY _ZTI5S33C3[];
extern  VTBL_ENTRY _ZTV5S33C3[];
extern Class_Descriptor cd_S33C2;
extern VTBL_ENTRY _ZTI5S33C2[];
extern  VTBL_ENTRY _ZTV5S33C2[];
static Base_Class bases_S33C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S33C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S33C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S33C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S33C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S33C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S33C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S33C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S33C1[];
extern void _ZN5S33C1D1Ev();
extern void _ZN5S33C1D0Ev();
extern void _ZN5S33C82v4Ev();
extern void _ZN5S33C82v5Ev();
extern void _ZN5S33C82v6Ev();
extern void _ZN5S33C82v7Ev();
extern void _ZN5S33C82v8Ev();
extern void _ZN5S33C82v9Ev();
extern void _ZN5S33C83v10Ev();
extern void _ZN5S33C83v11Ev();
extern void _ZN5S33C83v12Ev();
extern void _ZN5S33C83v13Ev();
extern void _ZN5S33C83v14Ev();
extern void _ZN5S33C83v15Ev();
extern void _ZN5S33C83v16Ev();
extern void _ZN5S33C83v17Ev();
extern void _ZN5S33C83v18Ev();
extern void _ZN5S33C83v19Ev();
extern void _ZN5S33C83v20Ev();
extern void _ZN5S33C83v21Ev();
extern void _ZN5S33C83v22Ev();
extern void _ZN5S33C83v23Ev();
extern void _ZN5S33C83v24Ev();
extern void _ZN5S33C83v25Ev();
extern void _ZN5S33C83v26Ev();
extern void _ZN5S33C83v27Ev();
extern void _ZN5S33C83v28Ev();
extern void _ZN5S33C83v29Ev();
extern void _ZN5S33C83v30Ev();
extern void _ZN5S33C83v31Ev();
extern void _ZN5S33C83v32Ev();
extern void _ZN5S33C83v33Ev();
extern void _ZN5S33C83v34Ev();
extern void _ZN5S33C83v35Ev();
extern void _ZN5S33C83v36Ev();
extern void _ZN5S33C83v37Ev();
extern void _ZN5S33C83v38Ev();
extern void _ZN5S33C83v39Ev();
extern void _ZN5S33C83v40Ev();
extern void _ZN5S33C83v41Ev();
extern void _ZN5S33C83v42Ev();
extern void _ZN5S33C83v43Ev();
extern void _ZN5S33C83v44Ev();
extern void _ZN5S33C83v45Ev();
extern void _ZN5S33C83v46Ev();
extern void _ZN5S33C83v47Ev();
extern void _ZN5S33C83v48Ev();
extern void _ZN5S33C83v49Ev();
extern void _ZN5S33C83v50Ev();
extern void _ZN5S33C83v51Ev();
extern void _ZN5S33C83v52Ev();
extern void _ZN5S33C83v53Ev();
extern void _ZN5S33C83v54Ev();
extern void _ZN5S33C83v55Ev();
extern void _ZN5S33C83v56Ev();
extern void _ZN5S33C83v57Ev();
extern void _ZN5S33C83v58Ev();
extern void _ZN5S33C83v59Ev();
extern void _ZN5S33C83v60Ev();
extern void _ZN5S33C83v61Ev();
extern void _ZN5S33C83v62Ev();
extern void _ZN5S33C83v63Ev();
extern void _ZN5S33C83v64Ev();
extern void _ZN5S33C83v65Ev();
extern void _ZN5S33C83v66Ev();
extern void _ZN5S33C83v67Ev();
extern void _ZN5S33C73v68Ev();
extern void _ZN5S33C73v69Ev();
extern void _ZN5S33C73v70Ev();
extern void _ZN5S33C73v71Ev();
extern void _ZN5S33C73v72Ev();
extern void _ZN5S33C73v73Ev();
extern void _ZN5S33C73v74Ev();
extern void _ZN5S33C73v75Ev();
extern void _ZN5S33C73v76Ev();
extern void _ZN5S33C73v77Ev();
extern void _ZN5S33C73v78Ev();
extern void _ZN5S33C73v79Ev();
extern void _ZN5S33C73v80Ev();
extern void _ZN5S33C73v81Ev();
extern void _ZN5S33C73v82Ev();
extern void _ZN5S33C73v83Ev();
extern void _ZN5S33C73v84Ev();
extern void _ZN5S33C73v85Ev();
extern void _ZN5S33C73v86Ev();
extern void _ZN5S33C73v87Ev();
extern void _ZN5S33C73v88Ev();
extern void _ZN5S33C73v89Ev();
extern void _ZN5S33C63v90Ev();
extern void _ZN5S33C63v91Ev();
extern void _ZN5S33C63v92Ev();
extern void _ZN5S33C63v93Ev();
extern void _ZN5S33C63v94Ev();
extern void _ZN5S33C63v95Ev();
extern void _ZN5S33C63v96Ev();
extern void _ZN5S33C63v97Ev();
extern void _ZN5S33C63v98Ev();
extern void _ZN5S33C63v99Ev();
extern void _ZN5S33C64v100Ev();
extern void _ZN5S33C64v101Ev();
extern void _ZN5S33C64v102Ev();
extern void _ZN5S33C64v103Ev();
extern void _ZN5S33C64v104Ev();
extern void _ZN5S33C64v105Ev();
extern void _ZN5S33C64v106Ev();
extern void _ZN5S33C64v107Ev();
extern void _ZN5S33C64v108Ev();
extern void _ZN5S33C64v109Ev();
extern void _ZN5S33C54v110Ev();
extern void _ZN5S33C54v111Ev();
extern void _ZN5S33C54v112Ev();
extern void _ZN5S33C54v113Ev();
extern void _ZN5S33C44v114Ev();
extern void _ZN5S33C44v115Ev();
extern void _ZN5S33C44v116Ev();
extern void _ZN5S33C44v117Ev();
extern void _ZN5S33C44v118Ev();
extern void _ZN5S33C44v119Ev();
extern void _ZN5S33C44v120Ev();
extern void _ZN5S33C44v121Ev();
extern void _ZN5S33C34v122Ev();
extern void _ZN5S33C34v123Ev();
extern void _ZN5S33C24v124Ev();
extern void _ZN5S33C24v125Ev();
extern void _ZN5S33C12v1Ev();
extern void _ZN5S33C12v2Ev();
extern void _ZN5S33C12v3Ev();
static  VTBL_ENTRY vtc_S33C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S33C1[0]),
  (VTBL_ENTRY)&_ZN5S33C1D1Ev,
  (VTBL_ENTRY)&_ZN5S33C1D0Ev,
  (VTBL_ENTRY)&_ZN5S33C82v4Ev,
  (VTBL_ENTRY)&_ZN5S33C82v5Ev,
  (VTBL_ENTRY)&_ZN5S33C82v6Ev,
  (VTBL_ENTRY)&_ZN5S33C82v7Ev,
  (VTBL_ENTRY)&_ZN5S33C82v8Ev,
  (VTBL_ENTRY)&_ZN5S33C82v9Ev,
  (VTBL_ENTRY)&_ZN5S33C83v10Ev,
  (VTBL_ENTRY)&_ZN5S33C83v11Ev,
  (VTBL_ENTRY)&_ZN5S33C83v12Ev,
  (VTBL_ENTRY)&_ZN5S33C83v13Ev,
  (VTBL_ENTRY)&_ZN5S33C83v14Ev,
  (VTBL_ENTRY)&_ZN5S33C83v15Ev,
  (VTBL_ENTRY)&_ZN5S33C83v16Ev,
  (VTBL_ENTRY)&_ZN5S33C83v17Ev,
  (VTBL_ENTRY)&_ZN5S33C83v18Ev,
  (VTBL_ENTRY)&_ZN5S33C83v19Ev,
  (VTBL_ENTRY)&_ZN5S33C83v20Ev,
  (VTBL_ENTRY)&_ZN5S33C83v21Ev,
  (VTBL_ENTRY)&_ZN5S33C83v22Ev,
  (VTBL_ENTRY)&_ZN5S33C83v23Ev,
  (VTBL_ENTRY)&_ZN5S33C83v24Ev,
  (VTBL_ENTRY)&_ZN5S33C83v25Ev,
  (VTBL_ENTRY)&_ZN5S33C83v26Ev,
  (VTBL_ENTRY)&_ZN5S33C83v27Ev,
  (VTBL_ENTRY)&_ZN5S33C83v28Ev,
  (VTBL_ENTRY)&_ZN5S33C83v29Ev,
  (VTBL_ENTRY)&_ZN5S33C83v30Ev,
  (VTBL_ENTRY)&_ZN5S33C83v31Ev,
  (VTBL_ENTRY)&_ZN5S33C83v32Ev,
  (VTBL_ENTRY)&_ZN5S33C83v33Ev,
  (VTBL_ENTRY)&_ZN5S33C83v34Ev,
  (VTBL_ENTRY)&_ZN5S33C83v35Ev,
  (VTBL_ENTRY)&_ZN5S33C83v36Ev,
  (VTBL_ENTRY)&_ZN5S33C83v37Ev,
  (VTBL_ENTRY)&_ZN5S33C83v38Ev,
  (VTBL_ENTRY)&_ZN5S33C83v39Ev,
  (VTBL_ENTRY)&_ZN5S33C83v40Ev,
  (VTBL_ENTRY)&_ZN5S33C83v41Ev,
  (VTBL_ENTRY)&_ZN5S33C83v42Ev,
  (VTBL_ENTRY)&_ZN5S33C83v43Ev,
  (VTBL_ENTRY)&_ZN5S33C83v44Ev,
  (VTBL_ENTRY)&_ZN5S33C83v45Ev,
  (VTBL_ENTRY)&_ZN5S33C83v46Ev,
  (VTBL_ENTRY)&_ZN5S33C83v47Ev,
  (VTBL_ENTRY)&_ZN5S33C83v48Ev,
  (VTBL_ENTRY)&_ZN5S33C83v49Ev,
  (VTBL_ENTRY)&_ZN5S33C83v50Ev,
  (VTBL_ENTRY)&_ZN5S33C83v51Ev,
  (VTBL_ENTRY)&_ZN5S33C83v52Ev,
  (VTBL_ENTRY)&_ZN5S33C83v53Ev,
  (VTBL_ENTRY)&_ZN5S33C83v54Ev,
  (VTBL_ENTRY)&_ZN5S33C83v55Ev,
  (VTBL_ENTRY)&_ZN5S33C83v56Ev,
  (VTBL_ENTRY)&_ZN5S33C83v57Ev,
  (VTBL_ENTRY)&_ZN5S33C83v58Ev,
  (VTBL_ENTRY)&_ZN5S33C83v59Ev,
  (VTBL_ENTRY)&_ZN5S33C83v60Ev,
  (VTBL_ENTRY)&_ZN5S33C83v61Ev,
  (VTBL_ENTRY)&_ZN5S33C83v62Ev,
  (VTBL_ENTRY)&_ZN5S33C83v63Ev,
  (VTBL_ENTRY)&_ZN5S33C83v64Ev,
  (VTBL_ENTRY)&_ZN5S33C83v65Ev,
  (VTBL_ENTRY)&_ZN5S33C83v66Ev,
  (VTBL_ENTRY)&_ZN5S33C83v67Ev,
  (VTBL_ENTRY)&_ZN5S33C73v68Ev,
  (VTBL_ENTRY)&_ZN5S33C73v69Ev,
  (VTBL_ENTRY)&_ZN5S33C73v70Ev,
  (VTBL_ENTRY)&_ZN5S33C73v71Ev,
  (VTBL_ENTRY)&_ZN5S33C73v72Ev,
  (VTBL_ENTRY)&_ZN5S33C73v73Ev,
  (VTBL_ENTRY)&_ZN5S33C73v74Ev,
  (VTBL_ENTRY)&_ZN5S33C73v75Ev,
  (VTBL_ENTRY)&_ZN5S33C73v76Ev,
  (VTBL_ENTRY)&_ZN5S33C73v77Ev,
  (VTBL_ENTRY)&_ZN5S33C73v78Ev,
  (VTBL_ENTRY)&_ZN5S33C73v79Ev,
  (VTBL_ENTRY)&_ZN5S33C73v80Ev,
  (VTBL_ENTRY)&_ZN5S33C73v81Ev,
  (VTBL_ENTRY)&_ZN5S33C73v82Ev,
  (VTBL_ENTRY)&_ZN5S33C73v83Ev,
  (VTBL_ENTRY)&_ZN5S33C73v84Ev,
  (VTBL_ENTRY)&_ZN5S33C73v85Ev,
  (VTBL_ENTRY)&_ZN5S33C73v86Ev,
  (VTBL_ENTRY)&_ZN5S33C73v87Ev,
  (VTBL_ENTRY)&_ZN5S33C73v88Ev,
  (VTBL_ENTRY)&_ZN5S33C73v89Ev,
  (VTBL_ENTRY)&_ZN5S33C63v90Ev,
  (VTBL_ENTRY)&_ZN5S33C63v91Ev,
  (VTBL_ENTRY)&_ZN5S33C63v92Ev,
  (VTBL_ENTRY)&_ZN5S33C63v93Ev,
  (VTBL_ENTRY)&_ZN5S33C63v94Ev,
  (VTBL_ENTRY)&_ZN5S33C63v95Ev,
  (VTBL_ENTRY)&_ZN5S33C63v96Ev,
  (VTBL_ENTRY)&_ZN5S33C63v97Ev,
  (VTBL_ENTRY)&_ZN5S33C63v98Ev,
  (VTBL_ENTRY)&_ZN5S33C63v99Ev,
  (VTBL_ENTRY)&_ZN5S33C64v100Ev,
  (VTBL_ENTRY)&_ZN5S33C64v101Ev,
  (VTBL_ENTRY)&_ZN5S33C64v102Ev,
  (VTBL_ENTRY)&_ZN5S33C64v103Ev,
  (VTBL_ENTRY)&_ZN5S33C64v104Ev,
  (VTBL_ENTRY)&_ZN5S33C64v105Ev,
  (VTBL_ENTRY)&_ZN5S33C64v106Ev,
  (VTBL_ENTRY)&_ZN5S33C64v107Ev,
  (VTBL_ENTRY)&_ZN5S33C64v108Ev,
  (VTBL_ENTRY)&_ZN5S33C64v109Ev,
  (VTBL_ENTRY)&_ZN5S33C54v110Ev,
  (VTBL_ENTRY)&_ZN5S33C54v111Ev,
  (VTBL_ENTRY)&_ZN5S33C54v112Ev,
  (VTBL_ENTRY)&_ZN5S33C54v113Ev,
  (VTBL_ENTRY)&_ZN5S33C44v114Ev,
  (VTBL_ENTRY)&_ZN5S33C44v115Ev,
  (VTBL_ENTRY)&_ZN5S33C44v116Ev,
  (VTBL_ENTRY)&_ZN5S33C44v117Ev,
  (VTBL_ENTRY)&_ZN5S33C44v118Ev,
  (VTBL_ENTRY)&_ZN5S33C44v119Ev,
  (VTBL_ENTRY)&_ZN5S33C44v120Ev,
  (VTBL_ENTRY)&_ZN5S33C44v121Ev,
  (VTBL_ENTRY)&_ZN5S33C34v122Ev,
  (VTBL_ENTRY)&_ZN5S33C34v123Ev,
  (VTBL_ENTRY)&_ZN5S33C24v124Ev,
  (VTBL_ENTRY)&_ZN5S33C24v125Ev,
  (VTBL_ENTRY)&_ZN5S33C12v1Ev,
  (VTBL_ENTRY)&_ZN5S33C12v2Ev,
  (VTBL_ENTRY)&_ZN5S33C12v3Ev,
};
extern VTBL_ENTRY _ZTI5S33C1[];
extern  VTBL_ENTRY _ZTV5S33C1[];
Class_Descriptor cd_S33C1 = {  "S33C1", // class name
  bases_S33C1, 7,
  &(vtc_S33C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(400,296), // object size
  NSPAIRA(_ZTI5S33C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S33C1),129, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  7, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S98C7  {
  int s98c7f0;
  __tsi64 s98c7f1;
  void *s98c7f2[4];
  int s98c7f3[2];
  void *s98c7f4;
  ::S3350C4_nt s98c7f5;
  void *s98c7f6[2];
  virtual  ~S98C7(); // _ZN5S98C7D1Ev
  virtual void  v5(); // _ZN5S98C72v5Ev
  virtual void  v6(); // _ZN5S98C72v6Ev
  virtual void  v7(); // _ZN5S98C72v7Ev
  virtual void  v8(); // _ZN5S98C72v8Ev
  virtual void  v9(); // _ZN5S98C72v9Ev
  virtual void  v10(); // _ZN5S98C73v10Ev
  virtual void  v11(); // _ZN5S98C73v11Ev
  virtual void  v12(); // _ZN5S98C73v12Ev
  virtual void  v13(); // _ZN5S98C73v13Ev
  virtual void  v14(); // _ZN5S98C73v14Ev
  virtual void  v15(); // _ZN5S98C73v15Ev
  virtual void  v16(); // _ZN5S98C73v16Ev
  virtual void  v17(); // _ZN5S98C73v17Ev
  virtual void  v18(); // _ZN5S98C73v18Ev
  virtual void  v19(); // _ZN5S98C73v19Ev
  virtual void  v20(); // _ZN5S98C73v20Ev
  virtual void  v21(); // _ZN5S98C73v21Ev
  virtual void  v22(); // _ZN5S98C73v22Ev
  virtual void  v23(); // _ZN5S98C73v23Ev
  virtual void  v24(); // _ZN5S98C73v24Ev
  virtual void  v25(); // _ZN5S98C73v25Ev
  virtual void  v26(); // _ZN5S98C73v26Ev
  virtual void  v27(); // _ZN5S98C73v27Ev
  virtual void  v28(); // _ZN5S98C73v28Ev
  virtual void  v29(); // _ZN5S98C73v29Ev
  virtual void  v30(); // _ZN5S98C73v30Ev
  virtual void  v31(); // _ZN5S98C73v31Ev
  virtual void  v32(); // _ZN5S98C73v32Ev
  virtual void  v33(); // _ZN5S98C73v33Ev
  virtual void  v34(); // _ZN5S98C73v34Ev
  virtual void  v35(); // _ZN5S98C73v35Ev
  virtual void  v36(); // _ZN5S98C73v36Ev
  virtual void  v37(); // _ZN5S98C73v37Ev
  virtual void  v38(); // _ZN5S98C73v38Ev
  virtual void  v39(); // _ZN5S98C73v39Ev
  virtual void  v40(); // _ZN5S98C73v40Ev
  virtual void  v41(); // _ZN5S98C73v41Ev
  virtual void  v42(); // _ZN5S98C73v42Ev
  virtual void  v43(); // _ZN5S98C73v43Ev
  virtual void  v44(); // _ZN5S98C73v44Ev
  virtual void  v45(); // _ZN5S98C73v45Ev
  virtual void  v46(); // _ZN5S98C73v46Ev
  virtual void  v47(); // _ZN5S98C73v47Ev
  virtual void  v48(); // _ZN5S98C73v48Ev
  virtual void  v49(); // _ZN5S98C73v49Ev
  virtual void  v50(); // _ZN5S98C73v50Ev
  virtual void  v51(); // _ZN5S98C73v51Ev
  virtual void  v52(); // _ZN5S98C73v52Ev
  virtual void  v53(); // _ZN5S98C73v53Ev
  virtual void  v54(); // _ZN5S98C73v54Ev
  virtual void  v55(); // _ZN5S98C73v55Ev
  virtual void  v56(); // _ZN5S98C73v56Ev
  virtual void  v57(); // _ZN5S98C73v57Ev
  virtual void  v58(); // _ZN5S98C73v58Ev
  virtual void  v59(); // _ZN5S98C73v59Ev
  virtual void  v60(); // _ZN5S98C73v60Ev
  virtual void  v61(); // _ZN5S98C73v61Ev
  virtual void  v62(); // _ZN5S98C73v62Ev
  virtual void  v63(); // _ZN5S98C73v63Ev
  virtual void  v64(); // _ZN5S98C73v64Ev
  virtual void  v65(); // _ZN5S98C73v65Ev
  virtual void  v66(); // _ZN5S98C73v66Ev
  virtual void  v67(); // _ZN5S98C73v67Ev
  virtual void  v68(); // _ZN5S98C73v68Ev
  S98C7(); // tgen
};
//SIG(-1 S98C7) 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]}


 S98C7 ::~S98C7(){ note_dtor("S98C7", this);}
void  S98C7 ::v5(){vfunc_called(this, "_ZN5S98C72v5Ev");}
void  S98C7 ::v6(){vfunc_called(this, "_ZN5S98C72v6Ev");}
void  S98C7 ::v7(){vfunc_called(this, "_ZN5S98C72v7Ev");}
void  S98C7 ::v8(){vfunc_called(this, "_ZN5S98C72v8Ev");}
void  S98C7 ::v9(){vfunc_called(this, "_ZN5S98C72v9Ev");}
void  S98C7 ::v10(){vfunc_called(this, "_ZN5S98C73v10Ev");}
void  S98C7 ::v11(){vfunc_called(this, "_ZN5S98C73v11Ev");}
void  S98C7 ::v12(){vfunc_called(this, "_ZN5S98C73v12Ev");}
void  S98C7 ::v13(){vfunc_called(this, "_ZN5S98C73v13Ev");}
void  S98C7 ::v14(){vfunc_called(this, "_ZN5S98C73v14Ev");}
void  S98C7 ::v15(){vfunc_called(this, "_ZN5S98C73v15Ev");}
void  S98C7 ::v16(){vfunc_called(this, "_ZN5S98C73v16Ev");}
void  S98C7 ::v17(){vfunc_called(this, "_ZN5S98C73v17Ev");}
void  S98C7 ::v18(){vfunc_called(this, "_ZN5S98C73v18Ev");}
void  S98C7 ::v19(){vfunc_called(this, "_ZN5S98C73v19Ev");}
void  S98C7 ::v20(){vfunc_called(this, "_ZN5S98C73v20Ev");}
void  S98C7 ::v21(){vfunc_called(this, "_ZN5S98C73v21Ev");}
void  S98C7 ::v22(){vfunc_called(this, "_ZN5S98C73v22Ev");}
void  S98C7 ::v23(){vfunc_called(this, "_ZN5S98C73v23Ev");}
void  S98C7 ::v24(){vfunc_called(this, "_ZN5S98C73v24Ev");}
void  S98C7 ::v25(){vfunc_called(this, "_ZN5S98C73v25Ev");}
void  S98C7 ::v26(){vfunc_called(this, "_ZN5S98C73v26Ev");}
void  S98C7 ::v27(){vfunc_called(this, "_ZN5S98C73v27Ev");}
void  S98C7 ::v28(){vfunc_called(this, "_ZN5S98C73v28Ev");}
void  S98C7 ::v29(){vfunc_called(this, "_ZN5S98C73v29Ev");}
void  S98C7 ::v30(){vfunc_called(this, "_ZN5S98C73v30Ev");}
void  S98C7 ::v31(){vfunc_called(this, "_ZN5S98C73v31Ev");}
void  S98C7 ::v32(){vfunc_called(this, "_ZN5S98C73v32Ev");}
void  S98C7 ::v33(){vfunc_called(this, "_ZN5S98C73v33Ev");}
void  S98C7 ::v34(){vfunc_called(this, "_ZN5S98C73v34Ev");}
void  S98C7 ::v35(){vfunc_called(this, "_ZN5S98C73v35Ev");}
void  S98C7 ::v36(){vfunc_called(this, "_ZN5S98C73v36Ev");}
void  S98C7 ::v37(){vfunc_called(this, "_ZN5S98C73v37Ev");}
void  S98C7 ::v38(){vfunc_called(this, "_ZN5S98C73v38Ev");}
void  S98C7 ::v39(){vfunc_called(this, "_ZN5S98C73v39Ev");}
void  S98C7 ::v40(){vfunc_called(this, "_ZN5S98C73v40Ev");}
void  S98C7 ::v41(){vfunc_called(this, "_ZN5S98C73v41Ev");}
void  S98C7 ::v42(){vfunc_called(this, "_ZN5S98C73v42Ev");}
void  S98C7 ::v43(){vfunc_called(this, "_ZN5S98C73v43Ev");}
void  S98C7 ::v44(){vfunc_called(this, "_ZN5S98C73v44Ev");}
void  S98C7 ::v45(){vfunc_called(this, "_ZN5S98C73v45Ev");}
void  S98C7 ::v46(){vfunc_called(this, "_ZN5S98C73v46Ev");}
void  S98C7 ::v47(){vfunc_called(this, "_ZN5S98C73v47Ev");}
void  S98C7 ::v48(){vfunc_called(this, "_ZN5S98C73v48Ev");}
void  S98C7 ::v49(){vfunc_called(this, "_ZN5S98C73v49Ev");}
void  S98C7 ::v50(){vfunc_called(this, "_ZN5S98C73v50Ev");}
void  S98C7 ::v51(){vfunc_called(this, "_ZN5S98C73v51Ev");}
void  S98C7 ::v52(){vfunc_called(this, "_ZN5S98C73v52Ev");}
void  S98C7 ::v53(){vfunc_called(this, "_ZN5S98C73v53Ev");}
void  S98C7 ::v54(){vfunc_called(this, "_ZN5S98C73v54Ev");}
void  S98C7 ::v55(){vfunc_called(this, "_ZN5S98C73v55Ev");}
void  S98C7 ::v56(){vfunc_called(this, "_ZN5S98C73v56Ev");}
void  S98C7 ::v57(){vfunc_called(this, "_ZN5S98C73v57Ev");}
void  S98C7 ::v58(){vfunc_called(this, "_ZN5S98C73v58Ev");}
void  S98C7 ::v59(){vfunc_called(this, "_ZN5S98C73v59Ev");}
void  S98C7 ::v60(){vfunc_called(this, "_ZN5S98C73v60Ev");}
void  S98C7 ::v61(){vfunc_called(this, "_ZN5S98C73v61Ev");}
void  S98C7 ::v62(){vfunc_called(this, "_ZN5S98C73v62Ev");}
void  S98C7 ::v63(){vfunc_called(this, "_ZN5S98C73v63Ev");}
void  S98C7 ::v64(){vfunc_called(this, "_ZN5S98C73v64Ev");}
void  S98C7 ::v65(){vfunc_called(this, "_ZN5S98C73v65Ev");}
void  S98C7 ::v66(){vfunc_called(this, "_ZN5S98C73v66Ev");}
void  S98C7 ::v67(){vfunc_called(this, "_ZN5S98C73v67Ev");}
void  S98C7 ::v68(){vfunc_called(this, "_ZN5S98C73v68Ev");}
S98C7 ::S98C7(){ note_ctor("S98C7", this);} // tgen

static void Test_S98C7()
{
  extern Class_Descriptor cd_S98C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S98C7, buf);
    S98C7 *dp, &lv = *(dp=new (buf) S98C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S98C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S98C7)");
    check_field_offset(lv, s98c7f0, ABISELECT(8,4), "S98C7.s98c7f0");
    check_field_offset(lv, s98c7f1, ABISELECT(16,8), "S98C7.s98c7f1");
    check_field_offset(lv, s98c7f2, ABISELECT(24,16), "S98C7.s98c7f2");
    check_field_offset(lv, s98c7f3, ABISELECT(56,32), "S98C7.s98c7f3");
    check_field_offset(lv, s98c7f4, ABISELECT(64,40), "S98C7.s98c7f4");
    check_field_offset(lv, s98c7f5, ABISELECT(72,44), "S98C7.s98c7f5");
    check_field_offset(lv, s98c7f6, ABISELECT(80,52), "S98C7.s98c7f6");
    test_class_info(&lv, &cd_S98C7);
    dp->~S98C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS98C7(Test_S98C7, "S98C7", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN5S98C7C1Ev();
extern void _ZN5S98C7D1Ev();
Name_Map name_map_S98C7[] = {
  NSPAIR(_ZN5S98C7C1Ev),
  NSPAIR(_ZN5S98C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI5S98C7[];
extern void _ZN5S98C7D1Ev();
extern void _ZN5S98C7D0Ev();
extern void _ZN5S98C72v5Ev();
extern void _ZN5S98C72v6Ev();
extern void _ZN5S98C72v7Ev();
extern void _ZN5S98C72v8Ev();
extern void _ZN5S98C72v9Ev();
extern void _ZN5S98C73v10Ev();
extern void _ZN5S98C73v11Ev();
extern void _ZN5S98C73v12Ev();
extern void _ZN5S98C73v13Ev();
extern void _ZN5S98C73v14Ev();
extern void _ZN5S98C73v15Ev();
extern void _ZN5S98C73v16Ev();
extern void _ZN5S98C73v17Ev();
extern void _ZN5S98C73v18Ev();
extern void _ZN5S98C73v19Ev();
extern void _ZN5S98C73v20Ev();
extern void _ZN5S98C73v21Ev();
extern void _ZN5S98C73v22Ev();
extern void _ZN5S98C73v23Ev();
extern void _ZN5S98C73v24Ev();
extern void _ZN5S98C73v25Ev();
extern void _ZN5S98C73v26Ev();
extern void _ZN5S98C73v27Ev();
extern void _ZN5S98C73v28Ev();
extern void _ZN5S98C73v29Ev();
extern void _ZN5S98C73v30Ev();
extern void _ZN5S98C73v31Ev();
extern void _ZN5S98C73v32Ev();
extern void _ZN5S98C73v33Ev();
extern void _ZN5S98C73v34Ev();
extern void _ZN5S98C73v35Ev();
extern void _ZN5S98C73v36Ev();
extern void _ZN5S98C73v37Ev();
extern void _ZN5S98C73v38Ev();
extern void _ZN5S98C73v39Ev();
extern void _ZN5S98C73v40Ev();
extern void _ZN5S98C73v41Ev();
extern void _ZN5S98C73v42Ev();
extern void _ZN5S98C73v43Ev();
extern void _ZN5S98C73v44Ev();
extern void _ZN5S98C73v45Ev();
extern void _ZN5S98C73v46Ev();
extern void _ZN5S98C73v47Ev();
extern void _ZN5S98C73v48Ev();
extern void _ZN5S98C73v49Ev();
extern void _ZN5S98C73v50Ev();
extern void _ZN5S98C73v51Ev();
extern void _ZN5S98C73v52Ev();
extern void _ZN5S98C73v53Ev();
extern void _ZN5S98C73v54Ev();
extern void _ZN5S98C73v55Ev();
extern void _ZN5S98C73v56Ev();
extern void _ZN5S98C73v57Ev();
extern void _ZN5S98C73v58Ev();
extern void _ZN5S98C73v59Ev();
extern void _ZN5S98C73v60Ev();
extern void _ZN5S98C73v61Ev();
extern void _ZN5S98C73v62Ev();
extern void _ZN5S98C73v63Ev();
extern void _ZN5S98C73v64Ev();
extern void _ZN5S98C73v65Ev();
extern void _ZN5S98C73v66Ev();
extern void _ZN5S98C73v67Ev();
extern void _ZN5S98C73v68Ev();
static  VTBL_ENTRY vtc_S98C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S98C7[0]),
  (VTBL_ENTRY)&_ZN5S98C7D1Ev,
  (VTBL_ENTRY)&_ZN5S98C7D0Ev,
  (VTBL_ENTRY)&_ZN5S98C72v5Ev,
  (VTBL_ENTRY)&_ZN5S98C72v6Ev,
  (VTBL_ENTRY)&_ZN5S98C72v7Ev,
  (VTBL_ENTRY)&_ZN5S98C72v8Ev,
  (VTBL_ENTRY)&_ZN5S98C72v9Ev,
  (VTBL_ENTRY)&_ZN5S98C73v10Ev,
  (VTBL_ENTRY)&_ZN5S98C73v11Ev,
  (VTBL_ENTRY)&_ZN5S98C73v12Ev,
  (VTBL_ENTRY)&_ZN5S98C73v13Ev,
  (VTBL_ENTRY)&_ZN5S98C73v14Ev,
  (VTBL_ENTRY)&_ZN5S98C73v15Ev,
  (VTBL_ENTRY)&_ZN5S98C73v16Ev,
  (VTBL_ENTRY)&_ZN5S98C73v17Ev,
  (VTBL_ENTRY)&_ZN5S98C73v18Ev,
  (VTBL_ENTRY)&_ZN5S98C73v19Ev,
  (VTBL_ENTRY)&_ZN5S98C73v20Ev,
  (VTBL_ENTRY)&_ZN5S98C73v21Ev,
  (VTBL_ENTRY)&_ZN5S98C73v22Ev,
  (VTBL_ENTRY)&_ZN5S98C73v23Ev,
  (VTBL_ENTRY)&_ZN5S98C73v24Ev,
  (VTBL_ENTRY)&_ZN5S98C73v25Ev,
  (VTBL_ENTRY)&_ZN5S98C73v26Ev,
  (VTBL_ENTRY)&_ZN5S98C73v27Ev,
  (VTBL_ENTRY)&_ZN5S98C73v28Ev,
  (VTBL_ENTRY)&_ZN5S98C73v29Ev,
  (VTBL_ENTRY)&_ZN5S98C73v30Ev,
  (VTBL_ENTRY)&_ZN5S98C73v31Ev,
  (VTBL_ENTRY)&_ZN5S98C73v32Ev,
  (VTBL_ENTRY)&_ZN5S98C73v33Ev,
  (VTBL_ENTRY)&_ZN5S98C73v34Ev,
  (VTBL_ENTRY)&_ZN5S98C73v35Ev,
  (VTBL_ENTRY)&_ZN5S98C73v36Ev,
  (VTBL_ENTRY)&_ZN5S98C73v37Ev,
  (VTBL_ENTRY)&_ZN5S98C73v38Ev,
  (VTBL_ENTRY)&_ZN5S98C73v39Ev,
  (VTBL_ENTRY)&_ZN5S98C73v40Ev,
  (VTBL_ENTRY)&_ZN5S98C73v41Ev,
  (VTBL_ENTRY)&_ZN5S98C73v42Ev,
  (VTBL_ENTRY)&_ZN5S98C73v43Ev,
  (VTBL_ENTRY)&_ZN5S98C73v44Ev,
  (VTBL_ENTRY)&_ZN5S98C73v45Ev,
  (VTBL_ENTRY)&_ZN5S98C73v46Ev,
  (VTBL_ENTRY)&_ZN5S98C73v47Ev,
  (VTBL_ENTRY)&_ZN5S98C73v48Ev,
  (VTBL_ENTRY)&_ZN5S98C73v49Ev,
  (VTBL_ENTRY)&_ZN5S98C73v50Ev,
  (VTBL_ENTRY)&_ZN5S98C73v51Ev,
  (VTBL_ENTRY)&_ZN5S98C73v52Ev,
  (VTBL_ENTRY)&_ZN5S98C73v53Ev,
  (VTBL_ENTRY)&_ZN5S98C73v54Ev,
  (VTBL_ENTRY)&_ZN5S98C73v55Ev,
  (VTBL_ENTRY)&_ZN5S98C73v56Ev,
  (VTBL_ENTRY)&_ZN5S98C73v57Ev,
  (VTBL_ENTRY)&_ZN5S98C73v58Ev,
  (VTBL_ENTRY)&_ZN5S98C73v59Ev,
  (VTBL_ENTRY)&_ZN5S98C73v60Ev,
  (VTBL_ENTRY)&_ZN5S98C73v61Ev,
  (VTBL_ENTRY)&_ZN5S98C73v62Ev,
  (VTBL_ENTRY)&_ZN5S98C73v63Ev,
  (VTBL_ENTRY)&_ZN5S98C73v64Ev,
  (VTBL_ENTRY)&_ZN5S98C73v65Ev,
  (VTBL_ENTRY)&_ZN5S98C73v66Ev,
  (VTBL_ENTRY)&_ZN5S98C73v67Ev,
  (VTBL_ENTRY)&_ZN5S98C73v68Ev,
};
extern VTBL_ENTRY _ZTI5S98C7[];
extern  VTBL_ENTRY _ZTV5S98C7[];
Class_Descriptor cd_S98C7 = {  "S98C7", // class name
  0,0,//no base classes
  &(vtc_S98C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI5S98C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV5S98C7),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  S98C6  : S98C7 {
  int s98c6f0[2];
  void *s98c6f1;
  int s98c6f2[2];
  ::S287C8_nt s98c6f3;
  ::S287C8_nt s98c6f4;
  ::S2121C38 s98c6f5;
  ::S287C8_nt s98c6f6;
  unsigned int s98c6f7:1;
  unsigned int s98c6f8:1;
  unsigned int s98c6f9:1;
  unsigned int s98c6f10:1;
  unsigned int s98c6f11:1;
  int s98c6f12[2];
  virtual  ~S98C6(); // _ZN5S98C6D1Ev
  virtual void  v69(); // _ZN5S98C63v69Ev
  virtual void  v70(); // _ZN5S98C63v70Ev
  virtual void  v71(); // _ZN5S98C63v71Ev
  virtual void  v72(); // _ZN5S98C63v72Ev
  virtual void  v73(); // _ZN5S98C63v73Ev
  virtual void  v74(); // _ZN5S98C63v74Ev
  virtual void  v75(); // _ZN5S98C63v75Ev
  virtual void  v76(); // _ZN5S98C63v76Ev
  virtual void  v77(); // _ZN5S98C63v77Ev
  virtual void  v78(); // _ZN5S98C63v78Ev
  virtual void  v79(); // _ZN5S98C63v79Ev
  virtual void  v80(); // _ZN5S98C63v80Ev
  virtual void  v81(); // _ZN5S98C63v81Ev
  virtual void  v82(); // _ZN5S98C63v82Ev
  virtual void  v83(); // _ZN5S98C63v83Ev
  virtual void  v84(); // _ZN5S98C63v84Ev
  virtual void  v85(); // _ZN5S98C63v85Ev
  virtual void  v86(); // _ZN5S98C63v86Ev
  virtual void  v87(); // _ZN5S98C63v87Ev
  virtual void  v88(); // _ZN5S98C63v88Ev
  virtual void  v89(); // _ZN5S98C63v89Ev
  virtual void  v90(); // _ZN5S98C63v90Ev
  S98C6(); // tgen
};
//SIG(-1 S98C6) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S98C6 ::~S98C6(){ note_dtor("S98C6", this);}
void  S98C6 ::v69(){vfunc_called(this, "_ZN5S98C63v69Ev");}
void  S98C6 ::v70(){vfunc_called(this, "_ZN5S98C63v70Ev");}
void  S98C6 ::v71(){vfunc_called(this, "_ZN5S98C63v71Ev");}
void  S98C6 ::v72(){vfunc_called(this, "_ZN5S98C63v72Ev");}
void  S98C6 ::v73(){vfunc_called(this, "_ZN5S98C63v73Ev");}
void  S98C6 ::v74(){vfunc_called(this, "_ZN5S98C63v74Ev");}
void  S98C6 ::v75(){vfunc_called(this, "_ZN5S98C63v75Ev");}
void  S98C6 ::v76(){vfunc_called(this, "_ZN5S98C63v76Ev");}
void  S98C6 ::v77(){vfunc_called(this, "_ZN5S98C63v77Ev");}
void  S98C6 ::v78(){vfunc_called(this, "_ZN5S98C63v78Ev");}
void  S98C6 ::v79(){vfunc_called(this, "_ZN5S98C63v79Ev");}
void  S98C6 ::v80(){vfunc_called(this, "_ZN5S98C63v80Ev");}
void  S98C6 ::v81(){vfunc_called(this, "_ZN5S98C63v81Ev");}
void  S98C6 ::v82(){vfunc_called(this, "_ZN5S98C63v82Ev");}
void  S98C6 ::v83(){vfunc_called(this, "_ZN5S98C63v83Ev");}
void  S98C6 ::v84(){vfunc_called(this, "_ZN5S98C63v84Ev");}
void  S98C6 ::v85(){vfunc_called(this, "_ZN5S98C63v85Ev");}
void  S98C6 ::v86(){vfunc_called(this, "_ZN5S98C63v86Ev");}
void  S98C6 ::v87(){vfunc_called(this, "_ZN5S98C63v87Ev");}
void  S98C6 ::v88(){vfunc_called(this, "_ZN5S98C63v88Ev");}
void  S98C6 ::v89(){vfunc_called(this, "_ZN5S98C63v89Ev");}
void  S98C6 ::v90(){vfunc_called(this, "_ZN5S98C63v90Ev");}
S98C6 ::S98C6(){ note_ctor("S98C6", this);} // tgen

static void Test_S98C6()
{
  extern Class_Descriptor cd_S98C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S98C6, buf);
    S98C6 *dp, &lv = *(dp=new (buf) S98C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S98C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S98C6)");
    check_base_class_offset(lv, (S98C7*), 0, "S98C6");
    check_field_offset(lv, s98c6f0, ABISELECT(96,60), "S98C6.s98c6f0");
    check_field_offset(lv, s98c6f1, ABISELECT(104,68), "S98C6.s98c6f1");
    check_field_offset(lv, s98c6f2, ABISELECT(112,72), "S98C6.s98c6f2");
    check_field_offset(lv, s98c6f3, ABISELECT(120,80), "S98C6.s98c6f3");
    check_field_offset(lv, s98c6f4, ABISELECT(136,92), "S98C6.s98c6f4");
    check_field_offset(lv, s98c6f5, ABISELECT(152,104), "S98C6.s98c6f5");
    check_field_offset(lv, s98c6f6, ABISELECT(160,108), "S98C6.s98c6f6");
    set_bf_and_test(lv, s98c6f7, ABISELECT(176,120), 0, 1, 1, "S98C6");
    set_bf_and_test(lv, s98c6f8, ABISELECT(176,120), 1, 1, 1, "S98C6");
    set_bf_and_test(lv, s98c6f9, ABISELECT(176,120), 2, 1, 1, "S98C6");
    set_bf_and_test(lv, s98c6f10, ABISELECT(176,120), 3, 1, 1, "S98C6");
    set_bf_and_test(lv, s98c6f11, ABISELECT(176,120), 4, 1, 1, "S98C6");
    check_field_offset(lv, s98c6f12, ABISELECT(180,124), "S98C6.s98c6f12");
    test_class_info(&lv, &cd_S98C6);
    dp->~S98C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS98C6(Test_S98C6, "S98C6", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN5S98C6C1Ev();
extern void _ZN5S98C6D1Ev();
Name_Map name_map_S98C6[] = {
  NSPAIR(_ZN5S98C6C1Ev),
  NSPAIR(_ZN5S98C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S98C7;
extern VTBL_ENTRY _ZTI5S98C7[];
extern  VTBL_ENTRY _ZTV5S98C7[];
static Base_Class bases_S98C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S98C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI5S98C6[];
extern void _ZN5S98C6D1Ev();
extern void _ZN5S98C6D0Ev();
extern void _ZN5S98C72v5Ev();
extern void _ZN5S98C72v6Ev();
extern void _ZN5S98C72v7Ev();
extern void _ZN5S98C72v8Ev();
extern void _ZN5S98C72v9Ev();
extern void _ZN5S98C73v10Ev();
extern void _ZN5S98C73v11Ev();
extern void _ZN5S98C73v12Ev();
extern void _ZN5S98C73v13Ev();
extern void _ZN5S98C73v14Ev();
extern void _ZN5S98C73v15Ev();
extern void _ZN5S98C73v16Ev();
extern void _ZN5S98C73v17Ev();
extern void _ZN5S98C73v18Ev();
extern void _ZN5S98C73v19Ev();
extern void _ZN5S98C73v20Ev();
extern void _ZN5S98C73v21Ev();
extern void _ZN5S98C73v22Ev();
extern void _ZN5S98C73v23Ev();
extern void _ZN5S98C73v24Ev();
extern void _ZN5S98C73v25Ev();
extern void _ZN5S98C73v26Ev();
extern void _ZN5S98C73v27Ev();
extern void _ZN5S98C73v28Ev();
extern void _ZN5S98C73v29Ev();
extern void _ZN5S98C73v30Ev();
extern void _ZN5S98C73v31Ev();
extern void _ZN5S98C73v32Ev();
extern void _ZN5S98C73v33Ev();
extern void _ZN5S98C73v34Ev();
extern void _ZN5S98C73v35Ev();
extern void _ZN5S98C73v36Ev();
extern void _ZN5S98C73v37Ev();
extern void _ZN5S98C73v38Ev();
extern void _ZN5S98C73v39Ev();
extern void _ZN5S98C73v40Ev();
extern void _ZN5S98C73v41Ev();
extern void _ZN5S98C73v42Ev();
extern void _ZN5S98C73v43Ev();
extern void _ZN5S98C73v44Ev();
extern void _ZN5S98C73v45Ev();
extern void _ZN5S98C73v46Ev();
extern void _ZN5S98C73v47Ev();
extern void _ZN5S98C73v48Ev();
extern void _ZN5S98C73v49Ev();
extern void _ZN5S98C73v50Ev();
extern void _ZN5S98C73v51Ev();
extern void _ZN5S98C73v52Ev();
extern void _ZN5S98C73v53Ev();
extern void _ZN5S98C73v54Ev();
extern void _ZN5S98C73v55Ev();
extern void _ZN5S98C73v56Ev();
extern void _ZN5S98C73v57Ev();
extern void _ZN5S98C73v58Ev();
extern void _ZN5S98C73v59Ev();
extern void _ZN5S98C73v60Ev();
extern void _ZN5S98C73v61Ev();
extern void _ZN5S98C73v62Ev();
extern void _ZN5S98C73v63Ev();
extern void _ZN5S98C73v64Ev();
extern void _ZN5S98C73v65Ev();
extern void _ZN5S98C73v66Ev();
extern void _ZN5S98C73v67Ev();
extern void _ZN5S98C73v68Ev();
extern void _ZN5S98C63v69Ev();
extern void _ZN5S98C63v70Ev();
extern void _ZN5S98C63v71Ev();
extern void _ZN5S98C63v72Ev();
extern void _ZN5S98C63v73Ev();
extern void _ZN5S98C63v74Ev();
extern void _ZN5S98C63v75Ev();
extern void _ZN5S98C63v76Ev();
extern void _ZN5S98C63v77Ev();
extern void _ZN5S98C63v78Ev();
extern void _ZN5S98C63v79Ev();
extern void _ZN5S98C63v80Ev();
extern void _ZN5S98C63v81Ev();
extern void _ZN5S98C63v82Ev();
extern void _ZN5S98C63v83Ev();
extern void _ZN5S98C63v84Ev();
extern void _ZN5S98C63v85Ev();
extern void _ZN5S98C63v86Ev();
extern void _ZN5S98C63v87Ev();
extern void _ZN5S98C63v88Ev();
extern void _ZN5S98C63v89Ev();
extern void _ZN5S98C63v90Ev();
static  VTBL_ENTRY vtc_S98C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S98C6[0]),
  (VTBL_ENTRY)&_ZN5S98C6D1Ev,
  (VTBL_ENTRY)&_ZN5S98C6D0Ev,
  (VTBL_ENTRY)&_ZN5S98C72v5Ev,
  (VTBL_ENTRY)&_ZN5S98C72v6Ev,
  (VTBL_ENTRY)&_ZN5S98C72v7Ev,
  (VTBL_ENTRY)&_ZN5S98C72v8Ev,
  (VTBL_ENTRY)&_ZN5S98C72v9Ev,
  (VTBL_ENTRY)&_ZN5S98C73v10Ev,
  (VTBL_ENTRY)&_ZN5S98C73v11Ev,
  (VTBL_ENTRY)&_ZN5S98C73v12Ev,
  (VTBL_ENTRY)&_ZN5S98C73v13Ev,
  (VTBL_ENTRY)&_ZN5S98C73v14Ev,
  (VTBL_ENTRY)&_ZN5S98C73v15Ev,
  (VTBL_ENTRY)&_ZN5S98C73v16Ev,
  (VTBL_ENTRY)&_ZN5S98C73v17Ev,
  (VTBL_ENTRY)&_ZN5S98C73v18Ev,
  (VTBL_ENTRY)&_ZN5S98C73v19Ev,
  (VTBL_ENTRY)&_ZN5S98C73v20Ev,
  (VTBL_ENTRY)&_ZN5S98C73v21Ev,
  (VTBL_ENTRY)&_ZN5S98C73v22Ev,
  (VTBL_ENTRY)&_ZN5S98C73v23Ev,
  (VTBL_ENTRY)&_ZN5S98C73v24Ev,
  (VTBL_ENTRY)&_ZN5S98C73v25Ev,
  (VTBL_ENTRY)&_ZN5S98C73v26Ev,
  (VTBL_ENTRY)&_ZN5S98C73v27Ev,
  (VTBL_ENTRY)&_ZN5S98C73v28Ev,
  (VTBL_ENTRY)&_ZN5S98C73v29Ev,
  (VTBL_ENTRY)&_ZN5S98C73v30Ev,
  (VTBL_ENTRY)&_ZN5S98C73v31Ev,
  (VTBL_ENTRY)&_ZN5S98C73v32Ev,
  (VTBL_ENTRY)&_ZN5S98C73v33Ev,
  (VTBL_ENTRY)&_ZN5S98C73v34Ev,
  (VTBL_ENTRY)&_ZN5S98C73v35Ev,
  (VTBL_ENTRY)&_ZN5S98C73v36Ev,
  (VTBL_ENTRY)&_ZN5S98C73v37Ev,
  (VTBL_ENTRY)&_ZN5S98C73v38Ev,
  (VTBL_ENTRY)&_ZN5S98C73v39Ev,
  (VTBL_ENTRY)&_ZN5S98C73v40Ev,
  (VTBL_ENTRY)&_ZN5S98C73v41Ev,
  (VTBL_ENTRY)&_ZN5S98C73v42Ev,
  (VTBL_ENTRY)&_ZN5S98C73v43Ev,
  (VTBL_ENTRY)&_ZN5S98C73v44Ev,
  (VTBL_ENTRY)&_ZN5S98C73v45Ev,
  (VTBL_ENTRY)&_ZN5S98C73v46Ev,
  (VTBL_ENTRY)&_ZN5S98C73v47Ev,
  (VTBL_ENTRY)&_ZN5S98C73v48Ev,
  (VTBL_ENTRY)&_ZN5S98C73v49Ev,
  (VTBL_ENTRY)&_ZN5S98C73v50Ev,
  (VTBL_ENTRY)&_ZN5S98C73v51Ev,
  (VTBL_ENTRY)&_ZN5S98C73v52Ev,
  (VTBL_ENTRY)&_ZN5S98C73v53Ev,
  (VTBL_ENTRY)&_ZN5S98C73v54Ev,
  (VTBL_ENTRY)&_ZN5S98C73v55Ev,
  (VTBL_ENTRY)&_ZN5S98C73v56Ev,
  (VTBL_ENTRY)&_ZN5S98C73v57Ev,
  (VTBL_ENTRY)&_ZN5S98C73v58Ev,
  (VTBL_ENTRY)&_ZN5S98C73v59Ev,
  (VTBL_ENTRY)&_ZN5S98C73v60Ev,
  (VTBL_ENTRY)&_ZN5S98C73v61Ev,
  (VTBL_ENTRY)&_ZN5S98C73v62Ev,
  (VTBL_ENTRY)&_ZN5S98C73v63Ev,
  (VTBL_ENTRY)&_ZN5S98C73v64Ev,
  (VTBL_ENTRY)&_ZN5S98C73v65Ev,
  (VTBL_ENTRY)&_ZN5S98C73v66Ev,
  (VTBL_ENTRY)&_ZN5S98C73v67Ev,
  (VTBL_ENTRY)&_ZN5S98C73v68Ev,
  (VTBL_ENTRY)&_ZN5S98C63v69Ev,
  (VTBL_ENTRY)&_ZN5S98C63v70Ev,
  (VTBL_ENTRY)&_ZN5S98C63v71Ev,
  (VTBL_ENTRY)&_ZN5S98C63v72Ev,
  (VTBL_ENTRY)&_ZN5S98C63v73Ev,
  (VTBL_ENTRY)&_ZN5S98C63v74Ev,
  (VTBL_ENTRY)&_ZN5S98C63v75Ev,
  (VTBL_ENTRY)&_ZN5S98C63v76Ev,
  (VTBL_ENTRY)&_ZN5S98C63v77Ev,
  (VTBL_ENTRY)&_ZN5S98C63v78Ev,
  (VTBL_ENTRY)&_ZN5S98C63v79Ev,
  (VTBL_ENTRY)&_ZN5S98C63v80Ev,
  (VTBL_ENTRY)&_ZN5S98C63v81Ev,
  (VTBL_ENTRY)&_ZN5S98C63v82Ev,
  (VTBL_ENTRY)&_ZN5S98C63v83Ev,
  (VTBL_ENTRY)&_ZN5S98C63v84Ev,
  (VTBL_ENTRY)&_ZN5S98C63v85Ev,
  (VTBL_ENTRY)&_ZN5S98C63v86Ev,
  (VTBL_ENTRY)&_ZN5S98C63v87Ev,
  (VTBL_ENTRY)&_ZN5S98C63v88Ev,
  (VTBL_ENTRY)&_ZN5S98C63v89Ev,
  (VTBL_ENTRY)&_ZN5S98C63v90Ev,
};
extern VTBL_ENTRY _ZTI5S98C6[];
extern  VTBL_ENTRY _ZTV5S98C6[];
Class_Descriptor cd_S98C6 = {  "S98C6", // class name
  bases_S98C6, 1,
  &(vtc_S98C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI5S98C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S98C6),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S98C5  : S98C6 {
  unsigned int s98c5f0:1;
  unsigned int s98c5f1:1;
  unsigned int s98c5f2:1;
  ::S3350C17 s98c5f3;
  ::S3350C11 s98c5f4;
  ::S3350C5_nt s98c5f5;
  ::S287C27 s98c5f6;
  int s98c5f7[3];
  virtual  ~S98C5(); // _ZN5S98C5D1Ev
  virtual void  v91(); // _ZN5S98C53v91Ev
  virtual void  v92(); // _ZN5S98C53v92Ev
  virtual void  v93(); // _ZN5S98C53v93Ev
  virtual void  v94(); // _ZN5S98C53v94Ev
  virtual void  v95(); // _ZN5S98C53v95Ev
  virtual void  v96(); // _ZN5S98C53v96Ev
  virtual void  v97(); // _ZN5S98C53v97Ev
  virtual void  v98(); // _ZN5S98C53v98Ev
  virtual void  v99(); // _ZN5S98C53v99Ev
  virtual void  v100(); // _ZN5S98C54v100Ev
  virtual void  v101(); // _ZN5S98C54v101Ev
  virtual void  v102(); // _ZN5S98C54v102Ev
  virtual void  v103(); // _ZN5S98C54v103Ev
  virtual void  v104(); // _ZN5S98C54v104Ev
  virtual void  v105(); // _ZN5S98C54v105Ev
  virtual void  v106(); // _ZN5S98C54v106Ev
  virtual void  v107(); // _ZN5S98C54v107Ev
  virtual void  v108(); // _ZN5S98C54v108Ev
  virtual void  v109(); // _ZN5S98C54v109Ev
  virtual void  v110(); // _ZN5S98C54v110Ev
  S98C5(); // tgen
};
//SIG(-1 S98C5) C1{ BC2{ BC3{ vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 FC10{ BC11{ BC8}} FC12{ BC13{ BC8}} FC14{ BC15{ BC8}} FC16{ BC17{ BC8}} Fi[3]}


 S98C5 ::~S98C5(){ note_dtor("S98C5", this);}
void  S98C5 ::v91(){vfunc_called(this, "_ZN5S98C53v91Ev");}
void  S98C5 ::v92(){vfunc_called(this, "_ZN5S98C53v92Ev");}
void  S98C5 ::v93(){vfunc_called(this, "_ZN5S98C53v93Ev");}
void  S98C5 ::v94(){vfunc_called(this, "_ZN5S98C53v94Ev");}
void  S98C5 ::v95(){vfunc_called(this, "_ZN5S98C53v95Ev");}
void  S98C5 ::v96(){vfunc_called(this, "_ZN5S98C53v96Ev");}
void  S98C5 ::v97(){vfunc_called(this, "_ZN5S98C53v97Ev");}
void  S98C5 ::v98(){vfunc_called(this, "_ZN5S98C53v98Ev");}
void  S98C5 ::v99(){vfunc_called(this, "_ZN5S98C53v99Ev");}
void  S98C5 ::v100(){vfunc_called(this, "_ZN5S98C54v100Ev");}
void  S98C5 ::v101(){vfunc_called(this, "_ZN5S98C54v101Ev");}
void  S98C5 ::v102(){vfunc_called(this, "_ZN5S98C54v102Ev");}
void  S98C5 ::v103(){vfunc_called(this, "_ZN5S98C54v103Ev");}
void  S98C5 ::v104(){vfunc_called(this, "_ZN5S98C54v104Ev");}
void  S98C5 ::v105(){vfunc_called(this, "_ZN5S98C54v105Ev");}
void  S98C5 ::v106(){vfunc_called(this, "_ZN5S98C54v106Ev");}
void  S98C5 ::v107(){vfunc_called(this, "_ZN5S98C54v107Ev");}
void  S98C5 ::v108(){vfunc_called(this, "_ZN5S98C54v108Ev");}
void  S98C5 ::v109(){vfunc_called(this, "_ZN5S98C54v109Ev");}
void  S98C5 ::v110(){vfunc_called(this, "_ZN5S98C54v110Ev");}
S98C5 ::S98C5(){ note_ctor("S98C5", this);} // tgen

static void Test_S98C5()
{
  extern Class_Descriptor cd_S98C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S98C5, buf);
    S98C5 *dp, &lv = *(dp=new (buf) S98C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S98C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S98C5)");
    check_base_class_offset(lv, (S98C7*)(S98C6*), 0, "S98C5");
    check_base_class_offset(lv, (S98C6*), 0, "S98C5");
    set_bf_and_test(lv, s98c5f0, ABISELECT(188,132), 0, 1, 1, "S98C5");
    set_bf_and_test(lv, s98c5f1, ABISELECT(188,132), 1, 1, 1, "S98C5");
    set_bf_and_test(lv, s98c5f2, ABISELECT(188,132), 2, 1, 1, "S98C5");
    check_field_offset(lv, s98c5f3, ABISELECT(192,136), "S98C5.s98c5f3");
    check_field_offset(lv, s98c5f4, ABISELECT(208,148), "S98C5.s98c5f4");
    check_field_offset(lv, s98c5f5, ABISELECT(224,160), "S98C5.s98c5f5");
    check_field_offset(lv, s98c5f6, ABISELECT(240,172), "S98C5.s98c5f6");
    check_field_offset(lv, s98c5f7, ABISELECT(256,184), "S98C5.s98c5f7");
    test_class_info(&lv, &cd_S98C5);
    dp->~S98C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS98C5(Test_S98C5, "S98C5", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN5S98C5C1Ev();
extern void _ZN5S98C5D1Ev();
Name_Map name_map_S98C5[] = {
  NSPAIR(_ZN5S98C5C1Ev),
  NSPAIR(_ZN5S98C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S98C7;
extern VTBL_ENTRY _ZTI5S98C7[];
extern  VTBL_ENTRY _ZTV5S98C7[];
extern Class_Descriptor cd_S98C6;
extern VTBL_ENTRY _ZTI5S98C6[];
extern  VTBL_ENTRY _ZTV5S98C6[];
static Base_Class bases_S98C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S98C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S98C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S98C5[];
extern void _ZN5S98C5D1Ev();
extern void _ZN5S98C5D0Ev();
extern void _ZN5S98C72v5Ev();
extern void _ZN5S98C72v6Ev();
extern void _ZN5S98C72v7Ev();
extern void _ZN5S98C72v8Ev();
extern void _ZN5S98C72v9Ev();
extern void _ZN5S98C73v10Ev();
extern void _ZN5S98C73v11Ev();
extern void _ZN5S98C73v12Ev();
extern void _ZN5S98C73v13Ev();
extern void _ZN5S98C73v14Ev();
extern void _ZN5S98C73v15Ev();
extern void _ZN5S98C73v16Ev();
extern void _ZN5S98C73v17Ev();
extern void _ZN5S98C73v18Ev();
extern void _ZN5S98C73v19Ev();
extern void _ZN5S98C73v20Ev();
extern void _ZN5S98C73v21Ev();
extern void _ZN5S98C73v22Ev();
extern void _ZN5S98C73v23Ev();
extern void _ZN5S98C73v24Ev();
extern void _ZN5S98C73v25Ev();
extern void _ZN5S98C73v26Ev();
extern void _ZN5S98C73v27Ev();
extern void _ZN5S98C73v28Ev();
extern void _ZN5S98C73v29Ev();
extern void _ZN5S98C73v30Ev();
extern void _ZN5S98C73v31Ev();
extern void _ZN5S98C73v32Ev();
extern void _ZN5S98C73v33Ev();
extern void _ZN5S98C73v34Ev();
extern void _ZN5S98C73v35Ev();
extern void _ZN5S98C73v36Ev();
extern void _ZN5S98C73v37Ev();
extern void _ZN5S98C73v38Ev();
extern void _ZN5S98C73v39Ev();
extern void _ZN5S98C73v40Ev();
extern void _ZN5S98C73v41Ev();
extern void _ZN5S98C73v42Ev();
extern void _ZN5S98C73v43Ev();
extern void _ZN5S98C73v44Ev();
extern void _ZN5S98C73v45Ev();
extern void _ZN5S98C73v46Ev();
extern void _ZN5S98C73v47Ev();
extern void _ZN5S98C73v48Ev();
extern void _ZN5S98C73v49Ev();
extern void _ZN5S98C73v50Ev();
extern void _ZN5S98C73v51Ev();
extern void _ZN5S98C73v52Ev();
extern void _ZN5S98C73v53Ev();
extern void _ZN5S98C73v54Ev();
extern void _ZN5S98C73v55Ev();
extern void _ZN5S98C73v56Ev();
extern void _ZN5S98C73v57Ev();
extern void _ZN5S98C73v58Ev();
extern void _ZN5S98C73v59Ev();
extern void _ZN5S98C73v60Ev();
extern void _ZN5S98C73v61Ev();
extern void _ZN5S98C73v62Ev();
extern void _ZN5S98C73v63Ev();
extern void _ZN5S98C73v64Ev();
extern void _ZN5S98C73v65Ev();
extern void _ZN5S98C73v66Ev();
extern void _ZN5S98C73v67Ev();
extern void _ZN5S98C73v68Ev();
extern void _ZN5S98C63v69Ev();
extern void _ZN5S98C63v70Ev();
extern void _ZN5S98C63v71Ev();
extern void _ZN5S98C63v72Ev();
extern void _ZN5S98C63v73Ev();
extern void _ZN5S98C63v74Ev();
extern void _ZN5S98C63v75Ev();
extern void _ZN5S98C63v76Ev();
extern void _ZN5S98C63v77Ev();
extern void _ZN5S98C63v78Ev();
extern void _ZN5S98C63v79Ev();
extern void _ZN5S98C63v80Ev();
extern void _ZN5S98C63v81Ev();
extern void _ZN5S98C63v82Ev();
extern void _ZN5S98C63v83Ev();
extern void _ZN5S98C63v84Ev();
extern void _ZN5S98C63v85Ev();
extern void _ZN5S98C63v86Ev();
extern void _ZN5S98C63v87Ev();
extern void _ZN5S98C63v88Ev();
extern void _ZN5S98C63v89Ev();
extern void _ZN5S98C63v90Ev();
extern void _ZN5S98C53v91Ev();
extern void _ZN5S98C53v92Ev();
extern void _ZN5S98C53v93Ev();
extern void _ZN5S98C53v94Ev();
extern void _ZN5S98C53v95Ev();
extern void _ZN5S98C53v96Ev();
extern void _ZN5S98C53v97Ev();
extern void _ZN5S98C53v98Ev();
extern void _ZN5S98C53v99Ev();
extern void _ZN5S98C54v100Ev();
extern void _ZN5S98C54v101Ev();
extern void _ZN5S98C54v102Ev();
extern void _ZN5S98C54v103Ev();
extern void _ZN5S98C54v104Ev();
extern void _ZN5S98C54v105Ev();
extern void _ZN5S98C54v106Ev();
extern void _ZN5S98C54v107Ev();
extern void _ZN5S98C54v108Ev();
extern void _ZN5S98C54v109Ev();
extern void _ZN5S98C54v110Ev();
static  VTBL_ENTRY vtc_S98C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S98C5[0]),
  (VTBL_ENTRY)&_ZN5S98C5D1Ev,
  (VTBL_ENTRY)&_ZN5S98C5D0Ev,
  (VTBL_ENTRY)&_ZN5S98C72v5Ev,
  (VTBL_ENTRY)&_ZN5S98C72v6Ev,
  (VTBL_ENTRY)&_ZN5S98C72v7Ev,
  (VTBL_ENTRY)&_ZN5S98C72v8Ev,
  (VTBL_ENTRY)&_ZN5S98C72v9Ev,
  (VTBL_ENTRY)&_ZN5S98C73v10Ev,
  (VTBL_ENTRY)&_ZN5S98C73v11Ev,
  (VTBL_ENTRY)&_ZN5S98C73v12Ev,
  (VTBL_ENTRY)&_ZN5S98C73v13Ev,
  (VTBL_ENTRY)&_ZN5S98C73v14Ev,
  (VTBL_ENTRY)&_ZN5S98C73v15Ev,
  (VTBL_ENTRY)&_ZN5S98C73v16Ev,
  (VTBL_ENTRY)&_ZN5S98C73v17Ev,
  (VTBL_ENTRY)&_ZN5S98C73v18Ev,
  (VTBL_ENTRY)&_ZN5S98C73v19Ev,
  (VTBL_ENTRY)&_ZN5S98C73v20Ev,
  (VTBL_ENTRY)&_ZN5S98C73v21Ev,
  (VTBL_ENTRY)&_ZN5S98C73v22Ev,
  (VTBL_ENTRY)&_ZN5S98C73v23Ev,
  (VTBL_ENTRY)&_ZN5S98C73v24Ev,
  (VTBL_ENTRY)&_ZN5S98C73v25Ev,
  (VTBL_ENTRY)&_ZN5S98C73v26Ev,
  (VTBL_ENTRY)&_ZN5S98C73v27Ev,
  (VTBL_ENTRY)&_ZN5S98C73v28Ev,
  (VTBL_ENTRY)&_ZN5S98C73v29Ev,
  (VTBL_ENTRY)&_ZN5S98C73v30Ev,
  (VTBL_ENTRY)&_ZN5S98C73v31Ev,
  (VTBL_ENTRY)&_ZN5S98C73v32Ev,
  (VTBL_ENTRY)&_ZN5S98C73v33Ev,
  (VTBL_ENTRY)&_ZN5S98C73v34Ev,
  (VTBL_ENTRY)&_ZN5S98C73v35Ev,
  (VTBL_ENTRY)&_ZN5S98C73v36Ev,
  (VTBL_ENTRY)&_ZN5S98C73v37Ev,
  (VTBL_ENTRY)&_ZN5S98C73v38Ev,
  (VTBL_ENTRY)&_ZN5S98C73v39Ev,
  (VTBL_ENTRY)&_ZN5S98C73v40Ev,
  (VTBL_ENTRY)&_ZN5S98C73v41Ev,
  (VTBL_ENTRY)&_ZN5S98C73v42Ev,
  (VTBL_ENTRY)&_ZN5S98C73v43Ev,
  (VTBL_ENTRY)&_ZN5S98C73v44Ev,
  (VTBL_ENTRY)&_ZN5S98C73v45Ev,
  (VTBL_ENTRY)&_ZN5S98C73v46Ev,
  (VTBL_ENTRY)&_ZN5S98C73v47Ev,
  (VTBL_ENTRY)&_ZN5S98C73v48Ev,
  (VTBL_ENTRY)&_ZN5S98C73v49Ev,
  (VTBL_ENTRY)&_ZN5S98C73v50Ev,
  (VTBL_ENTRY)&_ZN5S98C73v51Ev,
  (VTBL_ENTRY)&_ZN5S98C73v52Ev,
  (VTBL_ENTRY)&_ZN5S98C73v53Ev,
  (VTBL_ENTRY)&_ZN5S98C73v54Ev,
  (VTBL_ENTRY)&_ZN5S98C73v55Ev,
  (VTBL_ENTRY)&_ZN5S98C73v56Ev,
  (VTBL_ENTRY)&_ZN5S98C73v57Ev,
  (VTBL_ENTRY)&_ZN5S98C73v58Ev,
  (VTBL_ENTRY)&_ZN5S98C73v59Ev,
  (VTBL_ENTRY)&_ZN5S98C73v60Ev,
  (VTBL_ENTRY)&_ZN5S98C73v61Ev,
  (VTBL_ENTRY)&_ZN5S98C73v62Ev,
  (VTBL_ENTRY)&_ZN5S98C73v63Ev,
  (VTBL_ENTRY)&_ZN5S98C73v64Ev,
  (VTBL_ENTRY)&_ZN5S98C73v65Ev,
  (VTBL_ENTRY)&_ZN5S98C73v66Ev,
  (VTBL_ENTRY)&_ZN5S98C73v67Ev,
  (VTBL_ENTRY)&_ZN5S98C73v68Ev,
  (VTBL_ENTRY)&_ZN5S98C63v69Ev,
  (VTBL_ENTRY)&_ZN5S98C63v70Ev,
  (VTBL_ENTRY)&_ZN5S98C63v71Ev,
  (VTBL_ENTRY)&_ZN5S98C63v72Ev,
  (VTBL_ENTRY)&_ZN5S98C63v73Ev,
  (VTBL_ENTRY)&_ZN5S98C63v74Ev,
  (VTBL_ENTRY)&_ZN5S98C63v75Ev,
  (VTBL_ENTRY)&_ZN5S98C63v76Ev,
  (VTBL_ENTRY)&_ZN5S98C63v77Ev,
  (VTBL_ENTRY)&_ZN5S98C63v78Ev,
  (VTBL_ENTRY)&_ZN5S98C63v79Ev,
  (VTBL_ENTRY)&_ZN5S98C63v80Ev,
  (VTBL_ENTRY)&_ZN5S98C63v81Ev,
  (VTBL_ENTRY)&_ZN5S98C63v82Ev,
  (VTBL_ENTRY)&_ZN5S98C63v83Ev,
  (VTBL_ENTRY)&_ZN5S98C63v84Ev,
  (VTBL_ENTRY)&_ZN5S98C63v85Ev,
  (VTBL_ENTRY)&_ZN5S98C63v86Ev,
  (VTBL_ENTRY)&_ZN5S98C63v87Ev,
  (VTBL_ENTRY)&_ZN5S98C63v88Ev,
  (VTBL_ENTRY)&_ZN5S98C63v89Ev,
  (VTBL_ENTRY)&_ZN5S98C63v90Ev,
  (VTBL_ENTRY)&_ZN5S98C53v91Ev,
  (VTBL_ENTRY)&_ZN5S98C53v92Ev,
  (VTBL_ENTRY)&_ZN5S98C53v93Ev,
  (VTBL_ENTRY)&_ZN5S98C53v94Ev,
  (VTBL_ENTRY)&_ZN5S98C53v95Ev,
  (VTBL_ENTRY)&_ZN5S98C53v96Ev,
  (VTBL_ENTRY)&_ZN5S98C53v97Ev,
  (VTBL_ENTRY)&_ZN5S98C53v98Ev,
  (VTBL_ENTRY)&_ZN5S98C53v99Ev,
  (VTBL_ENTRY)&_ZN5S98C54v100Ev,
  (VTBL_ENTRY)&_ZN5S98C54v101Ev,
  (VTBL_ENTRY)&_ZN5S98C54v102Ev,
  (VTBL_ENTRY)&_ZN5S98C54v103Ev,
  (VTBL_ENTRY)&_ZN5S98C54v104Ev,
  (VTBL_ENTRY)&_ZN5S98C54v105Ev,
  (VTBL_ENTRY)&_ZN5S98C54v106Ev,
  (VTBL_ENTRY)&_ZN5S98C54v107Ev,
  (VTBL_ENTRY)&_ZN5S98C54v108Ev,
  (VTBL_ENTRY)&_ZN5S98C54v109Ev,
  (VTBL_ENTRY)&_ZN5S98C54v110Ev,
};
extern VTBL_ENTRY _ZTI5S98C5[];
extern  VTBL_ENTRY _ZTV5S98C5[];
Class_Descriptor cd_S98C5 = {  "S98C5", // class name
  bases_S98C5, 2,
  &(vtc_S98C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI5S98C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S98C5),110, //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  S98C4  : S98C5 {
  ::S3350C4_nt s98c4f0;
  unsigned int s98c4f1:1;
  ::S287C23 s98c4f2;
  virtual  ~S98C4(); // _ZN5S98C4D1Ev
  virtual void  v111(); // _ZN5S98C44v111Ev
  virtual void  v112(); // _ZN5S98C44v112Ev
  virtual void  v113(); // _ZN5S98C44v113Ev
  virtual void  v114(); // _ZN5S98C44v114Ev
  S98C4(); // tgen
};
//SIG(-1 S98C4) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 Fi:1 Fi:1 Fi:1 FC11{ BC12{ BC9}} FC13{ BC14{ BC9}} FC15{ BC16{ BC9}} FC17{ BC18{ BC9}} Fi[3]} vd v1 v2 v3 v4 FC5 Fi:1 FC19{ BC20{ BC9}}}


 S98C4 ::~S98C4(){ note_dtor("S98C4", this);}
void  S98C4 ::v111(){vfunc_called(this, "_ZN5S98C44v111Ev");}
void  S98C4 ::v112(){vfunc_called(this, "_ZN5S98C44v112Ev");}
void  S98C4 ::v113(){vfunc_called(this, "_ZN5S98C44v113Ev");}
void  S98C4 ::v114(){vfunc_called(this, "_ZN5S98C44v114Ev");}
S98C4 ::S98C4(){ note_ctor("S98C4", this);} // tgen

static void Test_S98C4()
{
  extern Class_Descriptor cd_S98C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,56)];
    init_test(&cd_S98C4, buf);
    S98C4 *dp, &lv = *(dp=new (buf) S98C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,220), "sizeof(S98C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S98C4)");
    check_base_class_offset(lv, (S98C7*)(S98C6*)(S98C5*), 0, "S98C4");
    check_base_class_offset(lv, (S98C6*)(S98C5*), 0, "S98C4");
    check_base_class_offset(lv, (S98C5*), 0, "S98C4");
    check_field_offset(lv, s98c4f0, ABISELECT(268,196), "S98C4.s98c4f0");
    set_bf_and_test(lv, s98c4f1, ABISELECT(276,204), 0, 1, 1, "S98C4");
    check_field_offset(lv, s98c4f2, ABISELECT(280,208), "S98C4.s98c4f2");
    test_class_info(&lv, &cd_S98C4);
    dp->~S98C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS98C4(Test_S98C4, "S98C4", ABISELECT(296,220));

#else // __cplusplus

extern void _ZN5S98C4C1Ev();
extern void _ZN5S98C4D1Ev();
Name_Map name_map_S98C4[] = {
  NSPAIR(_ZN5S98C4C1Ev),
  NSPAIR(_ZN5S98C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S98C7;
extern VTBL_ENTRY _ZTI5S98C7[];
extern  VTBL_ENTRY _ZTV5S98C7[];
extern Class_Descriptor cd_S98C6;
extern VTBL_ENTRY _ZTI5S98C6[];
extern  VTBL_ENTRY _ZTV5S98C6[];
extern Class_Descriptor cd_S98C5;
extern VTBL_ENTRY _ZTI5S98C5[];
extern  VTBL_ENTRY _ZTV5S98C5[];
static Base_Class bases_S98C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S98C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S98C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S98C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S98C4[];
extern void _ZN5S98C4D1Ev();
extern void _ZN5S98C4D0Ev();
extern void _ZN5S98C72v5Ev();
extern void _ZN5S98C72v6Ev();
extern void _ZN5S98C72v7Ev();
extern void _ZN5S98C72v8Ev();
extern void _ZN5S98C72v9Ev();
extern void _ZN5S98C73v10Ev();
extern void _ZN5S98C73v11Ev();
extern void _ZN5S98C73v12Ev();
extern void _ZN5S98C73v13Ev();
extern void _ZN5S98C73v14Ev();
extern void _ZN5S98C73v15Ev();
extern void _ZN5S98C73v16Ev();
extern void _ZN5S98C73v17Ev();
extern void _ZN5S98C73v18Ev();
extern void _ZN5S98C73v19Ev();
extern void _ZN5S98C73v20Ev();
extern void _ZN5S98C73v21Ev();
extern void _ZN5S98C73v22Ev();
extern void _ZN5S98C73v23Ev();
extern void _ZN5S98C73v24Ev();
extern void _ZN5S98C73v25Ev();
extern void _ZN5S98C73v26Ev();
extern void _ZN5S98C73v27Ev();
extern void _ZN5S98C73v28Ev();
extern void _ZN5S98C73v29Ev();
extern void _ZN5S98C73v30Ev();
extern void _ZN5S98C73v31Ev();
extern void _ZN5S98C73v32Ev();
extern void _ZN5S98C73v33Ev();
extern void _ZN5S98C73v34Ev();
extern void _ZN5S98C73v35Ev();
extern void _ZN5S98C73v36Ev();
extern void _ZN5S98C73v37Ev();
extern void _ZN5S98C73v38Ev();
extern void _ZN5S98C73v39Ev();
extern void _ZN5S98C73v40Ev();
extern void _ZN5S98C73v41Ev();
extern void _ZN5S98C73v42Ev();
extern void _ZN5S98C73v43Ev();
extern void _ZN5S98C73v44Ev();
extern void _ZN5S98C73v45Ev();
extern void _ZN5S98C73v46Ev();
extern void _ZN5S98C73v47Ev();
extern void _ZN5S98C73v48Ev();
extern void _ZN5S98C73v49Ev();
extern void _ZN5S98C73v50Ev();
extern void _ZN5S98C73v51Ev();
extern void _ZN5S98C73v52Ev();
extern void _ZN5S98C73v53Ev();
extern void _ZN5S98C73v54Ev();
extern void _ZN5S98C73v55Ev();
extern void _ZN5S98C73v56Ev();
extern void _ZN5S98C73v57Ev();
extern void _ZN5S98C73v58Ev();
extern void _ZN5S98C73v59Ev();
extern void _ZN5S98C73v60Ev();
extern void _ZN5S98C73v61Ev();
extern void _ZN5S98C73v62Ev();
extern void _ZN5S98C73v63Ev();
extern void _ZN5S98C73v64Ev();
extern void _ZN5S98C73v65Ev();
extern void _ZN5S98C73v66Ev();
extern void _ZN5S98C73v67Ev();
extern void _ZN5S98C73v68Ev();
extern void _ZN5S98C63v69Ev();
extern void _ZN5S98C63v70Ev();
extern void _ZN5S98C63v71Ev();
extern void _ZN5S98C63v72Ev();
extern void _ZN5S98C63v73Ev();
extern void _ZN5S98C63v74Ev();
extern void _ZN5S98C63v75Ev();
extern void _ZN5S98C63v76Ev();
extern void _ZN5S98C63v77Ev();
extern void _ZN5S98C63v78Ev();
extern void _ZN5S98C63v79Ev();
extern void _ZN5S98C63v80Ev();
extern void _ZN5S98C63v81Ev();
extern void _ZN5S98C63v82Ev();
extern void _ZN5S98C63v83Ev();
extern void _ZN5S98C63v84Ev();
extern void _ZN5S98C63v85Ev();
extern void _ZN5S98C63v86Ev();
extern void _ZN5S98C63v87Ev();
extern void _ZN5S98C63v88Ev();
extern void _ZN5S98C63v89Ev();
extern void _ZN5S98C63v90Ev();
extern void _ZN5S98C53v91Ev();
extern void _ZN5S98C53v92Ev();
extern void _ZN5S98C53v93Ev();
extern void _ZN5S98C53v94Ev();
extern void _ZN5S98C53v95Ev();
extern void _ZN5S98C53v96Ev();
extern void _ZN5S98C53v97Ev();
extern void _ZN5S98C53v98Ev();
extern void _ZN5S98C53v99Ev();
extern void _ZN5S98C54v100Ev();
extern void _ZN5S98C54v101Ev();
extern void _ZN5S98C54v102Ev();
extern void _ZN5S98C54v103Ev();
extern void _ZN5S98C54v104Ev();
extern void _ZN5S98C54v105Ev();
extern void _ZN5S98C54v106Ev();
extern void _ZN5S98C54v107Ev();
extern void _ZN5S98C54v108Ev();
extern void _ZN5S98C54v109Ev();
extern void _ZN5S98C54v110Ev();
extern void _ZN5S98C44v111Ev();
extern void _ZN5S98C44v112Ev();
extern void _ZN5S98C44v113Ev();
extern void _ZN5S98C44v114Ev();
static  VTBL_ENTRY vtc_S98C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S98C4[0]),
  (VTBL_ENTRY)&_ZN5S98C4D1Ev,
  (VTBL_ENTRY)&_ZN5S98C4D0Ev,
  (VTBL_ENTRY)&_ZN5S98C72v5Ev,
  (VTBL_ENTRY)&_ZN5S98C72v6Ev,
  (VTBL_ENTRY)&_ZN5S98C72v7Ev,
  (VTBL_ENTRY)&_ZN5S98C72v8Ev,
  (VTBL_ENTRY)&_ZN5S98C72v9Ev,
  (VTBL_ENTRY)&_ZN5S98C73v10Ev,
  (VTBL_ENTRY)&_ZN5S98C73v11Ev,
  (VTBL_ENTRY)&_ZN5S98C73v12Ev,
  (VTBL_ENTRY)&_ZN5S98C73v13Ev,
  (VTBL_ENTRY)&_ZN5S98C73v14Ev,
  (VTBL_ENTRY)&_ZN5S98C73v15Ev,
  (VTBL_ENTRY)&_ZN5S98C73v16Ev,
  (VTBL_ENTRY)&_ZN5S98C73v17Ev,
  (VTBL_ENTRY)&_ZN5S98C73v18Ev,
  (VTBL_ENTRY)&_ZN5S98C73v19Ev,
  (VTBL_ENTRY)&_ZN5S98C73v20Ev,
  (VTBL_ENTRY)&_ZN5S98C73v21Ev,
  (VTBL_ENTRY)&_ZN5S98C73v22Ev,
  (VTBL_ENTRY)&_ZN5S98C73v23Ev,
  (VTBL_ENTRY)&_ZN5S98C73v24Ev,
  (VTBL_ENTRY)&_ZN5S98C73v25Ev,
  (VTBL_ENTRY)&_ZN5S98C73v26Ev,
  (VTBL_ENTRY)&_ZN5S98C73v27Ev,
  (VTBL_ENTRY)&_ZN5S98C73v28Ev,
  (VTBL_ENTRY)&_ZN5S98C73v29Ev,
  (VTBL_ENTRY)&_ZN5S98C73v30Ev,
  (VTBL_ENTRY)&_ZN5S98C73v31Ev,
  (VTBL_ENTRY)&_ZN5S98C73v32Ev,
  (VTBL_ENTRY)&_ZN5S98C73v33Ev,
  (VTBL_ENTRY)&_ZN5S98C73v34Ev,
  (VTBL_ENTRY)&_ZN5S98C73v35Ev,
  (VTBL_ENTRY)&_ZN5S98C73v36Ev,
  (VTBL_ENTRY)&_ZN5S98C73v37Ev,
  (VTBL_ENTRY)&_ZN5S98C73v38Ev,
  (VTBL_ENTRY)&_ZN5S98C73v39Ev,
  (VTBL_ENTRY)&_ZN5S98C73v40Ev,
  (VTBL_ENTRY)&_ZN5S98C73v41Ev,
  (VTBL_ENTRY)&_ZN5S98C73v42Ev,
  (VTBL_ENTRY)&_ZN5S98C73v43Ev,
  (VTBL_ENTRY)&_ZN5S98C73v44Ev,
  (VTBL_ENTRY)&_ZN5S98C73v45Ev,
  (VTBL_ENTRY)&_ZN5S98C73v46Ev,
  (VTBL_ENTRY)&_ZN5S98C73v47Ev,
  (VTBL_ENTRY)&_ZN5S98C73v48Ev,
  (VTBL_ENTRY)&_ZN5S98C73v49Ev,
  (VTBL_ENTRY)&_ZN5S98C73v50Ev,
  (VTBL_ENTRY)&_ZN5S98C73v51Ev,
  (VTBL_ENTRY)&_ZN5S98C73v52Ev,
  (VTBL_ENTRY)&_ZN5S98C73v53Ev,
  (VTBL_ENTRY)&_ZN5S98C73v54Ev,
  (VTBL_ENTRY)&_ZN5S98C73v55Ev,
  (VTBL_ENTRY)&_ZN5S98C73v56Ev,
  (VTBL_ENTRY)&_ZN5S98C73v57Ev,
  (VTBL_ENTRY)&_ZN5S98C73v58Ev,
  (VTBL_ENTRY)&_ZN5S98C73v59Ev,
  (VTBL_ENTRY)&_ZN5S98C73v60Ev,
  (VTBL_ENTRY)&_ZN5S98C73v61Ev,
  (VTBL_ENTRY)&_ZN5S98C73v62Ev,
  (VTBL_ENTRY)&_ZN5S98C73v63Ev,
  (VTBL_ENTRY)&_ZN5S98C73v64Ev,
  (VTBL_ENTRY)&_ZN5S98C73v65Ev,
  (VTBL_ENTRY)&_ZN5S98C73v66Ev,
  (VTBL_ENTRY)&_ZN5S98C73v67Ev,
  (VTBL_ENTRY)&_ZN5S98C73v68Ev,
  (VTBL_ENTRY)&_ZN5S98C63v69Ev,
  (VTBL_ENTRY)&_ZN5S98C63v70Ev,
  (VTBL_ENTRY)&_ZN5S98C63v71Ev,
  (VTBL_ENTRY)&_ZN5S98C63v72Ev,
  (VTBL_ENTRY)&_ZN5S98C63v73Ev,
  (VTBL_ENTRY)&_ZN5S98C63v74Ev,
  (VTBL_ENTRY)&_ZN5S98C63v75Ev,
  (VTBL_ENTRY)&_ZN5S98C63v76Ev,
  (VTBL_ENTRY)&_ZN5S98C63v77Ev,
  (VTBL_ENTRY)&_ZN5S98C63v78Ev,
  (VTBL_ENTRY)&_ZN5S98C63v79Ev,
  (VTBL_ENTRY)&_ZN5S98C63v80Ev,
  (VTBL_ENTRY)&_ZN5S98C63v81Ev,
  (VTBL_ENTRY)&_ZN5S98C63v82Ev,
  (VTBL_ENTRY)&_ZN5S98C63v83Ev,
  (VTBL_ENTRY)&_ZN5S98C63v84Ev,
  (VTBL_ENTRY)&_ZN5S98C63v85Ev,
  (VTBL_ENTRY)&_ZN5S98C63v86Ev,
  (VTBL_ENTRY)&_ZN5S98C63v87Ev,
  (VTBL_ENTRY)&_ZN5S98C63v88Ev,
  (VTBL_ENTRY)&_ZN5S98C63v89Ev,
  (VTBL_ENTRY)&_ZN5S98C63v90Ev,
  (VTBL_ENTRY)&_ZN5S98C53v91Ev,
  (VTBL_ENTRY)&_ZN5S98C53v92Ev,
  (VTBL_ENTRY)&_ZN5S98C53v93Ev,
  (VTBL_ENTRY)&_ZN5S98C53v94Ev,
  (VTBL_ENTRY)&_ZN5S98C53v95Ev,
  (VTBL_ENTRY)&_ZN5S98C53v96Ev,
  (VTBL_ENTRY)&_ZN5S98C53v97Ev,
  (VTBL_ENTRY)&_ZN5S98C53v98Ev,
  (VTBL_ENTRY)&_ZN5S98C53v99Ev,
  (VTBL_ENTRY)&_ZN5S98C54v100Ev,
  (VTBL_ENTRY)&_ZN5S98C54v101Ev,
  (VTBL_ENTRY)&_ZN5S98C54v102Ev,
  (VTBL_ENTRY)&_ZN5S98C54v103Ev,
  (VTBL_ENTRY)&_ZN5S98C54v104Ev,
  (VTBL_ENTRY)&_ZN5S98C54v105Ev,
  (VTBL_ENTRY)&_ZN5S98C54v106Ev,
  (VTBL_ENTRY)&_ZN5S98C54v107Ev,
  (VTBL_ENTRY)&_ZN5S98C54v108Ev,
  (VTBL_ENTRY)&_ZN5S98C54v109Ev,
  (VTBL_ENTRY)&_ZN5S98C54v110Ev,
  (VTBL_ENTRY)&_ZN5S98C44v111Ev,
  (VTBL_ENTRY)&_ZN5S98C44v112Ev,
  (VTBL_ENTRY)&_ZN5S98C44v113Ev,
  (VTBL_ENTRY)&_ZN5S98C44v114Ev,
};
extern VTBL_ENTRY _ZTI5S98C4[];
extern  VTBL_ENTRY _ZTV5S98C4[];
Class_Descriptor cd_S98C4 = {  "S98C4", // class name
  bases_S98C4, 3,
  &(vtc_S98C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,220), // object size
  NSPAIRA(_ZTI5S98C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S98C4),114, //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  S98C3  : S98C4 {
  ::S287C19 s98c3f0;
  unsigned int s98c3f1:1;
  virtual  ~S98C3(); // _ZN5S98C3D1Ev
  virtual void  v115(); // _ZN5S98C34v115Ev
  virtual void  v116(); // _ZN5S98C34v116Ev
  virtual void  v117(); // _ZN5S98C34v117Ev
  virtual void  v118(); // _ZN5S98C34v118Ev
  virtual void  v119(); // _ZN5S98C34v119Ev
  virtual void  v120(); // _ZN5S98C34v120Ev
  virtual void  v121(); // _ZN5S98C34v121Ev
  S98C3(); // tgen
};
//SIG(-1 S98C3) C1{ BC2{ BC3{ BC4{ BC5{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 Fi[2] Fp Fi[2] FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} FC7 FC11{ m} FC7 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 Fi:1 Fi:1 Fi:1 FC12{ BC13{ BC10}} FC14{ BC15{ BC10}} FC16{ BC17{ BC10}} FC18{ BC19{ BC10}} Fi[3]} vd v114 v115 v116 v117 FC6 Fi:1 FC20{ BC21{ BC10}}} vd v1 v2 v3 v4 v5 v6 v7 FC22{ BC23{ BC10}} Fi:1}


 S98C3 ::~S98C3(){ note_dtor("S98C3", this);}
void  S98C3 ::v115(){vfunc_called(this, "_ZN5S98C34v115Ev");}
void  S98C3 ::v116(){vfunc_called(this, "_ZN5S98C34v116Ev");}
void  S98C3 ::v117(){vfunc_called(this, "_ZN5S98C34v117Ev");}
void  S98C3 ::v118(){vfunc_called(this, "_ZN5S98C34v118Ev");}
void  S98C3 ::v119(){vfunc_called(this, "_ZN5S98C34v119Ev");}
void  S98C3 ::v120(){vfunc_called(this, "_ZN5S98C34v120Ev");}
void  S98C3 ::v121(){vfunc_called(this, "_ZN5S98C34v121Ev");}
S98C3 ::S98C3(){ note_ctor("S98C3", this);} // tgen

static void Test_S98C3()
{
  extern Class_Descriptor cd_S98C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(41,60)];
    init_test(&cd_S98C3, buf);
    S98C3 *dp, &lv = *(dp=new (buf) S98C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,236), "sizeof(S98C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S98C3)");
    check_base_class_offset(lv, (S98C7*)(S98C6*)(S98C5*)(S98C4*), 0, "S98C3");
    check_base_class_offset(lv, (S98C6*)(S98C5*)(S98C4*), 0, "S98C3");
    check_base_class_offset(lv, (S98C5*)(S98C4*), 0, "S98C3");
    check_base_class_offset(lv, (S98C4*), 0, "S98C3");
    check_field_offset(lv, s98c3f0, ABISELECT(296,220), "S98C3.s98c3f0");
    set_bf_and_test(lv, s98c3f1, ABISELECT(312,232), 0, 1, 1, "S98C3");
    test_class_info(&lv, &cd_S98C3);
    dp->~S98C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS98C3(Test_S98C3, "S98C3", ABISELECT(320,236));

#else // __cplusplus

extern void _ZN5S98C3C1Ev();
extern void _ZN5S98C3D1Ev();
Name_Map name_map_S98C3[] = {
  NSPAIR(_ZN5S98C3C1Ev),
  NSPAIR(_ZN5S98C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S98C7;
extern VTBL_ENTRY _ZTI5S98C7[];
extern  VTBL_ENTRY _ZTV5S98C7[];
extern Class_Descriptor cd_S98C6;
extern VTBL_ENTRY _ZTI5S98C6[];
extern  VTBL_ENTRY _ZTV5S98C6[];
extern Class_Descriptor cd_S98C5;
extern VTBL_ENTRY _ZTI5S98C5[];
extern  VTBL_ENTRY _ZTV5S98C5[];
extern Class_Descriptor cd_S98C4;
extern VTBL_ENTRY _ZTI5S98C4[];
extern  VTBL_ENTRY _ZTV5S98C4[];
static Base_Class bases_S98C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S98C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S98C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S98C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S98C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S98C3[];
extern void _ZN5S98C3D1Ev();
extern void _ZN5S98C3D0Ev();
extern void _ZN5S98C72v5Ev();
extern void _ZN5S98C72v6Ev();
extern void _ZN5S98C72v7Ev();
extern void _ZN5S98C72v8Ev();
extern void _ZN5S98C72v9Ev();
extern void _ZN5S98C73v10Ev();
extern void _ZN5S98C73v11Ev();
extern void _ZN5S98C73v12Ev();
extern void _ZN5S98C73v13Ev();
extern void _ZN5S98C73v14Ev();
extern void _ZN5S98C73v15Ev();
extern void _ZN5S98C73v16Ev();
extern void _ZN5S98C73v17Ev();
extern void _ZN5S98C73v18Ev();
extern void _ZN5S98C73v19Ev();
extern void _ZN5S98C73v20Ev();
extern void _ZN5S98C73v21Ev();
extern void _ZN5S98C73v22Ev();
extern void _ZN5S98C73v23Ev();
extern void _ZN5S98C73v24Ev();
extern void _ZN5S98C73v25Ev();
extern void _ZN5S98C73v26Ev();
extern void _ZN5S98C73v27Ev();
extern void _ZN5S98C73v28Ev();
extern void _ZN5S98C73v29Ev();
extern void _ZN5S98C73v30Ev();
extern void _ZN5S98C73v31Ev();
extern void _ZN5S98C73v32Ev();
extern void _ZN5S98C73v33Ev();
extern void _ZN5S98C73v34Ev();
extern void _ZN5S98C73v35Ev();
extern void _ZN5S98C73v36Ev();
extern void _ZN5S98C73v37Ev();
extern void _ZN5S98C73v38Ev();
extern void _ZN5S98C73v39Ev();
extern void _ZN5S98C73v40Ev();
extern void _ZN5S98C73v41Ev();
extern void _ZN5S98C73v42Ev();
extern void _ZN5S98C73v43Ev();
extern void _ZN5S98C73v44Ev();
extern void _ZN5S98C73v45Ev();
extern void _ZN5S98C73v46Ev();
extern void _ZN5S98C73v47Ev();
extern void _ZN5S98C73v48Ev();
extern void _ZN5S98C73v49Ev();
extern void _ZN5S98C73v50Ev();
extern void _ZN5S98C73v51Ev();
extern void _ZN5S98C73v52Ev();
extern void _ZN5S98C73v53Ev();
extern void _ZN5S98C73v54Ev();
extern void _ZN5S98C73v55Ev();
extern void _ZN5S98C73v56Ev();
extern void _ZN5S98C73v57Ev();
extern void _ZN5S98C73v58Ev();
extern void _ZN5S98C73v59Ev();
extern void _ZN5S98C73v60Ev();
extern void _ZN5S98C73v61Ev();
extern void _ZN5S98C73v62Ev();
extern void _ZN5S98C73v63Ev();
extern void _ZN5S98C73v64Ev();
extern void _ZN5S98C73v65Ev();
extern void _ZN5S98C73v66Ev();
extern void _ZN5S98C73v67Ev();
extern void _ZN5S98C73v68Ev();
extern void _ZN5S98C63v69Ev();
extern void _ZN5S98C63v70Ev();
extern void _ZN5S98C63v71Ev();
extern void _ZN5S98C63v72Ev();
extern void _ZN5S98C63v73Ev();
extern void _ZN5S98C63v74Ev();
extern void _ZN5S98C63v75Ev();
extern void _ZN5S98C63v76Ev();
extern void _ZN5S98C63v77Ev();
extern void _ZN5S98C63v78Ev();
extern void _ZN5S98C63v79Ev();
extern void _ZN5S98C63v80Ev();
extern void _ZN5S98C63v81Ev();
extern void _ZN5S98C63v82Ev();
extern void _ZN5S98C63v83Ev();
extern void _ZN5S98C63v84Ev();
extern void _ZN5S98C63v85Ev();
extern void _ZN5S98C63v86Ev();
extern void _ZN5S98C63v87Ev();
extern void _ZN5S98C63v88Ev();
extern void _ZN5S98C63v89Ev();
extern void _ZN5S98C63v90Ev();
extern void _ZN5S98C53v91Ev();
extern void _ZN5S98C53v92Ev();
extern void _ZN5S98C53v93Ev();
extern void _ZN5S98C53v94Ev();
extern void _ZN5S98C53v95Ev();
extern void _ZN5S98C53v96Ev();
extern void _ZN5S98C53v97Ev();
extern void _ZN5S98C53v98Ev();
extern void _ZN5S98C53v99Ev();
extern void _ZN5S98C54v100Ev();
extern void _ZN5S98C54v101Ev();
extern void _ZN5S98C54v102Ev();
extern void _ZN5S98C54v103Ev();
extern void _ZN5S98C54v104Ev();
extern void _ZN5S98C54v105Ev();
extern void _ZN5S98C54v106Ev();
extern void _ZN5S98C54v107Ev();
extern void _ZN5S98C54v108Ev();
extern void _ZN5S98C54v109Ev();
extern void _ZN5S98C54v110Ev();
extern void _ZN5S98C44v111Ev();
extern void _ZN5S98C44v112Ev();
extern void _ZN5S98C44v113Ev();
extern void _ZN5S98C44v114Ev();
extern void _ZN5S98C34v115Ev();
extern void _ZN5S98C34v116Ev();
extern void _ZN5S98C34v117Ev();
extern void _ZN5S98C34v118Ev();
extern void _ZN5S98C34v119Ev();
extern void _ZN5S98C34v120Ev();
extern void _ZN5S98C34v121Ev();
static  VTBL_ENTRY vtc_S98C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S98C3[0]),
  (VTBL_ENTRY)&_ZN5S98C3D1Ev,
  (VTBL_ENTRY)&_ZN5S98C3D0Ev,
  (VTBL_ENTRY)&_ZN5S98C72v5Ev,
  (VTBL_ENTRY)&_ZN5S98C72v6Ev,
  (VTBL_ENTRY)&_ZN5S98C72v7Ev,
  (VTBL_ENTRY)&_ZN5S98C72v8Ev,
  (VTBL_ENTRY)&_ZN5S98C72v9Ev,
  (VTBL_ENTRY)&_ZN5S98C73v10Ev,
  (VTBL_ENTRY)&_ZN5S98C73v11Ev,
  (VTBL_ENTRY)&_ZN5S98C73v12Ev,
  (VTBL_ENTRY)&_ZN5S98C73v13Ev,
  (VTBL_ENTRY)&_ZN5S98C73v14Ev,
  (VTBL_ENTRY)&_ZN5S98C73v15Ev,
  (VTBL_ENTRY)&_ZN5S98C73v16Ev,
  (VTBL_ENTRY)&_ZN5S98C73v17Ev,
  (VTBL_ENTRY)&_ZN5S98C73v18Ev,
  (VTBL_ENTRY)&_ZN5S98C73v19Ev,
  (VTBL_ENTRY)&_ZN5S98C73v20Ev,
  (VTBL_ENTRY)&_ZN5S98C73v21Ev,
  (VTBL_ENTRY)&_ZN5S98C73v22Ev,
  (VTBL_ENTRY)&_ZN5S98C73v23Ev,
  (VTBL_ENTRY)&_ZN5S98C73v24Ev,
  (VTBL_ENTRY)&_ZN5S98C73v25Ev,
  (VTBL_ENTRY)&_ZN5S98C73v26Ev,
  (VTBL_ENTRY)&_ZN5S98C73v27Ev,
  (VTBL_ENTRY)&_ZN5S98C73v28Ev,
  (VTBL_ENTRY)&_ZN5S98C73v29Ev,
  (VTBL_ENTRY)&_ZN5S98C73v30Ev,
  (VTBL_ENTRY)&_ZN5S98C73v31Ev,
  (VTBL_ENTRY)&_ZN5S98C73v32Ev,
  (VTBL_ENTRY)&_ZN5S98C73v33Ev,
  (VTBL_ENTRY)&_ZN5S98C73v34Ev,
  (VTBL_ENTRY)&_ZN5S98C73v35Ev,
  (VTBL_ENTRY)&_ZN5S98C73v36Ev,
  (VTBL_ENTRY)&_ZN5S98C73v37Ev,
  (VTBL_ENTRY)&_ZN5S98C73v38Ev,
  (VTBL_ENTRY)&_ZN5S98C73v39Ev,
  (VTBL_ENTRY)&_ZN5S98C73v40Ev,
  (VTBL_ENTRY)&_ZN5S98C73v41Ev,
  (VTBL_ENTRY)&_ZN5S98C73v42Ev,
  (VTBL_ENTRY)&_ZN5S98C73v43Ev,
  (VTBL_ENTRY)&_ZN5S98C73v44Ev,
  (VTBL_ENTRY)&_ZN5S98C73v45Ev,
  (VTBL_ENTRY)&_ZN5S98C73v46Ev,
  (VTBL_ENTRY)&_ZN5S98C73v47Ev,
  (VTBL_ENTRY)&_ZN5S98C73v48Ev,
  (VTBL_ENTRY)&_ZN5S98C73v49Ev,
  (VTBL_ENTRY)&_ZN5S98C73v50Ev,
  (VTBL_ENTRY)&_ZN5S98C73v51Ev,
  (VTBL_ENTRY)&_ZN5S98C73v52Ev,
  (VTBL_ENTRY)&_ZN5S98C73v53Ev,
  (VTBL_ENTRY)&_ZN5S98C73v54Ev,
  (VTBL_ENTRY)&_ZN5S98C73v55Ev,
  (VTBL_ENTRY)&_ZN5S98C73v56Ev,
  (VTBL_ENTRY)&_ZN5S98C73v57Ev,
  (VTBL_ENTRY)&_ZN5S98C73v58Ev,
  (VTBL_ENTRY)&_ZN5S98C73v59Ev,
  (VTBL_ENTRY)&_ZN5S98C73v60Ev,
  (VTBL_ENTRY)&_ZN5S98C73v61Ev,
  (VTBL_ENTRY)&_ZN5S98C73v62Ev,
  (VTBL_ENTRY)&_ZN5S98C73v63Ev,
  (VTBL_ENTRY)&_ZN5S98C73v64Ev,
  (VTBL_ENTRY)&_ZN5S98C73v65Ev,
  (VTBL_ENTRY)&_ZN5S98C73v66Ev,
  (VTBL_ENTRY)&_ZN5S98C73v67Ev,
  (VTBL_ENTRY)&_ZN5S98C73v68Ev,
  (VTBL_ENTRY)&_ZN5S98C63v69Ev,
  (VTBL_ENTRY)&_ZN5S98C63v70Ev,
  (VTBL_ENTRY)&_ZN5S98C63v71Ev,
  (VTBL_ENTRY)&_ZN5S98C63v72Ev,
  (VTBL_ENTRY)&_ZN5S98C63v73Ev,
  (VTBL_ENTRY)&_ZN5S98C63v74Ev,
  (VTBL_ENTRY)&_ZN5S98C63v75Ev,
  (VTBL_ENTRY)&_ZN5S98C63v76Ev,
  (VTBL_ENTRY)&_ZN5S98C63v77Ev,
  (VTBL_ENTRY)&_ZN5S98C63v78Ev,
  (VTBL_ENTRY)&_ZN5S98C63v79Ev,
  (VTBL_ENTRY)&_ZN5S98C63v80Ev,
  (VTBL_ENTRY)&_ZN5S98C63v81Ev,
  (VTBL_ENTRY)&_ZN5S98C63v82Ev,
  (VTBL_ENTRY)&_ZN5S98C63v83Ev,
  (VTBL_ENTRY)&_ZN5S98C63v84Ev,
  (VTBL_ENTRY)&_ZN5S98C63v85Ev,
  (VTBL_ENTRY)&_ZN5S98C63v86Ev,
  (VTBL_ENTRY)&_ZN5S98C63v87Ev,
  (VTBL_ENTRY)&_ZN5S98C63v88Ev,
  (VTBL_ENTRY)&_ZN5S98C63v89Ev,
  (VTBL_ENTRY)&_ZN5S98C63v90Ev,
  (VTBL_ENTRY)&_ZN5S98C53v91Ev,
  (VTBL_ENTRY)&_ZN5S98C53v92Ev,
  (VTBL_ENTRY)&_ZN5S98C53v93Ev,
  (VTBL_ENTRY)&_ZN5S98C53v94Ev,
  (VTBL_ENTRY)&_ZN5S98C53v95Ev,
  (VTBL_ENTRY)&_ZN5S98C53v96Ev,
  (VTBL_ENTRY)&_ZN5S98C53v97Ev,
  (VTBL_ENTRY)&_ZN5S98C53v98Ev,
  (VTBL_ENTRY)&_ZN5S98C53v99Ev,
  (VTBL_ENTRY)&_ZN5S98C54v100Ev,
  (VTBL_ENTRY)&_ZN5S98C54v101Ev,
  (VTBL_ENTRY)&_ZN5S98C54v102Ev,
  (VTBL_ENTRY)&_ZN5S98C54v103Ev,
  (VTBL_ENTRY)&_ZN5S98C54v104Ev,
  (VTBL_ENTRY)&_ZN5S98C54v105Ev,
  (VTBL_ENTRY)&_ZN5S98C54v106Ev,
  (VTBL_ENTRY)&_ZN5S98C54v107Ev,
  (VTBL_ENTRY)&_ZN5S98C54v108Ev,
  (VTBL_ENTRY)&_ZN5S98C54v109Ev,
  (VTBL_ENTRY)&_ZN5S98C54v110Ev,
  (VTBL_ENTRY)&_ZN5S98C44v111Ev,
  (VTBL_ENTRY)&_ZN5S98C44v112Ev,
  (VTBL_ENTRY)&_ZN5S98C44v113Ev,
  (VTBL_ENTRY)&_ZN5S98C44v114Ev,
  (VTBL_ENTRY)&_ZN5S98C34v115Ev,
  (VTBL_ENTRY)&_ZN5S98C34v116Ev,
  (VTBL_ENTRY)&_ZN5S98C34v117Ev,
  (VTBL_ENTRY)&_ZN5S98C34v118Ev,
  (VTBL_ENTRY)&_ZN5S98C34v119Ev,
  (VTBL_ENTRY)&_ZN5S98C34v120Ev,
  (VTBL_ENTRY)&_ZN5S98C34v121Ev,
};
extern VTBL_ENTRY _ZTI5S98C3[];
extern  VTBL_ENTRY _ZTV5S98C3[];
Class_Descriptor cd_S98C3 = {  "S98C3", // class name
  bases_S98C3, 4,
  &(vtc_S98C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(320,236), // object size
  NSPAIRA(_ZTI5S98C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S98C3),121, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S98C2  : S98C3 {
  unsigned int s98c2f0:1;
  unsigned int s98c2f1:1;
  unsigned int s98c2f2:1;
  void *s98c2f3;
  char s98c2f4;
  ::S287C19 s98c2f5;
  int s98c2f6[5];
  virtual  ~S98C2(); // _ZN5S98C2D1Ev
  virtual void  v122(); // _ZN5S98C24v122Ev
  virtual void  v123(); // _ZN5S98C24v123Ev
  virtual void  v124(); // _ZN5S98C24v124Ev
  virtual void  v125(); // _ZN5S98C24v125Ev
  virtual void  v126(); // _ZN5S98C24v126Ev
  virtual void  v127(); // _ZN5S98C24v127Ev
  virtual void  v128(); // _ZN5S98C24v128Ev
  S98C2(); // tgen
};
//SIG(-1 S98C2) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 Fi FL Fp[4] Fi[2] Fp FC7{ m Fi[2]} Fp[2]} vd v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 Fi[2] Fp Fi[2] FC8{ BC9{ BC10{ BC11{ m Fp Fi[2]}}}} FC8 FC12{ m} FC8 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 Fi:1 Fi:1 Fi:1 FC13{ BC14{ BC11}} FC15{ BC16{ BC11}} FC17{ BC18{ BC11}} FC19{ BC20{ BC11}} Fi[3]} vd v114 v115 v116 v117 FC7 Fi:1 FC21{ BC22{ BC11}}} vd v118 v119 v120 v121 v122 v123 v124 FC23{ BC24{ BC11}} Fi:1} vd v1 v2 v3 v4 v5 v6 v7 Fi:1 Fi:1 Fi:1 Fp Fc FC23 Fi[5]}


 S98C2 ::~S98C2(){ note_dtor("S98C2", this);}
void  S98C2 ::v122(){vfunc_called(this, "_ZN5S98C24v122Ev");}
void  S98C2 ::v123(){vfunc_called(this, "_ZN5S98C24v123Ev");}
void  S98C2 ::v124(){vfunc_called(this, "_ZN5S98C24v124Ev");}
void  S98C2 ::v125(){vfunc_called(this, "_ZN5S98C24v125Ev");}
void  S98C2 ::v126(){vfunc_called(this, "_ZN5S98C24v126Ev");}
void  S98C2 ::v127(){vfunc_called(this, "_ZN5S98C24v127Ev");}
void  S98C2 ::v128(){vfunc_called(this, "_ZN5S98C24v128Ev");}
S98C2 ::S98C2(){ note_ctor("S98C2", this);} // tgen

static void Test_S98C2()
{
  extern Class_Descriptor cd_S98C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(48,70)];
    init_test(&cd_S98C2, buf);
    S98C2 *dp, &lv = *(dp=new (buf) S98C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(376,276), "sizeof(S98C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S98C2)");
    check_base_class_offset(lv, (S98C7*)(S98C6*)(S98C5*)(S98C4*)(S98C3*), 0, "S98C2");
    check_base_class_offset(lv, (S98C6*)(S98C5*)(S98C4*)(S98C3*), 0, "S98C2");
    check_base_class_offset(lv, (S98C5*)(S98C4*)(S98C3*), 0, "S98C2");
    check_base_class_offset(lv, (S98C4*)(S98C3*), 0, "S98C2");
    check_base_class_offset(lv, (S98C3*), 0, "S98C2");
    set_bf_and_test(lv, s98c2f0, ABISELECT(313,233), 0, 1, 1, "S98C2");
    set_bf_and_test(lv, s98c2f1, ABISELECT(313,233), 1, 1, 1, "S98C2");
    set_bf_and_test(lv, s98c2f2, ABISELECT(313,233), 2, 1, 1, "S98C2");
    check_field_offset(lv, s98c2f3, ABISELECT(320,236), "S98C2.s98c2f3");
    check_field_offset(lv, s98c2f4, ABISELECT(328,240), "S98C2.s98c2f4");
    check_field_offset(lv, s98c2f5, ABISELECT(336,244), "S98C2.s98c2f5");
    check_field_offset(lv, s98c2f6, ABISELECT(352,256), "S98C2.s98c2f6");
    test_class_info(&lv, &cd_S98C2);
    dp->~S98C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS98C2(Test_S98C2, "S98C2", ABISELECT(376,276));

#else // __cplusplus

extern void _ZN5S98C2C1Ev();
extern void _ZN5S98C2D1Ev();
Name_Map name_map_S98C2[] = {
  NSPAIR(_ZN5S98C2C1Ev),
  NSPAIR(_ZN5S98C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S98C7;
extern VTBL_ENTRY _ZTI5S98C7[];
extern  VTBL_ENTRY _ZTV5S98C7[];
extern Class_Descriptor cd_S98C6;
extern VTBL_ENTRY _ZTI5S98C6[];
extern  VTBL_ENTRY _ZTV5S98C6[];
extern Class_Descriptor cd_S98C5;
extern VTBL_ENTRY _ZTI5S98C5[];
extern  VTBL_ENTRY _ZTV5S98C5[];
extern Class_Descriptor cd_S98C4;
extern VTBL_ENTRY _ZTI5S98C4[];
extern  VTBL_ENTRY _ZTV5S98C4[];
extern Class_Descriptor cd_S98C3;
extern VTBL_ENTRY _ZTI5S98C3[];
extern  VTBL_ENTRY _ZTV5S98C3[];
static Base_Class bases_S98C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S98C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S98C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S98C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S98C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S98C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S98C2[];
extern void _ZN5S98C2D1Ev();
extern void _ZN5S98C2D0Ev();
extern void _ZN5S98C72v5Ev();
extern void _ZN5S98C72v6Ev();
extern void _ZN5S98C72v7Ev();
extern void _ZN5S98C72v8Ev();
extern void _ZN5S98C72v9Ev();
extern void _ZN5S98C73v10Ev();
extern void _ZN5S98C73v11Ev();
extern void _ZN5S98C73v12Ev();
extern void _ZN5S98C73v13Ev();
extern void _ZN5S98C73v14Ev();
extern void _ZN5S98C73v15Ev();
extern void _ZN5S98C73v16Ev();
extern void _ZN5S98C73v17Ev();
extern void _ZN5S98C73v18Ev();
extern void _ZN5S98C73v19Ev();
extern void _ZN5S98C73v20Ev();
extern void _ZN5S98C73v21Ev();
extern void _ZN5S98C73v22Ev();
extern void _ZN5S98C73v23Ev();
extern void _ZN5S98C73v24Ev();
extern void _ZN5S98C73v25Ev();
extern void _ZN5S98C73v26Ev();
extern void _ZN5S98C73v27Ev();
extern void _ZN5S98C73v28Ev();
extern void _ZN5S98C73v29Ev();
extern void _ZN5S98C73v30Ev();
extern void _ZN5S98C73v31Ev();
extern void _ZN5S98C73v32Ev();
extern void _ZN5S98C73v33Ev();
extern void _ZN5S98C73v34Ev();
extern void _ZN5S98C73v35Ev();
extern void _ZN5S98C73v36Ev();
extern void _ZN5S98C73v37Ev();
extern void _ZN5S98C73v38Ev();
extern void _ZN5S98C73v39Ev();
extern void _ZN5S98C73v40Ev();
extern void _ZN5S98C73v41Ev();
extern void _ZN5S98C73v42Ev();
extern void _ZN5S98C73v43Ev();
extern void _ZN5S98C73v44Ev();
extern void _ZN5S98C73v45Ev();
extern void _ZN5S98C73v46Ev();
extern void _ZN5S98C73v47Ev();
extern void _ZN5S98C73v48Ev();
extern void _ZN5S98C73v49Ev();
extern void _ZN5S98C73v50Ev();
extern void _ZN5S98C73v51Ev();
extern void _ZN5S98C73v52Ev();
extern void _ZN5S98C73v53Ev();
extern void _ZN5S98C73v54Ev();
extern void _ZN5S98C73v55Ev();
extern void _ZN5S98C73v56Ev();
extern void _ZN5S98C73v57Ev();
extern void _ZN5S98C73v58Ev();
extern void _ZN5S98C73v59Ev();
extern void _ZN5S98C73v60Ev();
extern void _ZN5S98C73v61Ev();
extern void _ZN5S98C73v62Ev();
extern void _ZN5S98C73v63Ev();
extern void _ZN5S98C73v64Ev();
extern void _ZN5S98C73v65Ev();
extern void _ZN5S98C73v66Ev();
extern void _ZN5S98C73v67Ev();
extern void _ZN5S98C73v68Ev();
extern void _ZN5S98C63v69Ev();
extern void _ZN5S98C63v70Ev();
extern void _ZN5S98C63v71Ev();
extern void _ZN5S98C63v72Ev();
extern void _ZN5S98C63v73Ev();
extern void _ZN5S98C63v74Ev();
extern void _ZN5S98C63v75Ev();
extern void _ZN5S98C63v76Ev();
extern void _ZN5S98C63v77Ev();
extern void _ZN5S98C63v78Ev();
extern void _ZN5S98C63v79Ev();
extern void _ZN5S98C63v80Ev();
extern void _ZN5S98C63v81Ev();
extern void _ZN5S98C63v82Ev();
extern void _ZN5S98C63v83Ev();
extern void _ZN5S98C63v84Ev();
extern void _ZN5S98C63v85Ev();
extern void _ZN5S98C63v86Ev();
extern void _ZN5S98C63v87Ev();
extern void _ZN5S98C63v88Ev();
extern void _ZN5S98C63v89Ev();
extern void _ZN5S98C63v90Ev();
extern void _ZN5S98C53v91Ev();
extern void _ZN5S98C53v92Ev();
extern void _ZN5S98C53v93Ev();
extern void _ZN5S98C53v94Ev();
extern void _ZN5S98C53v95Ev();
extern void _ZN5S98C53v96Ev();
extern void _ZN5S98C53v97Ev();
extern void _ZN5S98C53v98Ev();
extern void _ZN5S98C53v99Ev();
extern void _ZN5S98C54v100Ev();
extern void _ZN5S98C54v101Ev();
extern void _ZN5S98C54v102Ev();
extern void _ZN5S98C54v103Ev();
extern void _ZN5S98C54v104Ev();
extern void _ZN5S98C54v105Ev();
extern void _ZN5S98C54v106Ev();
extern void _ZN5S98C54v107Ev();
extern void _ZN5S98C54v108Ev();
extern void _ZN5S98C54v109Ev();
extern void _ZN5S98C54v110Ev();
extern void _ZN5S98C44v111Ev();
extern void _ZN5S98C44v112Ev();
extern void _ZN5S98C44v113Ev();
extern void _ZN5S98C44v114Ev();
extern void _ZN5S98C34v115Ev();
extern void _ZN5S98C34v116Ev();
extern void _ZN5S98C34v117Ev();
extern void _ZN5S98C34v118Ev();
extern void _ZN5S98C34v119Ev();
extern void _ZN5S98C34v120Ev();
extern void _ZN5S98C34v121Ev();
extern void _ZN5S98C24v122Ev();
extern void _ZN5S98C24v123Ev();
extern void _ZN5S98C24v124Ev();
extern void _ZN5S98C24v125Ev();
extern void _ZN5S98C24v126Ev();
extern void _ZN5S98C24v127Ev();
extern void _ZN5S98C24v128Ev();
static  VTBL_ENTRY vtc_S98C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S98C2[0]),
  (VTBL_ENTRY)&_ZN5S98C2D1Ev,
  (VTBL_ENTRY)&_ZN5S98C2D0Ev,
  (VTBL_ENTRY)&_ZN5S98C72v5Ev,
  (VTBL_ENTRY)&_ZN5S98C72v6Ev,
  (VTBL_ENTRY)&_ZN5S98C72v7Ev,
  (VTBL_ENTRY)&_ZN5S98C72v8Ev,
  (VTBL_ENTRY)&_ZN5S98C72v9Ev,
  (VTBL_ENTRY)&_ZN5S98C73v10Ev,
  (VTBL_ENTRY)&_ZN5S98C73v11Ev,
  (VTBL_ENTRY)&_ZN5S98C73v12Ev,
  (VTBL_ENTRY)&_ZN5S98C73v13Ev,
  (VTBL_ENTRY)&_ZN5S98C73v14Ev,
  (VTBL_ENTRY)&_ZN5S98C73v15Ev,
  (VTBL_ENTRY)&_ZN5S98C73v16Ev,
  (VTBL_ENTRY)&_ZN5S98C73v17Ev,
  (VTBL_ENTRY)&_ZN5S98C73v18Ev,
  (VTBL_ENTRY)&_ZN5S98C73v19Ev,
  (VTBL_ENTRY)&_ZN5S98C73v20Ev,
  (VTBL_ENTRY)&_ZN5S98C73v21Ev,
  (VTBL_ENTRY)&_ZN5S98C73v22Ev,
  (VTBL_ENTRY)&_ZN5S98C73v23Ev,
  (VTBL_ENTRY)&_ZN5S98C73v24Ev,
  (VTBL_ENTRY)&_ZN5S98C73v25Ev,
  (VTBL_ENTRY)&_ZN5S98C73v26Ev,
  (VTBL_ENTRY)&_ZN5S98C73v27Ev,
  (VTBL_ENTRY)&_ZN5S98C73v28Ev,
  (VTBL_ENTRY)&_ZN5S98C73v29Ev,
  (VTBL_ENTRY)&_ZN5S98C73v30Ev,
  (VTBL_ENTRY)&_ZN5S98C73v31Ev,
  (VTBL_ENTRY)&_ZN5S98C73v32Ev,
  (VTBL_ENTRY)&_ZN5S98C73v33Ev,
  (VTBL_ENTRY)&_ZN5S98C73v34Ev,
  (VTBL_ENTRY)&_ZN5S98C73v35Ev,
  (VTBL_ENTRY)&_ZN5S98C73v36Ev,
  (VTBL_ENTRY)&_ZN5S98C73v37Ev,
  (VTBL_ENTRY)&_ZN5S98C73v38Ev,
  (VTBL_ENTRY)&_ZN5S98C73v39Ev,
  (VTBL_ENTRY)&_ZN5S98C73v40Ev,
  (VTBL_ENTRY)&_ZN5S98C73v41Ev,
  (VTBL_ENTRY)&_ZN5S98C73v42Ev,
  (VTBL_ENTRY)&_ZN5S98C73v43Ev,
  (VTBL_ENTRY)&_ZN5S98C73v44Ev,
  (VTBL_ENTRY)&_ZN5S98C73v45Ev,
  (VTBL_ENTRY)&_ZN5S98C73v46Ev,
  (VTBL_ENTRY)&_ZN5S98C73v47Ev,
  (VTBL_ENTRY)&_ZN5S98C73v48Ev,
  (VTBL_ENTRY)&_ZN5S98C73v49Ev,
  (VTBL_ENTRY)&_ZN5S98C73v50Ev,
  (VTBL_ENTRY)&_ZN5S98C73v51Ev,
  (VTBL_ENTRY)&_ZN5S98C73v52Ev,
  (VTBL_ENTRY)&_ZN5S98C73v53Ev,
  (VTBL_ENTRY)&_ZN5S98C73v54Ev,
  (VTBL_ENTRY)&_ZN5S98C73v55Ev,
  (VTBL_ENTRY)&_ZN5S98C73v56Ev,
  (VTBL_ENTRY)&_ZN5S98C73v57Ev,
  (VTBL_ENTRY)&_ZN5S98C73v58Ev,
  (VTBL_ENTRY)&_ZN5S98C73v59Ev,
  (VTBL_ENTRY)&_ZN5S98C73v60Ev,
  (VTBL_ENTRY)&_ZN5S98C73v61Ev,
  (VTBL_ENTRY)&_ZN5S98C73v62Ev,
  (VTBL_ENTRY)&_ZN5S98C73v63Ev,
  (VTBL_ENTRY)&_ZN5S98C73v64Ev,
  (VTBL_ENTRY)&_ZN5S98C73v65Ev,
  (VTBL_ENTRY)&_ZN5S98C73v66Ev,
  (VTBL_ENTRY)&_ZN5S98C73v67Ev,
  (VTBL_ENTRY)&_ZN5S98C73v68Ev,
  (VTBL_ENTRY)&_ZN5S98C63v69Ev,
  (VTBL_ENTRY)&_ZN5S98C63v70Ev,
  (VTBL_ENTRY)&_ZN5S98C63v71Ev,
  (VTBL_ENTRY)&_ZN5S98C63v72Ev,
  (VTBL_ENTRY)&_ZN5S98C63v73Ev,
  (VTBL_ENTRY)&_ZN5S98C63v74Ev,
  (VTBL_ENTRY)&_ZN5S98C63v75Ev,
  (VTBL_ENTRY)&_ZN5S98C63v76Ev,
  (VTBL_ENTRY)&_ZN5S98C63v77Ev,
  (VTBL_ENTRY)&_ZN5S98C63v78Ev,
  (VTBL_ENTRY)&_ZN5S98C63v79Ev,
  (VTBL_ENTRY)&_ZN5S98C63v80Ev,
  (VTBL_ENTRY)&_ZN5S98C63v81Ev,
  (VTBL_ENTRY)&_ZN5S98C63v82Ev,
  (VTBL_ENTRY)&_ZN5S98C63v83Ev,
  (VTBL_ENTRY)&_ZN5S98C63v84Ev,
  (VTBL_ENTRY)&_ZN5S98C63v85Ev,
  (VTBL_ENTRY)&_ZN5S98C63v86Ev,
  (VTBL_ENTRY)&_ZN5S98C63v87Ev,
  (VTBL_ENTRY)&_ZN5S98C63v88Ev,
  (VTBL_ENTRY)&_ZN5S98C63v89Ev,
  (VTBL_ENTRY)&_ZN5S98C63v90Ev,
  (VTBL_ENTRY)&_ZN5S98C53v91Ev,
  (VTBL_ENTRY)&_ZN5S98C53v92Ev,
  (VTBL_ENTRY)&_ZN5S98C53v93Ev,
  (VTBL_ENTRY)&_ZN5S98C53v94Ev,
  (VTBL_ENTRY)&_ZN5S98C53v95Ev,
  (VTBL_ENTRY)&_ZN5S98C53v96Ev,
  (VTBL_ENTRY)&_ZN5S98C53v97Ev,
  (VTBL_ENTRY)&_ZN5S98C53v98Ev,
  (VTBL_ENTRY)&_ZN5S98C53v99Ev,
  (VTBL_ENTRY)&_ZN5S98C54v100Ev,
  (VTBL_ENTRY)&_ZN5S98C54v101Ev,
  (VTBL_ENTRY)&_ZN5S98C54v102Ev,
  (VTBL_ENTRY)&_ZN5S98C54v103Ev,
  (VTBL_ENTRY)&_ZN5S98C54v104Ev,
  (VTBL_ENTRY)&_ZN5S98C54v105Ev,
  (VTBL_ENTRY)&_ZN5S98C54v106Ev,
  (VTBL_ENTRY)&_ZN5S98C54v107Ev,
  (VTBL_ENTRY)&_ZN5S98C54v108Ev,
  (VTBL_ENTRY)&_ZN5S98C54v109Ev,
  (VTBL_ENTRY)&_ZN5S98C54v110Ev,
  (VTBL_ENTRY)&_ZN5S98C44v111Ev,
  (VTBL_ENTRY)&_ZN5S98C44v112Ev,
  (VTBL_ENTRY)&_ZN5S98C44v113Ev,
  (VTBL_ENTRY)&_ZN5S98C44v114Ev,
  (VTBL_ENTRY)&_ZN5S98C34v115Ev,
  (VTBL_ENTRY)&_ZN5S98C34v116Ev,
  (VTBL_ENTRY)&_ZN5S98C34v117Ev,
  (VTBL_ENTRY)&_ZN5S98C34v118Ev,
  (VTBL_ENTRY)&_ZN5S98C34v119Ev,
  (VTBL_ENTRY)&_ZN5S98C34v120Ev,
  (VTBL_ENTRY)&_ZN5S98C34v121Ev,
  (VTBL_ENTRY)&_ZN5S98C24v122Ev,
  (VTBL_ENTRY)&_ZN5S98C24v123Ev,
  (VTBL_ENTRY)&_ZN5S98C24v124Ev,
  (VTBL_ENTRY)&_ZN5S98C24v125Ev,
  (VTBL_ENTRY)&_ZN5S98C24v126Ev,
  (VTBL_ENTRY)&_ZN5S98C24v127Ev,
  (VTBL_ENTRY)&_ZN5S98C24v128Ev,
};
extern VTBL_ENTRY _ZTI5S98C2[];
extern  VTBL_ENTRY _ZTV5S98C2[];
Class_Descriptor cd_S98C2 = {  "S98C2", // class name
  bases_S98C2, 5,
  &(vtc_S98C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(376,276), // object size
  NSPAIRA(_ZTI5S98C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S98C2),128, //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  S98C1  : S98C2 {
  virtual  ~S98C1(); // _ZN5S98C1D1Ev
  virtual void  v1(); // _ZN5S98C12v1Ev
  virtual void  v2(); // _ZN5S98C12v2Ev
  virtual void  v3(); // _ZN5S98C12v3Ev
  virtual void  v4(); // _ZN5S98C12v4Ev
  S98C1(); // tgen
};
//SIG(1 S98C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ BC7{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 Fi FL Fp[4] Fi[2] Fp FC8{ m Fi[2]} Fp[2]} vd v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 Fi[2] Fp Fi[2] FC9{ BC10{ BC11{ BC12{ m Fp Fi[2]}}}} FC9 FC13{ m} FC9 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 Fi:1 Fi:1 Fi:1 FC14{ BC15{ BC12}} FC16{ BC17{ BC12}} FC18{ BC19{ BC12}} FC20{ BC21{ BC12}} Fi[3]} vd v111 v112 v113 v114 FC8 Fi:1 FC22{ BC23{ BC12}}} vd v115 v116 v117 v118 v119 v120 v121 FC24{ BC25{ BC12}} Fi:1} vd v122 v123 v124 v125 v126 v127 v128 Fi:1 Fi:1 Fi:1 Fp Fc FC24 Fi[5]} vd v1 v2 v3 v4}


 S98C1 ::~S98C1(){ note_dtor("S98C1", this);}
void  S98C1 ::v1(){vfunc_called(this, "_ZN5S98C12v1Ev");}
void  S98C1 ::v2(){vfunc_called(this, "_ZN5S98C12v2Ev");}
void  S98C1 ::v3(){vfunc_called(this, "_ZN5S98C12v3Ev");}
void  S98C1 ::v4(){vfunc_called(this, "_ZN5S98C12v4Ev");}
S98C1 ::S98C1(){ note_ctor("S98C1", this);} // tgen

static void Test_S98C1()
{
  extern Class_Descriptor cd_S98C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(48,70)];
    init_test(&cd_S98C1, buf);
    S98C1 *dp, &lv = *(dp=new (buf) S98C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(376,276), "sizeof(S98C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S98C1)");
    check_base_class_offset(lv, (S98C7*)(S98C6*)(S98C5*)(S98C4*)(S98C3*)(S98C2*), 0, "S98C1");
    check_base_class_offset(lv, (S98C6*)(S98C5*)(S98C4*)(S98C3*)(S98C2*), 0, "S98C1");
    check_base_class_offset(lv, (S98C5*)(S98C4*)(S98C3*)(S98C2*), 0, "S98C1");
    check_base_class_offset(lv, (S98C4*)(S98C3*)(S98C2*), 0, "S98C1");
    check_base_class_offset(lv, (S98C3*)(S98C2*), 0, "S98C1");
    check_base_class_offset(lv, (S98C2*), 0, "S98C1");
    test_class_info(&lv, &cd_S98C1);
    dp->~S98C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS98C1(Test_S98C1, "S98C1", ABISELECT(376,276));

#else // __cplusplus

extern void _ZN5S98C1C1Ev();
extern void _ZN5S98C1D1Ev();
Name_Map name_map_S98C1[] = {
  NSPAIR(_ZN5S98C1C1Ev),
  NSPAIR(_ZN5S98C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S98C7;
extern VTBL_ENTRY _ZTI5S98C7[];
extern  VTBL_ENTRY _ZTV5S98C7[];
extern Class_Descriptor cd_S98C6;
extern VTBL_ENTRY _ZTI5S98C6[];
extern  VTBL_ENTRY _ZTV5S98C6[];
extern Class_Descriptor cd_S98C5;
extern VTBL_ENTRY _ZTI5S98C5[];
extern  VTBL_ENTRY _ZTV5S98C5[];
extern Class_Descriptor cd_S98C4;
extern VTBL_ENTRY _ZTI5S98C4[];
extern  VTBL_ENTRY _ZTV5S98C4[];
extern Class_Descriptor cd_S98C3;
extern VTBL_ENTRY _ZTI5S98C3[];
extern  VTBL_ENTRY _ZTV5S98C3[];
extern Class_Descriptor cd_S98C2;
extern VTBL_ENTRY _ZTI5S98C2[];
extern  VTBL_ENTRY _ZTV5S98C2[];
static Base_Class bases_S98C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S98C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S98C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S98C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S98C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S98C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S98C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S98C1[];
extern void _ZN5S98C1D1Ev();
extern void _ZN5S98C1D0Ev();
extern void _ZN5S98C72v5Ev();
extern void _ZN5S98C72v6Ev();
extern void _ZN5S98C72v7Ev();
extern void _ZN5S98C72v8Ev();
extern void _ZN5S98C72v9Ev();
extern void _ZN5S98C73v10Ev();
extern void _ZN5S98C73v11Ev();
extern void _ZN5S98C73v12Ev();
extern void _ZN5S98C73v13Ev();
extern void _ZN5S98C73v14Ev();
extern void _ZN5S98C73v15Ev();
extern void _ZN5S98C73v16Ev();
extern void _ZN5S98C73v17Ev();
extern void _ZN5S98C73v18Ev();
extern void _ZN5S98C73v19Ev();
extern void _ZN5S98C73v20Ev();
extern void _ZN5S98C73v21Ev();
extern void _ZN5S98C73v22Ev();
extern void _ZN5S98C73v23Ev();
extern void _ZN5S98C73v24Ev();
extern void _ZN5S98C73v25Ev();
extern void _ZN5S98C73v26Ev();
extern void _ZN5S98C73v27Ev();
extern void _ZN5S98C73v28Ev();
extern void _ZN5S98C73v29Ev();
extern void _ZN5S98C73v30Ev();
extern void _ZN5S98C73v31Ev();
extern void _ZN5S98C73v32Ev();
extern void _ZN5S98C73v33Ev();
extern void _ZN5S98C73v34Ev();
extern void _ZN5S98C73v35Ev();
extern void _ZN5S98C73v36Ev();
extern void _ZN5S98C73v37Ev();
extern void _ZN5S98C73v38Ev();
extern void _ZN5S98C73v39Ev();
extern void _ZN5S98C73v40Ev();
extern void _ZN5S98C73v41Ev();
extern void _ZN5S98C73v42Ev();
extern void _ZN5S98C73v43Ev();
extern void _ZN5S98C73v44Ev();
extern void _ZN5S98C73v45Ev();
extern void _ZN5S98C73v46Ev();
extern void _ZN5S98C73v47Ev();
extern void _ZN5S98C73v48Ev();
extern void _ZN5S98C73v49Ev();
extern void _ZN5S98C73v50Ev();
extern void _ZN5S98C73v51Ev();
extern void _ZN5S98C73v52Ev();
extern void _ZN5S98C73v53Ev();
extern void _ZN5S98C73v54Ev();
extern void _ZN5S98C73v55Ev();
extern void _ZN5S98C73v56Ev();
extern void _ZN5S98C73v57Ev();
extern void _ZN5S98C73v58Ev();
extern void _ZN5S98C73v59Ev();
extern void _ZN5S98C73v60Ev();
extern void _ZN5S98C73v61Ev();
extern void _ZN5S98C73v62Ev();
extern void _ZN5S98C73v63Ev();
extern void _ZN5S98C73v64Ev();
extern void _ZN5S98C73v65Ev();
extern void _ZN5S98C73v66Ev();
extern void _ZN5S98C73v67Ev();
extern void _ZN5S98C73v68Ev();
extern void _ZN5S98C63v69Ev();
extern void _ZN5S98C63v70Ev();
extern void _ZN5S98C63v71Ev();
extern void _ZN5S98C63v72Ev();
extern void _ZN5S98C63v73Ev();
extern void _ZN5S98C63v74Ev();
extern void _ZN5S98C63v75Ev();
extern void _ZN5S98C63v76Ev();
extern void _ZN5S98C63v77Ev();
extern void _ZN5S98C63v78Ev();
extern void _ZN5S98C63v79Ev();
extern void _ZN5S98C63v80Ev();
extern void _ZN5S98C63v81Ev();
extern void _ZN5S98C63v82Ev();
extern void _ZN5S98C63v83Ev();
extern void _ZN5S98C63v84Ev();
extern void _ZN5S98C63v85Ev();
extern void _ZN5S98C63v86Ev();
extern void _ZN5S98C63v87Ev();
extern void _ZN5S98C63v88Ev();
extern void _ZN5S98C63v89Ev();
extern void _ZN5S98C63v90Ev();
extern void _ZN5S98C53v91Ev();
extern void _ZN5S98C53v92Ev();
extern void _ZN5S98C53v93Ev();
extern void _ZN5S98C53v94Ev();
extern void _ZN5S98C53v95Ev();
extern void _ZN5S98C53v96Ev();
extern void _ZN5S98C53v97Ev();
extern void _ZN5S98C53v98Ev();
extern void _ZN5S98C53v99Ev();
extern void _ZN5S98C54v100Ev();
extern void _ZN5S98C54v101Ev();
extern void _ZN5S98C54v102Ev();
extern void _ZN5S98C54v103Ev();
extern void _ZN5S98C54v104Ev();
extern void _ZN5S98C54v105Ev();
extern void _ZN5S98C54v106Ev();
extern void _ZN5S98C54v107Ev();
extern void _ZN5S98C54v108Ev();
extern void _ZN5S98C54v109Ev();
extern void _ZN5S98C54v110Ev();
extern void _ZN5S98C44v111Ev();
extern void _ZN5S98C44v112Ev();
extern void _ZN5S98C44v113Ev();
extern void _ZN5S98C44v114Ev();
extern void _ZN5S98C34v115Ev();
extern void _ZN5S98C34v116Ev();
extern void _ZN5S98C34v117Ev();
extern void _ZN5S98C34v118Ev();
extern void _ZN5S98C34v119Ev();
extern void _ZN5S98C34v120Ev();
extern void _ZN5S98C34v121Ev();
extern void _ZN5S98C24v122Ev();
extern void _ZN5S98C24v123Ev();
extern void _ZN5S98C24v124Ev();
extern void _ZN5S98C24v125Ev();
extern void _ZN5S98C24v126Ev();
extern void _ZN5S98C24v127Ev();
extern void _ZN5S98C24v128Ev();
extern void _ZN5S98C12v1Ev();
extern void _ZN5S98C12v2Ev();
extern void _ZN5S98C12v3Ev();
extern void _ZN5S98C12v4Ev();
static  VTBL_ENTRY vtc_S98C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S98C1[0]),
  (VTBL_ENTRY)&_ZN5S98C1D1Ev,
  (VTBL_ENTRY)&_ZN5S98C1D0Ev,
  (VTBL_ENTRY)&_ZN5S98C72v5Ev,
  (VTBL_ENTRY)&_ZN5S98C72v6Ev,
  (VTBL_ENTRY)&_ZN5S98C72v7Ev,
  (VTBL_ENTRY)&_ZN5S98C72v8Ev,
  (VTBL_ENTRY)&_ZN5S98C72v9Ev,
  (VTBL_ENTRY)&_ZN5S98C73v10Ev,
  (VTBL_ENTRY)&_ZN5S98C73v11Ev,
  (VTBL_ENTRY)&_ZN5S98C73v12Ev,
  (VTBL_ENTRY)&_ZN5S98C73v13Ev,
  (VTBL_ENTRY)&_ZN5S98C73v14Ev,
  (VTBL_ENTRY)&_ZN5S98C73v15Ev,
  (VTBL_ENTRY)&_ZN5S98C73v16Ev,
  (VTBL_ENTRY)&_ZN5S98C73v17Ev,
  (VTBL_ENTRY)&_ZN5S98C73v18Ev,
  (VTBL_ENTRY)&_ZN5S98C73v19Ev,
  (VTBL_ENTRY)&_ZN5S98C73v20Ev,
  (VTBL_ENTRY)&_ZN5S98C73v21Ev,
  (VTBL_ENTRY)&_ZN5S98C73v22Ev,
  (VTBL_ENTRY)&_ZN5S98C73v23Ev,
  (VTBL_ENTRY)&_ZN5S98C73v24Ev,
  (VTBL_ENTRY)&_ZN5S98C73v25Ev,
  (VTBL_ENTRY)&_ZN5S98C73v26Ev,
  (VTBL_ENTRY)&_ZN5S98C73v27Ev,
  (VTBL_ENTRY)&_ZN5S98C73v28Ev,
  (VTBL_ENTRY)&_ZN5S98C73v29Ev,
  (VTBL_ENTRY)&_ZN5S98C73v30Ev,
  (VTBL_ENTRY)&_ZN5S98C73v31Ev,
  (VTBL_ENTRY)&_ZN5S98C73v32Ev,
  (VTBL_ENTRY)&_ZN5S98C73v33Ev,
  (VTBL_ENTRY)&_ZN5S98C73v34Ev,
  (VTBL_ENTRY)&_ZN5S98C73v35Ev,
  (VTBL_ENTRY)&_ZN5S98C73v36Ev,
  (VTBL_ENTRY)&_ZN5S98C73v37Ev,
  (VTBL_ENTRY)&_ZN5S98C73v38Ev,
  (VTBL_ENTRY)&_ZN5S98C73v39Ev,
  (VTBL_ENTRY)&_ZN5S98C73v40Ev,
  (VTBL_ENTRY)&_ZN5S98C73v41Ev,
  (VTBL_ENTRY)&_ZN5S98C73v42Ev,
  (VTBL_ENTRY)&_ZN5S98C73v43Ev,
  (VTBL_ENTRY)&_ZN5S98C73v44Ev,
  (VTBL_ENTRY)&_ZN5S98C73v45Ev,
  (VTBL_ENTRY)&_ZN5S98C73v46Ev,
  (VTBL_ENTRY)&_ZN5S98C73v47Ev,
  (VTBL_ENTRY)&_ZN5S98C73v48Ev,
  (VTBL_ENTRY)&_ZN5S98C73v49Ev,
  (VTBL_ENTRY)&_ZN5S98C73v50Ev,
  (VTBL_ENTRY)&_ZN5S98C73v51Ev,
  (VTBL_ENTRY)&_ZN5S98C73v52Ev,
  (VTBL_ENTRY)&_ZN5S98C73v53Ev,
  (VTBL_ENTRY)&_ZN5S98C73v54Ev,
  (VTBL_ENTRY)&_ZN5S98C73v55Ev,
  (VTBL_ENTRY)&_ZN5S98C73v56Ev,
  (VTBL_ENTRY)&_ZN5S98C73v57Ev,
  (VTBL_ENTRY)&_ZN5S98C73v58Ev,
  (VTBL_ENTRY)&_ZN5S98C73v59Ev,
  (VTBL_ENTRY)&_ZN5S98C73v60Ev,
  (VTBL_ENTRY)&_ZN5S98C73v61Ev,
  (VTBL_ENTRY)&_ZN5S98C73v62Ev,
  (VTBL_ENTRY)&_ZN5S98C73v63Ev,
  (VTBL_ENTRY)&_ZN5S98C73v64Ev,
  (VTBL_ENTRY)&_ZN5S98C73v65Ev,
  (VTBL_ENTRY)&_ZN5S98C73v66Ev,
  (VTBL_ENTRY)&_ZN5S98C73v67Ev,
  (VTBL_ENTRY)&_ZN5S98C73v68Ev,
  (VTBL_ENTRY)&_ZN5S98C63v69Ev,
  (VTBL_ENTRY)&_ZN5S98C63v70Ev,
  (VTBL_ENTRY)&_ZN5S98C63v71Ev,
  (VTBL_ENTRY)&_ZN5S98C63v72Ev,
  (VTBL_ENTRY)&_ZN5S98C63v73Ev,
  (VTBL_ENTRY)&_ZN5S98C63v74Ev,
  (VTBL_ENTRY)&_ZN5S98C63v75Ev,
  (VTBL_ENTRY)&_ZN5S98C63v76Ev,
  (VTBL_ENTRY)&_ZN5S98C63v77Ev,
  (VTBL_ENTRY)&_ZN5S98C63v78Ev,
  (VTBL_ENTRY)&_ZN5S98C63v79Ev,
  (VTBL_ENTRY)&_ZN5S98C63v80Ev,
  (VTBL_ENTRY)&_ZN5S98C63v81Ev,
  (VTBL_ENTRY)&_ZN5S98C63v82Ev,
  (VTBL_ENTRY)&_ZN5S98C63v83Ev,
  (VTBL_ENTRY)&_ZN5S98C63v84Ev,
  (VTBL_ENTRY)&_ZN5S98C63v85Ev,
  (VTBL_ENTRY)&_ZN5S98C63v86Ev,
  (VTBL_ENTRY)&_ZN5S98C63v87Ev,
  (VTBL_ENTRY)&_ZN5S98C63v88Ev,
  (VTBL_ENTRY)&_ZN5S98C63v89Ev,
  (VTBL_ENTRY)&_ZN5S98C63v90Ev,
  (VTBL_ENTRY)&_ZN5S98C53v91Ev,
  (VTBL_ENTRY)&_ZN5S98C53v92Ev,
  (VTBL_ENTRY)&_ZN5S98C53v93Ev,
  (VTBL_ENTRY)&_ZN5S98C53v94Ev,
  (VTBL_ENTRY)&_ZN5S98C53v95Ev,
  (VTBL_ENTRY)&_ZN5S98C53v96Ev,
  (VTBL_ENTRY)&_ZN5S98C53v97Ev,
  (VTBL_ENTRY)&_ZN5S98C53v98Ev,
  (VTBL_ENTRY)&_ZN5S98C53v99Ev,
  (VTBL_ENTRY)&_ZN5S98C54v100Ev,
  (VTBL_ENTRY)&_ZN5S98C54v101Ev,
  (VTBL_ENTRY)&_ZN5S98C54v102Ev,
  (VTBL_ENTRY)&_ZN5S98C54v103Ev,
  (VTBL_ENTRY)&_ZN5S98C54v104Ev,
  (VTBL_ENTRY)&_ZN5S98C54v105Ev,
  (VTBL_ENTRY)&_ZN5S98C54v106Ev,
  (VTBL_ENTRY)&_ZN5S98C54v107Ev,
  (VTBL_ENTRY)&_ZN5S98C54v108Ev,
  (VTBL_ENTRY)&_ZN5S98C54v109Ev,
  (VTBL_ENTRY)&_ZN5S98C54v110Ev,
  (VTBL_ENTRY)&_ZN5S98C44v111Ev,
  (VTBL_ENTRY)&_ZN5S98C44v112Ev,
  (VTBL_ENTRY)&_ZN5S98C44v113Ev,
  (VTBL_ENTRY)&_ZN5S98C44v114Ev,
  (VTBL_ENTRY)&_ZN5S98C34v115Ev,
  (VTBL_ENTRY)&_ZN5S98C34v116Ev,
  (VTBL_ENTRY)&_ZN5S98C34v117Ev,
  (VTBL_ENTRY)&_ZN5S98C34v118Ev,
  (VTBL_ENTRY)&_ZN5S98C34v119Ev,
  (VTBL_ENTRY)&_ZN5S98C34v120Ev,
  (VTBL_ENTRY)&_ZN5S98C34v121Ev,
  (VTBL_ENTRY)&_ZN5S98C24v122Ev,
  (VTBL_ENTRY)&_ZN5S98C24v123Ev,
  (VTBL_ENTRY)&_ZN5S98C24v124Ev,
  (VTBL_ENTRY)&_ZN5S98C24v125Ev,
  (VTBL_ENTRY)&_ZN5S98C24v126Ev,
  (VTBL_ENTRY)&_ZN5S98C24v127Ev,
  (VTBL_ENTRY)&_ZN5S98C24v128Ev,
  (VTBL_ENTRY)&_ZN5S98C12v1Ev,
  (VTBL_ENTRY)&_ZN5S98C12v2Ev,
  (VTBL_ENTRY)&_ZN5S98C12v3Ev,
  (VTBL_ENTRY)&_ZN5S98C12v4Ev,
};
extern VTBL_ENTRY _ZTI5S98C1[];
extern  VTBL_ENTRY _ZTV5S98C1[];
Class_Descriptor cd_S98C1 = {  "S98C1", // class name
  bases_S98C1, 6,
  &(vtc_S98C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(376,276), // object size
  NSPAIRA(_ZTI5S98C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S98C1),132, //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  S261C6  {
  int s261c6f0;
  __tsi64 s261c6f1;
  void *s261c6f2[4];
  int s261c6f3[2];
  void *s261c6f4;
  ::S3350C4_nt s261c6f5;
  void *s261c6f6[2];
  virtual  ~S261C6(); // _ZN6S261C6D1Ev
  virtual void  v6(); // _ZN6S261C62v6Ev
  virtual void  v7(); // _ZN6S261C62v7Ev
  virtual void  v8(); // _ZN6S261C62v8Ev
  virtual void  v9(); // _ZN6S261C62v9Ev
  virtual void  v10(); // _ZN6S261C63v10Ev
  virtual void  v11(); // _ZN6S261C63v11Ev
  virtual void  v12(); // _ZN6S261C63v12Ev
  virtual void  v13(); // _ZN6S261C63v13Ev
  virtual void  v14(); // _ZN6S261C63v14Ev
  virtual void  v15(); // _ZN6S261C63v15Ev
  virtual void  v16(); // _ZN6S261C63v16Ev
  virtual void  v17(); // _ZN6S261C63v17Ev
  virtual void  v18(); // _ZN6S261C63v18Ev
  virtual void  v19(); // _ZN6S261C63v19Ev
  virtual void  v20(); // _ZN6S261C63v20Ev
  virtual void  v21(); // _ZN6S261C63v21Ev
  virtual void  v22(); // _ZN6S261C63v22Ev
  virtual void  v23(); // _ZN6S261C63v23Ev
  virtual void  v24(); // _ZN6S261C63v24Ev
  virtual void  v25(); // _ZN6S261C63v25Ev
  virtual void  v26(); // _ZN6S261C63v26Ev
  virtual void  v27(); // _ZN6S261C63v27Ev
  virtual void  v28(); // _ZN6S261C63v28Ev
  virtual void  v29(); // _ZN6S261C63v29Ev
  virtual void  v30(); // _ZN6S261C63v30Ev
  virtual void  v31(); // _ZN6S261C63v31Ev
  virtual void  v32(); // _ZN6S261C63v32Ev
  virtual void  v33(); // _ZN6S261C63v33Ev
  virtual void  v34(); // _ZN6S261C63v34Ev
  virtual void  v35(); // _ZN6S261C63v35Ev
  virtual void  v36(); // _ZN6S261C63v36Ev
  virtual void  v37(); // _ZN6S261C63v37Ev
  virtual void  v38(); // _ZN6S261C63v38Ev
  virtual void  v39(); // _ZN6S261C63v39Ev
  virtual void  v40(); // _ZN6S261C63v40Ev
  virtual void  v41(); // _ZN6S261C63v41Ev
  virtual void  v42(); // _ZN6S261C63v42Ev
  virtual void  v43(); // _ZN6S261C63v43Ev
  virtual void  v44(); // _ZN6S261C63v44Ev
  virtual void  v45(); // _ZN6S261C63v45Ev
  virtual void  v46(); // _ZN6S261C63v46Ev
  virtual void  v47(); // _ZN6S261C63v47Ev
  virtual void  v48(); // _ZN6S261C63v48Ev
  virtual void  v49(); // _ZN6S261C63v49Ev
  virtual void  v50(); // _ZN6S261C63v50Ev
  virtual void  v51(); // _ZN6S261C63v51Ev
  virtual void  v52(); // _ZN6S261C63v52Ev
  virtual void  v53(); // _ZN6S261C63v53Ev
  virtual void  v54(); // _ZN6S261C63v54Ev
  virtual void  v55(); // _ZN6S261C63v55Ev
  virtual void  v56(); // _ZN6S261C63v56Ev
  virtual void  v57(); // _ZN6S261C63v57Ev
  virtual void  v58(); // _ZN6S261C63v58Ev
  virtual void  v59(); // _ZN6S261C63v59Ev
  virtual void  v60(); // _ZN6S261C63v60Ev
  virtual void  v61(); // _ZN6S261C63v61Ev
  virtual void  v62(); // _ZN6S261C63v62Ev
  virtual void  v63(); // _ZN6S261C63v63Ev
  virtual void  v64(); // _ZN6S261C63v64Ev
  virtual void  v65(); // _ZN6S261C63v65Ev
  virtual void  v66(); // _ZN6S261C63v66Ev
  virtual void  v67(); // _ZN6S261C63v67Ev
  virtual void  v68(); // _ZN6S261C63v68Ev
  virtual void  v69(); // _ZN6S261C63v69Ev
  S261C6(); // tgen
};
//SIG(-1 S261C6) 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]}


 S261C6 ::~S261C6(){ note_dtor("S261C6", this);}
void  S261C6 ::v6(){vfunc_called(this, "_ZN6S261C62v6Ev");}
void  S261C6 ::v7(){vfunc_called(this, "_ZN6S261C62v7Ev");}
void  S261C6 ::v8(){vfunc_called(this, "_ZN6S261C62v8Ev");}
void  S261C6 ::v9(){vfunc_called(this, "_ZN6S261C62v9Ev");}
void  S261C6 ::v10(){vfunc_called(this, "_ZN6S261C63v10Ev");}
void  S261C6 ::v11(){vfunc_called(this, "_ZN6S261C63v11Ev");}
void  S261C6 ::v12(){vfunc_called(this, "_ZN6S261C63v12Ev");}
void  S261C6 ::v13(){vfunc_called(this, "_ZN6S261C63v13Ev");}
void  S261C6 ::v14(){vfunc_called(this, "_ZN6S261C63v14Ev");}
void  S261C6 ::v15(){vfunc_called(this, "_ZN6S261C63v15Ev");}
void  S261C6 ::v16(){vfunc_called(this, "_ZN6S261C63v16Ev");}
void  S261C6 ::v17(){vfunc_called(this, "_ZN6S261C63v17Ev");}
void  S261C6 ::v18(){vfunc_called(this, "_ZN6S261C63v18Ev");}
void  S261C6 ::v19(){vfunc_called(this, "_ZN6S261C63v19Ev");}
void  S261C6 ::v20(){vfunc_called(this, "_ZN6S261C63v20Ev");}
void  S261C6 ::v21(){vfunc_called(this, "_ZN6S261C63v21Ev");}
void  S261C6 ::v22(){vfunc_called(this, "_ZN6S261C63v22Ev");}
void  S261C6 ::v23(){vfunc_called(this, "_ZN6S261C63v23Ev");}
void  S261C6 ::v24(){vfunc_called(this, "_ZN6S261C63v24Ev");}
void  S261C6 ::v25(){vfunc_called(this, "_ZN6S261C63v25Ev");}
void  S261C6 ::v26(){vfunc_called(this, "_ZN6S261C63v26Ev");}
void  S261C6 ::v27(){vfunc_called(this, "_ZN6S261C63v27Ev");}
void  S261C6 ::v28(){vfunc_called(this, "_ZN6S261C63v28Ev");}
void  S261C6 ::v29(){vfunc_called(this, "_ZN6S261C63v29Ev");}
void  S261C6 ::v30(){vfunc_called(this, "_ZN6S261C63v30Ev");}
void  S261C6 ::v31(){vfunc_called(this, "_ZN6S261C63v31Ev");}
void  S261C6 ::v32(){vfunc_called(this, "_ZN6S261C63v32Ev");}
void  S261C6 ::v33(){vfunc_called(this, "_ZN6S261C63v33Ev");}
void  S261C6 ::v34(){vfunc_called(this, "_ZN6S261C63v34Ev");}
void  S261C6 ::v35(){vfunc_called(this, "_ZN6S261C63v35Ev");}
void  S261C6 ::v36(){vfunc_called(this, "_ZN6S261C63v36Ev");}
void  S261C6 ::v37(){vfunc_called(this, "_ZN6S261C63v37Ev");}
void  S261C6 ::v38(){vfunc_called(this, "_ZN6S261C63v38Ev");}
void  S261C6 ::v39(){vfunc_called(this, "_ZN6S261C63v39Ev");}
void  S261C6 ::v40(){vfunc_called(this, "_ZN6S261C63v40Ev");}
void  S261C6 ::v41(){vfunc_called(this, "_ZN6S261C63v41Ev");}
void  S261C6 ::v42(){vfunc_called(this, "_ZN6S261C63v42Ev");}
void  S261C6 ::v43(){vfunc_called(this, "_ZN6S261C63v43Ev");}
void  S261C6 ::v44(){vfunc_called(this, "_ZN6S261C63v44Ev");}
void  S261C6 ::v45(){vfunc_called(this, "_ZN6S261C63v45Ev");}
void  S261C6 ::v46(){vfunc_called(this, "_ZN6S261C63v46Ev");}
void  S261C6 ::v47(){vfunc_called(this, "_ZN6S261C63v47Ev");}
void  S261C6 ::v48(){vfunc_called(this, "_ZN6S261C63v48Ev");}
void  S261C6 ::v49(){vfunc_called(this, "_ZN6S261C63v49Ev");}
void  S261C6 ::v50(){vfunc_called(this, "_ZN6S261C63v50Ev");}
void  S261C6 ::v51(){vfunc_called(this, "_ZN6S261C63v51Ev");}
void  S261C6 ::v52(){vfunc_called(this, "_ZN6S261C63v52Ev");}
void  S261C6 ::v53(){vfunc_called(this, "_ZN6S261C63v53Ev");}
void  S261C6 ::v54(){vfunc_called(this, "_ZN6S261C63v54Ev");}
void  S261C6 ::v55(){vfunc_called(this, "_ZN6S261C63v55Ev");}
void  S261C6 ::v56(){vfunc_called(this, "_ZN6S261C63v56Ev");}
void  S261C6 ::v57(){vfunc_called(this, "_ZN6S261C63v57Ev");}
void  S261C6 ::v58(){vfunc_called(this, "_ZN6S261C63v58Ev");}
void  S261C6 ::v59(){vfunc_called(this, "_ZN6S261C63v59Ev");}
void  S261C6 ::v60(){vfunc_called(this, "_ZN6S261C63v60Ev");}
void  S261C6 ::v61(){vfunc_called(this, "_ZN6S261C63v61Ev");}
void  S261C6 ::v62(){vfunc_called(this, "_ZN6S261C63v62Ev");}
void  S261C6 ::v63(){vfunc_called(this, "_ZN6S261C63v63Ev");}
void  S261C6 ::v64(){vfunc_called(this, "_ZN6S261C63v64Ev");}
void  S261C6 ::v65(){vfunc_called(this, "_ZN6S261C63v65Ev");}
void  S261C6 ::v66(){vfunc_called(this, "_ZN6S261C63v66Ev");}
void  S261C6 ::v67(){vfunc_called(this, "_ZN6S261C63v67Ev");}
void  S261C6 ::v68(){vfunc_called(this, "_ZN6S261C63v68Ev");}
void  S261C6 ::v69(){vfunc_called(this, "_ZN6S261C63v69Ev");}
S261C6 ::S261C6(){ note_ctor("S261C6", this);} // tgen

static void Test_S261C6()
{
  extern Class_Descriptor cd_S261C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S261C6, buf);
    S261C6 *dp, &lv = *(dp=new (buf) S261C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S261C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S261C6)");
    check_field_offset(lv, s261c6f0, ABISELECT(8,4), "S261C6.s261c6f0");
    check_field_offset(lv, s261c6f1, ABISELECT(16,8), "S261C6.s261c6f1");
    check_field_offset(lv, s261c6f2, ABISELECT(24,16), "S261C6.s261c6f2");
    check_field_offset(lv, s261c6f3, ABISELECT(56,32), "S261C6.s261c6f3");
    check_field_offset(lv, s261c6f4, ABISELECT(64,40), "S261C6.s261c6f4");
    check_field_offset(lv, s261c6f5, ABISELECT(72,44), "S261C6.s261c6f5");
    check_field_offset(lv, s261c6f6, ABISELECT(80,52), "S261C6.s261c6f6");
    test_class_info(&lv, &cd_S261C6);
    dp->~S261C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS261C6(Test_S261C6, "S261C6", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S261C6C1Ev();
extern void _ZN6S261C6D1Ev();
Name_Map name_map_S261C6[] = {
  NSPAIR(_ZN6S261C6C1Ev),
  NSPAIR(_ZN6S261C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S261C6[];
extern void _ZN6S261C6D1Ev();
extern void _ZN6S261C6D0Ev();
extern void _ZN6S261C62v6Ev();
extern void _ZN6S261C62v7Ev();
extern void _ZN6S261C62v8Ev();
extern void _ZN6S261C62v9Ev();
extern void _ZN6S261C63v10Ev();
extern void _ZN6S261C63v11Ev();
extern void _ZN6S261C63v12Ev();
extern void _ZN6S261C63v13Ev();
extern void _ZN6S261C63v14Ev();
extern void _ZN6S261C63v15Ev();
extern void _ZN6S261C63v16Ev();
extern void _ZN6S261C63v17Ev();
extern void _ZN6S261C63v18Ev();
extern void _ZN6S261C63v19Ev();
extern void _ZN6S261C63v20Ev();
extern void _ZN6S261C63v21Ev();
extern void _ZN6S261C63v22Ev();
extern void _ZN6S261C63v23Ev();
extern void _ZN6S261C63v24Ev();
extern void _ZN6S261C63v25Ev();
extern void _ZN6S261C63v26Ev();
extern void _ZN6S261C63v27Ev();
extern void _ZN6S261C63v28Ev();
extern void _ZN6S261C63v29Ev();
extern void _ZN6S261C63v30Ev();
extern void _ZN6S261C63v31Ev();
extern void _ZN6S261C63v32Ev();
extern void _ZN6S261C63v33Ev();
extern void _ZN6S261C63v34Ev();
extern void _ZN6S261C63v35Ev();
extern void _ZN6S261C63v36Ev();
extern void _ZN6S261C63v37Ev();
extern void _ZN6S261C63v38Ev();
extern void _ZN6S261C63v39Ev();
extern void _ZN6S261C63v40Ev();
extern void _ZN6S261C63v41Ev();
extern void _ZN6S261C63v42Ev();
extern void _ZN6S261C63v43Ev();
extern void _ZN6S261C63v44Ev();
extern void _ZN6S261C63v45Ev();
extern void _ZN6S261C63v46Ev();
extern void _ZN6S261C63v47Ev();
extern void _ZN6S261C63v48Ev();
extern void _ZN6S261C63v49Ev();
extern void _ZN6S261C63v50Ev();
extern void _ZN6S261C63v51Ev();
extern void _ZN6S261C63v52Ev();
extern void _ZN6S261C63v53Ev();
extern void _ZN6S261C63v54Ev();
extern void _ZN6S261C63v55Ev();
extern void _ZN6S261C63v56Ev();
extern void _ZN6S261C63v57Ev();
extern void _ZN6S261C63v58Ev();
extern void _ZN6S261C63v59Ev();
extern void _ZN6S261C63v60Ev();
extern void _ZN6S261C63v61Ev();
extern void _ZN6S261C63v62Ev();
extern void _ZN6S261C63v63Ev();
extern void _ZN6S261C63v64Ev();
extern void _ZN6S261C63v65Ev();
extern void _ZN6S261C63v66Ev();
extern void _ZN6S261C63v67Ev();
extern void _ZN6S261C63v68Ev();
extern void _ZN6S261C63v69Ev();
static  VTBL_ENTRY vtc_S261C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S261C6[0]),
  (VTBL_ENTRY)&_ZN6S261C6D1Ev,
  (VTBL_ENTRY)&_ZN6S261C6D0Ev,
  (VTBL_ENTRY)&_ZN6S261C62v6Ev,
  (VTBL_ENTRY)&_ZN6S261C62v7Ev,
  (VTBL_ENTRY)&_ZN6S261C62v8Ev,
  (VTBL_ENTRY)&_ZN6S261C62v9Ev,
  (VTBL_ENTRY)&_ZN6S261C63v10Ev,
  (VTBL_ENTRY)&_ZN6S261C63v11Ev,
  (VTBL_ENTRY)&_ZN6S261C63v12Ev,
  (VTBL_ENTRY)&_ZN6S261C63v13Ev,
  (VTBL_ENTRY)&_ZN6S261C63v14Ev,
  (VTBL_ENTRY)&_ZN6S261C63v15Ev,
  (VTBL_ENTRY)&_ZN6S261C63v16Ev,
  (VTBL_ENTRY)&_ZN6S261C63v17Ev,
  (VTBL_ENTRY)&_ZN6S261C63v18Ev,
  (VTBL_ENTRY)&_ZN6S261C63v19Ev,
  (VTBL_ENTRY)&_ZN6S261C63v20Ev,
  (VTBL_ENTRY)&_ZN6S261C63v21Ev,
  (VTBL_ENTRY)&_ZN6S261C63v22Ev,
  (VTBL_ENTRY)&_ZN6S261C63v23Ev,
  (VTBL_ENTRY)&_ZN6S261C63v24Ev,
  (VTBL_ENTRY)&_ZN6S261C63v25Ev,
  (VTBL_ENTRY)&_ZN6S261C63v26Ev,
  (VTBL_ENTRY)&_ZN6S261C63v27Ev,
  (VTBL_ENTRY)&_ZN6S261C63v28Ev,
  (VTBL_ENTRY)&_ZN6S261C63v29Ev,
  (VTBL_ENTRY)&_ZN6S261C63v30Ev,
  (VTBL_ENTRY)&_ZN6S261C63v31Ev,
  (VTBL_ENTRY)&_ZN6S261C63v32Ev,
  (VTBL_ENTRY)&_ZN6S261C63v33Ev,
  (VTBL_ENTRY)&_ZN6S261C63v34Ev,
  (VTBL_ENTRY)&_ZN6S261C63v35Ev,
  (VTBL_ENTRY)&_ZN6S261C63v36Ev,
  (VTBL_ENTRY)&_ZN6S261C63v37Ev,
  (VTBL_ENTRY)&_ZN6S261C63v38Ev,
  (VTBL_ENTRY)&_ZN6S261C63v39Ev,
  (VTBL_ENTRY)&_ZN6S261C63v40Ev,
  (VTBL_ENTRY)&_ZN6S261C63v41Ev,
  (VTBL_ENTRY)&_ZN6S261C63v42Ev,
  (VTBL_ENTRY)&_ZN6S261C63v43Ev,
  (VTBL_ENTRY)&_ZN6S261C63v44Ev,
  (VTBL_ENTRY)&_ZN6S261C63v45Ev,
  (VTBL_ENTRY)&_ZN6S261C63v46Ev,
  (VTBL_ENTRY)&_ZN6S261C63v47Ev,
  (VTBL_ENTRY)&_ZN6S261C63v48Ev,
  (VTBL_ENTRY)&_ZN6S261C63v49Ev,
  (VTBL_ENTRY)&_ZN6S261C63v50Ev,
  (VTBL_ENTRY)&_ZN6S261C63v51Ev,
  (VTBL_ENTRY)&_ZN6S261C63v52Ev,
  (VTBL_ENTRY)&_ZN6S261C63v53Ev,
  (VTBL_ENTRY)&_ZN6S261C63v54Ev,
  (VTBL_ENTRY)&_ZN6S261C63v55Ev,
  (VTBL_ENTRY)&_ZN6S261C63v56Ev,
  (VTBL_ENTRY)&_ZN6S261C63v57Ev,
  (VTBL_ENTRY)&_ZN6S261C63v58Ev,
  (VTBL_ENTRY)&_ZN6S261C63v59Ev,
  (VTBL_ENTRY)&_ZN6S261C63v60Ev,
  (VTBL_ENTRY)&_ZN6S261C63v61Ev,
  (VTBL_ENTRY)&_ZN6S261C63v62Ev,
  (VTBL_ENTRY)&_ZN6S261C63v63Ev,
  (VTBL_ENTRY)&_ZN6S261C63v64Ev,
  (VTBL_ENTRY)&_ZN6S261C63v65Ev,
  (VTBL_ENTRY)&_ZN6S261C63v66Ev,
  (VTBL_ENTRY)&_ZN6S261C63v67Ev,
  (VTBL_ENTRY)&_ZN6S261C63v68Ev,
  (VTBL_ENTRY)&_ZN6S261C63v69Ev,
};
extern VTBL_ENTRY _ZTI6S261C6[];
extern  VTBL_ENTRY _ZTV6S261C6[];
Class_Descriptor cd_S261C6 = {  "S261C6", // class name
  0,0,//no base classes
  &(vtc_S261C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S261C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S261C6),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  S261C5  : S261C6 {
  int s261c5f0[2];
  void *s261c5f1;
  int s261c5f2[2];
  ::S287C8_nt s261c5f3;
  ::S287C8_nt s261c5f4;
  ::S2121C38 s261c5f5;
  ::S287C8_nt s261c5f6;
  unsigned int s261c5f7:1;
  unsigned int s261c5f8:1;
  unsigned int s261c5f9:1;
  unsigned int s261c5f10:1;
  unsigned int s261c5f11:1;
  int s261c5f12[2];
  virtual  ~S261C5(); // _ZN6S261C5D1Ev
  virtual void  v70(); // _ZN6S261C53v70Ev
  virtual void  v71(); // _ZN6S261C53v71Ev
  virtual void  v72(); // _ZN6S261C53v72Ev
  virtual void  v73(); // _ZN6S261C53v73Ev
  virtual void  v74(); // _ZN6S261C53v74Ev
  virtual void  v75(); // _ZN6S261C53v75Ev
  virtual void  v76(); // _ZN6S261C53v76Ev
  virtual void  v77(); // _ZN6S261C53v77Ev
  virtual void  v78(); // _ZN6S261C53v78Ev
  virtual void  v79(); // _ZN6S261C53v79Ev
  virtual void  v80(); // _ZN6S261C53v80Ev
  virtual void  v81(); // _ZN6S261C53v81Ev
  virtual void  v82(); // _ZN6S261C53v82Ev
  virtual void  v83(); // _ZN6S261C53v83Ev
  virtual void  v84(); // _ZN6S261C53v84Ev
  virtual void  v85(); // _ZN6S261C53v85Ev
  virtual void  v86(); // _ZN6S261C53v86Ev
  virtual void  v87(); // _ZN6S261C53v87Ev
  virtual void  v88(); // _ZN6S261C53v88Ev
  virtual void  v89(); // _ZN6S261C53v89Ev
  virtual void  v90(); // _ZN6S261C53v90Ev
  virtual void  v91(); // _ZN6S261C53v91Ev
  S261C5(); // tgen
};
//SIG(-1 S261C5) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S261C5 ::~S261C5(){ note_dtor("S261C5", this);}
void  S261C5 ::v70(){vfunc_called(this, "_ZN6S261C53v70Ev");}
void  S261C5 ::v71(){vfunc_called(this, "_ZN6S261C53v71Ev");}
void  S261C5 ::v72(){vfunc_called(this, "_ZN6S261C53v72Ev");}
void  S261C5 ::v73(){vfunc_called(this, "_ZN6S261C53v73Ev");}
void  S261C5 ::v74(){vfunc_called(this, "_ZN6S261C53v74Ev");}
void  S261C5 ::v75(){vfunc_called(this, "_ZN6S261C53v75Ev");}
void  S261C5 ::v76(){vfunc_called(this, "_ZN6S261C53v76Ev");}
void  S261C5 ::v77(){vfunc_called(this, "_ZN6S261C53v77Ev");}
void  S261C5 ::v78(){vfunc_called(this, "_ZN6S261C53v78Ev");}
void  S261C5 ::v79(){vfunc_called(this, "_ZN6S261C53v79Ev");}
void  S261C5 ::v80(){vfunc_called(this, "_ZN6S261C53v80Ev");}
void  S261C5 ::v81(){vfunc_called(this, "_ZN6S261C53v81Ev");}
void  S261C5 ::v82(){vfunc_called(this, "_ZN6S261C53v82Ev");}
void  S261C5 ::v83(){vfunc_called(this, "_ZN6S261C53v83Ev");}
void  S261C5 ::v84(){vfunc_called(this, "_ZN6S261C53v84Ev");}
void  S261C5 ::v85(){vfunc_called(this, "_ZN6S261C53v85Ev");}
void  S261C5 ::v86(){vfunc_called(this, "_ZN6S261C53v86Ev");}
void  S261C5 ::v87(){vfunc_called(this, "_ZN6S261C53v87Ev");}
void  S261C5 ::v88(){vfunc_called(this, "_ZN6S261C53v88Ev");}
void  S261C5 ::v89(){vfunc_called(this, "_ZN6S261C53v89Ev");}
void  S261C5 ::v90(){vfunc_called(this, "_ZN6S261C53v90Ev");}
void  S261C5 ::v91(){vfunc_called(this, "_ZN6S261C53v91Ev");}
S261C5 ::S261C5(){ note_ctor("S261C5", this);} // tgen

static void Test_S261C5()
{
  extern Class_Descriptor cd_S261C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S261C5, buf);
    S261C5 *dp, &lv = *(dp=new (buf) S261C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S261C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S261C5)");
    check_base_class_offset(lv, (S261C6*), 0, "S261C5");
    check_field_offset(lv, s261c5f0, ABISELECT(96,60), "S261C5.s261c5f0");
    check_field_offset(lv, s261c5f1, ABISELECT(104,68), "S261C5.s261c5f1");
    check_field_offset(lv, s261c5f2, ABISELECT(112,72), "S261C5.s261c5f2");
    check_field_offset(lv, s261c5f3, ABISELECT(120,80), "S261C5.s261c5f3");
    check_field_offset(lv, s261c5f4, ABISELECT(136,92), "S261C5.s261c5f4");
    check_field_offset(lv, s261c5f5, ABISELECT(152,104), "S261C5.s261c5f5");
    check_field_offset(lv, s261c5f6, ABISELECT(160,108), "S261C5.s261c5f6");
    set_bf_and_test(lv, s261c5f7, ABISELECT(176,120), 0, 1, 1, "S261C5");
    set_bf_and_test(lv, s261c5f8, ABISELECT(176,120), 1, 1, 1, "S261C5");
    set_bf_and_test(lv, s261c5f9, ABISELECT(176,120), 2, 1, 1, "S261C5");
    set_bf_and_test(lv, s261c5f10, ABISELECT(176,120), 3, 1, 1, "S261C5");
    set_bf_and_test(lv, s261c5f11, ABISELECT(176,120), 4, 1, 1, "S261C5");
    check_field_offset(lv, s261c5f12, ABISELECT(180,124), "S261C5.s261c5f12");
    test_class_info(&lv, &cd_S261C5);
    dp->~S261C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS261C5(Test_S261C5, "S261C5", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN6S261C5C1Ev();
extern void _ZN6S261C5D1Ev();
Name_Map name_map_S261C5[] = {
  NSPAIR(_ZN6S261C5C1Ev),
  NSPAIR(_ZN6S261C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S261C6;
extern VTBL_ENTRY _ZTI6S261C6[];
extern  VTBL_ENTRY _ZTV6S261C6[];
static Base_Class bases_S261C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S261C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI6S261C5[];
extern void _ZN6S261C5D1Ev();
extern void _ZN6S261C5D0Ev();
extern void _ZN6S261C62v6Ev();
extern void _ZN6S261C62v7Ev();
extern void _ZN6S261C62v8Ev();
extern void _ZN6S261C62v9Ev();
extern void _ZN6S261C63v10Ev();
extern void _ZN6S261C63v11Ev();
extern void _ZN6S261C63v12Ev();
extern void _ZN6S261C63v13Ev();
extern void _ZN6S261C63v14Ev();
extern void _ZN6S261C63v15Ev();
extern void _ZN6S261C63v16Ev();
extern void _ZN6S261C63v17Ev();
extern void _ZN6S261C63v18Ev();
extern void _ZN6S261C63v19Ev();
extern void _ZN6S261C63v20Ev();
extern void _ZN6S261C63v21Ev();
extern void _ZN6S261C63v22Ev();
extern void _ZN6S261C63v23Ev();
extern void _ZN6S261C63v24Ev();
extern void _ZN6S261C63v25Ev();
extern void _ZN6S261C63v26Ev();
extern void _ZN6S261C63v27Ev();
extern void _ZN6S261C63v28Ev();
extern void _ZN6S261C63v29Ev();
extern void _ZN6S261C63v30Ev();
extern void _ZN6S261C63v31Ev();
extern void _ZN6S261C63v32Ev();
extern void _ZN6S261C63v33Ev();
extern void _ZN6S261C63v34Ev();
extern void _ZN6S261C63v35Ev();
extern void _ZN6S261C63v36Ev();
extern void _ZN6S261C63v37Ev();
extern void _ZN6S261C63v38Ev();
extern void _ZN6S261C63v39Ev();
extern void _ZN6S261C63v40Ev();
extern void _ZN6S261C63v41Ev();
extern void _ZN6S261C63v42Ev();
extern void _ZN6S261C63v43Ev();
extern void _ZN6S261C63v44Ev();
extern void _ZN6S261C63v45Ev();
extern void _ZN6S261C63v46Ev();
extern void _ZN6S261C63v47Ev();
extern void _ZN6S261C63v48Ev();
extern void _ZN6S261C63v49Ev();
extern void _ZN6S261C63v50Ev();
extern void _ZN6S261C63v51Ev();
extern void _ZN6S261C63v52Ev();
extern void _ZN6S261C63v53Ev();
extern void _ZN6S261C63v54Ev();
extern void _ZN6S261C63v55Ev();
extern void _ZN6S261C63v56Ev();
extern void _ZN6S261C63v57Ev();
extern void _ZN6S261C63v58Ev();
extern void _ZN6S261C63v59Ev();
extern void _ZN6S261C63v60Ev();
extern void _ZN6S261C63v61Ev();
extern void _ZN6S261C63v62Ev();
extern void _ZN6S261C63v63Ev();
extern void _ZN6S261C63v64Ev();
extern void _ZN6S261C63v65Ev();
extern void _ZN6S261C63v66Ev();
extern void _ZN6S261C63v67Ev();
extern void _ZN6S261C63v68Ev();
extern void _ZN6S261C63v69Ev();
extern void _ZN6S261C53v70Ev();
extern void _ZN6S261C53v71Ev();
extern void _ZN6S261C53v72Ev();
extern void _ZN6S261C53v73Ev();
extern void _ZN6S261C53v74Ev();
extern void _ZN6S261C53v75Ev();
extern void _ZN6S261C53v76Ev();
extern void _ZN6S261C53v77Ev();
extern void _ZN6S261C53v78Ev();
extern void _ZN6S261C53v79Ev();
extern void _ZN6S261C53v80Ev();
extern void _ZN6S261C53v81Ev();
extern void _ZN6S261C53v82Ev();
extern void _ZN6S261C53v83Ev();
extern void _ZN6S261C53v84Ev();
extern void _ZN6S261C53v85Ev();
extern void _ZN6S261C53v86Ev();
extern void _ZN6S261C53v87Ev();
extern void _ZN6S261C53v88Ev();
extern void _ZN6S261C53v89Ev();
extern void _ZN6S261C53v90Ev();
extern void _ZN6S261C53v91Ev();
static  VTBL_ENTRY vtc_S261C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S261C5[0]),
  (VTBL_ENTRY)&_ZN6S261C5D1Ev,
  (VTBL_ENTRY)&_ZN6S261C5D0Ev,
  (VTBL_ENTRY)&_ZN6S261C62v6Ev,
  (VTBL_ENTRY)&_ZN6S261C62v7Ev,
  (VTBL_ENTRY)&_ZN6S261C62v8Ev,
  (VTBL_ENTRY)&_ZN6S261C62v9Ev,
  (VTBL_ENTRY)&_ZN6S261C63v10Ev,
  (VTBL_ENTRY)&_ZN6S261C63v11Ev,
  (VTBL_ENTRY)&_ZN6S261C63v12Ev,
  (VTBL_ENTRY)&_ZN6S261C63v13Ev,
  (VTBL_ENTRY)&_ZN6S261C63v14Ev,
  (VTBL_ENTRY)&_ZN6S261C63v15Ev,
  (VTBL_ENTRY)&_ZN6S261C63v16Ev,
  (VTBL_ENTRY)&_ZN6S261C63v17Ev,
  (VTBL_ENTRY)&_ZN6S261C63v18Ev,
  (VTBL_ENTRY)&_ZN6S261C63v19Ev,
  (VTBL_ENTRY)&_ZN6S261C63v20Ev,
  (VTBL_ENTRY)&_ZN6S261C63v21Ev,
  (VTBL_ENTRY)&_ZN6S261C63v22Ev,
  (VTBL_ENTRY)&_ZN6S261C63v23Ev,
  (VTBL_ENTRY)&_ZN6S261C63v24Ev,
  (VTBL_ENTRY)&_ZN6S261C63v25Ev,
  (VTBL_ENTRY)&_ZN6S261C63v26Ev,
  (VTBL_ENTRY)&_ZN6S261C63v27Ev,
  (VTBL_ENTRY)&_ZN6S261C63v28Ev,
  (VTBL_ENTRY)&_ZN6S261C63v29Ev,
  (VTBL_ENTRY)&_ZN6S261C63v30Ev,
  (VTBL_ENTRY)&_ZN6S261C63v31Ev,
  (VTBL_ENTRY)&_ZN6S261C63v32Ev,
  (VTBL_ENTRY)&_ZN6S261C63v33Ev,
  (VTBL_ENTRY)&_ZN6S261C63v34Ev,
  (VTBL_ENTRY)&_ZN6S261C63v35Ev,
  (VTBL_ENTRY)&_ZN6S261C63v36Ev,
  (VTBL_ENTRY)&_ZN6S261C63v37Ev,
  (VTBL_ENTRY)&_ZN6S261C63v38Ev,
  (VTBL_ENTRY)&_ZN6S261C63v39Ev,
  (VTBL_ENTRY)&_ZN6S261C63v40Ev,
  (VTBL_ENTRY)&_ZN6S261C63v41Ev,
  (VTBL_ENTRY)&_ZN6S261C63v42Ev,
  (VTBL_ENTRY)&_ZN6S261C63v43Ev,
  (VTBL_ENTRY)&_ZN6S261C63v44Ev,
  (VTBL_ENTRY)&_ZN6S261C63v45Ev,
  (VTBL_ENTRY)&_ZN6S261C63v46Ev,
  (VTBL_ENTRY)&_ZN6S261C63v47Ev,
  (VTBL_ENTRY)&_ZN6S261C63v48Ev,
  (VTBL_ENTRY)&_ZN6S261C63v49Ev,
  (VTBL_ENTRY)&_ZN6S261C63v50Ev,
  (VTBL_ENTRY)&_ZN6S261C63v51Ev,
  (VTBL_ENTRY)&_ZN6S261C63v52Ev,
  (VTBL_ENTRY)&_ZN6S261C63v53Ev,
  (VTBL_ENTRY)&_ZN6S261C63v54Ev,
  (VTBL_ENTRY)&_ZN6S261C63v55Ev,
  (VTBL_ENTRY)&_ZN6S261C63v56Ev,
  (VTBL_ENTRY)&_ZN6S261C63v57Ev,
  (VTBL_ENTRY)&_ZN6S261C63v58Ev,
  (VTBL_ENTRY)&_ZN6S261C63v59Ev,
  (VTBL_ENTRY)&_ZN6S261C63v60Ev,
  (VTBL_ENTRY)&_ZN6S261C63v61Ev,
  (VTBL_ENTRY)&_ZN6S261C63v62Ev,
  (VTBL_ENTRY)&_ZN6S261C63v63Ev,
  (VTBL_ENTRY)&_ZN6S261C63v64Ev,
  (VTBL_ENTRY)&_ZN6S261C63v65Ev,
  (VTBL_ENTRY)&_ZN6S261C63v66Ev,
  (VTBL_ENTRY)&_ZN6S261C63v67Ev,
  (VTBL_ENTRY)&_ZN6S261C63v68Ev,
  (VTBL_ENTRY)&_ZN6S261C63v69Ev,
  (VTBL_ENTRY)&_ZN6S261C53v70Ev,
  (VTBL_ENTRY)&_ZN6S261C53v71Ev,
  (VTBL_ENTRY)&_ZN6S261C53v72Ev,
  (VTBL_ENTRY)&_ZN6S261C53v73Ev,
  (VTBL_ENTRY)&_ZN6S261C53v74Ev,
  (VTBL_ENTRY)&_ZN6S261C53v75Ev,
  (VTBL_ENTRY)&_ZN6S261C53v76Ev,
  (VTBL_ENTRY)&_ZN6S261C53v77Ev,
  (VTBL_ENTRY)&_ZN6S261C53v78Ev,
  (VTBL_ENTRY)&_ZN6S261C53v79Ev,
  (VTBL_ENTRY)&_ZN6S261C53v80Ev,
  (VTBL_ENTRY)&_ZN6S261C53v81Ev,
  (VTBL_ENTRY)&_ZN6S261C53v82Ev,
  (VTBL_ENTRY)&_ZN6S261C53v83Ev,
  (VTBL_ENTRY)&_ZN6S261C53v84Ev,
  (VTBL_ENTRY)&_ZN6S261C53v85Ev,
  (VTBL_ENTRY)&_ZN6S261C53v86Ev,
  (VTBL_ENTRY)&_ZN6S261C53v87Ev,
  (VTBL_ENTRY)&_ZN6S261C53v88Ev,
  (VTBL_ENTRY)&_ZN6S261C53v89Ev,
  (VTBL_ENTRY)&_ZN6S261C53v90Ev,
  (VTBL_ENTRY)&_ZN6S261C53v91Ev,
};
extern VTBL_ENTRY _ZTI6S261C5[];
extern  VTBL_ENTRY _ZTV6S261C5[];
Class_Descriptor cd_S261C5 = {  "S261C5", // class name
  bases_S261C5, 1,
  &(vtc_S261C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI6S261C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S261C5),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S261C4  : S261C5 {
  unsigned int s261c4f0:1;
  unsigned int s261c4f1:1;
  unsigned int s261c4f2:1;
  ::S3350C17 s261c4f3;
  ::S3350C11 s261c4f4;
  ::S3350C5_nt s261c4f5;
  ::S287C27 s261c4f6;
  int s261c4f7[3];
  virtual  ~S261C4(); // _ZN6S261C4D1Ev
  virtual void  v92(); // _ZN6S261C43v92Ev
  virtual void  v93(); // _ZN6S261C43v93Ev
  virtual void  v94(); // _ZN6S261C43v94Ev
  virtual void  v95(); // _ZN6S261C43v95Ev
  virtual void  v96(); // _ZN6S261C43v96Ev
  virtual void  v97(); // _ZN6S261C43v97Ev
  virtual void  v98(); // _ZN6S261C43v98Ev
  virtual void  v99(); // _ZN6S261C43v99Ev
  virtual void  v100(); // _ZN6S261C44v100Ev
  virtual void  v101(); // _ZN6S261C44v101Ev
  virtual void  v102(); // _ZN6S261C44v102Ev
  virtual void  v103(); // _ZN6S261C44v103Ev
  virtual void  v104(); // _ZN6S261C44v104Ev
  virtual void  v105(); // _ZN6S261C44v105Ev
  virtual void  v106(); // _ZN6S261C44v106Ev
  virtual void  v107(); // _ZN6S261C44v107Ev
  virtual void  v108(); // _ZN6S261C44v108Ev
  virtual void  v109(); // _ZN6S261C44v109Ev
  virtual void  v110(); // _ZN6S261C44v110Ev
  virtual void  v111(); // _ZN6S261C44v111Ev
  S261C4(); // tgen
};
//SIG(-1 S261C4) C1{ BC2{ BC3{ vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 FC10{ BC11{ BC8}} FC12{ BC13{ BC8}} FC14{ BC15{ BC8}} FC16{ BC17{ BC8}} Fi[3]}


 S261C4 ::~S261C4(){ note_dtor("S261C4", this);}
void  S261C4 ::v92(){vfunc_called(this, "_ZN6S261C43v92Ev");}
void  S261C4 ::v93(){vfunc_called(this, "_ZN6S261C43v93Ev");}
void  S261C4 ::v94(){vfunc_called(this, "_ZN6S261C43v94Ev");}
void  S261C4 ::v95(){vfunc_called(this, "_ZN6S261C43v95Ev");}
void  S261C4 ::v96(){vfunc_called(this, "_ZN6S261C43v96Ev");}
void  S261C4 ::v97(){vfunc_called(this, "_ZN6S261C43v97Ev");}
void  S261C4 ::v98(){vfunc_called(this, "_ZN6S261C43v98Ev");}
void  S261C4 ::v99(){vfunc_called(this, "_ZN6S261C43v99Ev");}
void  S261C4 ::v100(){vfunc_called(this, "_ZN6S261C44v100Ev");}
void  S261C4 ::v101(){vfunc_called(this, "_ZN6S261C44v101Ev");}
void  S261C4 ::v102(){vfunc_called(this, "_ZN6S261C44v102Ev");}
void  S261C4 ::v103(){vfunc_called(this, "_ZN6S261C44v103Ev");}
void  S261C4 ::v104(){vfunc_called(this, "_ZN6S261C44v104Ev");}
void  S261C4 ::v105(){vfunc_called(this, "_ZN6S261C44v105Ev");}
void  S261C4 ::v106(){vfunc_called(this, "_ZN6S261C44v106Ev");}
void  S261C4 ::v107(){vfunc_called(this, "_ZN6S261C44v107Ev");}
void  S261C4 ::v108(){vfunc_called(this, "_ZN6S261C44v108Ev");}
void  S261C4 ::v109(){vfunc_called(this, "_ZN6S261C44v109Ev");}
void  S261C4 ::v110(){vfunc_called(this, "_ZN6S261C44v110Ev");}
void  S261C4 ::v111(){vfunc_called(this, "_ZN6S261C44v111Ev");}
S261C4 ::S261C4(){ note_ctor("S261C4", this);} // tgen

static void Test_S261C4()
{
  extern Class_Descriptor cd_S261C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S261C4, buf);
    S261C4 *dp, &lv = *(dp=new (buf) S261C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S261C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S261C4)");
    check_base_class_offset(lv, (S261C6*)(S261C5*), 0, "S261C4");
    check_base_class_offset(lv, (S261C5*), 0, "S261C4");
    set_bf_and_test(lv, s261c4f0, ABISELECT(188,132), 0, 1, 1, "S261C4");
    set_bf_and_test(lv, s261c4f1, ABISELECT(188,132), 1, 1, 1, "S261C4");
    set_bf_and_test(lv, s261c4f2, ABISELECT(188,132), 2, 1, 1, "S261C4");
    check_field_offset(lv, s261c4f3, ABISELECT(192,136), "S261C4.s261c4f3");
    check_field_offset(lv, s261c4f4, ABISELECT(208,148), "S261C4.s261c4f4");
    check_field_offset(lv, s261c4f5, ABISELECT(224,160), "S261C4.s261c4f5");
    check_field_offset(lv, s261c4f6, ABISELECT(240,172), "S261C4.s261c4f6");
    check_field_offset(lv, s261c4f7, ABISELECT(256,184), "S261C4.s261c4f7");
    test_class_info(&lv, &cd_S261C4);
    dp->~S261C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS261C4(Test_S261C4, "S261C4", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN6S261C4C1Ev();
extern void _ZN6S261C4D1Ev();
Name_Map name_map_S261C4[] = {
  NSPAIR(_ZN6S261C4C1Ev),
  NSPAIR(_ZN6S261C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S261C6;
extern VTBL_ENTRY _ZTI6S261C6[];
extern  VTBL_ENTRY _ZTV6S261C6[];
extern Class_Descriptor cd_S261C5;
extern VTBL_ENTRY _ZTI6S261C5[];
extern  VTBL_ENTRY _ZTV6S261C5[];
static Base_Class bases_S261C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S261C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S261C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S261C4[];
extern void _ZN6S261C4D1Ev();
extern void _ZN6S261C4D0Ev();
extern void _ZN6S261C62v6Ev();
extern void _ZN6S261C62v7Ev();
extern void _ZN6S261C62v8Ev();
extern void _ZN6S261C62v9Ev();
extern void _ZN6S261C63v10Ev();
extern void _ZN6S261C63v11Ev();
extern void _ZN6S261C63v12Ev();
extern void _ZN6S261C63v13Ev();
extern void _ZN6S261C63v14Ev();
extern void _ZN6S261C63v15Ev();
extern void _ZN6S261C63v16Ev();
extern void _ZN6S261C63v17Ev();
extern void _ZN6S261C63v18Ev();
extern void _ZN6S261C63v19Ev();
extern void _ZN6S261C63v20Ev();
extern void _ZN6S261C63v21Ev();
extern void _ZN6S261C63v22Ev();
extern void _ZN6S261C63v23Ev();
extern void _ZN6S261C63v24Ev();
extern void _ZN6S261C63v25Ev();
extern void _ZN6S261C63v26Ev();
extern void _ZN6S261C63v27Ev();
extern void _ZN6S261C63v28Ev();
extern void _ZN6S261C63v29Ev();
extern void _ZN6S261C63v30Ev();
extern void _ZN6S261C63v31Ev();
extern void _ZN6S261C63v32Ev();
extern void _ZN6S261C63v33Ev();
extern void _ZN6S261C63v34Ev();
extern void _ZN6S261C63v35Ev();
extern void _ZN6S261C63v36Ev();
extern void _ZN6S261C63v37Ev();
extern void _ZN6S261C63v38Ev();
extern void _ZN6S261C63v39Ev();
extern void _ZN6S261C63v40Ev();
extern void _ZN6S261C63v41Ev();
extern void _ZN6S261C63v42Ev();
extern void _ZN6S261C63v43Ev();
extern void _ZN6S261C63v44Ev();
extern void _ZN6S261C63v45Ev();
extern void _ZN6S261C63v46Ev();
extern void _ZN6S261C63v47Ev();
extern void _ZN6S261C63v48Ev();
extern void _ZN6S261C63v49Ev();
extern void _ZN6S261C63v50Ev();
extern void _ZN6S261C63v51Ev();
extern void _ZN6S261C63v52Ev();
extern void _ZN6S261C63v53Ev();
extern void _ZN6S261C63v54Ev();
extern void _ZN6S261C63v55Ev();
extern void _ZN6S261C63v56Ev();
extern void _ZN6S261C63v57Ev();
extern void _ZN6S261C63v58Ev();
extern void _ZN6S261C63v59Ev();
extern void _ZN6S261C63v60Ev();
extern void _ZN6S261C63v61Ev();
extern void _ZN6S261C63v62Ev();
extern void _ZN6S261C63v63Ev();
extern void _ZN6S261C63v64Ev();
extern void _ZN6S261C63v65Ev();
extern void _ZN6S261C63v66Ev();
extern void _ZN6S261C63v67Ev();
extern void _ZN6S261C63v68Ev();
extern void _ZN6S261C63v69Ev();
extern void _ZN6S261C53v70Ev();
extern void _ZN6S261C53v71Ev();
extern void _ZN6S261C53v72Ev();
extern void _ZN6S261C53v73Ev();
extern void _ZN6S261C53v74Ev();
extern void _ZN6S261C53v75Ev();
extern void _ZN6S261C53v76Ev();
extern void _ZN6S261C53v77Ev();
extern void _ZN6S261C53v78Ev();
extern void _ZN6S261C53v79Ev();
extern void _ZN6S261C53v80Ev();
extern void _ZN6S261C53v81Ev();
extern void _ZN6S261C53v82Ev();
extern void _ZN6S261C53v83Ev();
extern void _ZN6S261C53v84Ev();
extern void _ZN6S261C53v85Ev();
extern void _ZN6S261C53v86Ev();
extern void _ZN6S261C53v87Ev();
extern void _ZN6S261C53v88Ev();
extern void _ZN6S261C53v89Ev();
extern void _ZN6S261C53v90Ev();
extern void _ZN6S261C53v91Ev();
extern void _ZN6S261C43v92Ev();
extern void _ZN6S261C43v93Ev();
extern void _ZN6S261C43v94Ev();
extern void _ZN6S261C43v95Ev();
extern void _ZN6S261C43v96Ev();
extern void _ZN6S261C43v97Ev();
extern void _ZN6S261C43v98Ev();
extern void _ZN6S261C43v99Ev();
extern void _ZN6S261C44v100Ev();
extern void _ZN6S261C44v101Ev();
extern void _ZN6S261C44v102Ev();
extern void _ZN6S261C44v103Ev();
extern void _ZN6S261C44v104Ev();
extern void _ZN6S261C44v105Ev();
extern void _ZN6S261C44v106Ev();
extern void _ZN6S261C44v107Ev();
extern void _ZN6S261C44v108Ev();
extern void _ZN6S261C44v109Ev();
extern void _ZN6S261C44v110Ev();
extern void _ZN6S261C44v111Ev();
static  VTBL_ENTRY vtc_S261C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S261C4[0]),
  (VTBL_ENTRY)&_ZN6S261C4D1Ev,
  (VTBL_ENTRY)&_ZN6S261C4D0Ev,
  (VTBL_ENTRY)&_ZN6S261C62v6Ev,
  (VTBL_ENTRY)&_ZN6S261C62v7Ev,
  (VTBL_ENTRY)&_ZN6S261C62v8Ev,
  (VTBL_ENTRY)&_ZN6S261C62v9Ev,
  (VTBL_ENTRY)&_ZN6S261C63v10Ev,
  (VTBL_ENTRY)&_ZN6S261C63v11Ev,
  (VTBL_ENTRY)&_ZN6S261C63v12Ev,
  (VTBL_ENTRY)&_ZN6S261C63v13Ev,
  (VTBL_ENTRY)&_ZN6S261C63v14Ev,
  (VTBL_ENTRY)&_ZN6S261C63v15Ev,
  (VTBL_ENTRY)&_ZN6S261C63v16Ev,
  (VTBL_ENTRY)&_ZN6S261C63v17Ev,
  (VTBL_ENTRY)&_ZN6S261C63v18Ev,
  (VTBL_ENTRY)&_ZN6S261C63v19Ev,
  (VTBL_ENTRY)&_ZN6S261C63v20Ev,
  (VTBL_ENTRY)&_ZN6S261C63v21Ev,
  (VTBL_ENTRY)&_ZN6S261C63v22Ev,
  (VTBL_ENTRY)&_ZN6S261C63v23Ev,
  (VTBL_ENTRY)&_ZN6S261C63v24Ev,
  (VTBL_ENTRY)&_ZN6S261C63v25Ev,
  (VTBL_ENTRY)&_ZN6S261C63v26Ev,
  (VTBL_ENTRY)&_ZN6S261C63v27Ev,
  (VTBL_ENTRY)&_ZN6S261C63v28Ev,
  (VTBL_ENTRY)&_ZN6S261C63v29Ev,
  (VTBL_ENTRY)&_ZN6S261C63v30Ev,
  (VTBL_ENTRY)&_ZN6S261C63v31Ev,
  (VTBL_ENTRY)&_ZN6S261C63v32Ev,
  (VTBL_ENTRY)&_ZN6S261C63v33Ev,
  (VTBL_ENTRY)&_ZN6S261C63v34Ev,
  (VTBL_ENTRY)&_ZN6S261C63v35Ev,
  (VTBL_ENTRY)&_ZN6S261C63v36Ev,
  (VTBL_ENTRY)&_ZN6S261C63v37Ev,
  (VTBL_ENTRY)&_ZN6S261C63v38Ev,
  (VTBL_ENTRY)&_ZN6S261C63v39Ev,
  (VTBL_ENTRY)&_ZN6S261C63v40Ev,
  (VTBL_ENTRY)&_ZN6S261C63v41Ev,
  (VTBL_ENTRY)&_ZN6S261C63v42Ev,
  (VTBL_ENTRY)&_ZN6S261C63v43Ev,
  (VTBL_ENTRY)&_ZN6S261C63v44Ev,
  (VTBL_ENTRY)&_ZN6S261C63v45Ev,
  (VTBL_ENTRY)&_ZN6S261C63v46Ev,
  (VTBL_ENTRY)&_ZN6S261C63v47Ev,
  (VTBL_ENTRY)&_ZN6S261C63v48Ev,
  (VTBL_ENTRY)&_ZN6S261C63v49Ev,
  (VTBL_ENTRY)&_ZN6S261C63v50Ev,
  (VTBL_ENTRY)&_ZN6S261C63v51Ev,
  (VTBL_ENTRY)&_ZN6S261C63v52Ev,
  (VTBL_ENTRY)&_ZN6S261C63v53Ev,
  (VTBL_ENTRY)&_ZN6S261C63v54Ev,
  (VTBL_ENTRY)&_ZN6S261C63v55Ev,
  (VTBL_ENTRY)&_ZN6S261C63v56Ev,
  (VTBL_ENTRY)&_ZN6S261C63v57Ev,
  (VTBL_ENTRY)&_ZN6S261C63v58Ev,
  (VTBL_ENTRY)&_ZN6S261C63v59Ev,
  (VTBL_ENTRY)&_ZN6S261C63v60Ev,
  (VTBL_ENTRY)&_ZN6S261C63v61Ev,
  (VTBL_ENTRY)&_ZN6S261C63v62Ev,
  (VTBL_ENTRY)&_ZN6S261C63v63Ev,
  (VTBL_ENTRY)&_ZN6S261C63v64Ev,
  (VTBL_ENTRY)&_ZN6S261C63v65Ev,
  (VTBL_ENTRY)&_ZN6S261C63v66Ev,
  (VTBL_ENTRY)&_ZN6S261C63v67Ev,
  (VTBL_ENTRY)&_ZN6S261C63v68Ev,
  (VTBL_ENTRY)&_ZN6S261C63v69Ev,
  (VTBL_ENTRY)&_ZN6S261C53v70Ev,
  (VTBL_ENTRY)&_ZN6S261C53v71Ev,
  (VTBL_ENTRY)&_ZN6S261C53v72Ev,
  (VTBL_ENTRY)&_ZN6S261C53v73Ev,
  (VTBL_ENTRY)&_ZN6S261C53v74Ev,
  (VTBL_ENTRY)&_ZN6S261C53v75Ev,
  (VTBL_ENTRY)&_ZN6S261C53v76Ev,
  (VTBL_ENTRY)&_ZN6S261C53v77Ev,
  (VTBL_ENTRY)&_ZN6S261C53v78Ev,
  (VTBL_ENTRY)&_ZN6S261C53v79Ev,
  (VTBL_ENTRY)&_ZN6S261C53v80Ev,
  (VTBL_ENTRY)&_ZN6S261C53v81Ev,
  (VTBL_ENTRY)&_ZN6S261C53v82Ev,
  (VTBL_ENTRY)&_ZN6S261C53v83Ev,
  (VTBL_ENTRY)&_ZN6S261C53v84Ev,
  (VTBL_ENTRY)&_ZN6S261C53v85Ev,
  (VTBL_ENTRY)&_ZN6S261C53v86Ev,
  (VTBL_ENTRY)&_ZN6S261C53v87Ev,
  (VTBL_ENTRY)&_ZN6S261C53v88Ev,
  (VTBL_ENTRY)&_ZN6S261C53v89Ev,
  (VTBL_ENTRY)&_ZN6S261C53v90Ev,
  (VTBL_ENTRY)&_ZN6S261C53v91Ev,
  (VTBL_ENTRY)&_ZN6S261C43v92Ev,
  (VTBL_ENTRY)&_ZN6S261C43v93Ev,
  (VTBL_ENTRY)&_ZN6S261C43v94Ev,
  (VTBL_ENTRY)&_ZN6S261C43v95Ev,
  (VTBL_ENTRY)&_ZN6S261C43v96Ev,
  (VTBL_ENTRY)&_ZN6S261C43v97Ev,
  (VTBL_ENTRY)&_ZN6S261C43v98Ev,
  (VTBL_ENTRY)&_ZN6S261C43v99Ev,
  (VTBL_ENTRY)&_ZN6S261C44v100Ev,
  (VTBL_ENTRY)&_ZN6S261C44v101Ev,
  (VTBL_ENTRY)&_ZN6S261C44v102Ev,
  (VTBL_ENTRY)&_ZN6S261C44v103Ev,
  (VTBL_ENTRY)&_ZN6S261C44v104Ev,
  (VTBL_ENTRY)&_ZN6S261C44v105Ev,
  (VTBL_ENTRY)&_ZN6S261C44v106Ev,
  (VTBL_ENTRY)&_ZN6S261C44v107Ev,
  (VTBL_ENTRY)&_ZN6S261C44v108Ev,
  (VTBL_ENTRY)&_ZN6S261C44v109Ev,
  (VTBL_ENTRY)&_ZN6S261C44v110Ev,
  (VTBL_ENTRY)&_ZN6S261C44v111Ev,
};
extern VTBL_ENTRY _ZTI6S261C4[];
extern  VTBL_ENTRY _ZTV6S261C4[];
Class_Descriptor cd_S261C4 = {  "S261C4", // class name
  bases_S261C4, 2,
  &(vtc_S261C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI6S261C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S261C4),110, //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  S261C3  : S261C4 {
  ::S3350C4_nt s261c3f0;
  unsigned int s261c3f1:1;
  ::S287C23 s261c3f2;
  virtual  ~S261C3(); // _ZN6S261C3D1Ev
  virtual void  v112(); // _ZN6S261C34v112Ev
  virtual void  v113(); // _ZN6S261C34v113Ev
  virtual void  v114(); // _ZN6S261C34v114Ev
  virtual void  v115(); // _ZN6S261C34v115Ev
  S261C3(); // tgen
};
//SIG(-1 S261C3) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 Fi:1 Fi:1 Fi:1 FC11{ BC12{ BC9}} FC13{ BC14{ BC9}} FC15{ BC16{ BC9}} FC17{ BC18{ BC9}} Fi[3]} vd v1 v2 v3 v4 FC5 Fi:1 FC19{ BC20{ BC9}}}


 S261C3 ::~S261C3(){ note_dtor("S261C3", this);}
void  S261C3 ::v112(){vfunc_called(this, "_ZN6S261C34v112Ev");}
void  S261C3 ::v113(){vfunc_called(this, "_ZN6S261C34v113Ev");}
void  S261C3 ::v114(){vfunc_called(this, "_ZN6S261C34v114Ev");}
void  S261C3 ::v115(){vfunc_called(this, "_ZN6S261C34v115Ev");}
S261C3 ::S261C3(){ note_ctor("S261C3", this);} // tgen

static void Test_S261C3()
{
  extern Class_Descriptor cd_S261C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,56)];
    init_test(&cd_S261C3, buf);
    S261C3 *dp, &lv = *(dp=new (buf) S261C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,220), "sizeof(S261C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S261C3)");
    check_base_class_offset(lv, (S261C6*)(S261C5*)(S261C4*), 0, "S261C3");
    check_base_class_offset(lv, (S261C5*)(S261C4*), 0, "S261C3");
    check_base_class_offset(lv, (S261C4*), 0, "S261C3");
    check_field_offset(lv, s261c3f0, ABISELECT(268,196), "S261C3.s261c3f0");
    set_bf_and_test(lv, s261c3f1, ABISELECT(276,204), 0, 1, 1, "S261C3");
    check_field_offset(lv, s261c3f2, ABISELECT(280,208), "S261C3.s261c3f2");
    test_class_info(&lv, &cd_S261C3);
    dp->~S261C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS261C3(Test_S261C3, "S261C3", ABISELECT(296,220));

#else // __cplusplus

extern void _ZN6S261C3C1Ev();
extern void _ZN6S261C3D1Ev();
Name_Map name_map_S261C3[] = {
  NSPAIR(_ZN6S261C3C1Ev),
  NSPAIR(_ZN6S261C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S261C6;
extern VTBL_ENTRY _ZTI6S261C6[];
extern  VTBL_ENTRY _ZTV6S261C6[];
extern Class_Descriptor cd_S261C5;
extern VTBL_ENTRY _ZTI6S261C5[];
extern  VTBL_ENTRY _ZTV6S261C5[];
extern Class_Descriptor cd_S261C4;
extern VTBL_ENTRY _ZTI6S261C4[];
extern  VTBL_ENTRY _ZTV6S261C4[];
static Base_Class bases_S261C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S261C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S261C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S261C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S261C3[];
extern void _ZN6S261C3D1Ev();
extern void _ZN6S261C3D0Ev();
extern void _ZN6S261C62v6Ev();
extern void _ZN6S261C62v7Ev();
extern void _ZN6S261C62v8Ev();
extern void _ZN6S261C62v9Ev();
extern void _ZN6S261C63v10Ev();
extern void _ZN6S261C63v11Ev();
extern void _ZN6S261C63v12Ev();
extern void _ZN6S261C63v13Ev();
extern void _ZN6S261C63v14Ev();
extern void _ZN6S261C63v15Ev();
extern void _ZN6S261C63v16Ev();
extern void _ZN6S261C63v17Ev();
extern void _ZN6S261C63v18Ev();
extern void _ZN6S261C63v19Ev();
extern void _ZN6S261C63v20Ev();
extern void _ZN6S261C63v21Ev();
extern void _ZN6S261C63v22Ev();
extern void _ZN6S261C63v23Ev();
extern void _ZN6S261C63v24Ev();
extern void _ZN6S261C63v25Ev();
extern void _ZN6S261C63v26Ev();
extern void _ZN6S261C63v27Ev();
extern void _ZN6S261C63v28Ev();
extern void _ZN6S261C63v29Ev();
extern void _ZN6S261C63v30Ev();
extern void _ZN6S261C63v31Ev();
extern void _ZN6S261C63v32Ev();
extern void _ZN6S261C63v33Ev();
extern void _ZN6S261C63v34Ev();
extern void _ZN6S261C63v35Ev();
extern void _ZN6S261C63v36Ev();
extern void _ZN6S261C63v37Ev();
extern void _ZN6S261C63v38Ev();
extern void _ZN6S261C63v39Ev();
extern void _ZN6S261C63v40Ev();
extern void _ZN6S261C63v41Ev();
extern void _ZN6S261C63v42Ev();
extern void _ZN6S261C63v43Ev();
extern void _ZN6S261C63v44Ev();
extern void _ZN6S261C63v45Ev();
extern void _ZN6S261C63v46Ev();
extern void _ZN6S261C63v47Ev();
extern void _ZN6S261C63v48Ev();
extern void _ZN6S261C63v49Ev();
extern void _ZN6S261C63v50Ev();
extern void _ZN6S261C63v51Ev();
extern void _ZN6S261C63v52Ev();
extern void _ZN6S261C63v53Ev();
extern void _ZN6S261C63v54Ev();
extern void _ZN6S261C63v55Ev();
extern void _ZN6S261C63v56Ev();
extern void _ZN6S261C63v57Ev();
extern void _ZN6S261C63v58Ev();
extern void _ZN6S261C63v59Ev();
extern void _ZN6S261C63v60Ev();
extern void _ZN6S261C63v61Ev();
extern void _ZN6S261C63v62Ev();
extern void _ZN6S261C63v63Ev();
extern void _ZN6S261C63v64Ev();
extern void _ZN6S261C63v65Ev();
extern void _ZN6S261C63v66Ev();
extern void _ZN6S261C63v67Ev();
extern void _ZN6S261C63v68Ev();
extern void _ZN6S261C63v69Ev();
extern void _ZN6S261C53v70Ev();
extern void _ZN6S261C53v71Ev();
extern void _ZN6S261C53v72Ev();
extern void _ZN6S261C53v73Ev();
extern void _ZN6S261C53v74Ev();
extern void _ZN6S261C53v75Ev();
extern void _ZN6S261C53v76Ev();
extern void _ZN6S261C53v77Ev();
extern void _ZN6S261C53v78Ev();
extern void _ZN6S261C53v79Ev();
extern void _ZN6S261C53v80Ev();
extern void _ZN6S261C53v81Ev();
extern void _ZN6S261C53v82Ev();
extern void _ZN6S261C53v83Ev();
extern void _ZN6S261C53v84Ev();
extern void _ZN6S261C53v85Ev();
extern void _ZN6S261C53v86Ev();
extern void _ZN6S261C53v87Ev();
extern void _ZN6S261C53v88Ev();
extern void _ZN6S261C53v89Ev();
extern void _ZN6S261C53v90Ev();
extern void _ZN6S261C53v91Ev();
extern void _ZN6S261C43v92Ev();
extern void _ZN6S261C43v93Ev();
extern void _ZN6S261C43v94Ev();
extern void _ZN6S261C43v95Ev();
extern void _ZN6S261C43v96Ev();
extern void _ZN6S261C43v97Ev();
extern void _ZN6S261C43v98Ev();
extern void _ZN6S261C43v99Ev();
extern void _ZN6S261C44v100Ev();
extern void _ZN6S261C44v101Ev();
extern void _ZN6S261C44v102Ev();
extern void _ZN6S261C44v103Ev();
extern void _ZN6S261C44v104Ev();
extern void _ZN6S261C44v105Ev();
extern void _ZN6S261C44v106Ev();
extern void _ZN6S261C44v107Ev();
extern void _ZN6S261C44v108Ev();
extern void _ZN6S261C44v109Ev();
extern void _ZN6S261C44v110Ev();
extern void _ZN6S261C44v111Ev();
extern void _ZN6S261C34v112Ev();
extern void _ZN6S261C34v113Ev();
extern void _ZN6S261C34v114Ev();
extern void _ZN6S261C34v115Ev();
static  VTBL_ENTRY vtc_S261C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S261C3[0]),
  (VTBL_ENTRY)&_ZN6S261C3D1Ev,
  (VTBL_ENTRY)&_ZN6S261C3D0Ev,
  (VTBL_ENTRY)&_ZN6S261C62v6Ev,
  (VTBL_ENTRY)&_ZN6S261C62v7Ev,
  (VTBL_ENTRY)&_ZN6S261C62v8Ev,
  (VTBL_ENTRY)&_ZN6S261C62v9Ev,
  (VTBL_ENTRY)&_ZN6S261C63v10Ev,
  (VTBL_ENTRY)&_ZN6S261C63v11Ev,
  (VTBL_ENTRY)&_ZN6S261C63v12Ev,
  (VTBL_ENTRY)&_ZN6S261C63v13Ev,
  (VTBL_ENTRY)&_ZN6S261C63v14Ev,
  (VTBL_ENTRY)&_ZN6S261C63v15Ev,
  (VTBL_ENTRY)&_ZN6S261C63v16Ev,
  (VTBL_ENTRY)&_ZN6S261C63v17Ev,
  (VTBL_ENTRY)&_ZN6S261C63v18Ev,
  (VTBL_ENTRY)&_ZN6S261C63v19Ev,
  (VTBL_ENTRY)&_ZN6S261C63v20Ev,
  (VTBL_ENTRY)&_ZN6S261C63v21Ev,
  (VTBL_ENTRY)&_ZN6S261C63v22Ev,
  (VTBL_ENTRY)&_ZN6S261C63v23Ev,
  (VTBL_ENTRY)&_ZN6S261C63v24Ev,
  (VTBL_ENTRY)&_ZN6S261C63v25Ev,
  (VTBL_ENTRY)&_ZN6S261C63v26Ev,
  (VTBL_ENTRY)&_ZN6S261C63v27Ev,
  (VTBL_ENTRY)&_ZN6S261C63v28Ev,
  (VTBL_ENTRY)&_ZN6S261C63v29Ev,
  (VTBL_ENTRY)&_ZN6S261C63v30Ev,
  (VTBL_ENTRY)&_ZN6S261C63v31Ev,
  (VTBL_ENTRY)&_ZN6S261C63v32Ev,
  (VTBL_ENTRY)&_ZN6S261C63v33Ev,
  (VTBL_ENTRY)&_ZN6S261C63v34Ev,
  (VTBL_ENTRY)&_ZN6S261C63v35Ev,
  (VTBL_ENTRY)&_ZN6S261C63v36Ev,
  (VTBL_ENTRY)&_ZN6S261C63v37Ev,
  (VTBL_ENTRY)&_ZN6S261C63v38Ev,
  (VTBL_ENTRY)&_ZN6S261C63v39Ev,
  (VTBL_ENTRY)&_ZN6S261C63v40Ev,
  (VTBL_ENTRY)&_ZN6S261C63v41Ev,
  (VTBL_ENTRY)&_ZN6S261C63v42Ev,
  (VTBL_ENTRY)&_ZN6S261C63v43Ev,
  (VTBL_ENTRY)&_ZN6S261C63v44Ev,
  (VTBL_ENTRY)&_ZN6S261C63v45Ev,
  (VTBL_ENTRY)&_ZN6S261C63v46Ev,
  (VTBL_ENTRY)&_ZN6S261C63v47Ev,
  (VTBL_ENTRY)&_ZN6S261C63v48Ev,
  (VTBL_ENTRY)&_ZN6S261C63v49Ev,
  (VTBL_ENTRY)&_ZN6S261C63v50Ev,
  (VTBL_ENTRY)&_ZN6S261C63v51Ev,
  (VTBL_ENTRY)&_ZN6S261C63v52Ev,
  (VTBL_ENTRY)&_ZN6S261C63v53Ev,
  (VTBL_ENTRY)&_ZN6S261C63v54Ev,
  (VTBL_ENTRY)&_ZN6S261C63v55Ev,
  (VTBL_ENTRY)&_ZN6S261C63v56Ev,
  (VTBL_ENTRY)&_ZN6S261C63v57Ev,
  (VTBL_ENTRY)&_ZN6S261C63v58Ev,
  (VTBL_ENTRY)&_ZN6S261C63v59Ev,
  (VTBL_ENTRY)&_ZN6S261C63v60Ev,
  (VTBL_ENTRY)&_ZN6S261C63v61Ev,
  (VTBL_ENTRY)&_ZN6S261C63v62Ev,
  (VTBL_ENTRY)&_ZN6S261C63v63Ev,
  (VTBL_ENTRY)&_ZN6S261C63v64Ev,
  (VTBL_ENTRY)&_ZN6S261C63v65Ev,
  (VTBL_ENTRY)&_ZN6S261C63v66Ev,
  (VTBL_ENTRY)&_ZN6S261C63v67Ev,
  (VTBL_ENTRY)&_ZN6S261C63v68Ev,
  (VTBL_ENTRY)&_ZN6S261C63v69Ev,
  (VTBL_ENTRY)&_ZN6S261C53v70Ev,
  (VTBL_ENTRY)&_ZN6S261C53v71Ev,
  (VTBL_ENTRY)&_ZN6S261C53v72Ev,
  (VTBL_ENTRY)&_ZN6S261C53v73Ev,
  (VTBL_ENTRY)&_ZN6S261C53v74Ev,
  (VTBL_ENTRY)&_ZN6S261C53v75Ev,
  (VTBL_ENTRY)&_ZN6S261C53v76Ev,
  (VTBL_ENTRY)&_ZN6S261C53v77Ev,
  (VTBL_ENTRY)&_ZN6S261C53v78Ev,
  (VTBL_ENTRY)&_ZN6S261C53v79Ev,
  (VTBL_ENTRY)&_ZN6S261C53v80Ev,
  (VTBL_ENTRY)&_ZN6S261C53v81Ev,
  (VTBL_ENTRY)&_ZN6S261C53v82Ev,
  (VTBL_ENTRY)&_ZN6S261C53v83Ev,
  (VTBL_ENTRY)&_ZN6S261C53v84Ev,
  (VTBL_ENTRY)&_ZN6S261C53v85Ev,
  (VTBL_ENTRY)&_ZN6S261C53v86Ev,
  (VTBL_ENTRY)&_ZN6S261C53v87Ev,
  (VTBL_ENTRY)&_ZN6S261C53v88Ev,
  (VTBL_ENTRY)&_ZN6S261C53v89Ev,
  (VTBL_ENTRY)&_ZN6S261C53v90Ev,
  (VTBL_ENTRY)&_ZN6S261C53v91Ev,
  (VTBL_ENTRY)&_ZN6S261C43v92Ev,
  (VTBL_ENTRY)&_ZN6S261C43v93Ev,
  (VTBL_ENTRY)&_ZN6S261C43v94Ev,
  (VTBL_ENTRY)&_ZN6S261C43v95Ev,
  (VTBL_ENTRY)&_ZN6S261C43v96Ev,
  (VTBL_ENTRY)&_ZN6S261C43v97Ev,
  (VTBL_ENTRY)&_ZN6S261C43v98Ev,
  (VTBL_ENTRY)&_ZN6S261C43v99Ev,
  (VTBL_ENTRY)&_ZN6S261C44v100Ev,
  (VTBL_ENTRY)&_ZN6S261C44v101Ev,
  (VTBL_ENTRY)&_ZN6S261C44v102Ev,
  (VTBL_ENTRY)&_ZN6S261C44v103Ev,
  (VTBL_ENTRY)&_ZN6S261C44v104Ev,
  (VTBL_ENTRY)&_ZN6S261C44v105Ev,
  (VTBL_ENTRY)&_ZN6S261C44v106Ev,
  (VTBL_ENTRY)&_ZN6S261C44v107Ev,
  (VTBL_ENTRY)&_ZN6S261C44v108Ev,
  (VTBL_ENTRY)&_ZN6S261C44v109Ev,
  (VTBL_ENTRY)&_ZN6S261C44v110Ev,
  (VTBL_ENTRY)&_ZN6S261C44v111Ev,
  (VTBL_ENTRY)&_ZN6S261C34v112Ev,
  (VTBL_ENTRY)&_ZN6S261C34v113Ev,
  (VTBL_ENTRY)&_ZN6S261C34v114Ev,
  (VTBL_ENTRY)&_ZN6S261C34v115Ev,
};
extern VTBL_ENTRY _ZTI6S261C3[];
extern  VTBL_ENTRY _ZTV6S261C3[];
Class_Descriptor cd_S261C3 = {  "S261C3", // class name
  bases_S261C3, 3,
  &(vtc_S261C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,220), // object size
  NSPAIRA(_ZTI6S261C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S261C3),114, //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  S261C2  : S261C3 {
  ::S287C19 s261c2f0;
  unsigned int s261c2f1:1;
  virtual  ~S261C2(); // _ZN6S261C2D1Ev
  virtual void  v116(); // _ZN6S261C24v116Ev
  virtual void  v117(); // _ZN6S261C24v117Ev
  virtual void  v118(); // _ZN6S261C24v118Ev
  virtual void  v119(); // _ZN6S261C24v119Ev
  virtual void  v120(); // _ZN6S261C24v120Ev
  virtual void  v121(); // _ZN6S261C24v121Ev
  virtual void  v122(); // _ZN6S261C24v122Ev
  S261C2(); // tgen
};
//SIG(-1 S261C2) C1{ BC2{ BC3{ BC4{ BC5{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 Fi[2] Fp Fi[2] FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} FC7 FC11{ m} FC7 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 Fi:1 Fi:1 Fi:1 FC12{ BC13{ BC10}} FC14{ BC15{ BC10}} FC16{ BC17{ BC10}} FC18{ BC19{ BC10}} Fi[3]} vd v114 v115 v116 v117 FC6 Fi:1 FC20{ BC21{ BC10}}} vd v1 v2 v3 v4 v5 v6 v7 FC22{ BC23{ BC10}} Fi:1}


 S261C2 ::~S261C2(){ note_dtor("S261C2", this);}
void  S261C2 ::v116(){vfunc_called(this, "_ZN6S261C24v116Ev");}
void  S261C2 ::v117(){vfunc_called(this, "_ZN6S261C24v117Ev");}
void  S261C2 ::v118(){vfunc_called(this, "_ZN6S261C24v118Ev");}
void  S261C2 ::v119(){vfunc_called(this, "_ZN6S261C24v119Ev");}
void  S261C2 ::v120(){vfunc_called(this, "_ZN6S261C24v120Ev");}
void  S261C2 ::v121(){vfunc_called(this, "_ZN6S261C24v121Ev");}
void  S261C2 ::v122(){vfunc_called(this, "_ZN6S261C24v122Ev");}
S261C2 ::S261C2(){ note_ctor("S261C2", this);} // tgen

static void Test_S261C2()
{
  extern Class_Descriptor cd_S261C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(41,60)];
    init_test(&cd_S261C2, buf);
    S261C2 *dp, &lv = *(dp=new (buf) S261C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,236), "sizeof(S261C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S261C2)");
    check_base_class_offset(lv, (S261C6*)(S261C5*)(S261C4*)(S261C3*), 0, "S261C2");
    check_base_class_offset(lv, (S261C5*)(S261C4*)(S261C3*), 0, "S261C2");
    check_base_class_offset(lv, (S261C4*)(S261C3*), 0, "S261C2");
    check_base_class_offset(lv, (S261C3*), 0, "S261C2");
    check_field_offset(lv, s261c2f0, ABISELECT(296,220), "S261C2.s261c2f0");
    set_bf_and_test(lv, s261c2f1, ABISELECT(312,232), 0, 1, 1, "S261C2");
    test_class_info(&lv, &cd_S261C2);
    dp->~S261C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS261C2(Test_S261C2, "S261C2", ABISELECT(320,236));

#else // __cplusplus

extern void _ZN6S261C2C1Ev();
extern void _ZN6S261C2D1Ev();
Name_Map name_map_S261C2[] = {
  NSPAIR(_ZN6S261C2C1Ev),
  NSPAIR(_ZN6S261C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S261C6;
extern VTBL_ENTRY _ZTI6S261C6[];
extern  VTBL_ENTRY _ZTV6S261C6[];
extern Class_Descriptor cd_S261C5;
extern VTBL_ENTRY _ZTI6S261C5[];
extern  VTBL_ENTRY _ZTV6S261C5[];
extern Class_Descriptor cd_S261C4;
extern VTBL_ENTRY _ZTI6S261C4[];
extern  VTBL_ENTRY _ZTV6S261C4[];
extern Class_Descriptor cd_S261C3;
extern VTBL_ENTRY _ZTI6S261C3[];
extern  VTBL_ENTRY _ZTV6S261C3[];
static Base_Class bases_S261C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S261C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S261C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S261C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S261C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S261C2[];
extern void _ZN6S261C2D1Ev();
extern void _ZN6S261C2D0Ev();
extern void _ZN6S261C62v6Ev();
extern void _ZN6S261C62v7Ev();
extern void _ZN6S261C62v8Ev();
extern void _ZN6S261C62v9Ev();
extern void _ZN6S261C63v10Ev();
extern void _ZN6S261C63v11Ev();
extern void _ZN6S261C63v12Ev();
extern void _ZN6S261C63v13Ev();
extern void _ZN6S261C63v14Ev();
extern void _ZN6S261C63v15Ev();
extern void _ZN6S261C63v16Ev();
extern void _ZN6S261C63v17Ev();
extern void _ZN6S261C63v18Ev();
extern void _ZN6S261C63v19Ev();
extern void _ZN6S261C63v20Ev();
extern void _ZN6S261C63v21Ev();
extern void _ZN6S261C63v22Ev();
extern void _ZN6S261C63v23Ev();
extern void _ZN6S261C63v24Ev();
extern void _ZN6S261C63v25Ev();
extern void _ZN6S261C63v26Ev();
extern void _ZN6S261C63v27Ev();
extern void _ZN6S261C63v28Ev();
extern void _ZN6S261C63v29Ev();
extern void _ZN6S261C63v30Ev();
extern void _ZN6S261C63v31Ev();
extern void _ZN6S261C63v32Ev();
extern void _ZN6S261C63v33Ev();
extern void _ZN6S261C63v34Ev();
extern void _ZN6S261C63v35Ev();
extern void _ZN6S261C63v36Ev();
extern void _ZN6S261C63v37Ev();
extern void _ZN6S261C63v38Ev();
extern void _ZN6S261C63v39Ev();
extern void _ZN6S261C63v40Ev();
extern void _ZN6S261C63v41Ev();
extern void _ZN6S261C63v42Ev();
extern void _ZN6S261C63v43Ev();
extern void _ZN6S261C63v44Ev();
extern void _ZN6S261C63v45Ev();
extern void _ZN6S261C63v46Ev();
extern void _ZN6S261C63v47Ev();
extern void _ZN6S261C63v48Ev();
extern void _ZN6S261C63v49Ev();
extern void _ZN6S261C63v50Ev();
extern void _ZN6S261C63v51Ev();
extern void _ZN6S261C63v52Ev();
extern void _ZN6S261C63v53Ev();
extern void _ZN6S261C63v54Ev();
extern void _ZN6S261C63v55Ev();
extern void _ZN6S261C63v56Ev();
extern void _ZN6S261C63v57Ev();
extern void _ZN6S261C63v58Ev();
extern void _ZN6S261C63v59Ev();
extern void _ZN6S261C63v60Ev();
extern void _ZN6S261C63v61Ev();
extern void _ZN6S261C63v62Ev();
extern void _ZN6S261C63v63Ev();
extern void _ZN6S261C63v64Ev();
extern void _ZN6S261C63v65Ev();
extern void _ZN6S261C63v66Ev();
extern void _ZN6S261C63v67Ev();
extern void _ZN6S261C63v68Ev();
extern void _ZN6S261C63v69Ev();
extern void _ZN6S261C53v70Ev();
extern void _ZN6S261C53v71Ev();
extern void _ZN6S261C53v72Ev();
extern void _ZN6S261C53v73Ev();
extern void _ZN6S261C53v74Ev();
extern void _ZN6S261C53v75Ev();
extern void _ZN6S261C53v76Ev();
extern void _ZN6S261C53v77Ev();
extern void _ZN6S261C53v78Ev();
extern void _ZN6S261C53v79Ev();
extern void _ZN6S261C53v80Ev();
extern void _ZN6S261C53v81Ev();
extern void _ZN6S261C53v82Ev();
extern void _ZN6S261C53v83Ev();
extern void _ZN6S261C53v84Ev();
extern void _ZN6S261C53v85Ev();
extern void _ZN6S261C53v86Ev();
extern void _ZN6S261C53v87Ev();
extern void _ZN6S261C53v88Ev();
extern void _ZN6S261C53v89Ev();
extern void _ZN6S261C53v90Ev();
extern void _ZN6S261C53v91Ev();
extern void _ZN6S261C43v92Ev();
extern void _ZN6S261C43v93Ev();
extern void _ZN6S261C43v94Ev();
extern void _ZN6S261C43v95Ev();
extern void _ZN6S261C43v96Ev();
extern void _ZN6S261C43v97Ev();
extern void _ZN6S261C43v98Ev();
extern void _ZN6S261C43v99Ev();
extern void _ZN6S261C44v100Ev();
extern void _ZN6S261C44v101Ev();
extern void _ZN6S261C44v102Ev();
extern void _ZN6S261C44v103Ev();
extern void _ZN6S261C44v104Ev();
extern void _ZN6S261C44v105Ev();
extern void _ZN6S261C44v106Ev();
extern void _ZN6S261C44v107Ev();
extern void _ZN6S261C44v108Ev();
extern void _ZN6S261C44v109Ev();
extern void _ZN6S261C44v110Ev();
extern void _ZN6S261C44v111Ev();
extern void _ZN6S261C34v112Ev();
extern void _ZN6S261C34v113Ev();
extern void _ZN6S261C34v114Ev();
extern void _ZN6S261C34v115Ev();
extern void _ZN6S261C24v116Ev();
extern void _ZN6S261C24v117Ev();
extern void _ZN6S261C24v118Ev();
extern void _ZN6S261C24v119Ev();
extern void _ZN6S261C24v120Ev();
extern void _ZN6S261C24v121Ev();
extern void _ZN6S261C24v122Ev();
static  VTBL_ENTRY vtc_S261C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S261C2[0]),
  (VTBL_ENTRY)&_ZN6S261C2D1Ev,
  (VTBL_ENTRY)&_ZN6S261C2D0Ev,
  (VTBL_ENTRY)&_ZN6S261C62v6Ev,
  (VTBL_ENTRY)&_ZN6S261C62v7Ev,
  (VTBL_ENTRY)&_ZN6S261C62v8Ev,
  (VTBL_ENTRY)&_ZN6S261C62v9Ev,
  (VTBL_ENTRY)&_ZN6S261C63v10Ev,
  (VTBL_ENTRY)&_ZN6S261C63v11Ev,
  (VTBL_ENTRY)&_ZN6S261C63v12Ev,
  (VTBL_ENTRY)&_ZN6S261C63v13Ev,
  (VTBL_ENTRY)&_ZN6S261C63v14Ev,
  (VTBL_ENTRY)&_ZN6S261C63v15Ev,
  (VTBL_ENTRY)&_ZN6S261C63v16Ev,
  (VTBL_ENTRY)&_ZN6S261C63v17Ev,
  (VTBL_ENTRY)&_ZN6S261C63v18Ev,
  (VTBL_ENTRY)&_ZN6S261C63v19Ev,
  (VTBL_ENTRY)&_ZN6S261C63v20Ev,
  (VTBL_ENTRY)&_ZN6S261C63v21Ev,
  (VTBL_ENTRY)&_ZN6S261C63v22Ev,
  (VTBL_ENTRY)&_ZN6S261C63v23Ev,
  (VTBL_ENTRY)&_ZN6S261C63v24Ev,
  (VTBL_ENTRY)&_ZN6S261C63v25Ev,
  (VTBL_ENTRY)&_ZN6S261C63v26Ev,
  (VTBL_ENTRY)&_ZN6S261C63v27Ev,
  (VTBL_ENTRY)&_ZN6S261C63v28Ev,
  (VTBL_ENTRY)&_ZN6S261C63v29Ev,
  (VTBL_ENTRY)&_ZN6S261C63v30Ev,
  (VTBL_ENTRY)&_ZN6S261C63v31Ev,
  (VTBL_ENTRY)&_ZN6S261C63v32Ev,
  (VTBL_ENTRY)&_ZN6S261C63v33Ev,
  (VTBL_ENTRY)&_ZN6S261C63v34Ev,
  (VTBL_ENTRY)&_ZN6S261C63v35Ev,
  (VTBL_ENTRY)&_ZN6S261C63v36Ev,
  (VTBL_ENTRY)&_ZN6S261C63v37Ev,
  (VTBL_ENTRY)&_ZN6S261C63v38Ev,
  (VTBL_ENTRY)&_ZN6S261C63v39Ev,
  (VTBL_ENTRY)&_ZN6S261C63v40Ev,
  (VTBL_ENTRY)&_ZN6S261C63v41Ev,
  (VTBL_ENTRY)&_ZN6S261C63v42Ev,
  (VTBL_ENTRY)&_ZN6S261C63v43Ev,
  (VTBL_ENTRY)&_ZN6S261C63v44Ev,
  (VTBL_ENTRY)&_ZN6S261C63v45Ev,
  (VTBL_ENTRY)&_ZN6S261C63v46Ev,
  (VTBL_ENTRY)&_ZN6S261C63v47Ev,
  (VTBL_ENTRY)&_ZN6S261C63v48Ev,
  (VTBL_ENTRY)&_ZN6S261C63v49Ev,
  (VTBL_ENTRY)&_ZN6S261C63v50Ev,
  (VTBL_ENTRY)&_ZN6S261C63v51Ev,
  (VTBL_ENTRY)&_ZN6S261C63v52Ev,
  (VTBL_ENTRY)&_ZN6S261C63v53Ev,
  (VTBL_ENTRY)&_ZN6S261C63v54Ev,
  (VTBL_ENTRY)&_ZN6S261C63v55Ev,
  (VTBL_ENTRY)&_ZN6S261C63v56Ev,
  (VTBL_ENTRY)&_ZN6S261C63v57Ev,
  (VTBL_ENTRY)&_ZN6S261C63v58Ev,
  (VTBL_ENTRY)&_ZN6S261C63v59Ev,
  (VTBL_ENTRY)&_ZN6S261C63v60Ev,
  (VTBL_ENTRY)&_ZN6S261C63v61Ev,
  (VTBL_ENTRY)&_ZN6S261C63v62Ev,
  (VTBL_ENTRY)&_ZN6S261C63v63Ev,
  (VTBL_ENTRY)&_ZN6S261C63v64Ev,
  (VTBL_ENTRY)&_ZN6S261C63v65Ev,
  (VTBL_ENTRY)&_ZN6S261C63v66Ev,
  (VTBL_ENTRY)&_ZN6S261C63v67Ev,
  (VTBL_ENTRY)&_ZN6S261C63v68Ev,
  (VTBL_ENTRY)&_ZN6S261C63v69Ev,
  (VTBL_ENTRY)&_ZN6S261C53v70Ev,
  (VTBL_ENTRY)&_ZN6S261C53v71Ev,
  (VTBL_ENTRY)&_ZN6S261C53v72Ev,
  (VTBL_ENTRY)&_ZN6S261C53v73Ev,
  (VTBL_ENTRY)&_ZN6S261C53v74Ev,
  (VTBL_ENTRY)&_ZN6S261C53v75Ev,
  (VTBL_ENTRY)&_ZN6S261C53v76Ev,
  (VTBL_ENTRY)&_ZN6S261C53v77Ev,
  (VTBL_ENTRY)&_ZN6S261C53v78Ev,
  (VTBL_ENTRY)&_ZN6S261C53v79Ev,
  (VTBL_ENTRY)&_ZN6S261C53v80Ev,
  (VTBL_ENTRY)&_ZN6S261C53v81Ev,
  (VTBL_ENTRY)&_ZN6S261C53v82Ev,
  (VTBL_ENTRY)&_ZN6S261C53v83Ev,
  (VTBL_ENTRY)&_ZN6S261C53v84Ev,
  (VTBL_ENTRY)&_ZN6S261C53v85Ev,
  (VTBL_ENTRY)&_ZN6S261C53v86Ev,
  (VTBL_ENTRY)&_ZN6S261C53v87Ev,
  (VTBL_ENTRY)&_ZN6S261C53v88Ev,
  (VTBL_ENTRY)&_ZN6S261C53v89Ev,
  (VTBL_ENTRY)&_ZN6S261C53v90Ev,
  (VTBL_ENTRY)&_ZN6S261C53v91Ev,
  (VTBL_ENTRY)&_ZN6S261C43v92Ev,
  (VTBL_ENTRY)&_ZN6S261C43v93Ev,
  (VTBL_ENTRY)&_ZN6S261C43v94Ev,
  (VTBL_ENTRY)&_ZN6S261C43v95Ev,
  (VTBL_ENTRY)&_ZN6S261C43v96Ev,
  (VTBL_ENTRY)&_ZN6S261C43v97Ev,
  (VTBL_ENTRY)&_ZN6S261C43v98Ev,
  (VTBL_ENTRY)&_ZN6S261C43v99Ev,
  (VTBL_ENTRY)&_ZN6S261C44v100Ev,
  (VTBL_ENTRY)&_ZN6S261C44v101Ev,
  (VTBL_ENTRY)&_ZN6S261C44v102Ev,
  (VTBL_ENTRY)&_ZN6S261C44v103Ev,
  (VTBL_ENTRY)&_ZN6S261C44v104Ev,
  (VTBL_ENTRY)&_ZN6S261C44v105Ev,
  (VTBL_ENTRY)&_ZN6S261C44v106Ev,
  (VTBL_ENTRY)&_ZN6S261C44v107Ev,
  (VTBL_ENTRY)&_ZN6S261C44v108Ev,
  (VTBL_ENTRY)&_ZN6S261C44v109Ev,
  (VTBL_ENTRY)&_ZN6S261C44v110Ev,
  (VTBL_ENTRY)&_ZN6S261C44v111Ev,
  (VTBL_ENTRY)&_ZN6S261C34v112Ev,
  (VTBL_ENTRY)&_ZN6S261C34v113Ev,
  (VTBL_ENTRY)&_ZN6S261C34v114Ev,
  (VTBL_ENTRY)&_ZN6S261C34v115Ev,
  (VTBL_ENTRY)&_ZN6S261C24v116Ev,
  (VTBL_ENTRY)&_ZN6S261C24v117Ev,
  (VTBL_ENTRY)&_ZN6S261C24v118Ev,
  (VTBL_ENTRY)&_ZN6S261C24v119Ev,
  (VTBL_ENTRY)&_ZN6S261C24v120Ev,
  (VTBL_ENTRY)&_ZN6S261C24v121Ev,
  (VTBL_ENTRY)&_ZN6S261C24v122Ev,
};
extern VTBL_ENTRY _ZTI6S261C2[];
extern  VTBL_ENTRY _ZTV6S261C2[];
Class_Descriptor cd_S261C2 = {  "S261C2", // class name
  bases_S261C2, 4,
  &(vtc_S261C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(320,236), // object size
  NSPAIRA(_ZTI6S261C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S261C2),121, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S261C1  : S261C2 {
  int s261c1f0[4];
  ::S2121C38 s261c1f1;
  int s261c1f2[2];
  ::S3350C13_nt s261c1f3;
  int s261c1f4[6];
  ::S2121C38 s261c1f5;
  int s261c1f6[2];
  ::S3350C13_nt s261c1f7;
  virtual  ~S261C1(); // _ZN6S261C1D1Ev
  virtual void  v1(); // _ZN6S261C12v1Ev
  virtual void  v2(); // _ZN6S261C12v2Ev
  virtual void  v3(); // _ZN6S261C12v3Ev
  virtual void  v4(); // _ZN6S261C12v4Ev
  virtual void  v5(); // _ZN6S261C12v5Ev
  S261C1(); // tgen
};
//SIG(1 S261C1) C1{ BC2{ BC3{ BC4{ BC5{ 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 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 FC7{ m Fi[2]} Fp[2]} vd v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 Fi[2] Fp Fi[2] FC8{ BC9{ BC10{ BC11{ m Fp Fi[2]}}}} FC8 FC12{ m} FC8 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 Fi:1 Fi:1 Fi:1 FC13{ BC14{ BC11}} FC15{ BC16{ BC11}} FC17{ BC18{ BC11}} FC19{ BC20{ BC11}} Fi[3]} vd v112 v113 v114 v115 FC7 Fi:1 FC21{ BC22{ BC11}}} vd v116 v117 v118 v119 v120 v121 v122 FC23{ BC24{ BC11}} Fi:1} vd v1 v2 v3 v4 v5 Fi[4] FC12 Fi[2] FC25{ m Fi[3]} Fi[6] FC12 Fi[2] FC25}


 S261C1 ::~S261C1(){ note_dtor("S261C1", this);}
void  S261C1 ::v1(){vfunc_called(this, "_ZN6S261C12v1Ev");}
void  S261C1 ::v2(){vfunc_called(this, "_ZN6S261C12v2Ev");}
void  S261C1 ::v3(){vfunc_called(this, "_ZN6S261C12v3Ev");}
void  S261C1 ::v4(){vfunc_called(this, "_ZN6S261C12v4Ev");}
void  S261C1 ::v5(){vfunc_called(this, "_ZN6S261C12v5Ev");}
S261C1 ::S261C1(){ note_ctor("S261C1", this);} // tgen

static void Test_S261C1()
{
  extern Class_Descriptor cd_S261C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(52,82)];
    init_test(&cd_S261C1, buf);
    S261C1 *dp, &lv = *(dp=new (buf) S261C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(408,324), "sizeof(S261C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S261C1)");
    check_base_class_offset(lv, (S261C6*)(S261C5*)(S261C4*)(S261C3*)(S261C2*), 0, "S261C1");
    check_base_class_offset(lv, (S261C5*)(S261C4*)(S261C3*)(S261C2*), 0, "S261C1");
    check_base_class_offset(lv, (S261C4*)(S261C3*)(S261C2*), 0, "S261C1");
    check_base_class_offset(lv, (S261C3*)(S261C2*), 0, "S261C1");
    check_base_class_offset(lv, (S261C2*), 0, "S261C1");
    check_field_offset(lv, s261c1f0, ABISELECT(316,236), "S261C1.s261c1f0");
    check_field_offset(lv, s261c1f1, ABISELECT(332,252), "S261C1.s261c1f1");
    check_field_offset(lv, s261c1f2, ABISELECT(336,256), "S261C1.s261c1f2");
    check_field_offset(lv, s261c1f3, ABISELECT(344,264), "S261C1.s261c1f3");
    check_field_offset(lv, s261c1f4, ABISELECT(356,276), "S261C1.s261c1f4");
    check_field_offset(lv, s261c1f5, ABISELECT(380,300), "S261C1.s261c1f5");
    check_field_offset(lv, s261c1f6, ABISELECT(384,304), "S261C1.s261c1f6");
    check_field_offset(lv, s261c1f7, ABISELECT(392,312), "S261C1.s261c1f7");
    test_class_info(&lv, &cd_S261C1);
    dp->~S261C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS261C1(Test_S261C1, "S261C1", ABISELECT(408,324));

#else // __cplusplus

extern void _ZN6S261C1C1Ev();
extern void _ZN6S261C1D1Ev();
Name_Map name_map_S261C1[] = {
  NSPAIR(_ZN6S261C1C1Ev),
  NSPAIR(_ZN6S261C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S261C6;
extern VTBL_ENTRY _ZTI6S261C6[];
extern  VTBL_ENTRY _ZTV6S261C6[];
extern Class_Descriptor cd_S261C5;
extern VTBL_ENTRY _ZTI6S261C5[];
extern  VTBL_ENTRY _ZTV6S261C5[];
extern Class_Descriptor cd_S261C4;
extern VTBL_ENTRY _ZTI6S261C4[];
extern  VTBL_ENTRY _ZTV6S261C4[];
extern Class_Descriptor cd_S261C3;
extern VTBL_ENTRY _ZTI6S261C3[];
extern  VTBL_ENTRY _ZTV6S261C3[];
extern Class_Descriptor cd_S261C2;
extern VTBL_ENTRY _ZTI6S261C2[];
extern  VTBL_ENTRY _ZTV6S261C2[];
static Base_Class bases_S261C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S261C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S261C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S261C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S261C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S261C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S261C1[];
extern void _ZN6S261C1D1Ev();
extern void _ZN6S261C1D0Ev();
extern void _ZN6S261C62v6Ev();
extern void _ZN6S261C62v7Ev();
extern void _ZN6S261C62v8Ev();
extern void _ZN6S261C62v9Ev();
extern void _ZN6S261C63v10Ev();
extern void _ZN6S261C63v11Ev();
extern void _ZN6S261C63v12Ev();
extern void _ZN6S261C63v13Ev();
extern void _ZN6S261C63v14Ev();
extern void _ZN6S261C63v15Ev();
extern void _ZN6S261C63v16Ev();
extern void _ZN6S261C63v17Ev();
extern void _ZN6S261C63v18Ev();
extern void _ZN6S261C63v19Ev();
extern void _ZN6S261C63v20Ev();
extern void _ZN6S261C63v21Ev();
extern void _ZN6S261C63v22Ev();
extern void _ZN6S261C63v23Ev();
extern void _ZN6S261C63v24Ev();
extern void _ZN6S261C63v25Ev();
extern void _ZN6S261C63v26Ev();
extern void _ZN6S261C63v27Ev();
extern void _ZN6S261C63v28Ev();
extern void _ZN6S261C63v29Ev();
extern void _ZN6S261C63v30Ev();
extern void _ZN6S261C63v31Ev();
extern void _ZN6S261C63v32Ev();
extern void _ZN6S261C63v33Ev();
extern void _ZN6S261C63v34Ev();
extern void _ZN6S261C63v35Ev();
extern void _ZN6S261C63v36Ev();
extern void _ZN6S261C63v37Ev();
extern void _ZN6S261C63v38Ev();
extern void _ZN6S261C63v39Ev();
extern void _ZN6S261C63v40Ev();
extern void _ZN6S261C63v41Ev();
extern void _ZN6S261C63v42Ev();
extern void _ZN6S261C63v43Ev();
extern void _ZN6S261C63v44Ev();
extern void _ZN6S261C63v45Ev();
extern void _ZN6S261C63v46Ev();
extern void _ZN6S261C63v47Ev();
extern void _ZN6S261C63v48Ev();
extern void _ZN6S261C63v49Ev();
extern void _ZN6S261C63v50Ev();
extern void _ZN6S261C63v51Ev();
extern void _ZN6S261C63v52Ev();
extern void _ZN6S261C63v53Ev();
extern void _ZN6S261C63v54Ev();
extern void _ZN6S261C63v55Ev();
extern void _ZN6S261C63v56Ev();
extern void _ZN6S261C63v57Ev();
extern void _ZN6S261C63v58Ev();
extern void _ZN6S261C63v59Ev();
extern void _ZN6S261C63v60Ev();
extern void _ZN6S261C63v61Ev();
extern void _ZN6S261C63v62Ev();
extern void _ZN6S261C63v63Ev();
extern void _ZN6S261C63v64Ev();
extern void _ZN6S261C63v65Ev();
extern void _ZN6S261C63v66Ev();
extern void _ZN6S261C63v67Ev();
extern void _ZN6S261C63v68Ev();
extern void _ZN6S261C63v69Ev();
extern void _ZN6S261C53v70Ev();
extern void _ZN6S261C53v71Ev();
extern void _ZN6S261C53v72Ev();
extern void _ZN6S261C53v73Ev();
extern void _ZN6S261C53v74Ev();
extern void _ZN6S261C53v75Ev();
extern void _ZN6S261C53v76Ev();
extern void _ZN6S261C53v77Ev();
extern void _ZN6S261C53v78Ev();
extern void _ZN6S261C53v79Ev();
extern void _ZN6S261C53v80Ev();
extern void _ZN6S261C53v81Ev();
extern void _ZN6S261C53v82Ev();
extern void _ZN6S261C53v83Ev();
extern void _ZN6S261C53v84Ev();
extern void _ZN6S261C53v85Ev();
extern void _ZN6S261C53v86Ev();
extern void _ZN6S261C53v87Ev();
extern void _ZN6S261C53v88Ev();
extern void _ZN6S261C53v89Ev();
extern void _ZN6S261C53v90Ev();
extern void _ZN6S261C53v91Ev();
extern void _ZN6S261C43v92Ev();
extern void _ZN6S261C43v93Ev();
extern void _ZN6S261C43v94Ev();
extern void _ZN6S261C43v95Ev();
extern void _ZN6S261C43v96Ev();
extern void _ZN6S261C43v97Ev();
extern void _ZN6S261C43v98Ev();
extern void _ZN6S261C43v99Ev();
extern void _ZN6S261C44v100Ev();
extern void _ZN6S261C44v101Ev();
extern void _ZN6S261C44v102Ev();
extern void _ZN6S261C44v103Ev();
extern void _ZN6S261C44v104Ev();
extern void _ZN6S261C44v105Ev();
extern void _ZN6S261C44v106Ev();
extern void _ZN6S261C44v107Ev();
extern void _ZN6S261C44v108Ev();
extern void _ZN6S261C44v109Ev();
extern void _ZN6S261C44v110Ev();
extern void _ZN6S261C44v111Ev();
extern void _ZN6S261C34v112Ev();
extern void _ZN6S261C34v113Ev();
extern void _ZN6S261C34v114Ev();
extern void _ZN6S261C34v115Ev();
extern void _ZN6S261C24v116Ev();
extern void _ZN6S261C24v117Ev();
extern void _ZN6S261C24v118Ev();
extern void _ZN6S261C24v119Ev();
extern void _ZN6S261C24v120Ev();
extern void _ZN6S261C24v121Ev();
extern void _ZN6S261C24v122Ev();
extern void _ZN6S261C12v1Ev();
extern void _ZN6S261C12v2Ev();
extern void _ZN6S261C12v3Ev();
extern void _ZN6S261C12v4Ev();
extern void _ZN6S261C12v5Ev();
static  VTBL_ENTRY vtc_S261C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S261C1[0]),
  (VTBL_ENTRY)&_ZN6S261C1D1Ev,
  (VTBL_ENTRY)&_ZN6S261C1D0Ev,
  (VTBL_ENTRY)&_ZN6S261C62v6Ev,
  (VTBL_ENTRY)&_ZN6S261C62v7Ev,
  (VTBL_ENTRY)&_ZN6S261C62v8Ev,
  (VTBL_ENTRY)&_ZN6S261C62v9Ev,
  (VTBL_ENTRY)&_ZN6S261C63v10Ev,
  (VTBL_ENTRY)&_ZN6S261C63v11Ev,
  (VTBL_ENTRY)&_ZN6S261C63v12Ev,
  (VTBL_ENTRY)&_ZN6S261C63v13Ev,
  (VTBL_ENTRY)&_ZN6S261C63v14Ev,
  (VTBL_ENTRY)&_ZN6S261C63v15Ev,
  (VTBL_ENTRY)&_ZN6S261C63v16Ev,
  (VTBL_ENTRY)&_ZN6S261C63v17Ev,
  (VTBL_ENTRY)&_ZN6S261C63v18Ev,
  (VTBL_ENTRY)&_ZN6S261C63v19Ev,
  (VTBL_ENTRY)&_ZN6S261C63v20Ev,
  (VTBL_ENTRY)&_ZN6S261C63v21Ev,
  (VTBL_ENTRY)&_ZN6S261C63v22Ev,
  (VTBL_ENTRY)&_ZN6S261C63v23Ev,
  (VTBL_ENTRY)&_ZN6S261C63v24Ev,
  (VTBL_ENTRY)&_ZN6S261C63v25Ev,
  (VTBL_ENTRY)&_ZN6S261C63v26Ev,
  (VTBL_ENTRY)&_ZN6S261C63v27Ev,
  (VTBL_ENTRY)&_ZN6S261C63v28Ev,
  (VTBL_ENTRY)&_ZN6S261C63v29Ev,
  (VTBL_ENTRY)&_ZN6S261C63v30Ev,
  (VTBL_ENTRY)&_ZN6S261C63v31Ev,
  (VTBL_ENTRY)&_ZN6S261C63v32Ev,
  (VTBL_ENTRY)&_ZN6S261C63v33Ev,
  (VTBL_ENTRY)&_ZN6S261C63v34Ev,
  (VTBL_ENTRY)&_ZN6S261C63v35Ev,
  (VTBL_ENTRY)&_ZN6S261C63v36Ev,
  (VTBL_ENTRY)&_ZN6S261C63v37Ev,
  (VTBL_ENTRY)&_ZN6S261C63v38Ev,
  (VTBL_ENTRY)&_ZN6S261C63v39Ev,
  (VTBL_ENTRY)&_ZN6S261C63v40Ev,
  (VTBL_ENTRY)&_ZN6S261C63v41Ev,
  (VTBL_ENTRY)&_ZN6S261C63v42Ev,
  (VTBL_ENTRY)&_ZN6S261C63v43Ev,
  (VTBL_ENTRY)&_ZN6S261C63v44Ev,
  (VTBL_ENTRY)&_ZN6S261C63v45Ev,
  (VTBL_ENTRY)&_ZN6S261C63v46Ev,
  (VTBL_ENTRY)&_ZN6S261C63v47Ev,
  (VTBL_ENTRY)&_ZN6S261C63v48Ev,
  (VTBL_ENTRY)&_ZN6S261C63v49Ev,
  (VTBL_ENTRY)&_ZN6S261C63v50Ev,
  (VTBL_ENTRY)&_ZN6S261C63v51Ev,
  (VTBL_ENTRY)&_ZN6S261C63v52Ev,
  (VTBL_ENTRY)&_ZN6S261C63v53Ev,
  (VTBL_ENTRY)&_ZN6S261C63v54Ev,
  (VTBL_ENTRY)&_ZN6S261C63v55Ev,
  (VTBL_ENTRY)&_ZN6S261C63v56Ev,
  (VTBL_ENTRY)&_ZN6S261C63v57Ev,
  (VTBL_ENTRY)&_ZN6S261C63v58Ev,
  (VTBL_ENTRY)&_ZN6S261C63v59Ev,
  (VTBL_ENTRY)&_ZN6S261C63v60Ev,
  (VTBL_ENTRY)&_ZN6S261C63v61Ev,
  (VTBL_ENTRY)&_ZN6S261C63v62Ev,
  (VTBL_ENTRY)&_ZN6S261C63v63Ev,
  (VTBL_ENTRY)&_ZN6S261C63v64Ev,
  (VTBL_ENTRY)&_ZN6S261C63v65Ev,
  (VTBL_ENTRY)&_ZN6S261C63v66Ev,
  (VTBL_ENTRY)&_ZN6S261C63v67Ev,
  (VTBL_ENTRY)&_ZN6S261C63v68Ev,
  (VTBL_ENTRY)&_ZN6S261C63v69Ev,
  (VTBL_ENTRY)&_ZN6S261C53v70Ev,
  (VTBL_ENTRY)&_ZN6S261C53v71Ev,
  (VTBL_ENTRY)&_ZN6S261C53v72Ev,
  (VTBL_ENTRY)&_ZN6S261C53v73Ev,
  (VTBL_ENTRY)&_ZN6S261C53v74Ev,
  (VTBL_ENTRY)&_ZN6S261C53v75Ev,
  (VTBL_ENTRY)&_ZN6S261C53v76Ev,
  (VTBL_ENTRY)&_ZN6S261C53v77Ev,
  (VTBL_ENTRY)&_ZN6S261C53v78Ev,
  (VTBL_ENTRY)&_ZN6S261C53v79Ev,
  (VTBL_ENTRY)&_ZN6S261C53v80Ev,
  (VTBL_ENTRY)&_ZN6S261C53v81Ev,
  (VTBL_ENTRY)&_ZN6S261C53v82Ev,
  (VTBL_ENTRY)&_ZN6S261C53v83Ev,
  (VTBL_ENTRY)&_ZN6S261C53v84Ev,
  (VTBL_ENTRY)&_ZN6S261C53v85Ev,
  (VTBL_ENTRY)&_ZN6S261C53v86Ev,
  (VTBL_ENTRY)&_ZN6S261C53v87Ev,
  (VTBL_ENTRY)&_ZN6S261C53v88Ev,
  (VTBL_ENTRY)&_ZN6S261C53v89Ev,
  (VTBL_ENTRY)&_ZN6S261C53v90Ev,
  (VTBL_ENTRY)&_ZN6S261C53v91Ev,
  (VTBL_ENTRY)&_ZN6S261C43v92Ev,
  (VTBL_ENTRY)&_ZN6S261C43v93Ev,
  (VTBL_ENTRY)&_ZN6S261C43v94Ev,
  (VTBL_ENTRY)&_ZN6S261C43v95Ev,
  (VTBL_ENTRY)&_ZN6S261C43v96Ev,
  (VTBL_ENTRY)&_ZN6S261C43v97Ev,
  (VTBL_ENTRY)&_ZN6S261C43v98Ev,
  (VTBL_ENTRY)&_ZN6S261C43v99Ev,
  (VTBL_ENTRY)&_ZN6S261C44v100Ev,
  (VTBL_ENTRY)&_ZN6S261C44v101Ev,
  (VTBL_ENTRY)&_ZN6S261C44v102Ev,
  (VTBL_ENTRY)&_ZN6S261C44v103Ev,
  (VTBL_ENTRY)&_ZN6S261C44v104Ev,
  (VTBL_ENTRY)&_ZN6S261C44v105Ev,
  (VTBL_ENTRY)&_ZN6S261C44v106Ev,
  (VTBL_ENTRY)&_ZN6S261C44v107Ev,
  (VTBL_ENTRY)&_ZN6S261C44v108Ev,
  (VTBL_ENTRY)&_ZN6S261C44v109Ev,
  (VTBL_ENTRY)&_ZN6S261C44v110Ev,
  (VTBL_ENTRY)&_ZN6S261C44v111Ev,
  (VTBL_ENTRY)&_ZN6S261C34v112Ev,
  (VTBL_ENTRY)&_ZN6S261C34v113Ev,
  (VTBL_ENTRY)&_ZN6S261C34v114Ev,
  (VTBL_ENTRY)&_ZN6S261C34v115Ev,
  (VTBL_ENTRY)&_ZN6S261C24v116Ev,
  (VTBL_ENTRY)&_ZN6S261C24v117Ev,
  (VTBL_ENTRY)&_ZN6S261C24v118Ev,
  (VTBL_ENTRY)&_ZN6S261C24v119Ev,
  (VTBL_ENTRY)&_ZN6S261C24v120Ev,
  (VTBL_ENTRY)&_ZN6S261C24v121Ev,
  (VTBL_ENTRY)&_ZN6S261C24v122Ev,
  (VTBL_ENTRY)&_ZN6S261C12v1Ev,
  (VTBL_ENTRY)&_ZN6S261C12v2Ev,
  (VTBL_ENTRY)&_ZN6S261C12v3Ev,
  (VTBL_ENTRY)&_ZN6S261C12v4Ev,
  (VTBL_ENTRY)&_ZN6S261C12v5Ev,
};
extern VTBL_ENTRY _ZTI6S261C1[];
extern  VTBL_ENTRY _ZTV6S261C1[];
Class_Descriptor cd_S261C1 = {  "S261C1", // class name
  bases_S261C1, 5,
  &(vtc_S261C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(408,324), // object size
  NSPAIRA(_ZTI6S261C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S261C1),126, //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  S260C6  {
  int s260c6f0;
  __tsi64 s260c6f1;
  void *s260c6f2[4];
  int s260c6f3[2];
  void *s260c6f4;
  ::S3350C4_nt s260c6f5;
  void *s260c6f6[2];
  virtual  ~S260C6(); // _ZN6S260C6D1Ev
  virtual void  v6(); // _ZN6S260C62v6Ev
  virtual void  v7(); // _ZN6S260C62v7Ev
  virtual void  v8(); // _ZN6S260C62v8Ev
  virtual void  v9(); // _ZN6S260C62v9Ev
  virtual void  v10(); // _ZN6S260C63v10Ev
  virtual void  v11(); // _ZN6S260C63v11Ev
  virtual void  v12(); // _ZN6S260C63v12Ev
  virtual void  v13(); // _ZN6S260C63v13Ev
  virtual void  v14(); // _ZN6S260C63v14Ev
  virtual void  v15(); // _ZN6S260C63v15Ev
  virtual void  v16(); // _ZN6S260C63v16Ev
  virtual void  v17(); // _ZN6S260C63v17Ev
  virtual void  v18(); // _ZN6S260C63v18Ev
  virtual void  v19(); // _ZN6S260C63v19Ev
  virtual void  v20(); // _ZN6S260C63v20Ev
  virtual void  v21(); // _ZN6S260C63v21Ev
  virtual void  v22(); // _ZN6S260C63v22Ev
  virtual void  v23(); // _ZN6S260C63v23Ev
  virtual void  v24(); // _ZN6S260C63v24Ev
  virtual void  v25(); // _ZN6S260C63v25Ev
  virtual void  v26(); // _ZN6S260C63v26Ev
  virtual void  v27(); // _ZN6S260C63v27Ev
  virtual void  v28(); // _ZN6S260C63v28Ev
  virtual void  v29(); // _ZN6S260C63v29Ev
  virtual void  v30(); // _ZN6S260C63v30Ev
  virtual void  v31(); // _ZN6S260C63v31Ev
  virtual void  v32(); // _ZN6S260C63v32Ev
  virtual void  v33(); // _ZN6S260C63v33Ev
  virtual void  v34(); // _ZN6S260C63v34Ev
  virtual void  v35(); // _ZN6S260C63v35Ev
  virtual void  v36(); // _ZN6S260C63v36Ev
  virtual void  v37(); // _ZN6S260C63v37Ev
  virtual void  v38(); // _ZN6S260C63v38Ev
  virtual void  v39(); // _ZN6S260C63v39Ev
  virtual void  v40(); // _ZN6S260C63v40Ev
  virtual void  v41(); // _ZN6S260C63v41Ev
  virtual void  v42(); // _ZN6S260C63v42Ev
  virtual void  v43(); // _ZN6S260C63v43Ev
  virtual void  v44(); // _ZN6S260C63v44Ev
  virtual void  v45(); // _ZN6S260C63v45Ev
  virtual void  v46(); // _ZN6S260C63v46Ev
  virtual void  v47(); // _ZN6S260C63v47Ev
  virtual void  v48(); // _ZN6S260C63v48Ev
  virtual void  v49(); // _ZN6S260C63v49Ev
  virtual void  v50(); // _ZN6S260C63v50Ev
  virtual void  v51(); // _ZN6S260C63v51Ev
  virtual void  v52(); // _ZN6S260C63v52Ev
  virtual void  v53(); // _ZN6S260C63v53Ev
  virtual void  v54(); // _ZN6S260C63v54Ev
  virtual void  v55(); // _ZN6S260C63v55Ev
  virtual void  v56(); // _ZN6S260C63v56Ev
  virtual void  v57(); // _ZN6S260C63v57Ev
  virtual void  v58(); // _ZN6S260C63v58Ev
  virtual void  v59(); // _ZN6S260C63v59Ev
  virtual void  v60(); // _ZN6S260C63v60Ev
  virtual void  v61(); // _ZN6S260C63v61Ev
  virtual void  v62(); // _ZN6S260C63v62Ev
  virtual void  v63(); // _ZN6S260C63v63Ev
  virtual void  v64(); // _ZN6S260C63v64Ev
  virtual void  v65(); // _ZN6S260C63v65Ev
  virtual void  v66(); // _ZN6S260C63v66Ev
  virtual void  v67(); // _ZN6S260C63v67Ev
  virtual void  v68(); // _ZN6S260C63v68Ev
  virtual void  v69(); // _ZN6S260C63v69Ev
  S260C6(); // tgen
};
//SIG(-1 S260C6) 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]}


 S260C6 ::~S260C6(){ note_dtor("S260C6", this);}
void  S260C6 ::v6(){vfunc_called(this, "_ZN6S260C62v6Ev");}
void  S260C6 ::v7(){vfunc_called(this, "_ZN6S260C62v7Ev");}
void  S260C6 ::v8(){vfunc_called(this, "_ZN6S260C62v8Ev");}
void  S260C6 ::v9(){vfunc_called(this, "_ZN6S260C62v9Ev");}
void  S260C6 ::v10(){vfunc_called(this, "_ZN6S260C63v10Ev");}
void  S260C6 ::v11(){vfunc_called(this, "_ZN6S260C63v11Ev");}
void  S260C6 ::v12(){vfunc_called(this, "_ZN6S260C63v12Ev");}
void  S260C6 ::v13(){vfunc_called(this, "_ZN6S260C63v13Ev");}
void  S260C6 ::v14(){vfunc_called(this, "_ZN6S260C63v14Ev");}
void  S260C6 ::v15(){vfunc_called(this, "_ZN6S260C63v15Ev");}
void  S260C6 ::v16(){vfunc_called(this, "_ZN6S260C63v16Ev");}
void  S260C6 ::v17(){vfunc_called(this, "_ZN6S260C63v17Ev");}
void  S260C6 ::v18(){vfunc_called(this, "_ZN6S260C63v18Ev");}
void  S260C6 ::v19(){vfunc_called(this, "_ZN6S260C63v19Ev");}
void  S260C6 ::v20(){vfunc_called(this, "_ZN6S260C63v20Ev");}
void  S260C6 ::v21(){vfunc_called(this, "_ZN6S260C63v21Ev");}
void  S260C6 ::v22(){vfunc_called(this, "_ZN6S260C63v22Ev");}
void  S260C6 ::v23(){vfunc_called(this, "_ZN6S260C63v23Ev");}
void  S260C6 ::v24(){vfunc_called(this, "_ZN6S260C63v24Ev");}
void  S260C6 ::v25(){vfunc_called(this, "_ZN6S260C63v25Ev");}
void  S260C6 ::v26(){vfunc_called(this, "_ZN6S260C63v26Ev");}
void  S260C6 ::v27(){vfunc_called(this, "_ZN6S260C63v27Ev");}
void  S260C6 ::v28(){vfunc_called(this, "_ZN6S260C63v28Ev");}
void  S260C6 ::v29(){vfunc_called(this, "_ZN6S260C63v29Ev");}
void  S260C6 ::v30(){vfunc_called(this, "_ZN6S260C63v30Ev");}
void  S260C6 ::v31(){vfunc_called(this, "_ZN6S260C63v31Ev");}
void  S260C6 ::v32(){vfunc_called(this, "_ZN6S260C63v32Ev");}
void  S260C6 ::v33(){vfunc_called(this, "_ZN6S260C63v33Ev");}
void  S260C6 ::v34(){vfunc_called(this, "_ZN6S260C63v34Ev");}
void  S260C6 ::v35(){vfunc_called(this, "_ZN6S260C63v35Ev");}
void  S260C6 ::v36(){vfunc_called(this, "_ZN6S260C63v36Ev");}
void  S260C6 ::v37(){vfunc_called(this, "_ZN6S260C63v37Ev");}
void  S260C6 ::v38(){vfunc_called(this, "_ZN6S260C63v38Ev");}
void  S260C6 ::v39(){vfunc_called(this, "_ZN6S260C63v39Ev");}
void  S260C6 ::v40(){vfunc_called(this, "_ZN6S260C63v40Ev");}
void  S260C6 ::v41(){vfunc_called(this, "_ZN6S260C63v41Ev");}
void  S260C6 ::v42(){vfunc_called(this, "_ZN6S260C63v42Ev");}
void  S260C6 ::v43(){vfunc_called(this, "_ZN6S260C63v43Ev");}
void  S260C6 ::v44(){vfunc_called(this, "_ZN6S260C63v44Ev");}
void  S260C6 ::v45(){vfunc_called(this, "_ZN6S260C63v45Ev");}
void  S260C6 ::v46(){vfunc_called(this, "_ZN6S260C63v46Ev");}
void  S260C6 ::v47(){vfunc_called(this, "_ZN6S260C63v47Ev");}
void  S260C6 ::v48(){vfunc_called(this, "_ZN6S260C63v48Ev");}
void  S260C6 ::v49(){vfunc_called(this, "_ZN6S260C63v49Ev");}
void  S260C6 ::v50(){vfunc_called(this, "_ZN6S260C63v50Ev");}
void  S260C6 ::v51(){vfunc_called(this, "_ZN6S260C63v51Ev");}
void  S260C6 ::v52(){vfunc_called(this, "_ZN6S260C63v52Ev");}
void  S260C6 ::v53(){vfunc_called(this, "_ZN6S260C63v53Ev");}
void  S260C6 ::v54(){vfunc_called(this, "_ZN6S260C63v54Ev");}
void  S260C6 ::v55(){vfunc_called(this, "_ZN6S260C63v55Ev");}
void  S260C6 ::v56(){vfunc_called(this, "_ZN6S260C63v56Ev");}
void  S260C6 ::v57(){vfunc_called(this, "_ZN6S260C63v57Ev");}
void  S260C6 ::v58(){vfunc_called(this, "_ZN6S260C63v58Ev");}
void  S260C6 ::v59(){vfunc_called(this, "_ZN6S260C63v59Ev");}
void  S260C6 ::v60(){vfunc_called(this, "_ZN6S260C63v60Ev");}
void  S260C6 ::v61(){vfunc_called(this, "_ZN6S260C63v61Ev");}
void  S260C6 ::v62(){vfunc_called(this, "_ZN6S260C63v62Ev");}
void  S260C6 ::v63(){vfunc_called(this, "_ZN6S260C63v63Ev");}
void  S260C6 ::v64(){vfunc_called(this, "_ZN6S260C63v64Ev");}
void  S260C6 ::v65(){vfunc_called(this, "_ZN6S260C63v65Ev");}
void  S260C6 ::v66(){vfunc_called(this, "_ZN6S260C63v66Ev");}
void  S260C6 ::v67(){vfunc_called(this, "_ZN6S260C63v67Ev");}
void  S260C6 ::v68(){vfunc_called(this, "_ZN6S260C63v68Ev");}
void  S260C6 ::v69(){vfunc_called(this, "_ZN6S260C63v69Ev");}
S260C6 ::S260C6(){ note_ctor("S260C6", this);} // tgen

static void Test_S260C6()
{
  extern Class_Descriptor cd_S260C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S260C6, buf);
    S260C6 *dp, &lv = *(dp=new (buf) S260C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S260C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S260C6)");
    check_field_offset(lv, s260c6f0, ABISELECT(8,4), "S260C6.s260c6f0");
    check_field_offset(lv, s260c6f1, ABISELECT(16,8), "S260C6.s260c6f1");
    check_field_offset(lv, s260c6f2, ABISELECT(24,16), "S260C6.s260c6f2");
    check_field_offset(lv, s260c6f3, ABISELECT(56,32), "S260C6.s260c6f3");
    check_field_offset(lv, s260c6f4, ABISELECT(64,40), "S260C6.s260c6f4");
    check_field_offset(lv, s260c6f5, ABISELECT(72,44), "S260C6.s260c6f5");
    check_field_offset(lv, s260c6f6, ABISELECT(80,52), "S260C6.s260c6f6");
    test_class_info(&lv, &cd_S260C6);
    dp->~S260C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS260C6(Test_S260C6, "S260C6", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S260C6C1Ev();
extern void _ZN6S260C6D1Ev();
Name_Map name_map_S260C6[] = {
  NSPAIR(_ZN6S260C6C1Ev),
  NSPAIR(_ZN6S260C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S260C6[];
extern void _ZN6S260C6D1Ev();
extern void _ZN6S260C6D0Ev();
extern void _ZN6S260C62v6Ev();
extern void _ZN6S260C62v7Ev();
extern void _ZN6S260C62v8Ev();
extern void _ZN6S260C62v9Ev();
extern void _ZN6S260C63v10Ev();
extern void _ZN6S260C63v11Ev();
extern void _ZN6S260C63v12Ev();
extern void _ZN6S260C63v13Ev();
extern void _ZN6S260C63v14Ev();
extern void _ZN6S260C63v15Ev();
extern void _ZN6S260C63v16Ev();
extern void _ZN6S260C63v17Ev();
extern void _ZN6S260C63v18Ev();
extern void _ZN6S260C63v19Ev();
extern void _ZN6S260C63v20Ev();
extern void _ZN6S260C63v21Ev();
extern void _ZN6S260C63v22Ev();
extern void _ZN6S260C63v23Ev();
extern void _ZN6S260C63v24Ev();
extern void _ZN6S260C63v25Ev();
extern void _ZN6S260C63v26Ev();
extern void _ZN6S260C63v27Ev();
extern void _ZN6S260C63v28Ev();
extern void _ZN6S260C63v29Ev();
extern void _ZN6S260C63v30Ev();
extern void _ZN6S260C63v31Ev();
extern void _ZN6S260C63v32Ev();
extern void _ZN6S260C63v33Ev();
extern void _ZN6S260C63v34Ev();
extern void _ZN6S260C63v35Ev();
extern void _ZN6S260C63v36Ev();
extern void _ZN6S260C63v37Ev();
extern void _ZN6S260C63v38Ev();
extern void _ZN6S260C63v39Ev();
extern void _ZN6S260C63v40Ev();
extern void _ZN6S260C63v41Ev();
extern void _ZN6S260C63v42Ev();
extern void _ZN6S260C63v43Ev();
extern void _ZN6S260C63v44Ev();
extern void _ZN6S260C63v45Ev();
extern void _ZN6S260C63v46Ev();
extern void _ZN6S260C63v47Ev();
extern void _ZN6S260C63v48Ev();
extern void _ZN6S260C63v49Ev();
extern void _ZN6S260C63v50Ev();
extern void _ZN6S260C63v51Ev();
extern void _ZN6S260C63v52Ev();
extern void _ZN6S260C63v53Ev();
extern void _ZN6S260C63v54Ev();
extern void _ZN6S260C63v55Ev();
extern void _ZN6S260C63v56Ev();
extern void _ZN6S260C63v57Ev();
extern void _ZN6S260C63v58Ev();
extern void _ZN6S260C63v59Ev();
extern void _ZN6S260C63v60Ev();
extern void _ZN6S260C63v61Ev();
extern void _ZN6S260C63v62Ev();
extern void _ZN6S260C63v63Ev();
extern void _ZN6S260C63v64Ev();
extern void _ZN6S260C63v65Ev();
extern void _ZN6S260C63v66Ev();
extern void _ZN6S260C63v67Ev();
extern void _ZN6S260C63v68Ev();
extern void _ZN6S260C63v69Ev();
static  VTBL_ENTRY vtc_S260C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S260C6[0]),
  (VTBL_ENTRY)&_ZN6S260C6D1Ev,
  (VTBL_ENTRY)&_ZN6S260C6D0Ev,
  (VTBL_ENTRY)&_ZN6S260C62v6Ev,
  (VTBL_ENTRY)&_ZN6S260C62v7Ev,
  (VTBL_ENTRY)&_ZN6S260C62v8Ev,
  (VTBL_ENTRY)&_ZN6S260C62v9Ev,
  (VTBL_ENTRY)&_ZN6S260C63v10Ev,
  (VTBL_ENTRY)&_ZN6S260C63v11Ev,
  (VTBL_ENTRY)&_ZN6S260C63v12Ev,
  (VTBL_ENTRY)&_ZN6S260C63v13Ev,
  (VTBL_ENTRY)&_ZN6S260C63v14Ev,
  (VTBL_ENTRY)&_ZN6S260C63v15Ev,
  (VTBL_ENTRY)&_ZN6S260C63v16Ev,
  (VTBL_ENTRY)&_ZN6S260C63v17Ev,
  (VTBL_ENTRY)&_ZN6S260C63v18Ev,
  (VTBL_ENTRY)&_ZN6S260C63v19Ev,
  (VTBL_ENTRY)&_ZN6S260C63v20Ev,
  (VTBL_ENTRY)&_ZN6S260C63v21Ev,
  (VTBL_ENTRY)&_ZN6S260C63v22Ev,
  (VTBL_ENTRY)&_ZN6S260C63v23Ev,
  (VTBL_ENTRY)&_ZN6S260C63v24Ev,
  (VTBL_ENTRY)&_ZN6S260C63v25Ev,
  (VTBL_ENTRY)&_ZN6S260C63v26Ev,
  (VTBL_ENTRY)&_ZN6S260C63v27Ev,
  (VTBL_ENTRY)&_ZN6S260C63v28Ev,
  (VTBL_ENTRY)&_ZN6S260C63v29Ev,
  (VTBL_ENTRY)&_ZN6S260C63v30Ev,
  (VTBL_ENTRY)&_ZN6S260C63v31Ev,
  (VTBL_ENTRY)&_ZN6S260C63v32Ev,
  (VTBL_ENTRY)&_ZN6S260C63v33Ev,
  (VTBL_ENTRY)&_ZN6S260C63v34Ev,
  (VTBL_ENTRY)&_ZN6S260C63v35Ev,
  (VTBL_ENTRY)&_ZN6S260C63v36Ev,
  (VTBL_ENTRY)&_ZN6S260C63v37Ev,
  (VTBL_ENTRY)&_ZN6S260C63v38Ev,
  (VTBL_ENTRY)&_ZN6S260C63v39Ev,
  (VTBL_ENTRY)&_ZN6S260C63v40Ev,
  (VTBL_ENTRY)&_ZN6S260C63v41Ev,
  (VTBL_ENTRY)&_ZN6S260C63v42Ev,
  (VTBL_ENTRY)&_ZN6S260C63v43Ev,
  (VTBL_ENTRY)&_ZN6S260C63v44Ev,
  (VTBL_ENTRY)&_ZN6S260C63v45Ev,
  (VTBL_ENTRY)&_ZN6S260C63v46Ev,
  (VTBL_ENTRY)&_ZN6S260C63v47Ev,
  (VTBL_ENTRY)&_ZN6S260C63v48Ev,
  (VTBL_ENTRY)&_ZN6S260C63v49Ev,
  (VTBL_ENTRY)&_ZN6S260C63v50Ev,
  (VTBL_ENTRY)&_ZN6S260C63v51Ev,
  (VTBL_ENTRY)&_ZN6S260C63v52Ev,
  (VTBL_ENTRY)&_ZN6S260C63v53Ev,
  (VTBL_ENTRY)&_ZN6S260C63v54Ev,
  (VTBL_ENTRY)&_ZN6S260C63v55Ev,
  (VTBL_ENTRY)&_ZN6S260C63v56Ev,
  (VTBL_ENTRY)&_ZN6S260C63v57Ev,
  (VTBL_ENTRY)&_ZN6S260C63v58Ev,
  (VTBL_ENTRY)&_ZN6S260C63v59Ev,
  (VTBL_ENTRY)&_ZN6S260C63v60Ev,
  (VTBL_ENTRY)&_ZN6S260C63v61Ev,
  (VTBL_ENTRY)&_ZN6S260C63v62Ev,
  (VTBL_ENTRY)&_ZN6S260C63v63Ev,
  (VTBL_ENTRY)&_ZN6S260C63v64Ev,
  (VTBL_ENTRY)&_ZN6S260C63v65Ev,
  (VTBL_ENTRY)&_ZN6S260C63v66Ev,
  (VTBL_ENTRY)&_ZN6S260C63v67Ev,
  (VTBL_ENTRY)&_ZN6S260C63v68Ev,
  (VTBL_ENTRY)&_ZN6S260C63v69Ev,
};
extern VTBL_ENTRY _ZTI6S260C6[];
extern  VTBL_ENTRY _ZTV6S260C6[];
Class_Descriptor cd_S260C6 = {  "S260C6", // class name
  0,0,//no base classes
  &(vtc_S260C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S260C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S260C6),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  S260C5  : S260C6 {
  int s260c5f0[2];
  void *s260c5f1;
  int s260c5f2[2];
  ::S287C8_nt s260c5f3;
  ::S287C8_nt s260c5f4;
  ::S2121C38 s260c5f5;
  ::S287C8_nt s260c5f6;
  unsigned int s260c5f7:1;
  unsigned int s260c5f8:1;
  unsigned int s260c5f9:1;
  unsigned int s260c5f10:1;
  unsigned int s260c5f11:1;
  int s260c5f12[2];
  virtual  ~S260C5(); // _ZN6S260C5D1Ev
  virtual void  v70(); // _ZN6S260C53v70Ev
  virtual void  v71(); // _ZN6S260C53v71Ev
  virtual void  v72(); // _ZN6S260C53v72Ev
  virtual void  v73(); // _ZN6S260C53v73Ev
  virtual void  v74(); // _ZN6S260C53v74Ev
  virtual void  v75(); // _ZN6S260C53v75Ev
  virtual void  v76(); // _ZN6S260C53v76Ev
  virtual void  v77(); // _ZN6S260C53v77Ev
  virtual void  v78(); // _ZN6S260C53v78Ev
  virtual void  v79(); // _ZN6S260C53v79Ev
  virtual void  v80(); // _ZN6S260C53v80Ev
  virtual void  v81(); // _ZN6S260C53v81Ev
  virtual void  v82(); // _ZN6S260C53v82Ev
  virtual void  v83(); // _ZN6S260C53v83Ev
  virtual void  v84(); // _ZN6S260C53v84Ev
  virtual void  v85(); // _ZN6S260C53v85Ev
  virtual void  v86(); // _ZN6S260C53v86Ev
  virtual void  v87(); // _ZN6S260C53v87Ev
  virtual void  v88(); // _ZN6S260C53v88Ev
  virtual void  v89(); // _ZN6S260C53v89Ev
  virtual void  v90(); // _ZN6S260C53v90Ev
  virtual void  v91(); // _ZN6S260C53v91Ev
  S260C5(); // tgen
};
//SIG(-1 S260C5) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S260C5 ::~S260C5(){ note_dtor("S260C5", this);}
void  S260C5 ::v70(){vfunc_called(this, "_ZN6S260C53v70Ev");}
void  S260C5 ::v71(){vfunc_called(this, "_ZN6S260C53v71Ev");}
void  S260C5 ::v72(){vfunc_called(this, "_ZN6S260C53v72Ev");}
void  S260C5 ::v73(){vfunc_called(this, "_ZN6S260C53v73Ev");}
void  S260C5 ::v74(){vfunc_called(this, "_ZN6S260C53v74Ev");}
void  S260C5 ::v75(){vfunc_called(this, "_ZN6S260C53v75Ev");}
void  S260C5 ::v76(){vfunc_called(this, "_ZN6S260C53v76Ev");}
void  S260C5 ::v77(){vfunc_called(this, "_ZN6S260C53v77Ev");}
void  S260C5 ::v78(){vfunc_called(this, "_ZN6S260C53v78Ev");}
void  S260C5 ::v79(){vfunc_called(this, "_ZN6S260C53v79Ev");}
void  S260C5 ::v80(){vfunc_called(this, "_ZN6S260C53v80Ev");}
void  S260C5 ::v81(){vfunc_called(this, "_ZN6S260C53v81Ev");}
void  S260C5 ::v82(){vfunc_called(this, "_ZN6S260C53v82Ev");}
void  S260C5 ::v83(){vfunc_called(this, "_ZN6S260C53v83Ev");}
void  S260C5 ::v84(){vfunc_called(this, "_ZN6S260C53v84Ev");}
void  S260C5 ::v85(){vfunc_called(this, "_ZN6S260C53v85Ev");}
void  S260C5 ::v86(){vfunc_called(this, "_ZN6S260C53v86Ev");}
void  S260C5 ::v87(){vfunc_called(this, "_ZN6S260C53v87Ev");}
void  S260C5 ::v88(){vfunc_called(this, "_ZN6S260C53v88Ev");}
void  S260C5 ::v89(){vfunc_called(this, "_ZN6S260C53v89Ev");}
void  S260C5 ::v90(){vfunc_called(this, "_ZN6S260C53v90Ev");}
void  S260C5 ::v91(){vfunc_called(this, "_ZN6S260C53v91Ev");}
S260C5 ::S260C5(){ note_ctor("S260C5", this);} // tgen

static void Test_S260C5()
{
  extern Class_Descriptor cd_S260C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S260C5, buf);
    S260C5 *dp, &lv = *(dp=new (buf) S260C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S260C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S260C5)");
    check_base_class_offset(lv, (S260C6*), 0, "S260C5");
    check_field_offset(lv, s260c5f0, ABISELECT(96,60), "S260C5.s260c5f0");
    check_field_offset(lv, s260c5f1, ABISELECT(104,68), "S260C5.s260c5f1");
    check_field_offset(lv, s260c5f2, ABISELECT(112,72), "S260C5.s260c5f2");
    check_field_offset(lv, s260c5f3, ABISELECT(120,80), "S260C5.s260c5f3");
    check_field_offset(lv, s260c5f4, ABISELECT(136,92), "S260C5.s260c5f4");
    check_field_offset(lv, s260c5f5, ABISELECT(152,104), "S260C5.s260c5f5");
    check_field_offset(lv, s260c5f6, ABISELECT(160,108), "S260C5.s260c5f6");
    set_bf_and_test(lv, s260c5f7, ABISELECT(176,120), 0, 1, 1, "S260C5");
    set_bf_and_test(lv, s260c5f8, ABISELECT(176,120), 1, 1, 1, "S260C5");
    set_bf_and_test(lv, s260c5f9, ABISELECT(176,120), 2, 1, 1, "S260C5");
    set_bf_and_test(lv, s260c5f10, ABISELECT(176,120), 3, 1, 1, "S260C5");
    set_bf_and_test(lv, s260c5f11, ABISELECT(176,120), 4, 1, 1, "S260C5");
    check_field_offset(lv, s260c5f12, ABISELECT(180,124), "S260C5.s260c5f12");
    test_class_info(&lv, &cd_S260C5);
    dp->~S260C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS260C5(Test_S260C5, "S260C5", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN6S260C5C1Ev();
extern void _ZN6S260C5D1Ev();
Name_Map name_map_S260C5[] = {
  NSPAIR(_ZN6S260C5C1Ev),
  NSPAIR(_ZN6S260C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S260C6;
extern VTBL_ENTRY _ZTI6S260C6[];
extern  VTBL_ENTRY _ZTV6S260C6[];
static Base_Class bases_S260C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S260C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI6S260C5[];
extern void _ZN6S260C5D1Ev();
extern void _ZN6S260C5D0Ev();
extern void _ZN6S260C62v6Ev();
extern void _ZN6S260C62v7Ev();
extern void _ZN6S260C62v8Ev();
extern void _ZN6S260C62v9Ev();
extern void _ZN6S260C63v10Ev();
extern void _ZN6S260C63v11Ev();
extern void _ZN6S260C63v12Ev();
extern void _ZN6S260C63v13Ev();
extern void _ZN6S260C63v14Ev();
extern void _ZN6S260C63v15Ev();
extern void _ZN6S260C63v16Ev();
extern void _ZN6S260C63v17Ev();
extern void _ZN6S260C63v18Ev();
extern void _ZN6S260C63v19Ev();
extern void _ZN6S260C63v20Ev();
extern void _ZN6S260C63v21Ev();
extern void _ZN6S260C63v22Ev();
extern void _ZN6S260C63v23Ev();
extern void _ZN6S260C63v24Ev();
extern void _ZN6S260C63v25Ev();
extern void _ZN6S260C63v26Ev();
extern void _ZN6S260C63v27Ev();
extern void _ZN6S260C63v28Ev();
extern void _ZN6S260C63v29Ev();
extern void _ZN6S260C63v30Ev();
extern void _ZN6S260C63v31Ev();
extern void _ZN6S260C63v32Ev();
extern void _ZN6S260C63v33Ev();
extern void _ZN6S260C63v34Ev();
extern void _ZN6S260C63v35Ev();
extern void _ZN6S260C63v36Ev();
extern void _ZN6S260C63v37Ev();
extern void _ZN6S260C63v38Ev();
extern void _ZN6S260C63v39Ev();
extern void _ZN6S260C63v40Ev();
extern void _ZN6S260C63v41Ev();
extern void _ZN6S260C63v42Ev();
extern void _ZN6S260C63v43Ev();
extern void _ZN6S260C63v44Ev();
extern void _ZN6S260C63v45Ev();
extern void _ZN6S260C63v46Ev();
extern void _ZN6S260C63v47Ev();
extern void _ZN6S260C63v48Ev();
extern void _ZN6S260C63v49Ev();
extern void _ZN6S260C63v50Ev();
extern void _ZN6S260C63v51Ev();
extern void _ZN6S260C63v52Ev();
extern void _ZN6S260C63v53Ev();
extern void _ZN6S260C63v54Ev();
extern void _ZN6S260C63v55Ev();
extern void _ZN6S260C63v56Ev();
extern void _ZN6S260C63v57Ev();
extern void _ZN6S260C63v58Ev();
extern void _ZN6S260C63v59Ev();
extern void _ZN6S260C63v60Ev();
extern void _ZN6S260C63v61Ev();
extern void _ZN6S260C63v62Ev();
extern void _ZN6S260C63v63Ev();
extern void _ZN6S260C63v64Ev();
extern void _ZN6S260C63v65Ev();
extern void _ZN6S260C63v66Ev();
extern void _ZN6S260C63v67Ev();
extern void _ZN6S260C63v68Ev();
extern void _ZN6S260C63v69Ev();
extern void _ZN6S260C53v70Ev();
extern void _ZN6S260C53v71Ev();
extern void _ZN6S260C53v72Ev();
extern void _ZN6S260C53v73Ev();
extern void _ZN6S260C53v74Ev();
extern void _ZN6S260C53v75Ev();
extern void _ZN6S260C53v76Ev();
extern void _ZN6S260C53v77Ev();
extern void _ZN6S260C53v78Ev();
extern void _ZN6S260C53v79Ev();
extern void _ZN6S260C53v80Ev();
extern void _ZN6S260C53v81Ev();
extern void _ZN6S260C53v82Ev();
extern void _ZN6S260C53v83Ev();
extern void _ZN6S260C53v84Ev();
extern void _ZN6S260C53v85Ev();
extern void _ZN6S260C53v86Ev();
extern void _ZN6S260C53v87Ev();
extern void _ZN6S260C53v88Ev();
extern void _ZN6S260C53v89Ev();
extern void _ZN6S260C53v90Ev();
extern void _ZN6S260C53v91Ev();
static  VTBL_ENTRY vtc_S260C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S260C5[0]),
  (VTBL_ENTRY)&_ZN6S260C5D1Ev,
  (VTBL_ENTRY)&_ZN6S260C5D0Ev,
  (VTBL_ENTRY)&_ZN6S260C62v6Ev,
  (VTBL_ENTRY)&_ZN6S260C62v7Ev,
  (VTBL_ENTRY)&_ZN6S260C62v8Ev,
  (VTBL_ENTRY)&_ZN6S260C62v9Ev,
  (VTBL_ENTRY)&_ZN6S260C63v10Ev,
  (VTBL_ENTRY)&_ZN6S260C63v11Ev,
  (VTBL_ENTRY)&_ZN6S260C63v12Ev,
  (VTBL_ENTRY)&_ZN6S260C63v13Ev,
  (VTBL_ENTRY)&_ZN6S260C63v14Ev,
  (VTBL_ENTRY)&_ZN6S260C63v15Ev,
  (VTBL_ENTRY)&_ZN6S260C63v16Ev,
  (VTBL_ENTRY)&_ZN6S260C63v17Ev,
  (VTBL_ENTRY)&_ZN6S260C63v18Ev,
  (VTBL_ENTRY)&_ZN6S260C63v19Ev,
  (VTBL_ENTRY)&_ZN6S260C63v20Ev,
  (VTBL_ENTRY)&_ZN6S260C63v21Ev,
  (VTBL_ENTRY)&_ZN6S260C63v22Ev,
  (VTBL_ENTRY)&_ZN6S260C63v23Ev,
  (VTBL_ENTRY)&_ZN6S260C63v24Ev,
  (VTBL_ENTRY)&_ZN6S260C63v25Ev,
  (VTBL_ENTRY)&_ZN6S260C63v26Ev,
  (VTBL_ENTRY)&_ZN6S260C63v27Ev,
  (VTBL_ENTRY)&_ZN6S260C63v28Ev,
  (VTBL_ENTRY)&_ZN6S260C63v29Ev,
  (VTBL_ENTRY)&_ZN6S260C63v30Ev,
  (VTBL_ENTRY)&_ZN6S260C63v31Ev,
  (VTBL_ENTRY)&_ZN6S260C63v32Ev,
  (VTBL_ENTRY)&_ZN6S260C63v33Ev,
  (VTBL_ENTRY)&_ZN6S260C63v34Ev,
  (VTBL_ENTRY)&_ZN6S260C63v35Ev,
  (VTBL_ENTRY)&_ZN6S260C63v36Ev,
  (VTBL_ENTRY)&_ZN6S260C63v37Ev,
  (VTBL_ENTRY)&_ZN6S260C63v38Ev,
  (VTBL_ENTRY)&_ZN6S260C63v39Ev,
  (VTBL_ENTRY)&_ZN6S260C63v40Ev,
  (VTBL_ENTRY)&_ZN6S260C63v41Ev,
  (VTBL_ENTRY)&_ZN6S260C63v42Ev,
  (VTBL_ENTRY)&_ZN6S260C63v43Ev,
  (VTBL_ENTRY)&_ZN6S260C63v44Ev,
  (VTBL_ENTRY)&_ZN6S260C63v45Ev,
  (VTBL_ENTRY)&_ZN6S260C63v46Ev,
  (VTBL_ENTRY)&_ZN6S260C63v47Ev,
  (VTBL_ENTRY)&_ZN6S260C63v48Ev,
  (VTBL_ENTRY)&_ZN6S260C63v49Ev,
  (VTBL_ENTRY)&_ZN6S260C63v50Ev,
  (VTBL_ENTRY)&_ZN6S260C63v51Ev,
  (VTBL_ENTRY)&_ZN6S260C63v52Ev,
  (VTBL_ENTRY)&_ZN6S260C63v53Ev,
  (VTBL_ENTRY)&_ZN6S260C63v54Ev,
  (VTBL_ENTRY)&_ZN6S260C63v55Ev,
  (VTBL_ENTRY)&_ZN6S260C63v56Ev,
  (VTBL_ENTRY)&_ZN6S260C63v57Ev,
  (VTBL_ENTRY)&_ZN6S260C63v58Ev,
  (VTBL_ENTRY)&_ZN6S260C63v59Ev,
  (VTBL_ENTRY)&_ZN6S260C63v60Ev,
  (VTBL_ENTRY)&_ZN6S260C63v61Ev,
  (VTBL_ENTRY)&_ZN6S260C63v62Ev,
  (VTBL_ENTRY)&_ZN6S260C63v63Ev,
  (VTBL_ENTRY)&_ZN6S260C63v64Ev,
  (VTBL_ENTRY)&_ZN6S260C63v65Ev,
  (VTBL_ENTRY)&_ZN6S260C63v66Ev,
  (VTBL_ENTRY)&_ZN6S260C63v67Ev,
  (VTBL_ENTRY)&_ZN6S260C63v68Ev,
  (VTBL_ENTRY)&_ZN6S260C63v69Ev,
  (VTBL_ENTRY)&_ZN6S260C53v70Ev,
  (VTBL_ENTRY)&_ZN6S260C53v71Ev,
  (VTBL_ENTRY)&_ZN6S260C53v72Ev,
  (VTBL_ENTRY)&_ZN6S260C53v73Ev,
  (VTBL_ENTRY)&_ZN6S260C53v74Ev,
  (VTBL_ENTRY)&_ZN6S260C53v75Ev,
  (VTBL_ENTRY)&_ZN6S260C53v76Ev,
  (VTBL_ENTRY)&_ZN6S260C53v77Ev,
  (VTBL_ENTRY)&_ZN6S260C53v78Ev,
  (VTBL_ENTRY)&_ZN6S260C53v79Ev,
  (VTBL_ENTRY)&_ZN6S260C53v80Ev,
  (VTBL_ENTRY)&_ZN6S260C53v81Ev,
  (VTBL_ENTRY)&_ZN6S260C53v82Ev,
  (VTBL_ENTRY)&_ZN6S260C53v83Ev,
  (VTBL_ENTRY)&_ZN6S260C53v84Ev,
  (VTBL_ENTRY)&_ZN6S260C53v85Ev,
  (VTBL_ENTRY)&_ZN6S260C53v86Ev,
  (VTBL_ENTRY)&_ZN6S260C53v87Ev,
  (VTBL_ENTRY)&_ZN6S260C53v88Ev,
  (VTBL_ENTRY)&_ZN6S260C53v89Ev,
  (VTBL_ENTRY)&_ZN6S260C53v90Ev,
  (VTBL_ENTRY)&_ZN6S260C53v91Ev,
};
extern VTBL_ENTRY _ZTI6S260C5[];
extern  VTBL_ENTRY _ZTV6S260C5[];
Class_Descriptor cd_S260C5 = {  "S260C5", // class name
  bases_S260C5, 1,
  &(vtc_S260C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI6S260C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S260C5),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S260C4  : S260C5 {
  unsigned int s260c4f0:1;
  unsigned int s260c4f1:1;
  unsigned int s260c4f2:1;
  ::S3350C17 s260c4f3;
  ::S3350C11 s260c4f4;
  ::S3350C5_nt s260c4f5;
  ::S287C27 s260c4f6;
  int s260c4f7[3];
  virtual  ~S260C4(); // _ZN6S260C4D1Ev
  virtual void  v92(); // _ZN6S260C43v92Ev
  virtual void  v93(); // _ZN6S260C43v93Ev
  virtual void  v94(); // _ZN6S260C43v94Ev
  virtual void  v95(); // _ZN6S260C43v95Ev
  virtual void  v96(); // _ZN6S260C43v96Ev
  virtual void  v97(); // _ZN6S260C43v97Ev
  virtual void  v98(); // _ZN6S260C43v98Ev
  virtual void  v99(); // _ZN6S260C43v99Ev
  virtual void  v100(); // _ZN6S260C44v100Ev
  virtual void  v101(); // _ZN6S260C44v101Ev
  virtual void  v102(); // _ZN6S260C44v102Ev
  virtual void  v103(); // _ZN6S260C44v103Ev
  virtual void  v104(); // _ZN6S260C44v104Ev
  virtual void  v105(); // _ZN6S260C44v105Ev
  virtual void  v106(); // _ZN6S260C44v106Ev
  virtual void  v107(); // _ZN6S260C44v107Ev
  virtual void  v108(); // _ZN6S260C44v108Ev
  virtual void  v109(); // _ZN6S260C44v109Ev
  virtual void  v110(); // _ZN6S260C44v110Ev
  virtual void  v111(); // _ZN6S260C44v111Ev
  S260C4(); // tgen
};
//SIG(-1 S260C4) C1{ BC2{ BC3{ vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 FC10{ BC11{ BC8}} FC12{ BC13{ BC8}} FC14{ BC15{ BC8}} FC16{ BC17{ BC8}} Fi[3]}


 S260C4 ::~S260C4(){ note_dtor("S260C4", this);}
void  S260C4 ::v92(){vfunc_called(this, "_ZN6S260C43v92Ev");}
void  S260C4 ::v93(){vfunc_called(this, "_ZN6S260C43v93Ev");}
void  S260C4 ::v94(){vfunc_called(this, "_ZN6S260C43v94Ev");}
void  S260C4 ::v95(){vfunc_called(this, "_ZN6S260C43v95Ev");}
void  S260C4 ::v96(){vfunc_called(this, "_ZN6S260C43v96Ev");}
void  S260C4 ::v97(){vfunc_called(this, "_ZN6S260C43v97Ev");}
void  S260C4 ::v98(){vfunc_called(this, "_ZN6S260C43v98Ev");}
void  S260C4 ::v99(){vfunc_called(this, "_ZN6S260C43v99Ev");}
void  S260C4 ::v100(){vfunc_called(this, "_ZN6S260C44v100Ev");}
void  S260C4 ::v101(){vfunc_called(this, "_ZN6S260C44v101Ev");}
void  S260C4 ::v102(){vfunc_called(this, "_ZN6S260C44v102Ev");}
void  S260C4 ::v103(){vfunc_called(this, "_ZN6S260C44v103Ev");}
void  S260C4 ::v104(){vfunc_called(this, "_ZN6S260C44v104Ev");}
void  S260C4 ::v105(){vfunc_called(this, "_ZN6S260C44v105Ev");}
void  S260C4 ::v106(){vfunc_called(this, "_ZN6S260C44v106Ev");}
void  S260C4 ::v107(){vfunc_called(this, "_ZN6S260C44v107Ev");}
void  S260C4 ::v108(){vfunc_called(this, "_ZN6S260C44v108Ev");}
void  S260C4 ::v109(){vfunc_called(this, "_ZN6S260C44v109Ev");}
void  S260C4 ::v110(){vfunc_called(this, "_ZN6S260C44v110Ev");}
void  S260C4 ::v111(){vfunc_called(this, "_ZN6S260C44v111Ev");}
S260C4 ::S260C4(){ note_ctor("S260C4", this);} // tgen

static void Test_S260C4()
{
  extern Class_Descriptor cd_S260C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S260C4, buf);
    S260C4 *dp, &lv = *(dp=new (buf) S260C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S260C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S260C4)");
    check_base_class_offset(lv, (S260C6*)(S260C5*), 0, "S260C4");
    check_base_class_offset(lv, (S260C5*), 0, "S260C4");
    set_bf_and_test(lv, s260c4f0, ABISELECT(188,132), 0, 1, 1, "S260C4");
    set_bf_and_test(lv, s260c4f1, ABISELECT(188,132), 1, 1, 1, "S260C4");
    set_bf_and_test(lv, s260c4f2, ABISELECT(188,132), 2, 1, 1, "S260C4");
    check_field_offset(lv, s260c4f3, ABISELECT(192,136), "S260C4.s260c4f3");
    check_field_offset(lv, s260c4f4, ABISELECT(208,148), "S260C4.s260c4f4");
    check_field_offset(lv, s260c4f5, ABISELECT(224,160), "S260C4.s260c4f5");
    check_field_offset(lv, s260c4f6, ABISELECT(240,172), "S260C4.s260c4f6");
    check_field_offset(lv, s260c4f7, ABISELECT(256,184), "S260C4.s260c4f7");
    test_class_info(&lv, &cd_S260C4);
    dp->~S260C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS260C4(Test_S260C4, "S260C4", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN6S260C4C1Ev();
extern void _ZN6S260C4D1Ev();
Name_Map name_map_S260C4[] = {
  NSPAIR(_ZN6S260C4C1Ev),
  NSPAIR(_ZN6S260C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S260C6;
extern VTBL_ENTRY _ZTI6S260C6[];
extern  VTBL_ENTRY _ZTV6S260C6[];
extern Class_Descriptor cd_S260C5;
extern VTBL_ENTRY _ZTI6S260C5[];
extern  VTBL_ENTRY _ZTV6S260C5[];
static Base_Class bases_S260C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S260C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S260C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S260C4[];
extern void _ZN6S260C4D1Ev();
extern void _ZN6S260C4D0Ev();
extern void _ZN6S260C62v6Ev();
extern void _ZN6S260C62v7Ev();
extern void _ZN6S260C62v8Ev();
extern void _ZN6S260C62v9Ev();
extern void _ZN6S260C63v10Ev();
extern void _ZN6S260C63v11Ev();
extern void _ZN6S260C63v12Ev();
extern void _ZN6S260C63v13Ev();
extern void _ZN6S260C63v14Ev();
extern void _ZN6S260C63v15Ev();
extern void _ZN6S260C63v16Ev();
extern void _ZN6S260C63v17Ev();
extern void _ZN6S260C63v18Ev();
extern void _ZN6S260C63v19Ev();
extern void _ZN6S260C63v20Ev();
extern void _ZN6S260C63v21Ev();
extern void _ZN6S260C63v22Ev();
extern void _ZN6S260C63v23Ev();
extern void _ZN6S260C63v24Ev();
extern void _ZN6S260C63v25Ev();
extern void _ZN6S260C63v26Ev();
extern void _ZN6S260C63v27Ev();
extern void _ZN6S260C63v28Ev();
extern void _ZN6S260C63v29Ev();
extern void _ZN6S260C63v30Ev();
extern void _ZN6S260C63v31Ev();
extern void _ZN6S260C63v32Ev();
extern void _ZN6S260C63v33Ev();
extern void _ZN6S260C63v34Ev();
extern void _ZN6S260C63v35Ev();
extern void _ZN6S260C63v36Ev();
extern void _ZN6S260C63v37Ev();
extern void _ZN6S260C63v38Ev();
extern void _ZN6S260C63v39Ev();
extern void _ZN6S260C63v40Ev();
extern void _ZN6S260C63v41Ev();
extern void _ZN6S260C63v42Ev();
extern void _ZN6S260C63v43Ev();
extern void _ZN6S260C63v44Ev();
extern void _ZN6S260C63v45Ev();
extern void _ZN6S260C63v46Ev();
extern void _ZN6S260C63v47Ev();
extern void _ZN6S260C63v48Ev();
extern void _ZN6S260C63v49Ev();
extern void _ZN6S260C63v50Ev();
extern void _ZN6S260C63v51Ev();
extern void _ZN6S260C63v52Ev();
extern void _ZN6S260C63v53Ev();
extern void _ZN6S260C63v54Ev();
extern void _ZN6S260C63v55Ev();
extern void _ZN6S260C63v56Ev();
extern void _ZN6S260C63v57Ev();
extern void _ZN6S260C63v58Ev();
extern void _ZN6S260C63v59Ev();
extern void _ZN6S260C63v60Ev();
extern void _ZN6S260C63v61Ev();
extern void _ZN6S260C63v62Ev();
extern void _ZN6S260C63v63Ev();
extern void _ZN6S260C63v64Ev();
extern void _ZN6S260C63v65Ev();
extern void _ZN6S260C63v66Ev();
extern void _ZN6S260C63v67Ev();
extern void _ZN6S260C63v68Ev();
extern void _ZN6S260C63v69Ev();
extern void _ZN6S260C53v70Ev();
extern void _ZN6S260C53v71Ev();
extern void _ZN6S260C53v72Ev();
extern void _ZN6S260C53v73Ev();
extern void _ZN6S260C53v74Ev();
extern void _ZN6S260C53v75Ev();
extern void _ZN6S260C53v76Ev();
extern void _ZN6S260C53v77Ev();
extern void _ZN6S260C53v78Ev();
extern void _ZN6S260C53v79Ev();
extern void _ZN6S260C53v80Ev();
extern void _ZN6S260C53v81Ev();
extern void _ZN6S260C53v82Ev();
extern void _ZN6S260C53v83Ev();
extern void _ZN6S260C53v84Ev();
extern void _ZN6S260C53v85Ev();
extern void _ZN6S260C53v86Ev();
extern void _ZN6S260C53v87Ev();
extern void _ZN6S260C53v88Ev();
extern void _ZN6S260C53v89Ev();
extern void _ZN6S260C53v90Ev();
extern void _ZN6S260C53v91Ev();
extern void _ZN6S260C43v92Ev();
extern void _ZN6S260C43v93Ev();
extern void _ZN6S260C43v94Ev();
extern void _ZN6S260C43v95Ev();
extern void _ZN6S260C43v96Ev();
extern void _ZN6S260C43v97Ev();
extern void _ZN6S260C43v98Ev();
extern void _ZN6S260C43v99Ev();
extern void _ZN6S260C44v100Ev();
extern void _ZN6S260C44v101Ev();
extern void _ZN6S260C44v102Ev();
extern void _ZN6S260C44v103Ev();
extern void _ZN6S260C44v104Ev();
extern void _ZN6S260C44v105Ev();
extern void _ZN6S260C44v106Ev();
extern void _ZN6S260C44v107Ev();
extern void _ZN6S260C44v108Ev();
extern void _ZN6S260C44v109Ev();
extern void _ZN6S260C44v110Ev();
extern void _ZN6S260C44v111Ev();
static  VTBL_ENTRY vtc_S260C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S260C4[0]),
  (VTBL_ENTRY)&_ZN6S260C4D1Ev,
  (VTBL_ENTRY)&_ZN6S260C4D0Ev,
  (VTBL_ENTRY)&_ZN6S260C62v6Ev,
  (VTBL_ENTRY)&_ZN6S260C62v7Ev,
  (VTBL_ENTRY)&_ZN6S260C62v8Ev,
  (VTBL_ENTRY)&_ZN6S260C62v9Ev,
  (VTBL_ENTRY)&_ZN6S260C63v10Ev,
  (VTBL_ENTRY)&_ZN6S260C63v11Ev,
  (VTBL_ENTRY)&_ZN6S260C63v12Ev,
  (VTBL_ENTRY)&_ZN6S260C63v13Ev,
  (VTBL_ENTRY)&_ZN6S260C63v14Ev,
  (VTBL_ENTRY)&_ZN6S260C63v15Ev,
  (VTBL_ENTRY)&_ZN6S260C63v16Ev,
  (VTBL_ENTRY)&_ZN6S260C63v17Ev,
  (VTBL_ENTRY)&_ZN6S260C63v18Ev,
  (VTBL_ENTRY)&_ZN6S260C63v19Ev,
  (VTBL_ENTRY)&_ZN6S260C63v20Ev,
  (VTBL_ENTRY)&_ZN6S260C63v21Ev,
  (VTBL_ENTRY)&_ZN6S260C63v22Ev,
  (VTBL_ENTRY)&_ZN6S260C63v23Ev,
  (VTBL_ENTRY)&_ZN6S260C63v24Ev,
  (VTBL_ENTRY)&_ZN6S260C63v25Ev,
  (VTBL_ENTRY)&_ZN6S260C63v26Ev,
  (VTBL_ENTRY)&_ZN6S260C63v27Ev,
  (VTBL_ENTRY)&_ZN6S260C63v28Ev,
  (VTBL_ENTRY)&_ZN6S260C63v29Ev,
  (VTBL_ENTRY)&_ZN6S260C63v30Ev,
  (VTBL_ENTRY)&_ZN6S260C63v31Ev,
  (VTBL_ENTRY)&_ZN6S260C63v32Ev,
  (VTBL_ENTRY)&_ZN6S260C63v33Ev,
  (VTBL_ENTRY)&_ZN6S260C63v34Ev,
  (VTBL_ENTRY)&_ZN6S260C63v35Ev,
  (VTBL_ENTRY)&_ZN6S260C63v36Ev,
  (VTBL_ENTRY)&_ZN6S260C63v37Ev,
  (VTBL_ENTRY)&_ZN6S260C63v38Ev,
  (VTBL_ENTRY)&_ZN6S260C63v39Ev,
  (VTBL_ENTRY)&_ZN6S260C63v40Ev,
  (VTBL_ENTRY)&_ZN6S260C63v41Ev,
  (VTBL_ENTRY)&_ZN6S260C63v42Ev,
  (VTBL_ENTRY)&_ZN6S260C63v43Ev,
  (VTBL_ENTRY)&_ZN6S260C63v44Ev,
  (VTBL_ENTRY)&_ZN6S260C63v45Ev,
  (VTBL_ENTRY)&_ZN6S260C63v46Ev,
  (VTBL_ENTRY)&_ZN6S260C63v47Ev,
  (VTBL_ENTRY)&_ZN6S260C63v48Ev,
  (VTBL_ENTRY)&_ZN6S260C63v49Ev,
  (VTBL_ENTRY)&_ZN6S260C63v50Ev,
  (VTBL_ENTRY)&_ZN6S260C63v51Ev,
  (VTBL_ENTRY)&_ZN6S260C63v52Ev,
  (VTBL_ENTRY)&_ZN6S260C63v53Ev,
  (VTBL_ENTRY)&_ZN6S260C63v54Ev,
  (VTBL_ENTRY)&_ZN6S260C63v55Ev,
  (VTBL_ENTRY)&_ZN6S260C63v56Ev,
  (VTBL_ENTRY)&_ZN6S260C63v57Ev,
  (VTBL_ENTRY)&_ZN6S260C63v58Ev,
  (VTBL_ENTRY)&_ZN6S260C63v59Ev,
  (VTBL_ENTRY)&_ZN6S260C63v60Ev,
  (VTBL_ENTRY)&_ZN6S260C63v61Ev,
  (VTBL_ENTRY)&_ZN6S260C63v62Ev,
  (VTBL_ENTRY)&_ZN6S260C63v63Ev,
  (VTBL_ENTRY)&_ZN6S260C63v64Ev,
  (VTBL_ENTRY)&_ZN6S260C63v65Ev,
  (VTBL_ENTRY)&_ZN6S260C63v66Ev,
  (VTBL_ENTRY)&_ZN6S260C63v67Ev,
  (VTBL_ENTRY)&_ZN6S260C63v68Ev,
  (VTBL_ENTRY)&_ZN6S260C63v69Ev,
  (VTBL_ENTRY)&_ZN6S260C53v70Ev,
  (VTBL_ENTRY)&_ZN6S260C53v71Ev,
  (VTBL_ENTRY)&_ZN6S260C53v72Ev,
  (VTBL_ENTRY)&_ZN6S260C53v73Ev,
  (VTBL_ENTRY)&_ZN6S260C53v74Ev,
  (VTBL_ENTRY)&_ZN6S260C53v75Ev,
  (VTBL_ENTRY)&_ZN6S260C53v76Ev,
  (VTBL_ENTRY)&_ZN6S260C53v77Ev,
  (VTBL_ENTRY)&_ZN6S260C53v78Ev,
  (VTBL_ENTRY)&_ZN6S260C53v79Ev,
  (VTBL_ENTRY)&_ZN6S260C53v80Ev,
  (VTBL_ENTRY)&_ZN6S260C53v81Ev,
  (VTBL_ENTRY)&_ZN6S260C53v82Ev,
  (VTBL_ENTRY)&_ZN6S260C53v83Ev,
  (VTBL_ENTRY)&_ZN6S260C53v84Ev,
  (VTBL_ENTRY)&_ZN6S260C53v85Ev,
  (VTBL_ENTRY)&_ZN6S260C53v86Ev,
  (VTBL_ENTRY)&_ZN6S260C53v87Ev,
  (VTBL_ENTRY)&_ZN6S260C53v88Ev,
  (VTBL_ENTRY)&_ZN6S260C53v89Ev,
  (VTBL_ENTRY)&_ZN6S260C53v90Ev,
  (VTBL_ENTRY)&_ZN6S260C53v91Ev,
  (VTBL_ENTRY)&_ZN6S260C43v92Ev,
  (VTBL_ENTRY)&_ZN6S260C43v93Ev,
  (VTBL_ENTRY)&_ZN6S260C43v94Ev,
  (VTBL_ENTRY)&_ZN6S260C43v95Ev,
  (VTBL_ENTRY)&_ZN6S260C43v96Ev,
  (VTBL_ENTRY)&_ZN6S260C43v97Ev,
  (VTBL_ENTRY)&_ZN6S260C43v98Ev,
  (VTBL_ENTRY)&_ZN6S260C43v99Ev,
  (VTBL_ENTRY)&_ZN6S260C44v100Ev,
  (VTBL_ENTRY)&_ZN6S260C44v101Ev,
  (VTBL_ENTRY)&_ZN6S260C44v102Ev,
  (VTBL_ENTRY)&_ZN6S260C44v103Ev,
  (VTBL_ENTRY)&_ZN6S260C44v104Ev,
  (VTBL_ENTRY)&_ZN6S260C44v105Ev,
  (VTBL_ENTRY)&_ZN6S260C44v106Ev,
  (VTBL_ENTRY)&_ZN6S260C44v107Ev,
  (VTBL_ENTRY)&_ZN6S260C44v108Ev,
  (VTBL_ENTRY)&_ZN6S260C44v109Ev,
  (VTBL_ENTRY)&_ZN6S260C44v110Ev,
  (VTBL_ENTRY)&_ZN6S260C44v111Ev,
};
extern VTBL_ENTRY _ZTI6S260C4[];
extern  VTBL_ENTRY _ZTV6S260C4[];
Class_Descriptor cd_S260C4 = {  "S260C4", // class name
  bases_S260C4, 2,
  &(vtc_S260C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI6S260C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S260C4),110, //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  S260C3  : S260C4 {
  ::S3350C4_nt s260c3f0;
  unsigned int s260c3f1:1;
  ::S287C23 s260c3f2;
  virtual  ~S260C3(); // _ZN6S260C3D1Ev
  virtual void  v112(); // _ZN6S260C34v112Ev
  virtual void  v113(); // _ZN6S260C34v113Ev
  virtual void  v114(); // _ZN6S260C34v114Ev
  virtual void  v115(); // _ZN6S260C34v115Ev
  S260C3(); // tgen
};
//SIG(-1 S260C3) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 Fi:1 Fi:1 Fi:1 FC11{ BC12{ BC9}} FC13{ BC14{ BC9}} FC15{ BC16{ BC9}} FC17{ BC18{ BC9}} Fi[3]} vd v1 v2 v3 v4 FC5 Fi:1 FC19{ BC20{ BC9}}}


 S260C3 ::~S260C3(){ note_dtor("S260C3", this);}
void  S260C3 ::v112(){vfunc_called(this, "_ZN6S260C34v112Ev");}
void  S260C3 ::v113(){vfunc_called(this, "_ZN6S260C34v113Ev");}
void  S260C3 ::v114(){vfunc_called(this, "_ZN6S260C34v114Ev");}
void  S260C3 ::v115(){vfunc_called(this, "_ZN6S260C34v115Ev");}
S260C3 ::S260C3(){ note_ctor("S260C3", this);} // tgen

static void Test_S260C3()
{
  extern Class_Descriptor cd_S260C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,56)];
    init_test(&cd_S260C3, buf);
    S260C3 *dp, &lv = *(dp=new (buf) S260C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,220), "sizeof(S260C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S260C3)");
    check_base_class_offset(lv, (S260C6*)(S260C5*)(S260C4*), 0, "S260C3");
    check_base_class_offset(lv, (S260C5*)(S260C4*), 0, "S260C3");
    check_base_class_offset(lv, (S260C4*), 0, "S260C3");
    check_field_offset(lv, s260c3f0, ABISELECT(268,196), "S260C3.s260c3f0");
    set_bf_and_test(lv, s260c3f1, ABISELECT(276,204), 0, 1, 1, "S260C3");
    check_field_offset(lv, s260c3f2, ABISELECT(280,208), "S260C3.s260c3f2");
    test_class_info(&lv, &cd_S260C3);
    dp->~S260C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS260C3(Test_S260C3, "S260C3", ABISELECT(296,220));

#else // __cplusplus

extern void _ZN6S260C3C1Ev();
extern void _ZN6S260C3D1Ev();
Name_Map name_map_S260C3[] = {
  NSPAIR(_ZN6S260C3C1Ev),
  NSPAIR(_ZN6S260C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S260C6;
extern VTBL_ENTRY _ZTI6S260C6[];
extern  VTBL_ENTRY _ZTV6S260C6[];
extern Class_Descriptor cd_S260C5;
extern VTBL_ENTRY _ZTI6S260C5[];
extern  VTBL_ENTRY _ZTV6S260C5[];
extern Class_Descriptor cd_S260C4;
extern VTBL_ENTRY _ZTI6S260C4[];
extern  VTBL_ENTRY _ZTV6S260C4[];
static Base_Class bases_S260C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S260C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S260C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S260C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S260C3[];
extern void _ZN6S260C3D1Ev();
extern void _ZN6S260C3D0Ev();
extern void _ZN6S260C62v6Ev();
extern void _ZN6S260C62v7Ev();
extern void _ZN6S260C62v8Ev();
extern void _ZN6S260C62v9Ev();
extern void _ZN6S260C63v10Ev();
extern void _ZN6S260C63v11Ev();
extern void _ZN6S260C63v12Ev();
extern void _ZN6S260C63v13Ev();
extern void _ZN6S260C63v14Ev();
extern void _ZN6S260C63v15Ev();
extern void _ZN6S260C63v16Ev();
extern void _ZN6S260C63v17Ev();
extern void _ZN6S260C63v18Ev();
extern void _ZN6S260C63v19Ev();
extern void _ZN6S260C63v20Ev();
extern void _ZN6S260C63v21Ev();
extern void _ZN6S260C63v22Ev();
extern void _ZN6S260C63v23Ev();
extern void _ZN6S260C63v24Ev();
extern void _ZN6S260C63v25Ev();
extern void _ZN6S260C63v26Ev();
extern void _ZN6S260C63v27Ev();
extern void _ZN6S260C63v28Ev();
extern void _ZN6S260C63v29Ev();
extern void _ZN6S260C63v30Ev();
extern void _ZN6S260C63v31Ev();
extern void _ZN6S260C63v32Ev();
extern void _ZN6S260C63v33Ev();
extern void _ZN6S260C63v34Ev();
extern void _ZN6S260C63v35Ev();
extern void _ZN6S260C63v36Ev();
extern void _ZN6S260C63v37Ev();
extern void _ZN6S260C63v38Ev();
extern void _ZN6S260C63v39Ev();
extern void _ZN6S260C63v40Ev();
extern void _ZN6S260C63v41Ev();
extern void _ZN6S260C63v42Ev();
extern void _ZN6S260C63v43Ev();
extern void _ZN6S260C63v44Ev();
extern void _ZN6S260C63v45Ev();
extern void _ZN6S260C63v46Ev();
extern void _ZN6S260C63v47Ev();
extern void _ZN6S260C63v48Ev();
extern void _ZN6S260C63v49Ev();
extern void _ZN6S260C63v50Ev();
extern void _ZN6S260C63v51Ev();
extern void _ZN6S260C63v52Ev();
extern void _ZN6S260C63v53Ev();
extern void _ZN6S260C63v54Ev();
extern void _ZN6S260C63v55Ev();
extern void _ZN6S260C63v56Ev();
extern void _ZN6S260C63v57Ev();
extern void _ZN6S260C63v58Ev();
extern void _ZN6S260C63v59Ev();
extern void _ZN6S260C63v60Ev();
extern void _ZN6S260C63v61Ev();
extern void _ZN6S260C63v62Ev();
extern void _ZN6S260C63v63Ev();
extern void _ZN6S260C63v64Ev();
extern void _ZN6S260C63v65Ev();
extern void _ZN6S260C63v66Ev();
extern void _ZN6S260C63v67Ev();
extern void _ZN6S260C63v68Ev();
extern void _ZN6S260C63v69Ev();
extern void _ZN6S260C53v70Ev();
extern void _ZN6S260C53v71Ev();
extern void _ZN6S260C53v72Ev();
extern void _ZN6S260C53v73Ev();
extern void _ZN6S260C53v74Ev();
extern void _ZN6S260C53v75Ev();
extern void _ZN6S260C53v76Ev();
extern void _ZN6S260C53v77Ev();
extern void _ZN6S260C53v78Ev();
extern void _ZN6S260C53v79Ev();
extern void _ZN6S260C53v80Ev();
extern void _ZN6S260C53v81Ev();
extern void _ZN6S260C53v82Ev();
extern void _ZN6S260C53v83Ev();
extern void _ZN6S260C53v84Ev();
extern void _ZN6S260C53v85Ev();
extern void _ZN6S260C53v86Ev();
extern void _ZN6S260C53v87Ev();
extern void _ZN6S260C53v88Ev();
extern void _ZN6S260C53v89Ev();
extern void _ZN6S260C53v90Ev();
extern void _ZN6S260C53v91Ev();
extern void _ZN6S260C43v92Ev();
extern void _ZN6S260C43v93Ev();
extern void _ZN6S260C43v94Ev();
extern void _ZN6S260C43v95Ev();
extern void _ZN6S260C43v96Ev();
extern void _ZN6S260C43v97Ev();
extern void _ZN6S260C43v98Ev();
extern void _ZN6S260C43v99Ev();
extern void _ZN6S260C44v100Ev();
extern void _ZN6S260C44v101Ev();
extern void _ZN6S260C44v102Ev();
extern void _ZN6S260C44v103Ev();
extern void _ZN6S260C44v104Ev();
extern void _ZN6S260C44v105Ev();
extern void _ZN6S260C44v106Ev();
extern void _ZN6S260C44v107Ev();
extern void _ZN6S260C44v108Ev();
extern void _ZN6S260C44v109Ev();
extern void _ZN6S260C44v110Ev();
extern void _ZN6S260C44v111Ev();
extern void _ZN6S260C34v112Ev();
extern void _ZN6S260C34v113Ev();
extern void _ZN6S260C34v114Ev();
extern void _ZN6S260C34v115Ev();
static  VTBL_ENTRY vtc_S260C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S260C3[0]),
  (VTBL_ENTRY)&_ZN6S260C3D1Ev,
  (VTBL_ENTRY)&_ZN6S260C3D0Ev,
  (VTBL_ENTRY)&_ZN6S260C62v6Ev,
  (VTBL_ENTRY)&_ZN6S260C62v7Ev,
  (VTBL_ENTRY)&_ZN6S260C62v8Ev,
  (VTBL_ENTRY)&_ZN6S260C62v9Ev,
  (VTBL_ENTRY)&_ZN6S260C63v10Ev,
  (VTBL_ENTRY)&_ZN6S260C63v11Ev,
  (VTBL_ENTRY)&_ZN6S260C63v12Ev,
  (VTBL_ENTRY)&_ZN6S260C63v13Ev,
  (VTBL_ENTRY)&_ZN6S260C63v14Ev,
  (VTBL_ENTRY)&_ZN6S260C63v15Ev,
  (VTBL_ENTRY)&_ZN6S260C63v16Ev,
  (VTBL_ENTRY)&_ZN6S260C63v17Ev,
  (VTBL_ENTRY)&_ZN6S260C63v18Ev,
  (VTBL_ENTRY)&_ZN6S260C63v19Ev,
  (VTBL_ENTRY)&_ZN6S260C63v20Ev,
  (VTBL_ENTRY)&_ZN6S260C63v21Ev,
  (VTBL_ENTRY)&_ZN6S260C63v22Ev,
  (VTBL_ENTRY)&_ZN6S260C63v23Ev,
  (VTBL_ENTRY)&_ZN6S260C63v24Ev,
  (VTBL_ENTRY)&_ZN6S260C63v25Ev,
  (VTBL_ENTRY)&_ZN6S260C63v26Ev,
  (VTBL_ENTRY)&_ZN6S260C63v27Ev,
  (VTBL_ENTRY)&_ZN6S260C63v28Ev,
  (VTBL_ENTRY)&_ZN6S260C63v29Ev,
  (VTBL_ENTRY)&_ZN6S260C63v30Ev,
  (VTBL_ENTRY)&_ZN6S260C63v31Ev,
  (VTBL_ENTRY)&_ZN6S260C63v32Ev,
  (VTBL_ENTRY)&_ZN6S260C63v33Ev,
  (VTBL_ENTRY)&_ZN6S260C63v34Ev,
  (VTBL_ENTRY)&_ZN6S260C63v35Ev,
  (VTBL_ENTRY)&_ZN6S260C63v36Ev,
  (VTBL_ENTRY)&_ZN6S260C63v37Ev,
  (VTBL_ENTRY)&_ZN6S260C63v38Ev,
  (VTBL_ENTRY)&_ZN6S260C63v39Ev,
  (VTBL_ENTRY)&_ZN6S260C63v40Ev,
  (VTBL_ENTRY)&_ZN6S260C63v41Ev,
  (VTBL_ENTRY)&_ZN6S260C63v42Ev,
  (VTBL_ENTRY)&_ZN6S260C63v43Ev,
  (VTBL_ENTRY)&_ZN6S260C63v44Ev,
  (VTBL_ENTRY)&_ZN6S260C63v45Ev,
  (VTBL_ENTRY)&_ZN6S260C63v46Ev,
  (VTBL_ENTRY)&_ZN6S260C63v47Ev,
  (VTBL_ENTRY)&_ZN6S260C63v48Ev,
  (VTBL_ENTRY)&_ZN6S260C63v49Ev,
  (VTBL_ENTRY)&_ZN6S260C63v50Ev,
  (VTBL_ENTRY)&_ZN6S260C63v51Ev,
  (VTBL_ENTRY)&_ZN6S260C63v52Ev,
  (VTBL_ENTRY)&_ZN6S260C63v53Ev,
  (VTBL_ENTRY)&_ZN6S260C63v54Ev,
  (VTBL_ENTRY)&_ZN6S260C63v55Ev,
  (VTBL_ENTRY)&_ZN6S260C63v56Ev,
  (VTBL_ENTRY)&_ZN6S260C63v57Ev,
  (VTBL_ENTRY)&_ZN6S260C63v58Ev,
  (VTBL_ENTRY)&_ZN6S260C63v59Ev,
  (VTBL_ENTRY)&_ZN6S260C63v60Ev,
  (VTBL_ENTRY)&_ZN6S260C63v61Ev,
  (VTBL_ENTRY)&_ZN6S260C63v62Ev,
  (VTBL_ENTRY)&_ZN6S260C63v63Ev,
  (VTBL_ENTRY)&_ZN6S260C63v64Ev,
  (VTBL_ENTRY)&_ZN6S260C63v65Ev,
  (VTBL_ENTRY)&_ZN6S260C63v66Ev,
  (VTBL_ENTRY)&_ZN6S260C63v67Ev,
  (VTBL_ENTRY)&_ZN6S260C63v68Ev,
  (VTBL_ENTRY)&_ZN6S260C63v69Ev,
  (VTBL_ENTRY)&_ZN6S260C53v70Ev,
  (VTBL_ENTRY)&_ZN6S260C53v71Ev,
  (VTBL_ENTRY)&_ZN6S260C53v72Ev,
  (VTBL_ENTRY)&_ZN6S260C53v73Ev,
  (VTBL_ENTRY)&_ZN6S260C53v74Ev,
  (VTBL_ENTRY)&_ZN6S260C53v75Ev,
  (VTBL_ENTRY)&_ZN6S260C53v76Ev,
  (VTBL_ENTRY)&_ZN6S260C53v77Ev,
  (VTBL_ENTRY)&_ZN6S260C53v78Ev,
  (VTBL_ENTRY)&_ZN6S260C53v79Ev,
  (VTBL_ENTRY)&_ZN6S260C53v80Ev,
  (VTBL_ENTRY)&_ZN6S260C53v81Ev,
  (VTBL_ENTRY)&_ZN6S260C53v82Ev,
  (VTBL_ENTRY)&_ZN6S260C53v83Ev,
  (VTBL_ENTRY)&_ZN6S260C53v84Ev,
  (VTBL_ENTRY)&_ZN6S260C53v85Ev,
  (VTBL_ENTRY)&_ZN6S260C53v86Ev,
  (VTBL_ENTRY)&_ZN6S260C53v87Ev,
  (VTBL_ENTRY)&_ZN6S260C53v88Ev,
  (VTBL_ENTRY)&_ZN6S260C53v89Ev,
  (VTBL_ENTRY)&_ZN6S260C53v90Ev,
  (VTBL_ENTRY)&_ZN6S260C53v91Ev,
  (VTBL_ENTRY)&_ZN6S260C43v92Ev,
  (VTBL_ENTRY)&_ZN6S260C43v93Ev,
  (VTBL_ENTRY)&_ZN6S260C43v94Ev,
  (VTBL_ENTRY)&_ZN6S260C43v95Ev,
  (VTBL_ENTRY)&_ZN6S260C43v96Ev,
  (VTBL_ENTRY)&_ZN6S260C43v97Ev,
  (VTBL_ENTRY)&_ZN6S260C43v98Ev,
  (VTBL_ENTRY)&_ZN6S260C43v99Ev,
  (VTBL_ENTRY)&_ZN6S260C44v100Ev,
  (VTBL_ENTRY)&_ZN6S260C44v101Ev,
  (VTBL_ENTRY)&_ZN6S260C44v102Ev,
  (VTBL_ENTRY)&_ZN6S260C44v103Ev,
  (VTBL_ENTRY)&_ZN6S260C44v104Ev,
  (VTBL_ENTRY)&_ZN6S260C44v105Ev,
  (VTBL_ENTRY)&_ZN6S260C44v106Ev,
  (VTBL_ENTRY)&_ZN6S260C44v107Ev,
  (VTBL_ENTRY)&_ZN6S260C44v108Ev,
  (VTBL_ENTRY)&_ZN6S260C44v109Ev,
  (VTBL_ENTRY)&_ZN6S260C44v110Ev,
  (VTBL_ENTRY)&_ZN6S260C44v111Ev,
  (VTBL_ENTRY)&_ZN6S260C34v112Ev,
  (VTBL_ENTRY)&_ZN6S260C34v113Ev,
  (VTBL_ENTRY)&_ZN6S260C34v114Ev,
  (VTBL_ENTRY)&_ZN6S260C34v115Ev,
};
extern VTBL_ENTRY _ZTI6S260C3[];
extern  VTBL_ENTRY _ZTV6S260C3[];
Class_Descriptor cd_S260C3 = {  "S260C3", // class name
  bases_S260C3, 3,
  &(vtc_S260C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,220), // object size
  NSPAIRA(_ZTI6S260C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S260C3),114, //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  S260C2  : S260C3 {
  ::S287C19 s260c2f0;
  unsigned int s260c2f1:1;
  virtual  ~S260C2(); // _ZN6S260C2D1Ev
  virtual void  v116(); // _ZN6S260C24v116Ev
  virtual void  v117(); // _ZN6S260C24v117Ev
  virtual void  v118(); // _ZN6S260C24v118Ev
  virtual void  v119(); // _ZN6S260C24v119Ev
  virtual void  v120(); // _ZN6S260C24v120Ev
  virtual void  v121(); // _ZN6S260C24v121Ev
  virtual void  v122(); // _ZN6S260C24v122Ev
  S260C2(); // tgen
};
//SIG(-1 S260C2) C1{ BC2{ BC3{ BC4{ BC5{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 Fi[2] Fp Fi[2] FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} FC7 FC11{ m} FC7 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 Fi:1 Fi:1 Fi:1 FC12{ BC13{ BC10}} FC14{ BC15{ BC10}} FC16{ BC17{ BC10}} FC18{ BC19{ BC10}} Fi[3]} vd v114 v115 v116 v117 FC6 Fi:1 FC20{ BC21{ BC10}}} vd v1 v2 v3 v4 v5 v6 v7 FC22{ BC23{ BC10}} Fi:1}


 S260C2 ::~S260C2(){ note_dtor("S260C2", this);}
void  S260C2 ::v116(){vfunc_called(this, "_ZN6S260C24v116Ev");}
void  S260C2 ::v117(){vfunc_called(this, "_ZN6S260C24v117Ev");}
void  S260C2 ::v118(){vfunc_called(this, "_ZN6S260C24v118Ev");}
void  S260C2 ::v119(){vfunc_called(this, "_ZN6S260C24v119Ev");}
void  S260C2 ::v120(){vfunc_called(this, "_ZN6S260C24v120Ev");}
void  S260C2 ::v121(){vfunc_called(this, "_ZN6S260C24v121Ev");}
void  S260C2 ::v122(){vfunc_called(this, "_ZN6S260C24v122Ev");}
S260C2 ::S260C2(){ note_ctor("S260C2", this);} // tgen

static void Test_S260C2()
{
  extern Class_Descriptor cd_S260C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(41,60)];
    init_test(&cd_S260C2, buf);
    S260C2 *dp, &lv = *(dp=new (buf) S260C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,236), "sizeof(S260C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S260C2)");
    check_base_class_offset(lv, (S260C6*)(S260C5*)(S260C4*)(S260C3*), 0, "S260C2");
    check_base_class_offset(lv, (S260C5*)(S260C4*)(S260C3*), 0, "S260C2");
    check_base_class_offset(lv, (S260C4*)(S260C3*), 0, "S260C2");
    check_base_class_offset(lv, (S260C3*), 0, "S260C2");
    check_field_offset(lv, s260c2f0, ABISELECT(296,220), "S260C2.s260c2f0");
    set_bf_and_test(lv, s260c2f1, ABISELECT(312,232), 0, 1, 1, "S260C2");
    test_class_info(&lv, &cd_S260C2);
    dp->~S260C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS260C2(Test_S260C2, "S260C2", ABISELECT(320,236));

#else // __cplusplus

extern void _ZN6S260C2C1Ev();
extern void _ZN6S260C2D1Ev();
Name_Map name_map_S260C2[] = {
  NSPAIR(_ZN6S260C2C1Ev),
  NSPAIR(_ZN6S260C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S260C6;
extern VTBL_ENTRY _ZTI6S260C6[];
extern  VTBL_ENTRY _ZTV6S260C6[];
extern Class_Descriptor cd_S260C5;
extern VTBL_ENTRY _ZTI6S260C5[];
extern  VTBL_ENTRY _ZTV6S260C5[];
extern Class_Descriptor cd_S260C4;
extern VTBL_ENTRY _ZTI6S260C4[];
extern  VTBL_ENTRY _ZTV6S260C4[];
extern Class_Descriptor cd_S260C3;
extern VTBL_ENTRY _ZTI6S260C3[];
extern  VTBL_ENTRY _ZTV6S260C3[];
static Base_Class bases_S260C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S260C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S260C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S260C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S260C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S260C2[];
extern void _ZN6S260C2D1Ev();
extern void _ZN6S260C2D0Ev();
extern void _ZN6S260C62v6Ev();
extern void _ZN6S260C62v7Ev();
extern void _ZN6S260C62v8Ev();
extern void _ZN6S260C62v9Ev();
extern void _ZN6S260C63v10Ev();
extern void _ZN6S260C63v11Ev();
extern void _ZN6S260C63v12Ev();
extern void _ZN6S260C63v13Ev();
extern void _ZN6S260C63v14Ev();
extern void _ZN6S260C63v15Ev();
extern void _ZN6S260C63v16Ev();
extern void _ZN6S260C63v17Ev();
extern void _ZN6S260C63v18Ev();
extern void _ZN6S260C63v19Ev();
extern void _ZN6S260C63v20Ev();
extern void _ZN6S260C63v21Ev();
extern void _ZN6S260C63v22Ev();
extern void _ZN6S260C63v23Ev();
extern void _ZN6S260C63v24Ev();
extern void _ZN6S260C63v25Ev();
extern void _ZN6S260C63v26Ev();
extern void _ZN6S260C63v27Ev();
extern void _ZN6S260C63v28Ev();
extern void _ZN6S260C63v29Ev();
extern void _ZN6S260C63v30Ev();
extern void _ZN6S260C63v31Ev();
extern void _ZN6S260C63v32Ev();
extern void _ZN6S260C63v33Ev();
extern void _ZN6S260C63v34Ev();
extern void _ZN6S260C63v35Ev();
extern void _ZN6S260C63v36Ev();
extern void _ZN6S260C63v37Ev();
extern void _ZN6S260C63v38Ev();
extern void _ZN6S260C63v39Ev();
extern void _ZN6S260C63v40Ev();
extern void _ZN6S260C63v41Ev();
extern void _ZN6S260C63v42Ev();
extern void _ZN6S260C63v43Ev();
extern void _ZN6S260C63v44Ev();
extern void _ZN6S260C63v45Ev();
extern void _ZN6S260C63v46Ev();
extern void _ZN6S260C63v47Ev();
extern void _ZN6S260C63v48Ev();
extern void _ZN6S260C63v49Ev();
extern void _ZN6S260C63v50Ev();
extern void _ZN6S260C63v51Ev();
extern void _ZN6S260C63v52Ev();
extern void _ZN6S260C63v53Ev();
extern void _ZN6S260C63v54Ev();
extern void _ZN6S260C63v55Ev();
extern void _ZN6S260C63v56Ev();
extern void _ZN6S260C63v57Ev();
extern void _ZN6S260C63v58Ev();
extern void _ZN6S260C63v59Ev();
extern void _ZN6S260C63v60Ev();
extern void _ZN6S260C63v61Ev();
extern void _ZN6S260C63v62Ev();
extern void _ZN6S260C63v63Ev();
extern void _ZN6S260C63v64Ev();
extern void _ZN6S260C63v65Ev();
extern void _ZN6S260C63v66Ev();
extern void _ZN6S260C63v67Ev();
extern void _ZN6S260C63v68Ev();
extern void _ZN6S260C63v69Ev();
extern void _ZN6S260C53v70Ev();
extern void _ZN6S260C53v71Ev();
extern void _ZN6S260C53v72Ev();
extern void _ZN6S260C53v73Ev();
extern void _ZN6S260C53v74Ev();
extern void _ZN6S260C53v75Ev();
extern void _ZN6S260C53v76Ev();
extern void _ZN6S260C53v77Ev();
extern void _ZN6S260C53v78Ev();
extern void _ZN6S260C53v79Ev();
extern void _ZN6S260C53v80Ev();
extern void _ZN6S260C53v81Ev();
extern void _ZN6S260C53v82Ev();
extern void _ZN6S260C53v83Ev();
extern void _ZN6S260C53v84Ev();
extern void _ZN6S260C53v85Ev();
extern void _ZN6S260C53v86Ev();
extern void _ZN6S260C53v87Ev();
extern void _ZN6S260C53v88Ev();
extern void _ZN6S260C53v89Ev();
extern void _ZN6S260C53v90Ev();
extern void _ZN6S260C53v91Ev();
extern void _ZN6S260C43v92Ev();
extern void _ZN6S260C43v93Ev();
extern void _ZN6S260C43v94Ev();
extern void _ZN6S260C43v95Ev();
extern void _ZN6S260C43v96Ev();
extern void _ZN6S260C43v97Ev();
extern void _ZN6S260C43v98Ev();
extern void _ZN6S260C43v99Ev();
extern void _ZN6S260C44v100Ev();
extern void _ZN6S260C44v101Ev();
extern void _ZN6S260C44v102Ev();
extern void _ZN6S260C44v103Ev();
extern void _ZN6S260C44v104Ev();
extern void _ZN6S260C44v105Ev();
extern void _ZN6S260C44v106Ev();
extern void _ZN6S260C44v107Ev();
extern void _ZN6S260C44v108Ev();
extern void _ZN6S260C44v109Ev();
extern void _ZN6S260C44v110Ev();
extern void _ZN6S260C44v111Ev();
extern void _ZN6S260C34v112Ev();
extern void _ZN6S260C34v113Ev();
extern void _ZN6S260C34v114Ev();
extern void _ZN6S260C34v115Ev();
extern void _ZN6S260C24v116Ev();
extern void _ZN6S260C24v117Ev();
extern void _ZN6S260C24v118Ev();
extern void _ZN6S260C24v119Ev();
extern void _ZN6S260C24v120Ev();
extern void _ZN6S260C24v121Ev();
extern void _ZN6S260C24v122Ev();
static  VTBL_ENTRY vtc_S260C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S260C2[0]),
  (VTBL_ENTRY)&_ZN6S260C2D1Ev,
  (VTBL_ENTRY)&_ZN6S260C2D0Ev,
  (VTBL_ENTRY)&_ZN6S260C62v6Ev,
  (VTBL_ENTRY)&_ZN6S260C62v7Ev,
  (VTBL_ENTRY)&_ZN6S260C62v8Ev,
  (VTBL_ENTRY)&_ZN6S260C62v9Ev,
  (VTBL_ENTRY)&_ZN6S260C63v10Ev,
  (VTBL_ENTRY)&_ZN6S260C63v11Ev,
  (VTBL_ENTRY)&_ZN6S260C63v12Ev,
  (VTBL_ENTRY)&_ZN6S260C63v13Ev,
  (VTBL_ENTRY)&_ZN6S260C63v14Ev,
  (VTBL_ENTRY)&_ZN6S260C63v15Ev,
  (VTBL_ENTRY)&_ZN6S260C63v16Ev,
  (VTBL_ENTRY)&_ZN6S260C63v17Ev,
  (VTBL_ENTRY)&_ZN6S260C63v18Ev,
  (VTBL_ENTRY)&_ZN6S260C63v19Ev,
  (VTBL_ENTRY)&_ZN6S260C63v20Ev,
  (VTBL_ENTRY)&_ZN6S260C63v21Ev,
  (VTBL_ENTRY)&_ZN6S260C63v22Ev,
  (VTBL_ENTRY)&_ZN6S260C63v23Ev,
  (VTBL_ENTRY)&_ZN6S260C63v24Ev,
  (VTBL_ENTRY)&_ZN6S260C63v25Ev,
  (VTBL_ENTRY)&_ZN6S260C63v26Ev,
  (VTBL_ENTRY)&_ZN6S260C63v27Ev,
  (VTBL_ENTRY)&_ZN6S260C63v28Ev,
  (VTBL_ENTRY)&_ZN6S260C63v29Ev,
  (VTBL_ENTRY)&_ZN6S260C63v30Ev,
  (VTBL_ENTRY)&_ZN6S260C63v31Ev,
  (VTBL_ENTRY)&_ZN6S260C63v32Ev,
  (VTBL_ENTRY)&_ZN6S260C63v33Ev,
  (VTBL_ENTRY)&_ZN6S260C63v34Ev,
  (VTBL_ENTRY)&_ZN6S260C63v35Ev,
  (VTBL_ENTRY)&_ZN6S260C63v36Ev,
  (VTBL_ENTRY)&_ZN6S260C63v37Ev,
  (VTBL_ENTRY)&_ZN6S260C63v38Ev,
  (VTBL_ENTRY)&_ZN6S260C63v39Ev,
  (VTBL_ENTRY)&_ZN6S260C63v40Ev,
  (VTBL_ENTRY)&_ZN6S260C63v41Ev,
  (VTBL_ENTRY)&_ZN6S260C63v42Ev,
  (VTBL_ENTRY)&_ZN6S260C63v43Ev,
  (VTBL_ENTRY)&_ZN6S260C63v44Ev,
  (VTBL_ENTRY)&_ZN6S260C63v45Ev,
  (VTBL_ENTRY)&_ZN6S260C63v46Ev,
  (VTBL_ENTRY)&_ZN6S260C63v47Ev,
  (VTBL_ENTRY)&_ZN6S260C63v48Ev,
  (VTBL_ENTRY)&_ZN6S260C63v49Ev,
  (VTBL_ENTRY)&_ZN6S260C63v50Ev,
  (VTBL_ENTRY)&_ZN6S260C63v51Ev,
  (VTBL_ENTRY)&_ZN6S260C63v52Ev,
  (VTBL_ENTRY)&_ZN6S260C63v53Ev,
  (VTBL_ENTRY)&_ZN6S260C63v54Ev,
  (VTBL_ENTRY)&_ZN6S260C63v55Ev,
  (VTBL_ENTRY)&_ZN6S260C63v56Ev,
  (VTBL_ENTRY)&_ZN6S260C63v57Ev,
  (VTBL_ENTRY)&_ZN6S260C63v58Ev,
  (VTBL_ENTRY)&_ZN6S260C63v59Ev,
  (VTBL_ENTRY)&_ZN6S260C63v60Ev,
  (VTBL_ENTRY)&_ZN6S260C63v61Ev,
  (VTBL_ENTRY)&_ZN6S260C63v62Ev,
  (VTBL_ENTRY)&_ZN6S260C63v63Ev,
  (VTBL_ENTRY)&_ZN6S260C63v64Ev,
  (VTBL_ENTRY)&_ZN6S260C63v65Ev,
  (VTBL_ENTRY)&_ZN6S260C63v66Ev,
  (VTBL_ENTRY)&_ZN6S260C63v67Ev,
  (VTBL_ENTRY)&_ZN6S260C63v68Ev,
  (VTBL_ENTRY)&_ZN6S260C63v69Ev,
  (VTBL_ENTRY)&_ZN6S260C53v70Ev,
  (VTBL_ENTRY)&_ZN6S260C53v71Ev,
  (VTBL_ENTRY)&_ZN6S260C53v72Ev,
  (VTBL_ENTRY)&_ZN6S260C53v73Ev,
  (VTBL_ENTRY)&_ZN6S260C53v74Ev,
  (VTBL_ENTRY)&_ZN6S260C53v75Ev,
  (VTBL_ENTRY)&_ZN6S260C53v76Ev,
  (VTBL_ENTRY)&_ZN6S260C53v77Ev,
  (VTBL_ENTRY)&_ZN6S260C53v78Ev,
  (VTBL_ENTRY)&_ZN6S260C53v79Ev,
  (VTBL_ENTRY)&_ZN6S260C53v80Ev,
  (VTBL_ENTRY)&_ZN6S260C53v81Ev,
  (VTBL_ENTRY)&_ZN6S260C53v82Ev,
  (VTBL_ENTRY)&_ZN6S260C53v83Ev,
  (VTBL_ENTRY)&_ZN6S260C53v84Ev,
  (VTBL_ENTRY)&_ZN6S260C53v85Ev,
  (VTBL_ENTRY)&_ZN6S260C53v86Ev,
  (VTBL_ENTRY)&_ZN6S260C53v87Ev,
  (VTBL_ENTRY)&_ZN6S260C53v88Ev,
  (VTBL_ENTRY)&_ZN6S260C53v89Ev,
  (VTBL_ENTRY)&_ZN6S260C53v90Ev,
  (VTBL_ENTRY)&_ZN6S260C53v91Ev,
  (VTBL_ENTRY)&_ZN6S260C43v92Ev,
  (VTBL_ENTRY)&_ZN6S260C43v93Ev,
  (VTBL_ENTRY)&_ZN6S260C43v94Ev,
  (VTBL_ENTRY)&_ZN6S260C43v95Ev,
  (VTBL_ENTRY)&_ZN6S260C43v96Ev,
  (VTBL_ENTRY)&_ZN6S260C43v97Ev,
  (VTBL_ENTRY)&_ZN6S260C43v98Ev,
  (VTBL_ENTRY)&_ZN6S260C43v99Ev,
  (VTBL_ENTRY)&_ZN6S260C44v100Ev,
  (VTBL_ENTRY)&_ZN6S260C44v101Ev,
  (VTBL_ENTRY)&_ZN6S260C44v102Ev,
  (VTBL_ENTRY)&_ZN6S260C44v103Ev,
  (VTBL_ENTRY)&_ZN6S260C44v104Ev,
  (VTBL_ENTRY)&_ZN6S260C44v105Ev,
  (VTBL_ENTRY)&_ZN6S260C44v106Ev,
  (VTBL_ENTRY)&_ZN6S260C44v107Ev,
  (VTBL_ENTRY)&_ZN6S260C44v108Ev,
  (VTBL_ENTRY)&_ZN6S260C44v109Ev,
  (VTBL_ENTRY)&_ZN6S260C44v110Ev,
  (VTBL_ENTRY)&_ZN6S260C44v111Ev,
  (VTBL_ENTRY)&_ZN6S260C34v112Ev,
  (VTBL_ENTRY)&_ZN6S260C34v113Ev,
  (VTBL_ENTRY)&_ZN6S260C34v114Ev,
  (VTBL_ENTRY)&_ZN6S260C34v115Ev,
  (VTBL_ENTRY)&_ZN6S260C24v116Ev,
  (VTBL_ENTRY)&_ZN6S260C24v117Ev,
  (VTBL_ENTRY)&_ZN6S260C24v118Ev,
  (VTBL_ENTRY)&_ZN6S260C24v119Ev,
  (VTBL_ENTRY)&_ZN6S260C24v120Ev,
  (VTBL_ENTRY)&_ZN6S260C24v121Ev,
  (VTBL_ENTRY)&_ZN6S260C24v122Ev,
};
extern VTBL_ENTRY _ZTI6S260C2[];
extern  VTBL_ENTRY _ZTV6S260C2[];
Class_Descriptor cd_S260C2 = {  "S260C2", // class name
  bases_S260C2, 4,
  &(vtc_S260C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(320,236), // object size
  NSPAIRA(_ZTI6S260C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S260C2),121, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S260C26_nt  {
  int s260c26f0[5];
};
//SIG(-1 S260C26_nt) C1{ Fi[5]}



//skip512 S260C26_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S260C25_nt  {
  ::S260C26_nt s260c25f0;
  ::S3350C4_nt s260c25f1;
  void *s260c25f2;
  unsigned int s260c25f3:1;
};
//SIG(-1 S260C25_nt) C1{ FC2{ Fi[5]} FC3{ m Fi[2]} Fp Fi:1}



//skip512 S260C25_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S260C1  : S260C2 {
  ::S3350C4_nt s260c1f0;
  ::S3350C4_nt s260c1f1;
  void *s260c1f2;
  int s260c1f3[3];
  ::S260C25_nt s260c1f4;
  virtual  ~S260C1(); // _ZN6S260C1D1Ev
  virtual void  v1(); // _ZN6S260C12v1Ev
  virtual void  v2(); // _ZN6S260C12v2Ev
  virtual void  v3(); // _ZN6S260C12v3Ev
  virtual void  v4(); // _ZN6S260C12v4Ev
  virtual void  v5(); // _ZN6S260C12v5Ev
  S260C1(); // tgen
};
//SIG(1 S260C1) C1{ BC2{ BC3{ BC4{ BC5{ 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 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 FC7{ m Fi[2]} Fp[2]} vd v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 Fi[2] Fp Fi[2] FC8{ BC9{ BC10{ BC11{ m Fp Fi[2]}}}} FC8 FC12{ m} FC8 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 Fi:1 Fi:1 Fi:1 FC13{ BC14{ BC11}} FC15{ BC16{ BC11}} FC17{ BC18{ BC11}} FC19{ BC20{ BC11}} Fi[3]} vd v112 v113 v114 v115 FC7 Fi:1 FC21{ BC22{ BC11}}} vd v116 v117 v118 v119 v120 v121 v122 FC23{ BC24{ BC11}} Fi:1} vd v1 v2 v3 v4 v5 FC7 FC7 Fp Fi[3] FC25{ FC26{ Fi[5]} FC7 Fp Fi:1}}


 S260C1 ::~S260C1(){ note_dtor("S260C1", this);}
void  S260C1 ::v1(){vfunc_called(this, "_ZN6S260C12v1Ev");}
void  S260C1 ::v2(){vfunc_called(this, "_ZN6S260C12v2Ev");}
void  S260C1 ::v3(){vfunc_called(this, "_ZN6S260C12v3Ev");}
void  S260C1 ::v4(){vfunc_called(this, "_ZN6S260C12v4Ev");}
void  S260C1 ::v5(){vfunc_called(this, "_ZN6S260C12v5Ev");}
S260C1 ::S260C1(){ note_ctor("S260C1", this);} // tgen

static void Test_S260C1()
{
  extern Class_Descriptor cd_S260C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(52,77)];
    init_test(&cd_S260C1, buf);
    S260C1 *dp, &lv = *(dp=new (buf) S260C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(408,304), "sizeof(S260C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S260C1)");
    check_base_class_offset(lv, (S260C6*)(S260C5*)(S260C4*)(S260C3*)(S260C2*), 0, "S260C1");
    check_base_class_offset(lv, (S260C5*)(S260C4*)(S260C3*)(S260C2*), 0, "S260C1");
    check_base_class_offset(lv, (S260C4*)(S260C3*)(S260C2*), 0, "S260C1");
    check_base_class_offset(lv, (S260C3*)(S260C2*), 0, "S260C1");
    check_base_class_offset(lv, (S260C2*), 0, "S260C1");
    check_field_offset(lv, s260c1f0, ABISELECT(316,236), "S260C1.s260c1f0");
    check_field_offset(lv, s260c1f1, ABISELECT(324,244), "S260C1.s260c1f1");
    check_field_offset(lv, s260c1f2, ABISELECT(336,252), "S260C1.s260c1f2");
    check_field_offset(lv, s260c1f3, ABISELECT(344,256), "S260C1.s260c1f3");
    check_field_offset(lv, s260c1f4, ABISELECT(360,268), "S260C1.s260c1f4");
    test_class_info(&lv, &cd_S260C1);
    dp->~S260C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS260C1(Test_S260C1, "S260C1", ABISELECT(408,304));

#else // __cplusplus

extern void _ZN6S260C1C1Ev();
extern void _ZN6S260C1D1Ev();
Name_Map name_map_S260C1[] = {
  NSPAIR(_ZN6S260C1C1Ev),
  NSPAIR(_ZN6S260C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S260C6;
extern VTBL_ENTRY _ZTI6S260C6[];
extern  VTBL_ENTRY _ZTV6S260C6[];
extern Class_Descriptor cd_S260C5;
extern VTBL_ENTRY _ZTI6S260C5[];
extern  VTBL_ENTRY _ZTV6S260C5[];
extern Class_Descriptor cd_S260C4;
extern VTBL_ENTRY _ZTI6S260C4[];
extern  VTBL_ENTRY _ZTV6S260C4[];
extern Class_Descriptor cd_S260C3;
extern VTBL_ENTRY _ZTI6S260C3[];
extern  VTBL_ENTRY _ZTV6S260C3[];
extern Class_Descriptor cd_S260C2;
extern VTBL_ENTRY _ZTI6S260C2[];
extern  VTBL_ENTRY _ZTV6S260C2[];
static Base_Class bases_S260C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S260C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S260C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S260C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S260C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S260C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S260C1[];
extern void _ZN6S260C1D1Ev();
extern void _ZN6S260C1D0Ev();
extern void _ZN6S260C62v6Ev();
extern void _ZN6S260C62v7Ev();
extern void _ZN6S260C62v8Ev();
extern void _ZN6S260C62v9Ev();
extern void _ZN6S260C63v10Ev();
extern void _ZN6S260C63v11Ev();
extern void _ZN6S260C63v12Ev();
extern void _ZN6S260C63v13Ev();
extern void _ZN6S260C63v14Ev();
extern void _ZN6S260C63v15Ev();
extern void _ZN6S260C63v16Ev();
extern void _ZN6S260C63v17Ev();
extern void _ZN6S260C63v18Ev();
extern void _ZN6S260C63v19Ev();
extern void _ZN6S260C63v20Ev();
extern void _ZN6S260C63v21Ev();
extern void _ZN6S260C63v22Ev();
extern void _ZN6S260C63v23Ev();
extern void _ZN6S260C63v24Ev();
extern void _ZN6S260C63v25Ev();
extern void _ZN6S260C63v26Ev();
extern void _ZN6S260C63v27Ev();
extern void _ZN6S260C63v28Ev();
extern void _ZN6S260C63v29Ev();
extern void _ZN6S260C63v30Ev();
extern void _ZN6S260C63v31Ev();
extern void _ZN6S260C63v32Ev();
extern void _ZN6S260C63v33Ev();
extern void _ZN6S260C63v34Ev();
extern void _ZN6S260C63v35Ev();
extern void _ZN6S260C63v36Ev();
extern void _ZN6S260C63v37Ev();
extern void _ZN6S260C63v38Ev();
extern void _ZN6S260C63v39Ev();
extern void _ZN6S260C63v40Ev();
extern void _ZN6S260C63v41Ev();
extern void _ZN6S260C63v42Ev();
extern void _ZN6S260C63v43Ev();
extern void _ZN6S260C63v44Ev();
extern void _ZN6S260C63v45Ev();
extern void _ZN6S260C63v46Ev();
extern void _ZN6S260C63v47Ev();
extern void _ZN6S260C63v48Ev();
extern void _ZN6S260C63v49Ev();
extern void _ZN6S260C63v50Ev();
extern void _ZN6S260C63v51Ev();
extern void _ZN6S260C63v52Ev();
extern void _ZN6S260C63v53Ev();
extern void _ZN6S260C63v54Ev();
extern void _ZN6S260C63v55Ev();
extern void _ZN6S260C63v56Ev();
extern void _ZN6S260C63v57Ev();
extern void _ZN6S260C63v58Ev();
extern void _ZN6S260C63v59Ev();
extern void _ZN6S260C63v60Ev();
extern void _ZN6S260C63v61Ev();
extern void _ZN6S260C63v62Ev();
extern void _ZN6S260C63v63Ev();
extern void _ZN6S260C63v64Ev();
extern void _ZN6S260C63v65Ev();
extern void _ZN6S260C63v66Ev();
extern void _ZN6S260C63v67Ev();
extern void _ZN6S260C63v68Ev();
extern void _ZN6S260C63v69Ev();
extern void _ZN6S260C53v70Ev();
extern void _ZN6S260C53v71Ev();
extern void _ZN6S260C53v72Ev();
extern void _ZN6S260C53v73Ev();
extern void _ZN6S260C53v74Ev();
extern void _ZN6S260C53v75Ev();
extern void _ZN6S260C53v76Ev();
extern void _ZN6S260C53v77Ev();
extern void _ZN6S260C53v78Ev();
extern void _ZN6S260C53v79Ev();
extern void _ZN6S260C53v80Ev();
extern void _ZN6S260C53v81Ev();
extern void _ZN6S260C53v82Ev();
extern void _ZN6S260C53v83Ev();
extern void _ZN6S260C53v84Ev();
extern void _ZN6S260C53v85Ev();
extern void _ZN6S260C53v86Ev();
extern void _ZN6S260C53v87Ev();
extern void _ZN6S260C53v88Ev();
extern void _ZN6S260C53v89Ev();
extern void _ZN6S260C53v90Ev();
extern void _ZN6S260C53v91Ev();
extern void _ZN6S260C43v92Ev();
extern void _ZN6S260C43v93Ev();
extern void _ZN6S260C43v94Ev();
extern void _ZN6S260C43v95Ev();
extern void _ZN6S260C43v96Ev();
extern void _ZN6S260C43v97Ev();
extern void _ZN6S260C43v98Ev();
extern void _ZN6S260C43v99Ev();
extern void _ZN6S260C44v100Ev();
extern void _ZN6S260C44v101Ev();
extern void _ZN6S260C44v102Ev();
extern void _ZN6S260C44v103Ev();
extern void _ZN6S260C44v104Ev();
extern void _ZN6S260C44v105Ev();
extern void _ZN6S260C44v106Ev();
extern void _ZN6S260C44v107Ev();
extern void _ZN6S260C44v108Ev();
extern void _ZN6S260C44v109Ev();
extern void _ZN6S260C44v110Ev();
extern void _ZN6S260C44v111Ev();
extern void _ZN6S260C34v112Ev();
extern void _ZN6S260C34v113Ev();
extern void _ZN6S260C34v114Ev();
extern void _ZN6S260C34v115Ev();
extern void _ZN6S260C24v116Ev();
extern void _ZN6S260C24v117Ev();
extern void _ZN6S260C24v118Ev();
extern void _ZN6S260C24v119Ev();
extern void _ZN6S260C24v120Ev();
extern void _ZN6S260C24v121Ev();
extern void _ZN6S260C24v122Ev();
extern void _ZN6S260C12v1Ev();
extern void _ZN6S260C12v2Ev();
extern void _ZN6S260C12v3Ev();
extern void _ZN6S260C12v4Ev();
extern void _ZN6S260C12v5Ev();
static  VTBL_ENTRY vtc_S260C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S260C1[0]),
  (VTBL_ENTRY)&_ZN6S260C1D1Ev,
  (VTBL_ENTRY)&_ZN6S260C1D0Ev,
  (VTBL_ENTRY)&_ZN6S260C62v6Ev,
  (VTBL_ENTRY)&_ZN6S260C62v7Ev,
  (VTBL_ENTRY)&_ZN6S260C62v8Ev,
  (VTBL_ENTRY)&_ZN6S260C62v9Ev,
  (VTBL_ENTRY)&_ZN6S260C63v10Ev,
  (VTBL_ENTRY)&_ZN6S260C63v11Ev,
  (VTBL_ENTRY)&_ZN6S260C63v12Ev,
  (VTBL_ENTRY)&_ZN6S260C63v13Ev,
  (VTBL_ENTRY)&_ZN6S260C63v14Ev,
  (VTBL_ENTRY)&_ZN6S260C63v15Ev,
  (VTBL_ENTRY)&_ZN6S260C63v16Ev,
  (VTBL_ENTRY)&_ZN6S260C63v17Ev,
  (VTBL_ENTRY)&_ZN6S260C63v18Ev,
  (VTBL_ENTRY)&_ZN6S260C63v19Ev,
  (VTBL_ENTRY)&_ZN6S260C63v20Ev,
  (VTBL_ENTRY)&_ZN6S260C63v21Ev,
  (VTBL_ENTRY)&_ZN6S260C63v22Ev,
  (VTBL_ENTRY)&_ZN6S260C63v23Ev,
  (VTBL_ENTRY)&_ZN6S260C63v24Ev,
  (VTBL_ENTRY)&_ZN6S260C63v25Ev,
  (VTBL_ENTRY)&_ZN6S260C63v26Ev,
  (VTBL_ENTRY)&_ZN6S260C63v27Ev,
  (VTBL_ENTRY)&_ZN6S260C63v28Ev,
  (VTBL_ENTRY)&_ZN6S260C63v29Ev,
  (VTBL_ENTRY)&_ZN6S260C63v30Ev,
  (VTBL_ENTRY)&_ZN6S260C63v31Ev,
  (VTBL_ENTRY)&_ZN6S260C63v32Ev,
  (VTBL_ENTRY)&_ZN6S260C63v33Ev,
  (VTBL_ENTRY)&_ZN6S260C63v34Ev,
  (VTBL_ENTRY)&_ZN6S260C63v35Ev,
  (VTBL_ENTRY)&_ZN6S260C63v36Ev,
  (VTBL_ENTRY)&_ZN6S260C63v37Ev,
  (VTBL_ENTRY)&_ZN6S260C63v38Ev,
  (VTBL_ENTRY)&_ZN6S260C63v39Ev,
  (VTBL_ENTRY)&_ZN6S260C63v40Ev,
  (VTBL_ENTRY)&_ZN6S260C63v41Ev,
  (VTBL_ENTRY)&_ZN6S260C63v42Ev,
  (VTBL_ENTRY)&_ZN6S260C63v43Ev,
  (VTBL_ENTRY)&_ZN6S260C63v44Ev,
  (VTBL_ENTRY)&_ZN6S260C63v45Ev,
  (VTBL_ENTRY)&_ZN6S260C63v46Ev,
  (VTBL_ENTRY)&_ZN6S260C63v47Ev,
  (VTBL_ENTRY)&_ZN6S260C63v48Ev,
  (VTBL_ENTRY)&_ZN6S260C63v49Ev,
  (VTBL_ENTRY)&_ZN6S260C63v50Ev,
  (VTBL_ENTRY)&_ZN6S260C63v51Ev,
  (VTBL_ENTRY)&_ZN6S260C63v52Ev,
  (VTBL_ENTRY)&_ZN6S260C63v53Ev,
  (VTBL_ENTRY)&_ZN6S260C63v54Ev,
  (VTBL_ENTRY)&_ZN6S260C63v55Ev,
  (VTBL_ENTRY)&_ZN6S260C63v56Ev,
  (VTBL_ENTRY)&_ZN6S260C63v57Ev,
  (VTBL_ENTRY)&_ZN6S260C63v58Ev,
  (VTBL_ENTRY)&_ZN6S260C63v59Ev,
  (VTBL_ENTRY)&_ZN6S260C63v60Ev,
  (VTBL_ENTRY)&_ZN6S260C63v61Ev,
  (VTBL_ENTRY)&_ZN6S260C63v62Ev,
  (VTBL_ENTRY)&_ZN6S260C63v63Ev,
  (VTBL_ENTRY)&_ZN6S260C63v64Ev,
  (VTBL_ENTRY)&_ZN6S260C63v65Ev,
  (VTBL_ENTRY)&_ZN6S260C63v66Ev,
  (VTBL_ENTRY)&_ZN6S260C63v67Ev,
  (VTBL_ENTRY)&_ZN6S260C63v68Ev,
  (VTBL_ENTRY)&_ZN6S260C63v69Ev,
  (VTBL_ENTRY)&_ZN6S260C53v70Ev,
  (VTBL_ENTRY)&_ZN6S260C53v71Ev,
  (VTBL_ENTRY)&_ZN6S260C53v72Ev,
  (VTBL_ENTRY)&_ZN6S260C53v73Ev,
  (VTBL_ENTRY)&_ZN6S260C53v74Ev,
  (VTBL_ENTRY)&_ZN6S260C53v75Ev,
  (VTBL_ENTRY)&_ZN6S260C53v76Ev,
  (VTBL_ENTRY)&_ZN6S260C53v77Ev,
  (VTBL_ENTRY)&_ZN6S260C53v78Ev,
  (VTBL_ENTRY)&_ZN6S260C53v79Ev,
  (VTBL_ENTRY)&_ZN6S260C53v80Ev,
  (VTBL_ENTRY)&_ZN6S260C53v81Ev,
  (VTBL_ENTRY)&_ZN6S260C53v82Ev,
  (VTBL_ENTRY)&_ZN6S260C53v83Ev,
  (VTBL_ENTRY)&_ZN6S260C53v84Ev,
  (VTBL_ENTRY)&_ZN6S260C53v85Ev,
  (VTBL_ENTRY)&_ZN6S260C53v86Ev,
  (VTBL_ENTRY)&_ZN6S260C53v87Ev,
  (VTBL_ENTRY)&_ZN6S260C53v88Ev,
  (VTBL_ENTRY)&_ZN6S260C53v89Ev,
  (VTBL_ENTRY)&_ZN6S260C53v90Ev,
  (VTBL_ENTRY)&_ZN6S260C53v91Ev,
  (VTBL_ENTRY)&_ZN6S260C43v92Ev,
  (VTBL_ENTRY)&_ZN6S260C43v93Ev,
  (VTBL_ENTRY)&_ZN6S260C43v94Ev,
  (VTBL_ENTRY)&_ZN6S260C43v95Ev,
  (VTBL_ENTRY)&_ZN6S260C43v96Ev,
  (VTBL_ENTRY)&_ZN6S260C43v97Ev,
  (VTBL_ENTRY)&_ZN6S260C43v98Ev,
  (VTBL_ENTRY)&_ZN6S260C43v99Ev,
  (VTBL_ENTRY)&_ZN6S260C44v100Ev,
  (VTBL_ENTRY)&_ZN6S260C44v101Ev,
  (VTBL_ENTRY)&_ZN6S260C44v102Ev,
  (VTBL_ENTRY)&_ZN6S260C44v103Ev,
  (VTBL_ENTRY)&_ZN6S260C44v104Ev,
  (VTBL_ENTRY)&_ZN6S260C44v105Ev,
  (VTBL_ENTRY)&_ZN6S260C44v106Ev,
  (VTBL_ENTRY)&_ZN6S260C44v107Ev,
  (VTBL_ENTRY)&_ZN6S260C44v108Ev,
  (VTBL_ENTRY)&_ZN6S260C44v109Ev,
  (VTBL_ENTRY)&_ZN6S260C44v110Ev,
  (VTBL_ENTRY)&_ZN6S260C44v111Ev,
  (VTBL_ENTRY)&_ZN6S260C34v112Ev,
  (VTBL_ENTRY)&_ZN6S260C34v113Ev,
  (VTBL_ENTRY)&_ZN6S260C34v114Ev,
  (VTBL_ENTRY)&_ZN6S260C34v115Ev,
  (VTBL_ENTRY)&_ZN6S260C24v116Ev,
  (VTBL_ENTRY)&_ZN6S260C24v117Ev,
  (VTBL_ENTRY)&_ZN6S260C24v118Ev,
  (VTBL_ENTRY)&_ZN6S260C24v119Ev,
  (VTBL_ENTRY)&_ZN6S260C24v120Ev,
  (VTBL_ENTRY)&_ZN6S260C24v121Ev,
  (VTBL_ENTRY)&_ZN6S260C24v122Ev,
  (VTBL_ENTRY)&_ZN6S260C12v1Ev,
  (VTBL_ENTRY)&_ZN6S260C12v2Ev,
  (VTBL_ENTRY)&_ZN6S260C12v3Ev,
  (VTBL_ENTRY)&_ZN6S260C12v4Ev,
  (VTBL_ENTRY)&_ZN6S260C12v5Ev,
};
extern VTBL_ENTRY _ZTI6S260C1[];
extern  VTBL_ENTRY _ZTV6S260C1[];
Class_Descriptor cd_S260C1 = {  "S260C1", // class name
  bases_S260C1, 5,
  &(vtc_S260C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(408,304), // object size
  NSPAIRA(_ZTI6S260C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S260C1),126, //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  S72C7  {
  int s72c7f0;
  __tsi64 s72c7f1;
  void *s72c7f2[4];
  int s72c7f3[2];
  void *s72c7f4;
  ::S3350C4_nt s72c7f5;
  void *s72c7f6[2];
  virtual  ~S72C7(); // _ZN5S72C7D1Ev
  virtual void  v4(); // _ZN5S72C72v4Ev
  virtual void  v5(); // _ZN5S72C72v5Ev
  virtual void  v6(); // _ZN5S72C72v6Ev
  virtual void  v7(); // _ZN5S72C72v7Ev
  virtual void  v8(); // _ZN5S72C72v8Ev
  virtual void  v9(); // _ZN5S72C72v9Ev
  virtual void  v10(); // _ZN5S72C73v10Ev
  virtual void  v11(); // _ZN5S72C73v11Ev
  virtual void  v12(); // _ZN5S72C73v12Ev
  virtual void  v13(); // _ZN5S72C73v13Ev
  virtual void  v14(); // _ZN5S72C73v14Ev
  virtual void  v15(); // _ZN5S72C73v15Ev
  virtual void  v16(); // _ZN5S72C73v16Ev
  virtual void  v17(); // _ZN5S72C73v17Ev
  virtual void  v18(); // _ZN5S72C73v18Ev
  virtual void  v19(); // _ZN5S72C73v19Ev
  virtual void  v20(); // _ZN5S72C73v20Ev
  virtual void  v21(); // _ZN5S72C73v21Ev
  virtual void  v22(); // _ZN5S72C73v22Ev
  virtual void  v23(); // _ZN5S72C73v23Ev
  virtual void  v24(); // _ZN5S72C73v24Ev
  virtual void  v25(); // _ZN5S72C73v25Ev
  virtual void  v26(); // _ZN5S72C73v26Ev
  virtual void  v27(); // _ZN5S72C73v27Ev
  virtual void  v28(); // _ZN5S72C73v28Ev
  virtual void  v29(); // _ZN5S72C73v29Ev
  virtual void  v30(); // _ZN5S72C73v30Ev
  virtual void  v31(); // _ZN5S72C73v31Ev
  virtual void  v32(); // _ZN5S72C73v32Ev
  virtual void  v33(); // _ZN5S72C73v33Ev
  virtual void  v34(); // _ZN5S72C73v34Ev
  virtual void  v35(); // _ZN5S72C73v35Ev
  virtual void  v36(); // _ZN5S72C73v36Ev
  virtual void  v37(); // _ZN5S72C73v37Ev
  virtual void  v38(); // _ZN5S72C73v38Ev
  virtual void  v39(); // _ZN5S72C73v39Ev
  virtual void  v40(); // _ZN5S72C73v40Ev
  virtual void  v41(); // _ZN5S72C73v41Ev
  virtual void  v42(); // _ZN5S72C73v42Ev
  virtual void  v43(); // _ZN5S72C73v43Ev
  virtual void  v44(); // _ZN5S72C73v44Ev
  virtual void  v45(); // _ZN5S72C73v45Ev
  virtual void  v46(); // _ZN5S72C73v46Ev
  virtual void  v47(); // _ZN5S72C73v47Ev
  virtual void  v48(); // _ZN5S72C73v48Ev
  virtual void  v49(); // _ZN5S72C73v49Ev
  virtual void  v50(); // _ZN5S72C73v50Ev
  virtual void  v51(); // _ZN5S72C73v51Ev
  virtual void  v52(); // _ZN5S72C73v52Ev
  virtual void  v53(); // _ZN5S72C73v53Ev
  virtual void  v54(); // _ZN5S72C73v54Ev
  virtual void  v55(); // _ZN5S72C73v55Ev
  virtual void  v56(); // _ZN5S72C73v56Ev
  virtual void  v57(); // _ZN5S72C73v57Ev
  virtual void  v58(); // _ZN5S72C73v58Ev
  virtual void  v59(); // _ZN5S72C73v59Ev
  virtual void  v60(); // _ZN5S72C73v60Ev
  virtual void  v61(); // _ZN5S72C73v61Ev
  virtual void  v62(); // _ZN5S72C73v62Ev
  virtual void  v63(); // _ZN5S72C73v63Ev
  virtual void  v64(); // _ZN5S72C73v64Ev
  virtual void  v65(); // _ZN5S72C73v65Ev
  virtual void  v66(); // _ZN5S72C73v66Ev
  virtual void  v67(); // _ZN5S72C73v67Ev
  S72C7(); // tgen
};
//SIG(-1 S72C7) 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]}


 S72C7 ::~S72C7(){ note_dtor("S72C7", this);}
void  S72C7 ::v4(){vfunc_called(this, "_ZN5S72C72v4Ev");}
void  S72C7 ::v5(){vfunc_called(this, "_ZN5S72C72v5Ev");}
void  S72C7 ::v6(){vfunc_called(this, "_ZN5S72C72v6Ev");}
void  S72C7 ::v7(){vfunc_called(this, "_ZN5S72C72v7Ev");}
void  S72C7 ::v8(){vfunc_called(this, "_ZN5S72C72v8Ev");}
void  S72C7 ::v9(){vfunc_called(this, "_ZN5S72C72v9Ev");}
void  S72C7 ::v10(){vfunc_called(this, "_ZN5S72C73v10Ev");}
void  S72C7 ::v11(){vfunc_called(this, "_ZN5S72C73v11Ev");}
void  S72C7 ::v12(){vfunc_called(this, "_ZN5S72C73v12Ev");}
void  S72C7 ::v13(){vfunc_called(this, "_ZN5S72C73v13Ev");}
void  S72C7 ::v14(){vfunc_called(this, "_ZN5S72C73v14Ev");}
void  S72C7 ::v15(){vfunc_called(this, "_ZN5S72C73v15Ev");}
void  S72C7 ::v16(){vfunc_called(this, "_ZN5S72C73v16Ev");}
void  S72C7 ::v17(){vfunc_called(this, "_ZN5S72C73v17Ev");}
void  S72C7 ::v18(){vfunc_called(this, "_ZN5S72C73v18Ev");}
void  S72C7 ::v19(){vfunc_called(this, "_ZN5S72C73v19Ev");}
void  S72C7 ::v20(){vfunc_called(this, "_ZN5S72C73v20Ev");}
void  S72C7 ::v21(){vfunc_called(this, "_ZN5S72C73v21Ev");}
void  S72C7 ::v22(){vfunc_called(this, "_ZN5S72C73v22Ev");}
void  S72C7 ::v23(){vfunc_called(this, "_ZN5S72C73v23Ev");}
void  S72C7 ::v24(){vfunc_called(this, "_ZN5S72C73v24Ev");}
void  S72C7 ::v25(){vfunc_called(this, "_ZN5S72C73v25Ev");}
void  S72C7 ::v26(){vfunc_called(this, "_ZN5S72C73v26Ev");}
void  S72C7 ::v27(){vfunc_called(this, "_ZN5S72C73v27Ev");}
void  S72C7 ::v28(){vfunc_called(this, "_ZN5S72C73v28Ev");}
void  S72C7 ::v29(){vfunc_called(this, "_ZN5S72C73v29Ev");}
void  S72C7 ::v30(){vfunc_called(this, "_ZN5S72C73v30Ev");}
void  S72C7 ::v31(){vfunc_called(this, "_ZN5S72C73v31Ev");}
void  S72C7 ::v32(){vfunc_called(this, "_ZN5S72C73v32Ev");}
void  S72C7 ::v33(){vfunc_called(this, "_ZN5S72C73v33Ev");}
void  S72C7 ::v34(){vfunc_called(this, "_ZN5S72C73v34Ev");}
void  S72C7 ::v35(){vfunc_called(this, "_ZN5S72C73v35Ev");}
void  S72C7 ::v36(){vfunc_called(this, "_ZN5S72C73v36Ev");}
void  S72C7 ::v37(){vfunc_called(this, "_ZN5S72C73v37Ev");}
void  S72C7 ::v38(){vfunc_called(this, "_ZN5S72C73v38Ev");}
void  S72C7 ::v39(){vfunc_called(this, "_ZN5S72C73v39Ev");}
void  S72C7 ::v40(){vfunc_called(this, "_ZN5S72C73v40Ev");}
void  S72C7 ::v41(){vfunc_called(this, "_ZN5S72C73v41Ev");}
void  S72C7 ::v42(){vfunc_called(this, "_ZN5S72C73v42Ev");}
void  S72C7 ::v43(){vfunc_called(this, "_ZN5S72C73v43Ev");}
void  S72C7 ::v44(){vfunc_called(this, "_ZN5S72C73v44Ev");}
void  S72C7 ::v45(){vfunc_called(this, "_ZN5S72C73v45Ev");}
void  S72C7 ::v46(){vfunc_called(this, "_ZN5S72C73v46Ev");}
void  S72C7 ::v47(){vfunc_called(this, "_ZN5S72C73v47Ev");}
void  S72C7 ::v48(){vfunc_called(this, "_ZN5S72C73v48Ev");}
void  S72C7 ::v49(){vfunc_called(this, "_ZN5S72C73v49Ev");}
void  S72C7 ::v50(){vfunc_called(this, "_ZN5S72C73v50Ev");}
void  S72C7 ::v51(){vfunc_called(this, "_ZN5S72C73v51Ev");}
void  S72C7 ::v52(){vfunc_called(this, "_ZN5S72C73v52Ev");}
void  S72C7 ::v53(){vfunc_called(this, "_ZN5S72C73v53Ev");}
void  S72C7 ::v54(){vfunc_called(this, "_ZN5S72C73v54Ev");}
void  S72C7 ::v55(){vfunc_called(this, "_ZN5S72C73v55Ev");}
void  S72C7 ::v56(){vfunc_called(this, "_ZN5S72C73v56Ev");}
void  S72C7 ::v57(){vfunc_called(this, "_ZN5S72C73v57Ev");}
void  S72C7 ::v58(){vfunc_called(this, "_ZN5S72C73v58Ev");}
void  S72C7 ::v59(){vfunc_called(this, "_ZN5S72C73v59Ev");}
void  S72C7 ::v60(){vfunc_called(this, "_ZN5S72C73v60Ev");}
void  S72C7 ::v61(){vfunc_called(this, "_ZN5S72C73v61Ev");}
void  S72C7 ::v62(){vfunc_called(this, "_ZN5S72C73v62Ev");}
void  S72C7 ::v63(){vfunc_called(this, "_ZN5S72C73v63Ev");}
void  S72C7 ::v64(){vfunc_called(this, "_ZN5S72C73v64Ev");}
void  S72C7 ::v65(){vfunc_called(this, "_ZN5S72C73v65Ev");}
void  S72C7 ::v66(){vfunc_called(this, "_ZN5S72C73v66Ev");}
void  S72C7 ::v67(){vfunc_called(this, "_ZN5S72C73v67Ev");}
S72C7 ::S72C7(){ note_ctor("S72C7", this);} // tgen

static void Test_S72C7()
{
  extern Class_Descriptor cd_S72C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S72C7, buf);
    S72C7 *dp, &lv = *(dp=new (buf) S72C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S72C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S72C7)");
    check_field_offset(lv, s72c7f0, ABISELECT(8,4), "S72C7.s72c7f0");
    check_field_offset(lv, s72c7f1, ABISELECT(16,8), "S72C7.s72c7f1");
    check_field_offset(lv, s72c7f2, ABISELECT(24,16), "S72C7.s72c7f2");
    check_field_offset(lv, s72c7f3, ABISELECT(56,32), "S72C7.s72c7f3");
    check_field_offset(lv, s72c7f4, ABISELECT(64,40), "S72C7.s72c7f4");
    check_field_offset(lv, s72c7f5, ABISELECT(72,44), "S72C7.s72c7f5");
    check_field_offset(lv, s72c7f6, ABISELECT(80,52), "S72C7.s72c7f6");
    test_class_info(&lv, &cd_S72C7);
    dp->~S72C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS72C7(Test_S72C7, "S72C7", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN5S72C7C1Ev();
extern void _ZN5S72C7D1Ev();
Name_Map name_map_S72C7[] = {
  NSPAIR(_ZN5S72C7C1Ev),
  NSPAIR(_ZN5S72C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI5S72C7[];
extern void _ZN5S72C7D1Ev();
extern void _ZN5S72C7D0Ev();
extern void _ZN5S72C72v4Ev();
extern void _ZN5S72C72v5Ev();
extern void _ZN5S72C72v6Ev();
extern void _ZN5S72C72v7Ev();
extern void _ZN5S72C72v8Ev();
extern void _ZN5S72C72v9Ev();
extern void _ZN5S72C73v10Ev();
extern void _ZN5S72C73v11Ev();
extern void _ZN5S72C73v12Ev();
extern void _ZN5S72C73v13Ev();
extern void _ZN5S72C73v14Ev();
extern void _ZN5S72C73v15Ev();
extern void _ZN5S72C73v16Ev();
extern void _ZN5S72C73v17Ev();
extern void _ZN5S72C73v18Ev();
extern void _ZN5S72C73v19Ev();
extern void _ZN5S72C73v20Ev();
extern void _ZN5S72C73v21Ev();
extern void _ZN5S72C73v22Ev();
extern void _ZN5S72C73v23Ev();
extern void _ZN5S72C73v24Ev();
extern void _ZN5S72C73v25Ev();
extern void _ZN5S72C73v26Ev();
extern void _ZN5S72C73v27Ev();
extern void _ZN5S72C73v28Ev();
extern void _ZN5S72C73v29Ev();
extern void _ZN5S72C73v30Ev();
extern void _ZN5S72C73v31Ev();
extern void _ZN5S72C73v32Ev();
extern void _ZN5S72C73v33Ev();
extern void _ZN5S72C73v34Ev();
extern void _ZN5S72C73v35Ev();
extern void _ZN5S72C73v36Ev();
extern void _ZN5S72C73v37Ev();
extern void _ZN5S72C73v38Ev();
extern void _ZN5S72C73v39Ev();
extern void _ZN5S72C73v40Ev();
extern void _ZN5S72C73v41Ev();
extern void _ZN5S72C73v42Ev();
extern void _ZN5S72C73v43Ev();
extern void _ZN5S72C73v44Ev();
extern void _ZN5S72C73v45Ev();
extern void _ZN5S72C73v46Ev();
extern void _ZN5S72C73v47Ev();
extern void _ZN5S72C73v48Ev();
extern void _ZN5S72C73v49Ev();
extern void _ZN5S72C73v50Ev();
extern void _ZN5S72C73v51Ev();
extern void _ZN5S72C73v52Ev();
extern void _ZN5S72C73v53Ev();
extern void _ZN5S72C73v54Ev();
extern void _ZN5S72C73v55Ev();
extern void _ZN5S72C73v56Ev();
extern void _ZN5S72C73v57Ev();
extern void _ZN5S72C73v58Ev();
extern void _ZN5S72C73v59Ev();
extern void _ZN5S72C73v60Ev();
extern void _ZN5S72C73v61Ev();
extern void _ZN5S72C73v62Ev();
extern void _ZN5S72C73v63Ev();
extern void _ZN5S72C73v64Ev();
extern void _ZN5S72C73v65Ev();
extern void _ZN5S72C73v66Ev();
extern void _ZN5S72C73v67Ev();
static  VTBL_ENTRY vtc_S72C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S72C7[0]),
  (VTBL_ENTRY)&_ZN5S72C7D1Ev,
  (VTBL_ENTRY)&_ZN5S72C7D0Ev,
  (VTBL_ENTRY)&_ZN5S72C72v4Ev,
  (VTBL_ENTRY)&_ZN5S72C72v5Ev,
  (VTBL_ENTRY)&_ZN5S72C72v6Ev,
  (VTBL_ENTRY)&_ZN5S72C72v7Ev,
  (VTBL_ENTRY)&_ZN5S72C72v8Ev,
  (VTBL_ENTRY)&_ZN5S72C72v9Ev,
  (VTBL_ENTRY)&_ZN5S72C73v10Ev,
  (VTBL_ENTRY)&_ZN5S72C73v11Ev,
  (VTBL_ENTRY)&_ZN5S72C73v12Ev,
  (VTBL_ENTRY)&_ZN5S72C73v13Ev,
  (VTBL_ENTRY)&_ZN5S72C73v14Ev,
  (VTBL_ENTRY)&_ZN5S72C73v15Ev,
  (VTBL_ENTRY)&_ZN5S72C73v16Ev,
  (VTBL_ENTRY)&_ZN5S72C73v17Ev,
  (VTBL_ENTRY)&_ZN5S72C73v18Ev,
  (VTBL_ENTRY)&_ZN5S72C73v19Ev,
  (VTBL_ENTRY)&_ZN5S72C73v20Ev,
  (VTBL_ENTRY)&_ZN5S72C73v21Ev,
  (VTBL_ENTRY)&_ZN5S72C73v22Ev,
  (VTBL_ENTRY)&_ZN5S72C73v23Ev,
  (VTBL_ENTRY)&_ZN5S72C73v24Ev,
  (VTBL_ENTRY)&_ZN5S72C73v25Ev,
  (VTBL_ENTRY)&_ZN5S72C73v26Ev,
  (VTBL_ENTRY)&_ZN5S72C73v27Ev,
  (VTBL_ENTRY)&_ZN5S72C73v28Ev,
  (VTBL_ENTRY)&_ZN5S72C73v29Ev,
  (VTBL_ENTRY)&_ZN5S72C73v30Ev,
  (VTBL_ENTRY)&_ZN5S72C73v31Ev,
  (VTBL_ENTRY)&_ZN5S72C73v32Ev,
  (VTBL_ENTRY)&_ZN5S72C73v33Ev,
  (VTBL_ENTRY)&_ZN5S72C73v34Ev,
  (VTBL_ENTRY)&_ZN5S72C73v35Ev,
  (VTBL_ENTRY)&_ZN5S72C73v36Ev,
  (VTBL_ENTRY)&_ZN5S72C73v37Ev,
  (VTBL_ENTRY)&_ZN5S72C73v38Ev,
  (VTBL_ENTRY)&_ZN5S72C73v39Ev,
  (VTBL_ENTRY)&_ZN5S72C73v40Ev,
  (VTBL_ENTRY)&_ZN5S72C73v41Ev,
  (VTBL_ENTRY)&_ZN5S72C73v42Ev,
  (VTBL_ENTRY)&_ZN5S72C73v43Ev,
  (VTBL_ENTRY)&_ZN5S72C73v44Ev,
  (VTBL_ENTRY)&_ZN5S72C73v45Ev,
  (VTBL_ENTRY)&_ZN5S72C73v46Ev,
  (VTBL_ENTRY)&_ZN5S72C73v47Ev,
  (VTBL_ENTRY)&_ZN5S72C73v48Ev,
  (VTBL_ENTRY)&_ZN5S72C73v49Ev,
  (VTBL_ENTRY)&_ZN5S72C73v50Ev,
  (VTBL_ENTRY)&_ZN5S72C73v51Ev,
  (VTBL_ENTRY)&_ZN5S72C73v52Ev,
  (VTBL_ENTRY)&_ZN5S72C73v53Ev,
  (VTBL_ENTRY)&_ZN5S72C73v54Ev,
  (VTBL_ENTRY)&_ZN5S72C73v55Ev,
  (VTBL_ENTRY)&_ZN5S72C73v56Ev,
  (VTBL_ENTRY)&_ZN5S72C73v57Ev,
  (VTBL_ENTRY)&_ZN5S72C73v58Ev,
  (VTBL_ENTRY)&_ZN5S72C73v59Ev,
  (VTBL_ENTRY)&_ZN5S72C73v60Ev,
  (VTBL_ENTRY)&_ZN5S72C73v61Ev,
  (VTBL_ENTRY)&_ZN5S72C73v62Ev,
  (VTBL_ENTRY)&_ZN5S72C73v63Ev,
  (VTBL_ENTRY)&_ZN5S72C73v64Ev,
  (VTBL_ENTRY)&_ZN5S72C73v65Ev,
  (VTBL_ENTRY)&_ZN5S72C73v66Ev,
  (VTBL_ENTRY)&_ZN5S72C73v67Ev,
};
extern VTBL_ENTRY _ZTI5S72C7[];
extern  VTBL_ENTRY _ZTV5S72C7[];
Class_Descriptor cd_S72C7 = {  "S72C7", // class name
  0,0,//no base classes
  &(vtc_S72C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI5S72C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV5S72C7),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  S72C6  : S72C7 {
  int s72c6f0[2];
  void *s72c6f1;
  int s72c6f2[2];
  ::S287C8_nt s72c6f3;
  ::S287C8_nt s72c6f4;
  ::S2121C38 s72c6f5;
  ::S287C8_nt s72c6f6;
  unsigned int s72c6f7:1;
  unsigned int s72c6f8:1;
  unsigned int s72c6f9:1;
  unsigned int s72c6f10:1;
  unsigned int s72c6f11:1;
  int s72c6f12[2];
  virtual  ~S72C6(); // _ZN5S72C6D1Ev
  virtual void  v68(); // _ZN5S72C63v68Ev
  virtual void  v69(); // _ZN5S72C63v69Ev
  virtual void  v70(); // _ZN5S72C63v70Ev
  virtual void  v71(); // _ZN5S72C63v71Ev
  virtual void  v72(); // _ZN5S72C63v72Ev
  virtual void  v73(); // _ZN5S72C63v73Ev
  virtual void  v74(); // _ZN5S72C63v74Ev
  virtual void  v75(); // _ZN5S72C63v75Ev
  virtual void  v76(); // _ZN5S72C63v76Ev
  virtual void  v77(); // _ZN5S72C63v77Ev
  virtual void  v78(); // _ZN5S72C63v78Ev
  virtual void  v79(); // _ZN5S72C63v79Ev
  virtual void  v80(); // _ZN5S72C63v80Ev
  virtual void  v81(); // _ZN5S72C63v81Ev
  virtual void  v82(); // _ZN5S72C63v82Ev
  virtual void  v83(); // _ZN5S72C63v83Ev
  virtual void  v84(); // _ZN5S72C63v84Ev
  virtual void  v85(); // _ZN5S72C63v85Ev
  virtual void  v86(); // _ZN5S72C63v86Ev
  virtual void  v87(); // _ZN5S72C63v87Ev
  virtual void  v88(); // _ZN5S72C63v88Ev
  virtual void  v89(); // _ZN5S72C63v89Ev
  S72C6(); // tgen
};
//SIG(-1 S72C6) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S72C6 ::~S72C6(){ note_dtor("S72C6", this);}
void  S72C6 ::v68(){vfunc_called(this, "_ZN5S72C63v68Ev");}
void  S72C6 ::v69(){vfunc_called(this, "_ZN5S72C63v69Ev");}
void  S72C6 ::v70(){vfunc_called(this, "_ZN5S72C63v70Ev");}
void  S72C6 ::v71(){vfunc_called(this, "_ZN5S72C63v71Ev");}
void  S72C6 ::v72(){vfunc_called(this, "_ZN5S72C63v72Ev");}
void  S72C6 ::v73(){vfunc_called(this, "_ZN5S72C63v73Ev");}
void  S72C6 ::v74(){vfunc_called(this, "_ZN5S72C63v74Ev");}
void  S72C6 ::v75(){vfunc_called(this, "_ZN5S72C63v75Ev");}
void  S72C6 ::v76(){vfunc_called(this, "_ZN5S72C63v76Ev");}
void  S72C6 ::v77(){vfunc_called(this, "_ZN5S72C63v77Ev");}
void  S72C6 ::v78(){vfunc_called(this, "_ZN5S72C63v78Ev");}
void  S72C6 ::v79(){vfunc_called(this, "_ZN5S72C63v79Ev");}
void  S72C6 ::v80(){vfunc_called(this, "_ZN5S72C63v80Ev");}
void  S72C6 ::v81(){vfunc_called(this, "_ZN5S72C63v81Ev");}
void  S72C6 ::v82(){vfunc_called(this, "_ZN5S72C63v82Ev");}
void  S72C6 ::v83(){vfunc_called(this, "_ZN5S72C63v83Ev");}
void  S72C6 ::v84(){vfunc_called(this, "_ZN5S72C63v84Ev");}
void  S72C6 ::v85(){vfunc_called(this, "_ZN5S72C63v85Ev");}
void  S72C6 ::v86(){vfunc_called(this, "_ZN5S72C63v86Ev");}
void  S72C6 ::v87(){vfunc_called(this, "_ZN5S72C63v87Ev");}
void  S72C6 ::v88(){vfunc_called(this, "_ZN5S72C63v88Ev");}
void  S72C6 ::v89(){vfunc_called(this, "_ZN5S72C63v89Ev");}
S72C6 ::S72C6(){ note_ctor("S72C6", this);} // tgen

static void Test_S72C6()
{
  extern Class_Descriptor cd_S72C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S72C6, buf);
    S72C6 *dp, &lv = *(dp=new (buf) S72C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S72C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S72C6)");
    check_base_class_offset(lv, (S72C7*), 0, "S72C6");
    check_field_offset(lv, s72c6f0, ABISELECT(96,60), "S72C6.s72c6f0");
    check_field_offset(lv, s72c6f1, ABISELECT(104,68), "S72C6.s72c6f1");
    check_field_offset(lv, s72c6f2, ABISELECT(112,72), "S72C6.s72c6f2");
    check_field_offset(lv, s72c6f3, ABISELECT(120,80), "S72C6.s72c6f3");
    check_field_offset(lv, s72c6f4, ABISELECT(136,92), "S72C6.s72c6f4");
    check_field_offset(lv, s72c6f5, ABISELECT(152,104), "S72C6.s72c6f5");
    check_field_offset(lv, s72c6f6, ABISELECT(160,108), "S72C6.s72c6f6");
    set_bf_and_test(lv, s72c6f7, ABISELECT(176,120), 0, 1, 1, "S72C6");
    set_bf_and_test(lv, s72c6f8, ABISELECT(176,120), 1, 1, 1, "S72C6");
    set_bf_and_test(lv, s72c6f9, ABISELECT(176,120), 2, 1, 1, "S72C6");
    set_bf_and_test(lv, s72c6f10, ABISELECT(176,120), 3, 1, 1, "S72C6");
    set_bf_and_test(lv, s72c6f11, ABISELECT(176,120), 4, 1, 1, "S72C6");
    check_field_offset(lv, s72c6f12, ABISELECT(180,124), "S72C6.s72c6f12");
    test_class_info(&lv, &cd_S72C6);
    dp->~S72C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS72C6(Test_S72C6, "S72C6", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN5S72C6C1Ev();
extern void _ZN5S72C6D1Ev();
Name_Map name_map_S72C6[] = {
  NSPAIR(_ZN5S72C6C1Ev),
  NSPAIR(_ZN5S72C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S72C7;
extern VTBL_ENTRY _ZTI5S72C7[];
extern  VTBL_ENTRY _ZTV5S72C7[];
static Base_Class bases_S72C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S72C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI5S72C6[];
extern void _ZN5S72C6D1Ev();
extern void _ZN5S72C6D0Ev();
extern void _ZN5S72C72v4Ev();
extern void _ZN5S72C72v5Ev();
extern void _ZN5S72C72v6Ev();
extern void _ZN5S72C72v7Ev();
extern void _ZN5S72C72v8Ev();
extern void _ZN5S72C72v9Ev();
extern void _ZN5S72C73v10Ev();
extern void _ZN5S72C73v11Ev();
extern void _ZN5S72C73v12Ev();
extern void _ZN5S72C73v13Ev();
extern void _ZN5S72C73v14Ev();
extern void _ZN5S72C73v15Ev();
extern void _ZN5S72C73v16Ev();
extern void _ZN5S72C73v17Ev();
extern void _ZN5S72C73v18Ev();
extern void _ZN5S72C73v19Ev();
extern void _ZN5S72C73v20Ev();
extern void _ZN5S72C73v21Ev();
extern void _ZN5S72C73v22Ev();
extern void _ZN5S72C73v23Ev();
extern void _ZN5S72C73v24Ev();
extern void _ZN5S72C73v25Ev();
extern void _ZN5S72C73v26Ev();
extern void _ZN5S72C73v27Ev();
extern void _ZN5S72C73v28Ev();
extern void _ZN5S72C73v29Ev();
extern void _ZN5S72C73v30Ev();
extern void _ZN5S72C73v31Ev();
extern void _ZN5S72C73v32Ev();
extern void _ZN5S72C73v33Ev();
extern void _ZN5S72C73v34Ev();
extern void _ZN5S72C73v35Ev();
extern void _ZN5S72C73v36Ev();
extern void _ZN5S72C73v37Ev();
extern void _ZN5S72C73v38Ev();
extern void _ZN5S72C73v39Ev();
extern void _ZN5S72C73v40Ev();
extern void _ZN5S72C73v41Ev();
extern void _ZN5S72C73v42Ev();
extern void _ZN5S72C73v43Ev();
extern void _ZN5S72C73v44Ev();
extern void _ZN5S72C73v45Ev();
extern void _ZN5S72C73v46Ev();
extern void _ZN5S72C73v47Ev();
extern void _ZN5S72C73v48Ev();
extern void _ZN5S72C73v49Ev();
extern void _ZN5S72C73v50Ev();
extern void _ZN5S72C73v51Ev();
extern void _ZN5S72C73v52Ev();
extern void _ZN5S72C73v53Ev();
extern void _ZN5S72C73v54Ev();
extern void _ZN5S72C73v55Ev();
extern void _ZN5S72C73v56Ev();
extern void _ZN5S72C73v57Ev();
extern void _ZN5S72C73v58Ev();
extern void _ZN5S72C73v59Ev();
extern void _ZN5S72C73v60Ev();
extern void _ZN5S72C73v61Ev();
extern void _ZN5S72C73v62Ev();
extern void _ZN5S72C73v63Ev();
extern void _ZN5S72C73v64Ev();
extern void _ZN5S72C73v65Ev();
extern void _ZN5S72C73v66Ev();
extern void _ZN5S72C73v67Ev();
extern void _ZN5S72C63v68Ev();
extern void _ZN5S72C63v69Ev();
extern void _ZN5S72C63v70Ev();
extern void _ZN5S72C63v71Ev();
extern void _ZN5S72C63v72Ev();
extern void _ZN5S72C63v73Ev();
extern void _ZN5S72C63v74Ev();
extern void _ZN5S72C63v75Ev();
extern void _ZN5S72C63v76Ev();
extern void _ZN5S72C63v77Ev();
extern void _ZN5S72C63v78Ev();
extern void _ZN5S72C63v79Ev();
extern void _ZN5S72C63v80Ev();
extern void _ZN5S72C63v81Ev();
extern void _ZN5S72C63v82Ev();
extern void _ZN5S72C63v83Ev();
extern void _ZN5S72C63v84Ev();
extern void _ZN5S72C63v85Ev();
extern void _ZN5S72C63v86Ev();
extern void _ZN5S72C63v87Ev();
extern void _ZN5S72C63v88Ev();
extern void _ZN5S72C63v89Ev();
static  VTBL_ENTRY vtc_S72C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S72C6[0]),
  (VTBL_ENTRY)&_ZN5S72C6D1Ev,
  (VTBL_ENTRY)&_ZN5S72C6D0Ev,
  (VTBL_ENTRY)&_ZN5S72C72v4Ev,
  (VTBL_ENTRY)&_ZN5S72C72v5Ev,
  (VTBL_ENTRY)&_ZN5S72C72v6Ev,
  (VTBL_ENTRY)&_ZN5S72C72v7Ev,
  (VTBL_ENTRY)&_ZN5S72C72v8Ev,
  (VTBL_ENTRY)&_ZN5S72C72v9Ev,
  (VTBL_ENTRY)&_ZN5S72C73v10Ev,
  (VTBL_ENTRY)&_ZN5S72C73v11Ev,
  (VTBL_ENTRY)&_ZN5S72C73v12Ev,
  (VTBL_ENTRY)&_ZN5S72C73v13Ev,
  (VTBL_ENTRY)&_ZN5S72C73v14Ev,
  (VTBL_ENTRY)&_ZN5S72C73v15Ev,
  (VTBL_ENTRY)&_ZN5S72C73v16Ev,
  (VTBL_ENTRY)&_ZN5S72C73v17Ev,
  (VTBL_ENTRY)&_ZN5S72C73v18Ev,
  (VTBL_ENTRY)&_ZN5S72C73v19Ev,
  (VTBL_ENTRY)&_ZN5S72C73v20Ev,
  (VTBL_ENTRY)&_ZN5S72C73v21Ev,
  (VTBL_ENTRY)&_ZN5S72C73v22Ev,
  (VTBL_ENTRY)&_ZN5S72C73v23Ev,
  (VTBL_ENTRY)&_ZN5S72C73v24Ev,
  (VTBL_ENTRY)&_ZN5S72C73v25Ev,
  (VTBL_ENTRY)&_ZN5S72C73v26Ev,
  (VTBL_ENTRY)&_ZN5S72C73v27Ev,
  (VTBL_ENTRY)&_ZN5S72C73v28Ev,
  (VTBL_ENTRY)&_ZN5S72C73v29Ev,
  (VTBL_ENTRY)&_ZN5S72C73v30Ev,
  (VTBL_ENTRY)&_ZN5S72C73v31Ev,
  (VTBL_ENTRY)&_ZN5S72C73v32Ev,
  (VTBL_ENTRY)&_ZN5S72C73v33Ev,
  (VTBL_ENTRY)&_ZN5S72C73v34Ev,
  (VTBL_ENTRY)&_ZN5S72C73v35Ev,
  (VTBL_ENTRY)&_ZN5S72C73v36Ev,
  (VTBL_ENTRY)&_ZN5S72C73v37Ev,
  (VTBL_ENTRY)&_ZN5S72C73v38Ev,
  (VTBL_ENTRY)&_ZN5S72C73v39Ev,
  (VTBL_ENTRY)&_ZN5S72C73v40Ev,
  (VTBL_ENTRY)&_ZN5S72C73v41Ev,
  (VTBL_ENTRY)&_ZN5S72C73v42Ev,
  (VTBL_ENTRY)&_ZN5S72C73v43Ev,
  (VTBL_ENTRY)&_ZN5S72C73v44Ev,
  (VTBL_ENTRY)&_ZN5S72C73v45Ev,
  (VTBL_ENTRY)&_ZN5S72C73v46Ev,
  (VTBL_ENTRY)&_ZN5S72C73v47Ev,
  (VTBL_ENTRY)&_ZN5S72C73v48Ev,
  (VTBL_ENTRY)&_ZN5S72C73v49Ev,
  (VTBL_ENTRY)&_ZN5S72C73v50Ev,
  (VTBL_ENTRY)&_ZN5S72C73v51Ev,
  (VTBL_ENTRY)&_ZN5S72C73v52Ev,
  (VTBL_ENTRY)&_ZN5S72C73v53Ev,
  (VTBL_ENTRY)&_ZN5S72C73v54Ev,
  (VTBL_ENTRY)&_ZN5S72C73v55Ev,
  (VTBL_ENTRY)&_ZN5S72C73v56Ev,
  (VTBL_ENTRY)&_ZN5S72C73v57Ev,
  (VTBL_ENTRY)&_ZN5S72C73v58Ev,
  (VTBL_ENTRY)&_ZN5S72C73v59Ev,
  (VTBL_ENTRY)&_ZN5S72C73v60Ev,
  (VTBL_ENTRY)&_ZN5S72C73v61Ev,
  (VTBL_ENTRY)&_ZN5S72C73v62Ev,
  (VTBL_ENTRY)&_ZN5S72C73v63Ev,
  (VTBL_ENTRY)&_ZN5S72C73v64Ev,
  (VTBL_ENTRY)&_ZN5S72C73v65Ev,
  (VTBL_ENTRY)&_ZN5S72C73v66Ev,
  (VTBL_ENTRY)&_ZN5S72C73v67Ev,
  (VTBL_ENTRY)&_ZN5S72C63v68Ev,
  (VTBL_ENTRY)&_ZN5S72C63v69Ev,
  (VTBL_ENTRY)&_ZN5S72C63v70Ev,
  (VTBL_ENTRY)&_ZN5S72C63v71Ev,
  (VTBL_ENTRY)&_ZN5S72C63v72Ev,
  (VTBL_ENTRY)&_ZN5S72C63v73Ev,
  (VTBL_ENTRY)&_ZN5S72C63v74Ev,
  (VTBL_ENTRY)&_ZN5S72C63v75Ev,
  (VTBL_ENTRY)&_ZN5S72C63v76Ev,
  (VTBL_ENTRY)&_ZN5S72C63v77Ev,
  (VTBL_ENTRY)&_ZN5S72C63v78Ev,
  (VTBL_ENTRY)&_ZN5S72C63v79Ev,
  (VTBL_ENTRY)&_ZN5S72C63v80Ev,
  (VTBL_ENTRY)&_ZN5S72C63v81Ev,
  (VTBL_ENTRY)&_ZN5S72C63v82Ev,
  (VTBL_ENTRY)&_ZN5S72C63v83Ev,
  (VTBL_ENTRY)&_ZN5S72C63v84Ev,
  (VTBL_ENTRY)&_ZN5S72C63v85Ev,
  (VTBL_ENTRY)&_ZN5S72C63v86Ev,
  (VTBL_ENTRY)&_ZN5S72C63v87Ev,
  (VTBL_ENTRY)&_ZN5S72C63v88Ev,
  (VTBL_ENTRY)&_ZN5S72C63v89Ev,
};
extern VTBL_ENTRY _ZTI5S72C6[];
extern  VTBL_ENTRY _ZTV5S72C6[];
Class_Descriptor cd_S72C6 = {  "S72C6", // class name
  bases_S72C6, 1,
  &(vtc_S72C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI5S72C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S72C6),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S72C5  : S72C6 {
  unsigned int s72c5f0:1;
  unsigned int s72c5f1:1;
  unsigned int s72c5f2:1;
  ::S3350C17 s72c5f3;
  ::S3350C11 s72c5f4;
  ::S3350C5_nt s72c5f5;
  ::S287C27 s72c5f6;
  int s72c5f7[3];
  virtual  ~S72C5(); // _ZN5S72C5D1Ev
  virtual void  v90(); // _ZN5S72C53v90Ev
  virtual void  v91(); // _ZN5S72C53v91Ev
  virtual void  v92(); // _ZN5S72C53v92Ev
  virtual void  v93(); // _ZN5S72C53v93Ev
  virtual void  v94(); // _ZN5S72C53v94Ev
  virtual void  v95(); // _ZN5S72C53v95Ev
  virtual void  v96(); // _ZN5S72C53v96Ev
  virtual void  v97(); // _ZN5S72C53v97Ev
  virtual void  v98(); // _ZN5S72C53v98Ev
  virtual void  v99(); // _ZN5S72C53v99Ev
  virtual void  v100(); // _ZN5S72C54v100Ev
  virtual void  v101(); // _ZN5S72C54v101Ev
  virtual void  v102(); // _ZN5S72C54v102Ev
  virtual void  v103(); // _ZN5S72C54v103Ev
  virtual void  v104(); // _ZN5S72C54v104Ev
  virtual void  v105(); // _ZN5S72C54v105Ev
  virtual void  v106(); // _ZN5S72C54v106Ev
  virtual void  v107(); // _ZN5S72C54v107Ev
  virtual void  v108(); // _ZN5S72C54v108Ev
  virtual void  v109(); // _ZN5S72C54v109Ev
  S72C5(); // tgen
};
//SIG(-1 S72C5) C1{ BC2{ BC3{ vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 FC10{ BC11{ BC8}} FC12{ BC13{ BC8}} FC14{ BC15{ BC8}} FC16{ BC17{ BC8}} Fi[3]}


 S72C5 ::~S72C5(){ note_dtor("S72C5", this);}
void  S72C5 ::v90(){vfunc_called(this, "_ZN5S72C53v90Ev");}
void  S72C5 ::v91(){vfunc_called(this, "_ZN5S72C53v91Ev");}
void  S72C5 ::v92(){vfunc_called(this, "_ZN5S72C53v92Ev");}
void  S72C5 ::v93(){vfunc_called(this, "_ZN5S72C53v93Ev");}
void  S72C5 ::v94(){vfunc_called(this, "_ZN5S72C53v94Ev");}
void  S72C5 ::v95(){vfunc_called(this, "_ZN5S72C53v95Ev");}
void  S72C5 ::v96(){vfunc_called(this, "_ZN5S72C53v96Ev");}
void  S72C5 ::v97(){vfunc_called(this, "_ZN5S72C53v97Ev");}
void  S72C5 ::v98(){vfunc_called(this, "_ZN5S72C53v98Ev");}
void  S72C5 ::v99(){vfunc_called(this, "_ZN5S72C53v99Ev");}
void  S72C5 ::v100(){vfunc_called(this, "_ZN5S72C54v100Ev");}
void  S72C5 ::v101(){vfunc_called(this, "_ZN5S72C54v101Ev");}
void  S72C5 ::v102(){vfunc_called(this, "_ZN5S72C54v102Ev");}
void  S72C5 ::v103(){vfunc_called(this, "_ZN5S72C54v103Ev");}
void  S72C5 ::v104(){vfunc_called(this, "_ZN5S72C54v104Ev");}
void  S72C5 ::v105(){vfunc_called(this, "_ZN5S72C54v105Ev");}
void  S72C5 ::v106(){vfunc_called(this, "_ZN5S72C54v106Ev");}
void  S72C5 ::v107(){vfunc_called(this, "_ZN5S72C54v107Ev");}
void  S72C5 ::v108(){vfunc_called(this, "_ZN5S72C54v108Ev");}
void  S72C5 ::v109(){vfunc_called(this, "_ZN5S72C54v109Ev");}
S72C5 ::S72C5(){ note_ctor("S72C5", this);} // tgen

static void Test_S72C5()
{
  extern Class_Descriptor cd_S72C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S72C5, buf);
    S72C5 *dp, &lv = *(dp=new (buf) S72C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S72C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S72C5)");
    check_base_class_offset(lv, (S72C7*)(S72C6*), 0, "S72C5");
    check_base_class_offset(lv, (S72C6*), 0, "S72C5");
    set_bf_and_test(lv, s72c5f0, ABISELECT(188,132), 0, 1, 1, "S72C5");
    set_bf_and_test(lv, s72c5f1, ABISELECT(188,132), 1, 1, 1, "S72C5");
    set_bf_and_test(lv, s72c5f2, ABISELECT(188,132), 2, 1, 1, "S72C5");
    check_field_offset(lv, s72c5f3, ABISELECT(192,136), "S72C5.s72c5f3");
    check_field_offset(lv, s72c5f4, ABISELECT(208,148), "S72C5.s72c5f4");
    check_field_offset(lv, s72c5f5, ABISELECT(224,160), "S72C5.s72c5f5");
    check_field_offset(lv, s72c5f6, ABISELECT(240,172), "S72C5.s72c5f6");
    check_field_offset(lv, s72c5f7, ABISELECT(256,184), "S72C5.s72c5f7");
    test_class_info(&lv, &cd_S72C5);
    dp->~S72C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS72C5(Test_S72C5, "S72C5", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN5S72C5C1Ev();
extern void _ZN5S72C5D1Ev();
Name_Map name_map_S72C5[] = {
  NSPAIR(_ZN5S72C5C1Ev),
  NSPAIR(_ZN5S72C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S72C7;
extern VTBL_ENTRY _ZTI5S72C7[];
extern  VTBL_ENTRY _ZTV5S72C7[];
extern Class_Descriptor cd_S72C6;
extern VTBL_ENTRY _ZTI5S72C6[];
extern  VTBL_ENTRY _ZTV5S72C6[];
static Base_Class bases_S72C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S72C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S72C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S72C5[];
extern void _ZN5S72C5D1Ev();
extern void _ZN5S72C5D0Ev();
extern void _ZN5S72C72v4Ev();
extern void _ZN5S72C72v5Ev();
extern void _ZN5S72C72v6Ev();
extern void _ZN5S72C72v7Ev();
extern void _ZN5S72C72v8Ev();
extern void _ZN5S72C72v9Ev();
extern void _ZN5S72C73v10Ev();
extern void _ZN5S72C73v11Ev();
extern void _ZN5S72C73v12Ev();
extern void _ZN5S72C73v13Ev();
extern void _ZN5S72C73v14Ev();
extern void _ZN5S72C73v15Ev();
extern void _ZN5S72C73v16Ev();
extern void _ZN5S72C73v17Ev();
extern void _ZN5S72C73v18Ev();
extern void _ZN5S72C73v19Ev();
extern void _ZN5S72C73v20Ev();
extern void _ZN5S72C73v21Ev();
extern void _ZN5S72C73v22Ev();
extern void _ZN5S72C73v23Ev();
extern void _ZN5S72C73v24Ev();
extern void _ZN5S72C73v25Ev();
extern void _ZN5S72C73v26Ev();
extern void _ZN5S72C73v27Ev();
extern void _ZN5S72C73v28Ev();
extern void _ZN5S72C73v29Ev();
extern void _ZN5S72C73v30Ev();
extern void _ZN5S72C73v31Ev();
extern void _ZN5S72C73v32Ev();
extern void _ZN5S72C73v33Ev();
extern void _ZN5S72C73v34Ev();
extern void _ZN5S72C73v35Ev();
extern void _ZN5S72C73v36Ev();
extern void _ZN5S72C73v37Ev();
extern void _ZN5S72C73v38Ev();
extern void _ZN5S72C73v39Ev();
extern void _ZN5S72C73v40Ev();
extern void _ZN5S72C73v41Ev();
extern void _ZN5S72C73v42Ev();
extern void _ZN5S72C73v43Ev();
extern void _ZN5S72C73v44Ev();
extern void _ZN5S72C73v45Ev();
extern void _ZN5S72C73v46Ev();
extern void _ZN5S72C73v47Ev();
extern void _ZN5S72C73v48Ev();
extern void _ZN5S72C73v49Ev();
extern void _ZN5S72C73v50Ev();
extern void _ZN5S72C73v51Ev();
extern void _ZN5S72C73v52Ev();
extern void _ZN5S72C73v53Ev();
extern void _ZN5S72C73v54Ev();
extern void _ZN5S72C73v55Ev();
extern void _ZN5S72C73v56Ev();
extern void _ZN5S72C73v57Ev();
extern void _ZN5S72C73v58Ev();
extern void _ZN5S72C73v59Ev();
extern void _ZN5S72C73v60Ev();
extern void _ZN5S72C73v61Ev();
extern void _ZN5S72C73v62Ev();
extern void _ZN5S72C73v63Ev();
extern void _ZN5S72C73v64Ev();
extern void _ZN5S72C73v65Ev();
extern void _ZN5S72C73v66Ev();
extern void _ZN5S72C73v67Ev();
extern void _ZN5S72C63v68Ev();
extern void _ZN5S72C63v69Ev();
extern void _ZN5S72C63v70Ev();
extern void _ZN5S72C63v71Ev();
extern void _ZN5S72C63v72Ev();
extern void _ZN5S72C63v73Ev();
extern void _ZN5S72C63v74Ev();
extern void _ZN5S72C63v75Ev();
extern void _ZN5S72C63v76Ev();
extern void _ZN5S72C63v77Ev();
extern void _ZN5S72C63v78Ev();
extern void _ZN5S72C63v79Ev();
extern void _ZN5S72C63v80Ev();
extern void _ZN5S72C63v81Ev();
extern void _ZN5S72C63v82Ev();
extern void _ZN5S72C63v83Ev();
extern void _ZN5S72C63v84Ev();
extern void _ZN5S72C63v85Ev();
extern void _ZN5S72C63v86Ev();
extern void _ZN5S72C63v87Ev();
extern void _ZN5S72C63v88Ev();
extern void _ZN5S72C63v89Ev();
extern void _ZN5S72C53v90Ev();
extern void _ZN5S72C53v91Ev();
extern void _ZN5S72C53v92Ev();
extern void _ZN5S72C53v93Ev();
extern void _ZN5S72C53v94Ev();
extern void _ZN5S72C53v95Ev();
extern void _ZN5S72C53v96Ev();
extern void _ZN5S72C53v97Ev();
extern void _ZN5S72C53v98Ev();
extern void _ZN5S72C53v99Ev();
extern void _ZN5S72C54v100Ev();
extern void _ZN5S72C54v101Ev();
extern void _ZN5S72C54v102Ev();
extern void _ZN5S72C54v103Ev();
extern void _ZN5S72C54v104Ev();
extern void _ZN5S72C54v105Ev();
extern void _ZN5S72C54v106Ev();
extern void _ZN5S72C54v107Ev();
extern void _ZN5S72C54v108Ev();
extern void _ZN5S72C54v109Ev();
static  VTBL_ENTRY vtc_S72C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S72C5[0]),
  (VTBL_ENTRY)&_ZN5S72C5D1Ev,
  (VTBL_ENTRY)&_ZN5S72C5D0Ev,
  (VTBL_ENTRY)&_ZN5S72C72v4Ev,
  (VTBL_ENTRY)&_ZN5S72C72v5Ev,
  (VTBL_ENTRY)&_ZN5S72C72v6Ev,
  (VTBL_ENTRY)&_ZN5S72C72v7Ev,
  (VTBL_ENTRY)&_ZN5S72C72v8Ev,
  (VTBL_ENTRY)&_ZN5S72C72v9Ev,
  (VTBL_ENTRY)&_ZN5S72C73v10Ev,
  (VTBL_ENTRY)&_ZN5S72C73v11Ev,
  (VTBL_ENTRY)&_ZN5S72C73v12Ev,
  (VTBL_ENTRY)&_ZN5S72C73v13Ev,
  (VTBL_ENTRY)&_ZN5S72C73v14Ev,
  (VTBL_ENTRY)&_ZN5S72C73v15Ev,
  (VTBL_ENTRY)&_ZN5S72C73v16Ev,
  (VTBL_ENTRY)&_ZN5S72C73v17Ev,
  (VTBL_ENTRY)&_ZN5S72C73v18Ev,
  (VTBL_ENTRY)&_ZN5S72C73v19Ev,
  (VTBL_ENTRY)&_ZN5S72C73v20Ev,
  (VTBL_ENTRY)&_ZN5S72C73v21Ev,
  (VTBL_ENTRY)&_ZN5S72C73v22Ev,
  (VTBL_ENTRY)&_ZN5S72C73v23Ev,
  (VTBL_ENTRY)&_ZN5S72C73v24Ev,
  (VTBL_ENTRY)&_ZN5S72C73v25Ev,
  (VTBL_ENTRY)&_ZN5S72C73v26Ev,
  (VTBL_ENTRY)&_ZN5S72C73v27Ev,
  (VTBL_ENTRY)&_ZN5S72C73v28Ev,
  (VTBL_ENTRY)&_ZN5S72C73v29Ev,
  (VTBL_ENTRY)&_ZN5S72C73v30Ev,
  (VTBL_ENTRY)&_ZN5S72C73v31Ev,
  (VTBL_ENTRY)&_ZN5S72C73v32Ev,
  (VTBL_ENTRY)&_ZN5S72C73v33Ev,
  (VTBL_ENTRY)&_ZN5S72C73v34Ev,
  (VTBL_ENTRY)&_ZN5S72C73v35Ev,
  (VTBL_ENTRY)&_ZN5S72C73v36Ev,
  (VTBL_ENTRY)&_ZN5S72C73v37Ev,
  (VTBL_ENTRY)&_ZN5S72C73v38Ev,
  (VTBL_ENTRY)&_ZN5S72C73v39Ev,
  (VTBL_ENTRY)&_ZN5S72C73v40Ev,
  (VTBL_ENTRY)&_ZN5S72C73v41Ev,
  (VTBL_ENTRY)&_ZN5S72C73v42Ev,
  (VTBL_ENTRY)&_ZN5S72C73v43Ev,
  (VTBL_ENTRY)&_ZN5S72C73v44Ev,
  (VTBL_ENTRY)&_ZN5S72C73v45Ev,
  (VTBL_ENTRY)&_ZN5S72C73v46Ev,
  (VTBL_ENTRY)&_ZN5S72C73v47Ev,
  (VTBL_ENTRY)&_ZN5S72C73v48Ev,
  (VTBL_ENTRY)&_ZN5S72C73v49Ev,
  (VTBL_ENTRY)&_ZN5S72C73v50Ev,
  (VTBL_ENTRY)&_ZN5S72C73v51Ev,
  (VTBL_ENTRY)&_ZN5S72C73v52Ev,
  (VTBL_ENTRY)&_ZN5S72C73v53Ev,
  (VTBL_ENTRY)&_ZN5S72C73v54Ev,
  (VTBL_ENTRY)&_ZN5S72C73v55Ev,
  (VTBL_ENTRY)&_ZN5S72C73v56Ev,
  (VTBL_ENTRY)&_ZN5S72C73v57Ev,
  (VTBL_ENTRY)&_ZN5S72C73v58Ev,
  (VTBL_ENTRY)&_ZN5S72C73v59Ev,
  (VTBL_ENTRY)&_ZN5S72C73v60Ev,
  (VTBL_ENTRY)&_ZN5S72C73v61Ev,
  (VTBL_ENTRY)&_ZN5S72C73v62Ev,
  (VTBL_ENTRY)&_ZN5S72C73v63Ev,
  (VTBL_ENTRY)&_ZN5S72C73v64Ev,
  (VTBL_ENTRY)&_ZN5S72C73v65Ev,
  (VTBL_ENTRY)&_ZN5S72C73v66Ev,
  (VTBL_ENTRY)&_ZN5S72C73v67Ev,
  (VTBL_ENTRY)&_ZN5S72C63v68Ev,
  (VTBL_ENTRY)&_ZN5S72C63v69Ev,
  (VTBL_ENTRY)&_ZN5S72C63v70Ev,
  (VTBL_ENTRY)&_ZN5S72C63v71Ev,
  (VTBL_ENTRY)&_ZN5S72C63v72Ev,
  (VTBL_ENTRY)&_ZN5S72C63v73Ev,
  (VTBL_ENTRY)&_ZN5S72C63v74Ev,
  (VTBL_ENTRY)&_ZN5S72C63v75Ev,
  (VTBL_ENTRY)&_ZN5S72C63v76Ev,
  (VTBL_ENTRY)&_ZN5S72C63v77Ev,
  (VTBL_ENTRY)&_ZN5S72C63v78Ev,
  (VTBL_ENTRY)&_ZN5S72C63v79Ev,
  (VTBL_ENTRY)&_ZN5S72C63v80Ev,
  (VTBL_ENTRY)&_ZN5S72C63v81Ev,
  (VTBL_ENTRY)&_ZN5S72C63v82Ev,
  (VTBL_ENTRY)&_ZN5S72C63v83Ev,
  (VTBL_ENTRY)&_ZN5S72C63v84Ev,
  (VTBL_ENTRY)&_ZN5S72C63v85Ev,
  (VTBL_ENTRY)&_ZN5S72C63v86Ev,
  (VTBL_ENTRY)&_ZN5S72C63v87Ev,
  (VTBL_ENTRY)&_ZN5S72C63v88Ev,
  (VTBL_ENTRY)&_ZN5S72C63v89Ev,
  (VTBL_ENTRY)&_ZN5S72C53v90Ev,
  (VTBL_ENTRY)&_ZN5S72C53v91Ev,
  (VTBL_ENTRY)&_ZN5S72C53v92Ev,
  (VTBL_ENTRY)&_ZN5S72C53v93Ev,
  (VTBL_ENTRY)&_ZN5S72C53v94Ev,
  (VTBL_ENTRY)&_ZN5S72C53v95Ev,
  (VTBL_ENTRY)&_ZN5S72C53v96Ev,
  (VTBL_ENTRY)&_ZN5S72C53v97Ev,
  (VTBL_ENTRY)&_ZN5S72C53v98Ev,
  (VTBL_ENTRY)&_ZN5S72C53v99Ev,
  (VTBL_ENTRY)&_ZN5S72C54v100Ev,
  (VTBL_ENTRY)&_ZN5S72C54v101Ev,
  (VTBL_ENTRY)&_ZN5S72C54v102Ev,
  (VTBL_ENTRY)&_ZN5S72C54v103Ev,
  (VTBL_ENTRY)&_ZN5S72C54v104Ev,
  (VTBL_ENTRY)&_ZN5S72C54v105Ev,
  (VTBL_ENTRY)&_ZN5S72C54v106Ev,
  (VTBL_ENTRY)&_ZN5S72C54v107Ev,
  (VTBL_ENTRY)&_ZN5S72C54v108Ev,
  (VTBL_ENTRY)&_ZN5S72C54v109Ev,
};
extern VTBL_ENTRY _ZTI5S72C5[];
extern  VTBL_ENTRY _ZTV5S72C5[];
Class_Descriptor cd_S72C5 = {  "S72C5", // class name
  bases_S72C5, 2,
  &(vtc_S72C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI5S72C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S72C5),110, //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  S72C4  : S72C5 {
  ::S3350C4_nt s72c4f0;
  unsigned int s72c4f1:1;
  ::S287C23 s72c4f2;
  virtual  ~S72C4(); // _ZN5S72C4D1Ev
  virtual void  v110(); // _ZN5S72C44v110Ev
  virtual void  v111(); // _ZN5S72C44v111Ev
  virtual void  v112(); // _ZN5S72C44v112Ev
  virtual void  v113(); // _ZN5S72C44v113Ev
  S72C4(); // tgen
};
//SIG(-1 S72C4) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 Fi:1 Fi:1 Fi:1 FC11{ BC12{ BC9}} FC13{ BC14{ BC9}} FC15{ BC16{ BC9}} FC17{ BC18{ BC9}} Fi[3]} vd v1 v2 v3 v4 FC5 Fi:1 FC19{ BC20{ BC9}}}


 S72C4 ::~S72C4(){ note_dtor("S72C4", this);}
void  S72C4 ::v110(){vfunc_called(this, "_ZN5S72C44v110Ev");}
void  S72C4 ::v111(){vfunc_called(this, "_ZN5S72C44v111Ev");}
void  S72C4 ::v112(){vfunc_called(this, "_ZN5S72C44v112Ev");}
void  S72C4 ::v113(){vfunc_called(this, "_ZN5S72C44v113Ev");}
S72C4 ::S72C4(){ note_ctor("S72C4", this);} // tgen

static void Test_S72C4()
{
  extern Class_Descriptor cd_S72C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,56)];
    init_test(&cd_S72C4, buf);
    S72C4 *dp, &lv = *(dp=new (buf) S72C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,220), "sizeof(S72C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S72C4)");
    check_base_class_offset(lv, (S72C7*)(S72C6*)(S72C5*), 0, "S72C4");
    check_base_class_offset(lv, (S72C6*)(S72C5*), 0, "S72C4");
    check_base_class_offset(lv, (S72C5*), 0, "S72C4");
    check_field_offset(lv, s72c4f0, ABISELECT(268,196), "S72C4.s72c4f0");
    set_bf_and_test(lv, s72c4f1, ABISELECT(276,204), 0, 1, 1, "S72C4");
    check_field_offset(lv, s72c4f2, ABISELECT(280,208), "S72C4.s72c4f2");
    test_class_info(&lv, &cd_S72C4);
    dp->~S72C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS72C4(Test_S72C4, "S72C4", ABISELECT(296,220));

#else // __cplusplus

extern void _ZN5S72C4C1Ev();
extern void _ZN5S72C4D1Ev();
Name_Map name_map_S72C4[] = {
  NSPAIR(_ZN5S72C4C1Ev),
  NSPAIR(_ZN5S72C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S72C7;
extern VTBL_ENTRY _ZTI5S72C7[];
extern  VTBL_ENTRY _ZTV5S72C7[];
extern Class_Descriptor cd_S72C6;
extern VTBL_ENTRY _ZTI5S72C6[];
extern  VTBL_ENTRY _ZTV5S72C6[];
extern Class_Descriptor cd_S72C5;
extern VTBL_ENTRY _ZTI5S72C5[];
extern  VTBL_ENTRY _ZTV5S72C5[];
static Base_Class bases_S72C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S72C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S72C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S72C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S72C4[];
extern void _ZN5S72C4D1Ev();
extern void _ZN5S72C4D0Ev();
extern void _ZN5S72C72v4Ev();
extern void _ZN5S72C72v5Ev();
extern void _ZN5S72C72v6Ev();
extern void _ZN5S72C72v7Ev();
extern void _ZN5S72C72v8Ev();
extern void _ZN5S72C72v9Ev();
extern void _ZN5S72C73v10Ev();
extern void _ZN5S72C73v11Ev();
extern void _ZN5S72C73v12Ev();
extern void _ZN5S72C73v13Ev();
extern void _ZN5S72C73v14Ev();
extern void _ZN5S72C73v15Ev();
extern void _ZN5S72C73v16Ev();
extern void _ZN5S72C73v17Ev();
extern void _ZN5S72C73v18Ev();
extern void _ZN5S72C73v19Ev();
extern void _ZN5S72C73v20Ev();
extern void _ZN5S72C73v21Ev();
extern void _ZN5S72C73v22Ev();
extern void _ZN5S72C73v23Ev();
extern void _ZN5S72C73v24Ev();
extern void _ZN5S72C73v25Ev();
extern void _ZN5S72C73v26Ev();
extern void _ZN5S72C73v27Ev();
extern void _ZN5S72C73v28Ev();
extern void _ZN5S72C73v29Ev();
extern void _ZN5S72C73v30Ev();
extern void _ZN5S72C73v31Ev();
extern void _ZN5S72C73v32Ev();
extern void _ZN5S72C73v33Ev();
extern void _ZN5S72C73v34Ev();
extern void _ZN5S72C73v35Ev();
extern void _ZN5S72C73v36Ev();
extern void _ZN5S72C73v37Ev();
extern void _ZN5S72C73v38Ev();
extern void _ZN5S72C73v39Ev();
extern void _ZN5S72C73v40Ev();
extern void _ZN5S72C73v41Ev();
extern void _ZN5S72C73v42Ev();
extern void _ZN5S72C73v43Ev();
extern void _ZN5S72C73v44Ev();
extern void _ZN5S72C73v45Ev();
extern void _ZN5S72C73v46Ev();
extern void _ZN5S72C73v47Ev();
extern void _ZN5S72C73v48Ev();
extern void _ZN5S72C73v49Ev();
extern void _ZN5S72C73v50Ev();
extern void _ZN5S72C73v51Ev();
extern void _ZN5S72C73v52Ev();
extern void _ZN5S72C73v53Ev();
extern void _ZN5S72C73v54Ev();
extern void _ZN5S72C73v55Ev();
extern void _ZN5S72C73v56Ev();
extern void _ZN5S72C73v57Ev();
extern void _ZN5S72C73v58Ev();
extern void _ZN5S72C73v59Ev();
extern void _ZN5S72C73v60Ev();
extern void _ZN5S72C73v61Ev();
extern void _ZN5S72C73v62Ev();
extern void _ZN5S72C73v63Ev();
extern void _ZN5S72C73v64Ev();
extern void _ZN5S72C73v65Ev();
extern void _ZN5S72C73v66Ev();
extern void _ZN5S72C73v67Ev();
extern void _ZN5S72C63v68Ev();
extern void _ZN5S72C63v69Ev();
extern void _ZN5S72C63v70Ev();
extern void _ZN5S72C63v71Ev();
extern void _ZN5S72C63v72Ev();
extern void _ZN5S72C63v73Ev();
extern void _ZN5S72C63v74Ev();
extern void _ZN5S72C63v75Ev();
extern void _ZN5S72C63v76Ev();
extern void _ZN5S72C63v77Ev();
extern void _ZN5S72C63v78Ev();
extern void _ZN5S72C63v79Ev();
extern void _ZN5S72C63v80Ev();
extern void _ZN5S72C63v81Ev();
extern void _ZN5S72C63v82Ev();
extern void _ZN5S72C63v83Ev();
extern void _ZN5S72C63v84Ev();
extern void _ZN5S72C63v85Ev();
extern void _ZN5S72C63v86Ev();
extern void _ZN5S72C63v87Ev();
extern void _ZN5S72C63v88Ev();
extern void _ZN5S72C63v89Ev();
extern void _ZN5S72C53v90Ev();
extern void _ZN5S72C53v91Ev();
extern void _ZN5S72C53v92Ev();
extern void _ZN5S72C53v93Ev();
extern void _ZN5S72C53v94Ev();
extern void _ZN5S72C53v95Ev();
extern void _ZN5S72C53v96Ev();
extern void _ZN5S72C53v97Ev();
extern void _ZN5S72C53v98Ev();
extern void _ZN5S72C53v99Ev();
extern void _ZN5S72C54v100Ev();
extern void _ZN5S72C54v101Ev();
extern void _ZN5S72C54v102Ev();
extern void _ZN5S72C54v103Ev();
extern void _ZN5S72C54v104Ev();
extern void _ZN5S72C54v105Ev();
extern void _ZN5S72C54v106Ev();
extern void _ZN5S72C54v107Ev();
extern void _ZN5S72C54v108Ev();
extern void _ZN5S72C54v109Ev();
extern void _ZN5S72C44v110Ev();
extern void _ZN5S72C44v111Ev();
extern void _ZN5S72C44v112Ev();
extern void _ZN5S72C44v113Ev();
static  VTBL_ENTRY vtc_S72C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S72C4[0]),
  (VTBL_ENTRY)&_ZN5S72C4D1Ev,
  (VTBL_ENTRY)&_ZN5S72C4D0Ev,
  (VTBL_ENTRY)&_ZN5S72C72v4Ev,
  (VTBL_ENTRY)&_ZN5S72C72v5Ev,
  (VTBL_ENTRY)&_ZN5S72C72v6Ev,
  (VTBL_ENTRY)&_ZN5S72C72v7Ev,
  (VTBL_ENTRY)&_ZN5S72C72v8Ev,
  (VTBL_ENTRY)&_ZN5S72C72v9Ev,
  (VTBL_ENTRY)&_ZN5S72C73v10Ev,
  (VTBL_ENTRY)&_ZN5S72C73v11Ev,
  (VTBL_ENTRY)&_ZN5S72C73v12Ev,
  (VTBL_ENTRY)&_ZN5S72C73v13Ev,
  (VTBL_ENTRY)&_ZN5S72C73v14Ev,
  (VTBL_ENTRY)&_ZN5S72C73v15Ev,
  (VTBL_ENTRY)&_ZN5S72C73v16Ev,
  (VTBL_ENTRY)&_ZN5S72C73v17Ev,
  (VTBL_ENTRY)&_ZN5S72C73v18Ev,
  (VTBL_ENTRY)&_ZN5S72C73v19Ev,
  (VTBL_ENTRY)&_ZN5S72C73v20Ev,
  (VTBL_ENTRY)&_ZN5S72C73v21Ev,
  (VTBL_ENTRY)&_ZN5S72C73v22Ev,
  (VTBL_ENTRY)&_ZN5S72C73v23Ev,
  (VTBL_ENTRY)&_ZN5S72C73v24Ev,
  (VTBL_ENTRY)&_ZN5S72C73v25Ev,
  (VTBL_ENTRY)&_ZN5S72C73v26Ev,
  (VTBL_ENTRY)&_ZN5S72C73v27Ev,
  (VTBL_ENTRY)&_ZN5S72C73v28Ev,
  (VTBL_ENTRY)&_ZN5S72C73v29Ev,
  (VTBL_ENTRY)&_ZN5S72C73v30Ev,
  (VTBL_ENTRY)&_ZN5S72C73v31Ev,
  (VTBL_ENTRY)&_ZN5S72C73v32Ev,
  (VTBL_ENTRY)&_ZN5S72C73v33Ev,
  (VTBL_ENTRY)&_ZN5S72C73v34Ev,
  (VTBL_ENTRY)&_ZN5S72C73v35Ev,
  (VTBL_ENTRY)&_ZN5S72C73v36Ev,
  (VTBL_ENTRY)&_ZN5S72C73v37Ev,
  (VTBL_ENTRY)&_ZN5S72C73v38Ev,
  (VTBL_ENTRY)&_ZN5S72C73v39Ev,
  (VTBL_ENTRY)&_ZN5S72C73v40Ev,
  (VTBL_ENTRY)&_ZN5S72C73v41Ev,
  (VTBL_ENTRY)&_ZN5S72C73v42Ev,
  (VTBL_ENTRY)&_ZN5S72C73v43Ev,
  (VTBL_ENTRY)&_ZN5S72C73v44Ev,
  (VTBL_ENTRY)&_ZN5S72C73v45Ev,
  (VTBL_ENTRY)&_ZN5S72C73v46Ev,
  (VTBL_ENTRY)&_ZN5S72C73v47Ev,
  (VTBL_ENTRY)&_ZN5S72C73v48Ev,
  (VTBL_ENTRY)&_ZN5S72C73v49Ev,
  (VTBL_ENTRY)&_ZN5S72C73v50Ev,
  (VTBL_ENTRY)&_ZN5S72C73v51Ev,
  (VTBL_ENTRY)&_ZN5S72C73v52Ev,
  (VTBL_ENTRY)&_ZN5S72C73v53Ev,
  (VTBL_ENTRY)&_ZN5S72C73v54Ev,
  (VTBL_ENTRY)&_ZN5S72C73v55Ev,
  (VTBL_ENTRY)&_ZN5S72C73v56Ev,
  (VTBL_ENTRY)&_ZN5S72C73v57Ev,
  (VTBL_ENTRY)&_ZN5S72C73v58Ev,
  (VTBL_ENTRY)&_ZN5S72C73v59Ev,
  (VTBL_ENTRY)&_ZN5S72C73v60Ev,
  (VTBL_ENTRY)&_ZN5S72C73v61Ev,
  (VTBL_ENTRY)&_ZN5S72C73v62Ev,
  (VTBL_ENTRY)&_ZN5S72C73v63Ev,
  (VTBL_ENTRY)&_ZN5S72C73v64Ev,
  (VTBL_ENTRY)&_ZN5S72C73v65Ev,
  (VTBL_ENTRY)&_ZN5S72C73v66Ev,
  (VTBL_ENTRY)&_ZN5S72C73v67Ev,
  (VTBL_ENTRY)&_ZN5S72C63v68Ev,
  (VTBL_ENTRY)&_ZN5S72C63v69Ev,
  (VTBL_ENTRY)&_ZN5S72C63v70Ev,
  (VTBL_ENTRY)&_ZN5S72C63v71Ev,
  (VTBL_ENTRY)&_ZN5S72C63v72Ev,
  (VTBL_ENTRY)&_ZN5S72C63v73Ev,
  (VTBL_ENTRY)&_ZN5S72C63v74Ev,
  (VTBL_ENTRY)&_ZN5S72C63v75Ev,
  (VTBL_ENTRY)&_ZN5S72C63v76Ev,
  (VTBL_ENTRY)&_ZN5S72C63v77Ev,
  (VTBL_ENTRY)&_ZN5S72C63v78Ev,
  (VTBL_ENTRY)&_ZN5S72C63v79Ev,
  (VTBL_ENTRY)&_ZN5S72C63v80Ev,
  (VTBL_ENTRY)&_ZN5S72C63v81Ev,
  (VTBL_ENTRY)&_ZN5S72C63v82Ev,
  (VTBL_ENTRY)&_ZN5S72C63v83Ev,
  (VTBL_ENTRY)&_ZN5S72C63v84Ev,
  (VTBL_ENTRY)&_ZN5S72C63v85Ev,
  (VTBL_ENTRY)&_ZN5S72C63v86Ev,
  (VTBL_ENTRY)&_ZN5S72C63v87Ev,
  (VTBL_ENTRY)&_ZN5S72C63v88Ev,
  (VTBL_ENTRY)&_ZN5S72C63v89Ev,
  (VTBL_ENTRY)&_ZN5S72C53v90Ev,
  (VTBL_ENTRY)&_ZN5S72C53v91Ev,
  (VTBL_ENTRY)&_ZN5S72C53v92Ev,
  (VTBL_ENTRY)&_ZN5S72C53v93Ev,
  (VTBL_ENTRY)&_ZN5S72C53v94Ev,
  (VTBL_ENTRY)&_ZN5S72C53v95Ev,
  (VTBL_ENTRY)&_ZN5S72C53v96Ev,
  (VTBL_ENTRY)&_ZN5S72C53v97Ev,
  (VTBL_ENTRY)&_ZN5S72C53v98Ev,
  (VTBL_ENTRY)&_ZN5S72C53v99Ev,
  (VTBL_ENTRY)&_ZN5S72C54v100Ev,
  (VTBL_ENTRY)&_ZN5S72C54v101Ev,
  (VTBL_ENTRY)&_ZN5S72C54v102Ev,
  (VTBL_ENTRY)&_ZN5S72C54v103Ev,
  (VTBL_ENTRY)&_ZN5S72C54v104Ev,
  (VTBL_ENTRY)&_ZN5S72C54v105Ev,
  (VTBL_ENTRY)&_ZN5S72C54v106Ev,
  (VTBL_ENTRY)&_ZN5S72C54v107Ev,
  (VTBL_ENTRY)&_ZN5S72C54v108Ev,
  (VTBL_ENTRY)&_ZN5S72C54v109Ev,
  (VTBL_ENTRY)&_ZN5S72C44v110Ev,
  (VTBL_ENTRY)&_ZN5S72C44v111Ev,
  (VTBL_ENTRY)&_ZN5S72C44v112Ev,
  (VTBL_ENTRY)&_ZN5S72C44v113Ev,
};
extern VTBL_ENTRY _ZTI5S72C4[];
extern  VTBL_ENTRY _ZTV5S72C4[];
Class_Descriptor cd_S72C4 = {  "S72C4", // class name
  bases_S72C4, 3,
  &(vtc_S72C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,220), // object size
  NSPAIRA(_ZTI5S72C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S72C4),114, //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  S72C3  : S72C4 {
  int s72c3f0;
  unsigned int s72c3f1:1;
  virtual  ~S72C3(); // _ZN5S72C3D1Ev
  virtual void  v114(); // _ZN5S72C34v114Ev
  virtual void  v115(); // _ZN5S72C34v115Ev
  virtual void  v116(); // _ZN5S72C34v116Ev
  virtual void  v117(); // _ZN5S72C34v117Ev
  virtual void  v118(); // _ZN5S72C34v118Ev
  virtual void  v119(); // _ZN5S72C34v119Ev
  virtual void  v120(); // _ZN5S72C34v120Ev
  virtual void  v121(); // _ZN5S72C34v121Ev
  S72C3(); // tgen
};
//SIG(-1 S72C3) C1{ BC2{ BC3{ BC4{ BC5{ vd v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 Fi[2] Fp Fi[2] FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} FC7 FC11{ m} FC7 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 Fi:1 Fi:1 Fi:1 FC12{ BC13{ BC10}} FC14{ BC15{ BC10}} FC16{ BC17{ BC10}} FC18{ BC19{ BC10}} Fi[3]} vd v115 v116 v117 v118 FC6 Fi:1 FC20{ BC21{ BC10}}} vd v1 v2 v3 v4 v5 v6 v7 v8 Fi Fi:1}


 S72C3 ::~S72C3(){ note_dtor("S72C3", this);}
void  S72C3 ::v114(){vfunc_called(this, "_ZN5S72C34v114Ev");}
void  S72C3 ::v115(){vfunc_called(this, "_ZN5S72C34v115Ev");}
void  S72C3 ::v116(){vfunc_called(this, "_ZN5S72C34v116Ev");}
void  S72C3 ::v117(){vfunc_called(this, "_ZN5S72C34v117Ev");}
void  S72C3 ::v118(){vfunc_called(this, "_ZN5S72C34v118Ev");}
void  S72C3 ::v119(){vfunc_called(this, "_ZN5S72C34v119Ev");}
void  S72C3 ::v120(){vfunc_called(this, "_ZN5S72C34v120Ev");}
void  S72C3 ::v121(){vfunc_called(this, "_ZN5S72C34v121Ev");}
S72C3 ::S72C3(){ note_ctor("S72C3", this);} // tgen

static void Test_S72C3()
{
  extern Class_Descriptor cd_S72C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(39,58)];
    init_test(&cd_S72C3, buf);
    S72C3 *dp, &lv = *(dp=new (buf) S72C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,228), "sizeof(S72C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S72C3)");
    check_base_class_offset(lv, (S72C7*)(S72C6*)(S72C5*)(S72C4*), 0, "S72C3");
    check_base_class_offset(lv, (S72C6*)(S72C5*)(S72C4*), 0, "S72C3");
    check_base_class_offset(lv, (S72C5*)(S72C4*), 0, "S72C3");
    check_base_class_offset(lv, (S72C4*), 0, "S72C3");
    check_field_offset(lv, s72c3f0, ABISELECT(296,220), "S72C3.s72c3f0");
    set_bf_and_test(lv, s72c3f1, ABISELECT(300,224), 0, 1, 1, "S72C3");
    test_class_info(&lv, &cd_S72C3);
    dp->~S72C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS72C3(Test_S72C3, "S72C3", ABISELECT(304,228));

#else // __cplusplus

extern void _ZN5S72C3C1Ev();
extern void _ZN5S72C3D1Ev();
Name_Map name_map_S72C3[] = {
  NSPAIR(_ZN5S72C3C1Ev),
  NSPAIR(_ZN5S72C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S72C7;
extern VTBL_ENTRY _ZTI5S72C7[];
extern  VTBL_ENTRY _ZTV5S72C7[];
extern Class_Descriptor cd_S72C6;
extern VTBL_ENTRY _ZTI5S72C6[];
extern  VTBL_ENTRY _ZTV5S72C6[];
extern Class_Descriptor cd_S72C5;
extern VTBL_ENTRY _ZTI5S72C5[];
extern  VTBL_ENTRY _ZTV5S72C5[];
extern Class_Descriptor cd_S72C4;
extern VTBL_ENTRY _ZTI5S72C4[];
extern  VTBL_ENTRY _ZTV5S72C4[];
static Base_Class bases_S72C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S72C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S72C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S72C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S72C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S72C3[];
extern void _ZN5S72C3D1Ev();
extern void _ZN5S72C3D0Ev();
extern void _ZN5S72C72v4Ev();
extern void _ZN5S72C72v5Ev();
extern void _ZN5S72C72v6Ev();
extern void _ZN5S72C72v7Ev();
extern void _ZN5S72C72v8Ev();
extern void _ZN5S72C72v9Ev();
extern void _ZN5S72C73v10Ev();
extern void _ZN5S72C73v11Ev();
extern void _ZN5S72C73v12Ev();
extern void _ZN5S72C73v13Ev();
extern void _ZN5S72C73v14Ev();
extern void _ZN5S72C73v15Ev();
extern void _ZN5S72C73v16Ev();
extern void _ZN5S72C73v17Ev();
extern void _ZN5S72C73v18Ev();
extern void _ZN5S72C73v19Ev();
extern void _ZN5S72C73v20Ev();
extern void _ZN5S72C73v21Ev();
extern void _ZN5S72C73v22Ev();
extern void _ZN5S72C73v23Ev();
extern void _ZN5S72C73v24Ev();
extern void _ZN5S72C73v25Ev();
extern void _ZN5S72C73v26Ev();
extern void _ZN5S72C73v27Ev();
extern void _ZN5S72C73v28Ev();
extern void _ZN5S72C73v29Ev();
extern void _ZN5S72C73v30Ev();
extern void _ZN5S72C73v31Ev();
extern void _ZN5S72C73v32Ev();
extern void _ZN5S72C73v33Ev();
extern void _ZN5S72C73v34Ev();
extern void _ZN5S72C73v35Ev();
extern void _ZN5S72C73v36Ev();
extern void _ZN5S72C73v37Ev();
extern void _ZN5S72C73v38Ev();
extern void _ZN5S72C73v39Ev();
extern void _ZN5S72C73v40Ev();
extern void _ZN5S72C73v41Ev();
extern void _ZN5S72C73v42Ev();
extern void _ZN5S72C73v43Ev();
extern void _ZN5S72C73v44Ev();
extern void _ZN5S72C73v45Ev();
extern void _ZN5S72C73v46Ev();
extern void _ZN5S72C73v47Ev();
extern void _ZN5S72C73v48Ev();
extern void _ZN5S72C73v49Ev();
extern void _ZN5S72C73v50Ev();
extern void _ZN5S72C73v51Ev();
extern void _ZN5S72C73v52Ev();
extern void _ZN5S72C73v53Ev();
extern void _ZN5S72C73v54Ev();
extern void _ZN5S72C73v55Ev();
extern void _ZN5S72C73v56Ev();
extern void _ZN5S72C73v57Ev();
extern void _ZN5S72C73v58Ev();
extern void _ZN5S72C73v59Ev();
extern void _ZN5S72C73v60Ev();
extern void _ZN5S72C73v61Ev();
extern void _ZN5S72C73v62Ev();
extern void _ZN5S72C73v63Ev();
extern void _ZN5S72C73v64Ev();
extern void _ZN5S72C73v65Ev();
extern void _ZN5S72C73v66Ev();
extern void _ZN5S72C73v67Ev();
extern void _ZN5S72C63v68Ev();
extern void _ZN5S72C63v69Ev();
extern void _ZN5S72C63v70Ev();
extern void _ZN5S72C63v71Ev();
extern void _ZN5S72C63v72Ev();
extern void _ZN5S72C63v73Ev();
extern void _ZN5S72C63v74Ev();
extern void _ZN5S72C63v75Ev();
extern void _ZN5S72C63v76Ev();
extern void _ZN5S72C63v77Ev();
extern void _ZN5S72C63v78Ev();
extern void _ZN5S72C63v79Ev();
extern void _ZN5S72C63v80Ev();
extern void _ZN5S72C63v81Ev();
extern void _ZN5S72C63v82Ev();
extern void _ZN5S72C63v83Ev();
extern void _ZN5S72C63v84Ev();
extern void _ZN5S72C63v85Ev();
extern void _ZN5S72C63v86Ev();
extern void _ZN5S72C63v87Ev();
extern void _ZN5S72C63v88Ev();
extern void _ZN5S72C63v89Ev();
extern void _ZN5S72C53v90Ev();
extern void _ZN5S72C53v91Ev();
extern void _ZN5S72C53v92Ev();
extern void _ZN5S72C53v93Ev();
extern void _ZN5S72C53v94Ev();
extern void _ZN5S72C53v95Ev();
extern void _ZN5S72C53v96Ev();
extern void _ZN5S72C53v97Ev();
extern void _ZN5S72C53v98Ev();
extern void _ZN5S72C53v99Ev();
extern void _ZN5S72C54v100Ev();
extern void _ZN5S72C54v101Ev();
extern void _ZN5S72C54v102Ev();
extern void _ZN5S72C54v103Ev();
extern void _ZN5S72C54v104Ev();
extern void _ZN5S72C54v105Ev();
extern void _ZN5S72C54v106Ev();
extern void _ZN5S72C54v107Ev();
extern void _ZN5S72C54v108Ev();
extern void _ZN5S72C54v109Ev();
extern void _ZN5S72C44v110Ev();
extern void _ZN5S72C44v111Ev();
extern void _ZN5S72C44v112Ev();
extern void _ZN5S72C44v113Ev();
extern void _ZN5S72C34v114Ev();
extern void _ZN5S72C34v115Ev();
extern void _ZN5S72C34v116Ev();
extern void _ZN5S72C34v117Ev();
extern void _ZN5S72C34v118Ev();
extern void _ZN5S72C34v119Ev();
extern void _ZN5S72C34v120Ev();
extern void _ZN5S72C34v121Ev();
static  VTBL_ENTRY vtc_S72C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S72C3[0]),
  (VTBL_ENTRY)&_ZN5S72C3D1Ev,
  (VTBL_ENTRY)&_ZN5S72C3D0Ev,
  (VTBL_ENTRY)&_ZN5S72C72v4Ev,
  (VTBL_ENTRY)&_ZN5S72C72v5Ev,
  (VTBL_ENTRY)&_ZN5S72C72v6Ev,
  (VTBL_ENTRY)&_ZN5S72C72v7Ev,
  (VTBL_ENTRY)&_ZN5S72C72v8Ev,
  (VTBL_ENTRY)&_ZN5S72C72v9Ev,
  (VTBL_ENTRY)&_ZN5S72C73v10Ev,
  (VTBL_ENTRY)&_ZN5S72C73v11Ev,
  (VTBL_ENTRY)&_ZN5S72C73v12Ev,
  (VTBL_ENTRY)&_ZN5S72C73v13Ev,
  (VTBL_ENTRY)&_ZN5S72C73v14Ev,
  (VTBL_ENTRY)&_ZN5S72C73v15Ev,
  (VTBL_ENTRY)&_ZN5S72C73v16Ev,
  (VTBL_ENTRY)&_ZN5S72C73v17Ev,
  (VTBL_ENTRY)&_ZN5S72C73v18Ev,
  (VTBL_ENTRY)&_ZN5S72C73v19Ev,
  (VTBL_ENTRY)&_ZN5S72C73v20Ev,
  (VTBL_ENTRY)&_ZN5S72C73v21Ev,
  (VTBL_ENTRY)&_ZN5S72C73v22Ev,
  (VTBL_ENTRY)&_ZN5S72C73v23Ev,
  (VTBL_ENTRY)&_ZN5S72C73v24Ev,
  (VTBL_ENTRY)&_ZN5S72C73v25Ev,
  (VTBL_ENTRY)&_ZN5S72C73v26Ev,
  (VTBL_ENTRY)&_ZN5S72C73v27Ev,
  (VTBL_ENTRY)&_ZN5S72C73v28Ev,
  (VTBL_ENTRY)&_ZN5S72C73v29Ev,
  (VTBL_ENTRY)&_ZN5S72C73v30Ev,
  (VTBL_ENTRY)&_ZN5S72C73v31Ev,
  (VTBL_ENTRY)&_ZN5S72C73v32Ev,
  (VTBL_ENTRY)&_ZN5S72C73v33Ev,
  (VTBL_ENTRY)&_ZN5S72C73v34Ev,
  (VTBL_ENTRY)&_ZN5S72C73v35Ev,
  (VTBL_ENTRY)&_ZN5S72C73v36Ev,
  (VTBL_ENTRY)&_ZN5S72C73v37Ev,
  (VTBL_ENTRY)&_ZN5S72C73v38Ev,
  (VTBL_ENTRY)&_ZN5S72C73v39Ev,
  (VTBL_ENTRY)&_ZN5S72C73v40Ev,
  (VTBL_ENTRY)&_ZN5S72C73v41Ev,
  (VTBL_ENTRY)&_ZN5S72C73v42Ev,
  (VTBL_ENTRY)&_ZN5S72C73v43Ev,
  (VTBL_ENTRY)&_ZN5S72C73v44Ev,
  (VTBL_ENTRY)&_ZN5S72C73v45Ev,
  (VTBL_ENTRY)&_ZN5S72C73v46Ev,
  (VTBL_ENTRY)&_ZN5S72C73v47Ev,
  (VTBL_ENTRY)&_ZN5S72C73v48Ev,
  (VTBL_ENTRY)&_ZN5S72C73v49Ev,
  (VTBL_ENTRY)&_ZN5S72C73v50Ev,
  (VTBL_ENTRY)&_ZN5S72C73v51Ev,
  (VTBL_ENTRY)&_ZN5S72C73v52Ev,
  (VTBL_ENTRY)&_ZN5S72C73v53Ev,
  (VTBL_ENTRY)&_ZN5S72C73v54Ev,
  (VTBL_ENTRY)&_ZN5S72C73v55Ev,
  (VTBL_ENTRY)&_ZN5S72C73v56Ev,
  (VTBL_ENTRY)&_ZN5S72C73v57Ev,
  (VTBL_ENTRY)&_ZN5S72C73v58Ev,
  (VTBL_ENTRY)&_ZN5S72C73v59Ev,
  (VTBL_ENTRY)&_ZN5S72C73v60Ev,
  (VTBL_ENTRY)&_ZN5S72C73v61Ev,
  (VTBL_ENTRY)&_ZN5S72C73v62Ev,
  (VTBL_ENTRY)&_ZN5S72C73v63Ev,
  (VTBL_ENTRY)&_ZN5S72C73v64Ev,
  (VTBL_ENTRY)&_ZN5S72C73v65Ev,
  (VTBL_ENTRY)&_ZN5S72C73v66Ev,
  (VTBL_ENTRY)&_ZN5S72C73v67Ev,
  (VTBL_ENTRY)&_ZN5S72C63v68Ev,
  (VTBL_ENTRY)&_ZN5S72C63v69Ev,
  (VTBL_ENTRY)&_ZN5S72C63v70Ev,
  (VTBL_ENTRY)&_ZN5S72C63v71Ev,
  (VTBL_ENTRY)&_ZN5S72C63v72Ev,
  (VTBL_ENTRY)&_ZN5S72C63v73Ev,
  (VTBL_ENTRY)&_ZN5S72C63v74Ev,
  (VTBL_ENTRY)&_ZN5S72C63v75Ev,
  (VTBL_ENTRY)&_ZN5S72C63v76Ev,
  (VTBL_ENTRY)&_ZN5S72C63v77Ev,
  (VTBL_ENTRY)&_ZN5S72C63v78Ev,
  (VTBL_ENTRY)&_ZN5S72C63v79Ev,
  (VTBL_ENTRY)&_ZN5S72C63v80Ev,
  (VTBL_ENTRY)&_ZN5S72C63v81Ev,
  (VTBL_ENTRY)&_ZN5S72C63v82Ev,
  (VTBL_ENTRY)&_ZN5S72C63v83Ev,
  (VTBL_ENTRY)&_ZN5S72C63v84Ev,
  (VTBL_ENTRY)&_ZN5S72C63v85Ev,
  (VTBL_ENTRY)&_ZN5S72C63v86Ev,
  (VTBL_ENTRY)&_ZN5S72C63v87Ev,
  (VTBL_ENTRY)&_ZN5S72C63v88Ev,
  (VTBL_ENTRY)&_ZN5S72C63v89Ev,
  (VTBL_ENTRY)&_ZN5S72C53v90Ev,
  (VTBL_ENTRY)&_ZN5S72C53v91Ev,
  (VTBL_ENTRY)&_ZN5S72C53v92Ev,
  (VTBL_ENTRY)&_ZN5S72C53v93Ev,
  (VTBL_ENTRY)&_ZN5S72C53v94Ev,
  (VTBL_ENTRY)&_ZN5S72C53v95Ev,
  (VTBL_ENTRY)&_ZN5S72C53v96Ev,
  (VTBL_ENTRY)&_ZN5S72C53v97Ev,
  (VTBL_ENTRY)&_ZN5S72C53v98Ev,
  (VTBL_ENTRY)&_ZN5S72C53v99Ev,
  (VTBL_ENTRY)&_ZN5S72C54v100Ev,
  (VTBL_ENTRY)&_ZN5S72C54v101Ev,
  (VTBL_ENTRY)&_ZN5S72C54v102Ev,
  (VTBL_ENTRY)&_ZN5S72C54v103Ev,
  (VTBL_ENTRY)&_ZN5S72C54v104Ev,
  (VTBL_ENTRY)&_ZN5S72C54v105Ev,
  (VTBL_ENTRY)&_ZN5S72C54v106Ev,
  (VTBL_ENTRY)&_ZN5S72C54v107Ev,
  (VTBL_ENTRY)&_ZN5S72C54v108Ev,
  (VTBL_ENTRY)&_ZN5S72C54v109Ev,
  (VTBL_ENTRY)&_ZN5S72C44v110Ev,
  (VTBL_ENTRY)&_ZN5S72C44v111Ev,
  (VTBL_ENTRY)&_ZN5S72C44v112Ev,
  (VTBL_ENTRY)&_ZN5S72C44v113Ev,
  (VTBL_ENTRY)&_ZN5S72C34v114Ev,
  (VTBL_ENTRY)&_ZN5S72C34v115Ev,
  (VTBL_ENTRY)&_ZN5S72C34v116Ev,
  (VTBL_ENTRY)&_ZN5S72C34v117Ev,
  (VTBL_ENTRY)&_ZN5S72C34v118Ev,
  (VTBL_ENTRY)&_ZN5S72C34v119Ev,
  (VTBL_ENTRY)&_ZN5S72C34v120Ev,
  (VTBL_ENTRY)&_ZN5S72C34v121Ev,
};
extern VTBL_ENTRY _ZTI5S72C3[];
extern  VTBL_ENTRY _ZTV5S72C3[];
Class_Descriptor cd_S72C3 = {  "S72C3", // class name
  bases_S72C3, 4,
  &(vtc_S72C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(304,228), // object size
  NSPAIRA(_ZTI5S72C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S72C3),122, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S72C2  : S72C3 {
  int s72c2f0;
  virtual  ~S72C2(); // _ZN5S72C2D1Ev
  virtual void  v122(); // _ZN5S72C24v122Ev
  virtual void  v123(); // _ZN5S72C24v123Ev
  S72C2(); // tgen
};
//SIG(-1 S72C2) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ 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 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 Fi FL Fp[4] Fi[2] Fp FC7{ m Fi[2]} Fp[2]} vd v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fi[2] Fp Fi[2] FC8{ BC9{ BC10{ BC11{ m Fp Fi[2]}}}} FC8 FC12{ m} FC8 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 Fi:1 Fi:1 Fi:1 FC13{ BC14{ BC11}} FC15{ BC16{ BC11}} FC17{ BC18{ BC11}} FC19{ BC20{ BC11}} Fi[3]} vd v109 v110 v111 v112 FC7 Fi:1 FC21{ BC22{ BC11}}} vd v113 v114 v115 v116 v117 v118 v119 v120 Fi Fi:1} vd v1 v2 Fi}


 S72C2 ::~S72C2(){ note_dtor("S72C2", this);}
void  S72C2 ::v122(){vfunc_called(this, "_ZN5S72C24v122Ev");}
void  S72C2 ::v123(){vfunc_called(this, "_ZN5S72C24v123Ev");}
S72C2 ::S72C2(){ note_ctor("S72C2", this);} // tgen

static void Test_S72C2()
{
  extern Class_Descriptor cd_S72C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(40,59)];
    init_test(&cd_S72C2, buf);
    S72C2 *dp, &lv = *(dp=new (buf) S72C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(312,232), "sizeof(S72C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S72C2)");
    check_base_class_offset(lv, (S72C7*)(S72C6*)(S72C5*)(S72C4*)(S72C3*), 0, "S72C2");
    check_base_class_offset(lv, (S72C6*)(S72C5*)(S72C4*)(S72C3*), 0, "S72C2");
    check_base_class_offset(lv, (S72C5*)(S72C4*)(S72C3*), 0, "S72C2");
    check_base_class_offset(lv, (S72C4*)(S72C3*), 0, "S72C2");
    check_base_class_offset(lv, (S72C3*), 0, "S72C2");
    check_field_offset(lv, s72c2f0, ABISELECT(304,228), "S72C2.s72c2f0");
    test_class_info(&lv, &cd_S72C2);
    dp->~S72C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS72C2(Test_S72C2, "S72C2", ABISELECT(312,232));

#else // __cplusplus

extern void _ZN5S72C2C1Ev();
extern void _ZN5S72C2D1Ev();
Name_Map name_map_S72C2[] = {
  NSPAIR(_ZN5S72C2C1Ev),
  NSPAIR(_ZN5S72C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S72C7;
extern VTBL_ENTRY _ZTI5S72C7[];
extern  VTBL_ENTRY _ZTV5S72C7[];
extern Class_Descriptor cd_S72C6;
extern VTBL_ENTRY _ZTI5S72C6[];
extern  VTBL_ENTRY _ZTV5S72C6[];
extern Class_Descriptor cd_S72C5;
extern VTBL_ENTRY _ZTI5S72C5[];
extern  VTBL_ENTRY _ZTV5S72C5[];
extern Class_Descriptor cd_S72C4;
extern VTBL_ENTRY _ZTI5S72C4[];
extern  VTBL_ENTRY _ZTV5S72C4[];
extern Class_Descriptor cd_S72C3;
extern VTBL_ENTRY _ZTI5S72C3[];
extern  VTBL_ENTRY _ZTV5S72C3[];
static Base_Class bases_S72C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S72C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S72C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S72C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S72C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S72C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S72C2[];
extern void _ZN5S72C2D1Ev();
extern void _ZN5S72C2D0Ev();
extern void _ZN5S72C72v4Ev();
extern void _ZN5S72C72v5Ev();
extern void _ZN5S72C72v6Ev();
extern void _ZN5S72C72v7Ev();
extern void _ZN5S72C72v8Ev();
extern void _ZN5S72C72v9Ev();
extern void _ZN5S72C73v10Ev();
extern void _ZN5S72C73v11Ev();
extern void _ZN5S72C73v12Ev();
extern void _ZN5S72C73v13Ev();
extern void _ZN5S72C73v14Ev();
extern void _ZN5S72C73v15Ev();
extern void _ZN5S72C73v16Ev();
extern void _ZN5S72C73v17Ev();
extern void _ZN5S72C73v18Ev();
extern void _ZN5S72C73v19Ev();
extern void _ZN5S72C73v20Ev();
extern void _ZN5S72C73v21Ev();
extern void _ZN5S72C73v22Ev();
extern void _ZN5S72C73v23Ev();
extern void _ZN5S72C73v24Ev();
extern void _ZN5S72C73v25Ev();
extern void _ZN5S72C73v26Ev();
extern void _ZN5S72C73v27Ev();
extern void _ZN5S72C73v28Ev();
extern void _ZN5S72C73v29Ev();
extern void _ZN5S72C73v30Ev();
extern void _ZN5S72C73v31Ev();
extern void _ZN5S72C73v32Ev();
extern void _ZN5S72C73v33Ev();
extern void _ZN5S72C73v34Ev();
extern void _ZN5S72C73v35Ev();
extern void _ZN5S72C73v36Ev();
extern void _ZN5S72C73v37Ev();
extern void _ZN5S72C73v38Ev();
extern void _ZN5S72C73v39Ev();
extern void _ZN5S72C73v40Ev();
extern void _ZN5S72C73v41Ev();
extern void _ZN5S72C73v42Ev();
extern void _ZN5S72C73v43Ev();
extern void _ZN5S72C73v44Ev();
extern void _ZN5S72C73v45Ev();
extern void _ZN5S72C73v46Ev();
extern void _ZN5S72C73v47Ev();
extern void _ZN5S72C73v48Ev();
extern void _ZN5S72C73v49Ev();
extern void _ZN5S72C73v50Ev();
extern void _ZN5S72C73v51Ev();
extern void _ZN5S72C73v52Ev();
extern void _ZN5S72C73v53Ev();
extern void _ZN5S72C73v54Ev();
extern void _ZN5S72C73v55Ev();
extern void _ZN5S72C73v56Ev();
extern void _ZN5S72C73v57Ev();
extern void _ZN5S72C73v58Ev();
extern void _ZN5S72C73v59Ev();
extern void _ZN5S72C73v60Ev();
extern void _ZN5S72C73v61Ev();
extern void _ZN5S72C73v62Ev();
extern void _ZN5S72C73v63Ev();
extern void _ZN5S72C73v64Ev();
extern void _ZN5S72C73v65Ev();
extern void _ZN5S72C73v66Ev();
extern void _ZN5S72C73v67Ev();
extern void _ZN5S72C63v68Ev();
extern void _ZN5S72C63v69Ev();
extern void _ZN5S72C63v70Ev();
extern void _ZN5S72C63v71Ev();
extern void _ZN5S72C63v72Ev();
extern void _ZN5S72C63v73Ev();
extern void _ZN5S72C63v74Ev();
extern void _ZN5S72C63v75Ev();
extern void _ZN5S72C63v76Ev();
extern void _ZN5S72C63v77Ev();
extern void _ZN5S72C63v78Ev();
extern void _ZN5S72C63v79Ev();
extern void _ZN5S72C63v80Ev();
extern void _ZN5S72C63v81Ev();
extern void _ZN5S72C63v82Ev();
extern void _ZN5S72C63v83Ev();
extern void _ZN5S72C63v84Ev();
extern void _ZN5S72C63v85Ev();
extern void _ZN5S72C63v86Ev();
extern void _ZN5S72C63v87Ev();
extern void _ZN5S72C63v88Ev();
extern void _ZN5S72C63v89Ev();
extern void _ZN5S72C53v90Ev();
extern void _ZN5S72C53v91Ev();
extern void _ZN5S72C53v92Ev();
extern void _ZN5S72C53v93Ev();
extern void _ZN5S72C53v94Ev();
extern void _ZN5S72C53v95Ev();
extern void _ZN5S72C53v96Ev();
extern void _ZN5S72C53v97Ev();
extern void _ZN5S72C53v98Ev();
extern void _ZN5S72C53v99Ev();
extern void _ZN5S72C54v100Ev();
extern void _ZN5S72C54v101Ev();
extern void _ZN5S72C54v102Ev();
extern void _ZN5S72C54v103Ev();
extern void _ZN5S72C54v104Ev();
extern void _ZN5S72C54v105Ev();
extern void _ZN5S72C54v106Ev();
extern void _ZN5S72C54v107Ev();
extern void _ZN5S72C54v108Ev();
extern void _ZN5S72C54v109Ev();
extern void _ZN5S72C44v110Ev();
extern void _ZN5S72C44v111Ev();
extern void _ZN5S72C44v112Ev();
extern void _ZN5S72C44v113Ev();
extern void _ZN5S72C34v114Ev();
extern void _ZN5S72C34v115Ev();
extern void _ZN5S72C34v116Ev();
extern void _ZN5S72C34v117Ev();
extern void _ZN5S72C34v118Ev();
extern void _ZN5S72C34v119Ev();
extern void _ZN5S72C34v120Ev();
extern void _ZN5S72C34v121Ev();
extern void _ZN5S72C24v122Ev();
extern void _ZN5S72C24v123Ev();
static  VTBL_ENTRY vtc_S72C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S72C2[0]),
  (VTBL_ENTRY)&_ZN5S72C2D1Ev,
  (VTBL_ENTRY)&_ZN5S72C2D0Ev,
  (VTBL_ENTRY)&_ZN5S72C72v4Ev,
  (VTBL_ENTRY)&_ZN5S72C72v5Ev,
  (VTBL_ENTRY)&_ZN5S72C72v6Ev,
  (VTBL_ENTRY)&_ZN5S72C72v7Ev,
  (VTBL_ENTRY)&_ZN5S72C72v8Ev,
  (VTBL_ENTRY)&_ZN5S72C72v9Ev,
  (VTBL_ENTRY)&_ZN5S72C73v10Ev,
  (VTBL_ENTRY)&_ZN5S72C73v11Ev,
  (VTBL_ENTRY)&_ZN5S72C73v12Ev,
  (VTBL_ENTRY)&_ZN5S72C73v13Ev,
  (VTBL_ENTRY)&_ZN5S72C73v14Ev,
  (VTBL_ENTRY)&_ZN5S72C73v15Ev,
  (VTBL_ENTRY)&_ZN5S72C73v16Ev,
  (VTBL_ENTRY)&_ZN5S72C73v17Ev,
  (VTBL_ENTRY)&_ZN5S72C73v18Ev,
  (VTBL_ENTRY)&_ZN5S72C73v19Ev,
  (VTBL_ENTRY)&_ZN5S72C73v20Ev,
  (VTBL_ENTRY)&_ZN5S72C73v21Ev,
  (VTBL_ENTRY)&_ZN5S72C73v22Ev,
  (VTBL_ENTRY)&_ZN5S72C73v23Ev,
  (VTBL_ENTRY)&_ZN5S72C73v24Ev,
  (VTBL_ENTRY)&_ZN5S72C73v25Ev,
  (VTBL_ENTRY)&_ZN5S72C73v26Ev,
  (VTBL_ENTRY)&_ZN5S72C73v27Ev,
  (VTBL_ENTRY)&_ZN5S72C73v28Ev,
  (VTBL_ENTRY)&_ZN5S72C73v29Ev,
  (VTBL_ENTRY)&_ZN5S72C73v30Ev,
  (VTBL_ENTRY)&_ZN5S72C73v31Ev,
  (VTBL_ENTRY)&_ZN5S72C73v32Ev,
  (VTBL_ENTRY)&_ZN5S72C73v33Ev,
  (VTBL_ENTRY)&_ZN5S72C73v34Ev,
  (VTBL_ENTRY)&_ZN5S72C73v35Ev,
  (VTBL_ENTRY)&_ZN5S72C73v36Ev,
  (VTBL_ENTRY)&_ZN5S72C73v37Ev,
  (VTBL_ENTRY)&_ZN5S72C73v38Ev,
  (VTBL_ENTRY)&_ZN5S72C73v39Ev,
  (VTBL_ENTRY)&_ZN5S72C73v40Ev,
  (VTBL_ENTRY)&_ZN5S72C73v41Ev,
  (VTBL_ENTRY)&_ZN5S72C73v42Ev,
  (VTBL_ENTRY)&_ZN5S72C73v43Ev,
  (VTBL_ENTRY)&_ZN5S72C73v44Ev,
  (VTBL_ENTRY)&_ZN5S72C73v45Ev,
  (VTBL_ENTRY)&_ZN5S72C73v46Ev,
  (VTBL_ENTRY)&_ZN5S72C73v47Ev,
  (VTBL_ENTRY)&_ZN5S72C73v48Ev,
  (VTBL_ENTRY)&_ZN5S72C73v49Ev,
  (VTBL_ENTRY)&_ZN5S72C73v50Ev,
  (VTBL_ENTRY)&_ZN5S72C73v51Ev,
  (VTBL_ENTRY)&_ZN5S72C73v52Ev,
  (VTBL_ENTRY)&_ZN5S72C73v53Ev,
  (VTBL_ENTRY)&_ZN5S72C73v54Ev,
  (VTBL_ENTRY)&_ZN5S72C73v55Ev,
  (VTBL_ENTRY)&_ZN5S72C73v56Ev,
  (VTBL_ENTRY)&_ZN5S72C73v57Ev,
  (VTBL_ENTRY)&_ZN5S72C73v58Ev,
  (VTBL_ENTRY)&_ZN5S72C73v59Ev,
  (VTBL_ENTRY)&_ZN5S72C73v60Ev,
  (VTBL_ENTRY)&_ZN5S72C73v61Ev,
  (VTBL_ENTRY)&_ZN5S72C73v62Ev,
  (VTBL_ENTRY)&_ZN5S72C73v63Ev,
  (VTBL_ENTRY)&_ZN5S72C73v64Ev,
  (VTBL_ENTRY)&_ZN5S72C73v65Ev,
  (VTBL_ENTRY)&_ZN5S72C73v66Ev,
  (VTBL_ENTRY)&_ZN5S72C73v67Ev,
  (VTBL_ENTRY)&_ZN5S72C63v68Ev,
  (VTBL_ENTRY)&_ZN5S72C63v69Ev,
  (VTBL_ENTRY)&_ZN5S72C63v70Ev,
  (VTBL_ENTRY)&_ZN5S72C63v71Ev,
  (VTBL_ENTRY)&_ZN5S72C63v72Ev,
  (VTBL_ENTRY)&_ZN5S72C63v73Ev,
  (VTBL_ENTRY)&_ZN5S72C63v74Ev,
  (VTBL_ENTRY)&_ZN5S72C63v75Ev,
  (VTBL_ENTRY)&_ZN5S72C63v76Ev,
  (VTBL_ENTRY)&_ZN5S72C63v77Ev,
  (VTBL_ENTRY)&_ZN5S72C63v78Ev,
  (VTBL_ENTRY)&_ZN5S72C63v79Ev,
  (VTBL_ENTRY)&_ZN5S72C63v80Ev,
  (VTBL_ENTRY)&_ZN5S72C63v81Ev,
  (VTBL_ENTRY)&_ZN5S72C63v82Ev,
  (VTBL_ENTRY)&_ZN5S72C63v83Ev,
  (VTBL_ENTRY)&_ZN5S72C63v84Ev,
  (VTBL_ENTRY)&_ZN5S72C63v85Ev,
  (VTBL_ENTRY)&_ZN5S72C63v86Ev,
  (VTBL_ENTRY)&_ZN5S72C63v87Ev,
  (VTBL_ENTRY)&_ZN5S72C63v88Ev,
  (VTBL_ENTRY)&_ZN5S72C63v89Ev,
  (VTBL_ENTRY)&_ZN5S72C53v90Ev,
  (VTBL_ENTRY)&_ZN5S72C53v91Ev,
  (VTBL_ENTRY)&_ZN5S72C53v92Ev,
  (VTBL_ENTRY)&_ZN5S72C53v93Ev,
  (VTBL_ENTRY)&_ZN5S72C53v94Ev,
  (VTBL_ENTRY)&_ZN5S72C53v95Ev,
  (VTBL_ENTRY)&_ZN5S72C53v96Ev,
  (VTBL_ENTRY)&_ZN5S72C53v97Ev,
  (VTBL_ENTRY)&_ZN5S72C53v98Ev,
  (VTBL_ENTRY)&_ZN5S72C53v99Ev,
  (VTBL_ENTRY)&_ZN5S72C54v100Ev,
  (VTBL_ENTRY)&_ZN5S72C54v101Ev,
  (VTBL_ENTRY)&_ZN5S72C54v102Ev,
  (VTBL_ENTRY)&_ZN5S72C54v103Ev,
  (VTBL_ENTRY)&_ZN5S72C54v104Ev,
  (VTBL_ENTRY)&_ZN5S72C54v105Ev,
  (VTBL_ENTRY)&_ZN5S72C54v106Ev,
  (VTBL_ENTRY)&_ZN5S72C54v107Ev,
  (VTBL_ENTRY)&_ZN5S72C54v108Ev,
  (VTBL_ENTRY)&_ZN5S72C54v109Ev,
  (VTBL_ENTRY)&_ZN5S72C44v110Ev,
  (VTBL_ENTRY)&_ZN5S72C44v111Ev,
  (VTBL_ENTRY)&_ZN5S72C44v112Ev,
  (VTBL_ENTRY)&_ZN5S72C44v113Ev,
  (VTBL_ENTRY)&_ZN5S72C34v114Ev,
  (VTBL_ENTRY)&_ZN5S72C34v115Ev,
  (VTBL_ENTRY)&_ZN5S72C34v116Ev,
  (VTBL_ENTRY)&_ZN5S72C34v117Ev,
  (VTBL_ENTRY)&_ZN5S72C34v118Ev,
  (VTBL_ENTRY)&_ZN5S72C34v119Ev,
  (VTBL_ENTRY)&_ZN5S72C34v120Ev,
  (VTBL_ENTRY)&_ZN5S72C34v121Ev,
  (VTBL_ENTRY)&_ZN5S72C24v122Ev,
  (VTBL_ENTRY)&_ZN5S72C24v123Ev,
};
extern VTBL_ENTRY _ZTI5S72C2[];
extern  VTBL_ENTRY _ZTV5S72C2[];
Class_Descriptor cd_S72C2 = {  "S72C2", // class name
  bases_S72C2, 5,
  &(vtc_S72C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(312,232), // object size
  NSPAIRA(_ZTI5S72C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S72C2),124, //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  S72C1  : S72C2 {
  int s72c1f0;
  ::S3350C4_nt s72c1f1;
  ::S287C8_nt s72c1f2;
  ::S287C8_nt s72c1f3;
  void *s72c1f4;
  ::S32C27_nt s72c1f5;
  virtual  ~S72C1(); // _ZN5S72C1D1Ev
  virtual void  v1(); // _ZN5S72C12v1Ev
  virtual void  v2(); // _ZN5S72C12v2Ev
  virtual void  v3(); // _ZN5S72C12v3Ev
  S72C1(); // tgen
};
//SIG(1 S72C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ BC7{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 Fi FL Fp[4] Fi[2] Fp FC8{ m Fi[2]} Fp[2]} vd v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 Fi[2] Fp Fi[2] FC9{ BC10{ BC11{ BC12{ m Fp Fi[2]}}}} FC9 FC13{ m} FC9 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 Fi:1 Fi:1 Fi:1 FC14{ BC15{ BC12}} FC16{ BC17{ BC12}} FC18{ BC19{ BC12}} FC20{ BC21{ BC12}} Fi[3]} vd v110 v111 v112 v113 FC8 Fi:1 FC22{ BC23{ BC12}}} vd v114 v115 v116 v117 v118 v119 v120 v121 Fi Fi:1} vd v122 v123 Fi} vd v1 v2 v3 Fi FC8 FC9 FC9 Fp FC24{ m Fi[4] Fi:1}}


 S72C1 ::~S72C1(){ note_dtor("S72C1", this);}
void  S72C1 ::v1(){vfunc_called(this, "_ZN5S72C12v1Ev");}
void  S72C1 ::v2(){vfunc_called(this, "_ZN5S72C12v2Ev");}
void  S72C1 ::v3(){vfunc_called(this, "_ZN5S72C12v3Ev");}
S72C1 ::S72C1(){ note_ctor("S72C1", this);} // tgen

static void Test_S72C1()
{
  extern Class_Descriptor cd_S72C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(49,74)];
    init_test(&cd_S72C1, buf);
    S72C1 *dp, &lv = *(dp=new (buf) S72C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,292), "sizeof(S72C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S72C1)");
    check_base_class_offset(lv, (S72C7*)(S72C6*)(S72C5*)(S72C4*)(S72C3*)(S72C2*), 0, "S72C1");
    check_base_class_offset(lv, (S72C6*)(S72C5*)(S72C4*)(S72C3*)(S72C2*), 0, "S72C1");
    check_base_class_offset(lv, (S72C5*)(S72C4*)(S72C3*)(S72C2*), 0, "S72C1");
    check_base_class_offset(lv, (S72C4*)(S72C3*)(S72C2*), 0, "S72C1");
    check_base_class_offset(lv, (S72C3*)(S72C2*), 0, "S72C1");
    check_base_class_offset(lv, (S72C2*), 0, "S72C1");
    check_field_offset(lv, s72c1f0, ABISELECT(308,232), "S72C1.s72c1f0");
    check_field_offset(lv, s72c1f1, ABISELECT(312,236), "S72C1.s72c1f1");
    check_field_offset(lv, s72c1f2, ABISELECT(320,244), "S72C1.s72c1f2");
    check_field_offset(lv, s72c1f3, ABISELECT(336,256), "S72C1.s72c1f3");
    check_field_offset(lv, s72c1f4, ABISELECT(352,268), "S72C1.s72c1f4");
    check_field_offset(lv, s72c1f5, ABISELECT(360,272), "S72C1.s72c1f5");
    test_class_info(&lv, &cd_S72C1);
    dp->~S72C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS72C1(Test_S72C1, "S72C1", ABISELECT(384,292));

#else // __cplusplus

extern void _ZN5S72C1C1Ev();
extern void _ZN5S72C1D1Ev();
Name_Map name_map_S72C1[] = {
  NSPAIR(_ZN5S72C1C1Ev),
  NSPAIR(_ZN5S72C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S72C7;
extern VTBL_ENTRY _ZTI5S72C7[];
extern  VTBL_ENTRY _ZTV5S72C7[];
extern Class_Descriptor cd_S72C6;
extern VTBL_ENTRY _ZTI5S72C6[];
extern  VTBL_ENTRY _ZTV5S72C6[];
extern Class_Descriptor cd_S72C5;
extern VTBL_ENTRY _ZTI5S72C5[];
extern  VTBL_ENTRY _ZTV5S72C5[];
extern Class_Descriptor cd_S72C4;
extern VTBL_ENTRY _ZTI5S72C4[];
extern  VTBL_ENTRY _ZTV5S72C4[];
extern Class_Descriptor cd_S72C3;
extern VTBL_ENTRY _ZTI5S72C3[];
extern  VTBL_ENTRY _ZTV5S72C3[];
extern Class_Descriptor cd_S72C2;
extern VTBL_ENTRY _ZTI5S72C2[];
extern  VTBL_ENTRY _ZTV5S72C2[];
static Base_Class bases_S72C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S72C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S72C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S72C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S72C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S72C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S72C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S72C1[];
extern void _ZN5S72C1D1Ev();
extern void _ZN5S72C1D0Ev();
extern void _ZN5S72C72v4Ev();
extern void _ZN5S72C72v5Ev();
extern void _ZN5S72C72v6Ev();
extern void _ZN5S72C72v7Ev();
extern void _ZN5S72C72v8Ev();
extern void _ZN5S72C72v9Ev();
extern void _ZN5S72C73v10Ev();
extern void _ZN5S72C73v11Ev();
extern void _ZN5S72C73v12Ev();
extern void _ZN5S72C73v13Ev();
extern void _ZN5S72C73v14Ev();
extern void _ZN5S72C73v15Ev();
extern void _ZN5S72C73v16Ev();
extern void _ZN5S72C73v17Ev();
extern void _ZN5S72C73v18Ev();
extern void _ZN5S72C73v19Ev();
extern void _ZN5S72C73v20Ev();
extern void _ZN5S72C73v21Ev();
extern void _ZN5S72C73v22Ev();
extern void _ZN5S72C73v23Ev();
extern void _ZN5S72C73v24Ev();
extern void _ZN5S72C73v25Ev();
extern void _ZN5S72C73v26Ev();
extern void _ZN5S72C73v27Ev();
extern void _ZN5S72C73v28Ev();
extern void _ZN5S72C73v29Ev();
extern void _ZN5S72C73v30Ev();
extern void _ZN5S72C73v31Ev();
extern void _ZN5S72C73v32Ev();
extern void _ZN5S72C73v33Ev();
extern void _ZN5S72C73v34Ev();
extern void _ZN5S72C73v35Ev();
extern void _ZN5S72C73v36Ev();
extern void _ZN5S72C73v37Ev();
extern void _ZN5S72C73v38Ev();
extern void _ZN5S72C73v39Ev();
extern void _ZN5S72C73v40Ev();
extern void _ZN5S72C73v41Ev();
extern void _ZN5S72C73v42Ev();
extern void _ZN5S72C73v43Ev();
extern void _ZN5S72C73v44Ev();
extern void _ZN5S72C73v45Ev();
extern void _ZN5S72C73v46Ev();
extern void _ZN5S72C73v47Ev();
extern void _ZN5S72C73v48Ev();
extern void _ZN5S72C73v49Ev();
extern void _ZN5S72C73v50Ev();
extern void _ZN5S72C73v51Ev();
extern void _ZN5S72C73v52Ev();
extern void _ZN5S72C73v53Ev();
extern void _ZN5S72C73v54Ev();
extern void _ZN5S72C73v55Ev();
extern void _ZN5S72C73v56Ev();
extern void _ZN5S72C73v57Ev();
extern void _ZN5S72C73v58Ev();
extern void _ZN5S72C73v59Ev();
extern void _ZN5S72C73v60Ev();
extern void _ZN5S72C73v61Ev();
extern void _ZN5S72C73v62Ev();
extern void _ZN5S72C73v63Ev();
extern void _ZN5S72C73v64Ev();
extern void _ZN5S72C73v65Ev();
extern void _ZN5S72C73v66Ev();
extern void _ZN5S72C73v67Ev();
extern void _ZN5S72C63v68Ev();
extern void _ZN5S72C63v69Ev();
extern void _ZN5S72C63v70Ev();
extern void _ZN5S72C63v71Ev();
extern void _ZN5S72C63v72Ev();
extern void _ZN5S72C63v73Ev();
extern void _ZN5S72C63v74Ev();
extern void _ZN5S72C63v75Ev();
extern void _ZN5S72C63v76Ev();
extern void _ZN5S72C63v77Ev();
extern void _ZN5S72C63v78Ev();
extern void _ZN5S72C63v79Ev();
extern void _ZN5S72C63v80Ev();
extern void _ZN5S72C63v81Ev();
extern void _ZN5S72C63v82Ev();
extern void _ZN5S72C63v83Ev();
extern void _ZN5S72C63v84Ev();
extern void _ZN5S72C63v85Ev();
extern void _ZN5S72C63v86Ev();
extern void _ZN5S72C63v87Ev();
extern void _ZN5S72C63v88Ev();
extern void _ZN5S72C63v89Ev();
extern void _ZN5S72C53v90Ev();
extern void _ZN5S72C53v91Ev();
extern void _ZN5S72C53v92Ev();
extern void _ZN5S72C53v93Ev();
extern void _ZN5S72C53v94Ev();
extern void _ZN5S72C53v95Ev();
extern void _ZN5S72C53v96Ev();
extern void _ZN5S72C53v97Ev();
extern void _ZN5S72C53v98Ev();
extern void _ZN5S72C53v99Ev();
extern void _ZN5S72C54v100Ev();
extern void _ZN5S72C54v101Ev();
extern void _ZN5S72C54v102Ev();
extern void _ZN5S72C54v103Ev();
extern void _ZN5S72C54v104Ev();
extern void _ZN5S72C54v105Ev();
extern void _ZN5S72C54v106Ev();
extern void _ZN5S72C54v107Ev();
extern void _ZN5S72C54v108Ev();
extern void _ZN5S72C54v109Ev();
extern void _ZN5S72C44v110Ev();
extern void _ZN5S72C44v111Ev();
extern void _ZN5S72C44v112Ev();
extern void _ZN5S72C44v113Ev();
extern void _ZN5S72C34v114Ev();
extern void _ZN5S72C34v115Ev();
extern void _ZN5S72C34v116Ev();
extern void _ZN5S72C34v117Ev();
extern void _ZN5S72C34v118Ev();
extern void _ZN5S72C34v119Ev();
extern void _ZN5S72C34v120Ev();
extern void _ZN5S72C34v121Ev();
extern void _ZN5S72C24v122Ev();
extern void _ZN5S72C24v123Ev();
extern void _ZN5S72C12v1Ev();
extern void _ZN5S72C12v2Ev();
extern void _ZN5S72C12v3Ev();
static  VTBL_ENTRY vtc_S72C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S72C1[0]),
  (VTBL_ENTRY)&_ZN5S72C1D1Ev,
  (VTBL_ENTRY)&_ZN5S72C1D0Ev,
  (VTBL_ENTRY)&_ZN5S72C72v4Ev,
  (VTBL_ENTRY)&_ZN5S72C72v5Ev,
  (VTBL_ENTRY)&_ZN5S72C72v6Ev,
  (VTBL_ENTRY)&_ZN5S72C72v7Ev,
  (VTBL_ENTRY)&_ZN5S72C72v8Ev,
  (VTBL_ENTRY)&_ZN5S72C72v9Ev,
  (VTBL_ENTRY)&_ZN5S72C73v10Ev,
  (VTBL_ENTRY)&_ZN5S72C73v11Ev,
  (VTBL_ENTRY)&_ZN5S72C73v12Ev,
  (VTBL_ENTRY)&_ZN5S72C73v13Ev,
  (VTBL_ENTRY)&_ZN5S72C73v14Ev,
  (VTBL_ENTRY)&_ZN5S72C73v15Ev,
  (VTBL_ENTRY)&_ZN5S72C73v16Ev,
  (VTBL_ENTRY)&_ZN5S72C73v17Ev,
  (VTBL_ENTRY)&_ZN5S72C73v18Ev,
  (VTBL_ENTRY)&_ZN5S72C73v19Ev,
  (VTBL_ENTRY)&_ZN5S72C73v20Ev,
  (VTBL_ENTRY)&_ZN5S72C73v21Ev,
  (VTBL_ENTRY)&_ZN5S72C73v22Ev,
  (VTBL_ENTRY)&_ZN5S72C73v23Ev,
  (VTBL_ENTRY)&_ZN5S72C73v24Ev,
  (VTBL_ENTRY)&_ZN5S72C73v25Ev,
  (VTBL_ENTRY)&_ZN5S72C73v26Ev,
  (VTBL_ENTRY)&_ZN5S72C73v27Ev,
  (VTBL_ENTRY)&_ZN5S72C73v28Ev,
  (VTBL_ENTRY)&_ZN5S72C73v29Ev,
  (VTBL_ENTRY)&_ZN5S72C73v30Ev,
  (VTBL_ENTRY)&_ZN5S72C73v31Ev,
  (VTBL_ENTRY)&_ZN5S72C73v32Ev,
  (VTBL_ENTRY)&_ZN5S72C73v33Ev,
  (VTBL_ENTRY)&_ZN5S72C73v34Ev,
  (VTBL_ENTRY)&_ZN5S72C73v35Ev,
  (VTBL_ENTRY)&_ZN5S72C73v36Ev,
  (VTBL_ENTRY)&_ZN5S72C73v37Ev,
  (VTBL_ENTRY)&_ZN5S72C73v38Ev,
  (VTBL_ENTRY)&_ZN5S72C73v39Ev,
  (VTBL_ENTRY)&_ZN5S72C73v40Ev,
  (VTBL_ENTRY)&_ZN5S72C73v41Ev,
  (VTBL_ENTRY)&_ZN5S72C73v42Ev,
  (VTBL_ENTRY)&_ZN5S72C73v43Ev,
  (VTBL_ENTRY)&_ZN5S72C73v44Ev,
  (VTBL_ENTRY)&_ZN5S72C73v45Ev,
  (VTBL_ENTRY)&_ZN5S72C73v46Ev,
  (VTBL_ENTRY)&_ZN5S72C73v47Ev,
  (VTBL_ENTRY)&_ZN5S72C73v48Ev,
  (VTBL_ENTRY)&_ZN5S72C73v49Ev,
  (VTBL_ENTRY)&_ZN5S72C73v50Ev,
  (VTBL_ENTRY)&_ZN5S72C73v51Ev,
  (VTBL_ENTRY)&_ZN5S72C73v52Ev,
  (VTBL_ENTRY)&_ZN5S72C73v53Ev,
  (VTBL_ENTRY)&_ZN5S72C73v54Ev,
  (VTBL_ENTRY)&_ZN5S72C73v55Ev,
  (VTBL_ENTRY)&_ZN5S72C73v56Ev,
  (VTBL_ENTRY)&_ZN5S72C73v57Ev,
  (VTBL_ENTRY)&_ZN5S72C73v58Ev,
  (VTBL_ENTRY)&_ZN5S72C73v59Ev,
  (VTBL_ENTRY)&_ZN5S72C73v60Ev,
  (VTBL_ENTRY)&_ZN5S72C73v61Ev,
  (VTBL_ENTRY)&_ZN5S72C73v62Ev,
  (VTBL_ENTRY)&_ZN5S72C73v63Ev,
  (VTBL_ENTRY)&_ZN5S72C73v64Ev,
  (VTBL_ENTRY)&_ZN5S72C73v65Ev,
  (VTBL_ENTRY)&_ZN5S72C73v66Ev,
  (VTBL_ENTRY)&_ZN5S72C73v67Ev,
  (VTBL_ENTRY)&_ZN5S72C63v68Ev,
  (VTBL_ENTRY)&_ZN5S72C63v69Ev,
  (VTBL_ENTRY)&_ZN5S72C63v70Ev,
  (VTBL_ENTRY)&_ZN5S72C63v71Ev,
  (VTBL_ENTRY)&_ZN5S72C63v72Ev,
  (VTBL_ENTRY)&_ZN5S72C63v73Ev,
  (VTBL_ENTRY)&_ZN5S72C63v74Ev,
  (VTBL_ENTRY)&_ZN5S72C63v75Ev,
  (VTBL_ENTRY)&_ZN5S72C63v76Ev,
  (VTBL_ENTRY)&_ZN5S72C63v77Ev,
  (VTBL_ENTRY)&_ZN5S72C63v78Ev,
  (VTBL_ENTRY)&_ZN5S72C63v79Ev,
  (VTBL_ENTRY)&_ZN5S72C63v80Ev,
  (VTBL_ENTRY)&_ZN5S72C63v81Ev,
  (VTBL_ENTRY)&_ZN5S72C63v82Ev,
  (VTBL_ENTRY)&_ZN5S72C63v83Ev,
  (VTBL_ENTRY)&_ZN5S72C63v84Ev,
  (VTBL_ENTRY)&_ZN5S72C63v85Ev,
  (VTBL_ENTRY)&_ZN5S72C63v86Ev,
  (VTBL_ENTRY)&_ZN5S72C63v87Ev,
  (VTBL_ENTRY)&_ZN5S72C63v88Ev,
  (VTBL_ENTRY)&_ZN5S72C63v89Ev,
  (VTBL_ENTRY)&_ZN5S72C53v90Ev,
  (VTBL_ENTRY)&_ZN5S72C53v91Ev,
  (VTBL_ENTRY)&_ZN5S72C53v92Ev,
  (VTBL_ENTRY)&_ZN5S72C53v93Ev,
  (VTBL_ENTRY)&_ZN5S72C53v94Ev,
  (VTBL_ENTRY)&_ZN5S72C53v95Ev,
  (VTBL_ENTRY)&_ZN5S72C53v96Ev,
  (VTBL_ENTRY)&_ZN5S72C53v97Ev,
  (VTBL_ENTRY)&_ZN5S72C53v98Ev,
  (VTBL_ENTRY)&_ZN5S72C53v99Ev,
  (VTBL_ENTRY)&_ZN5S72C54v100Ev,
  (VTBL_ENTRY)&_ZN5S72C54v101Ev,
  (VTBL_ENTRY)&_ZN5S72C54v102Ev,
  (VTBL_ENTRY)&_ZN5S72C54v103Ev,
  (VTBL_ENTRY)&_ZN5S72C54v104Ev,
  (VTBL_ENTRY)&_ZN5S72C54v105Ev,
  (VTBL_ENTRY)&_ZN5S72C54v106Ev,
  (VTBL_ENTRY)&_ZN5S72C54v107Ev,
  (VTBL_ENTRY)&_ZN5S72C54v108Ev,
  (VTBL_ENTRY)&_ZN5S72C54v109Ev,
  (VTBL_ENTRY)&_ZN5S72C44v110Ev,
  (VTBL_ENTRY)&_ZN5S72C44v111Ev,
  (VTBL_ENTRY)&_ZN5S72C44v112Ev,
  (VTBL_ENTRY)&_ZN5S72C44v113Ev,
  (VTBL_ENTRY)&_ZN5S72C34v114Ev,
  (VTBL_ENTRY)&_ZN5S72C34v115Ev,
  (VTBL_ENTRY)&_ZN5S72C34v116Ev,
  (VTBL_ENTRY)&_ZN5S72C34v117Ev,
  (VTBL_ENTRY)&_ZN5S72C34v118Ev,
  (VTBL_ENTRY)&_ZN5S72C34v119Ev,
  (VTBL_ENTRY)&_ZN5S72C34v120Ev,
  (VTBL_ENTRY)&_ZN5S72C34v121Ev,
  (VTBL_ENTRY)&_ZN5S72C24v122Ev,
  (VTBL_ENTRY)&_ZN5S72C24v123Ev,
  (VTBL_ENTRY)&_ZN5S72C12v1Ev,
  (VTBL_ENTRY)&_ZN5S72C12v2Ev,
  (VTBL_ENTRY)&_ZN5S72C12v3Ev,
};
extern VTBL_ENTRY _ZTI5S72C1[];
extern  VTBL_ENTRY _ZTV5S72C1[];
Class_Descriptor cd_S72C1 = {  "S72C1", // class name
  bases_S72C1, 6,
  &(vtc_S72C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(384,292), // object size
  NSPAIRA(_ZTI5S72C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S72C1),127, //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  S96C7  {
  int s96c7f0;
  __tsi64 s96c7f1;
  void *s96c7f2[4];
  int s96c7f3[2];
  void *s96c7f4;
  ::S3350C4_nt s96c7f5;
  void *s96c7f6[2];
  virtual  ~S96C7(); // _ZN5S96C7D1Ev
  virtual void  v5(); // _ZN5S96C72v5Ev
  virtual void  v6(); // _ZN5S96C72v6Ev
  virtual void  v7(); // _ZN5S96C72v7Ev
  virtual void  v8(); // _ZN5S96C72v8Ev
  virtual void  v9(); // _ZN5S96C72v9Ev
  virtual void  v10(); // _ZN5S96C73v10Ev
  virtual void  v11(); // _ZN5S96C73v11Ev
  virtual void  v12(); // _ZN5S96C73v12Ev
  virtual void  v13(); // _ZN5S96C73v13Ev
  virtual void  v14(); // _ZN5S96C73v14Ev
  virtual void  v15(); // _ZN5S96C73v15Ev
  virtual void  v16(); // _ZN5S96C73v16Ev
  virtual void  v17(); // _ZN5S96C73v17Ev
  virtual void  v18(); // _ZN5S96C73v18Ev
  virtual void  v19(); // _ZN5S96C73v19Ev
  virtual void  v20(); // _ZN5S96C73v20Ev
  virtual void  v21(); // _ZN5S96C73v21Ev
  virtual void  v22(); // _ZN5S96C73v22Ev
  virtual void  v23(); // _ZN5S96C73v23Ev
  virtual void  v24(); // _ZN5S96C73v24Ev
  virtual void  v25(); // _ZN5S96C73v25Ev
  virtual void  v26(); // _ZN5S96C73v26Ev
  virtual void  v27(); // _ZN5S96C73v27Ev
  virtual void  v28(); // _ZN5S96C73v28Ev
  virtual void  v29(); // _ZN5S96C73v29Ev
  virtual void  v30(); // _ZN5S96C73v30Ev
  virtual void  v31(); // _ZN5S96C73v31Ev
  virtual void  v32(); // _ZN5S96C73v32Ev
  virtual void  v33(); // _ZN5S96C73v33Ev
  virtual void  v34(); // _ZN5S96C73v34Ev
  virtual void  v35(); // _ZN5S96C73v35Ev
  virtual void  v36(); // _ZN5S96C73v36Ev
  virtual void  v37(); // _ZN5S96C73v37Ev
  virtual void  v38(); // _ZN5S96C73v38Ev
  virtual void  v39(); // _ZN5S96C73v39Ev
  virtual void  v40(); // _ZN5S96C73v40Ev
  virtual void  v41(); // _ZN5S96C73v41Ev
  virtual void  v42(); // _ZN5S96C73v42Ev
  virtual void  v43(); // _ZN5S96C73v43Ev
  virtual void  v44(); // _ZN5S96C73v44Ev
  virtual void  v45(); // _ZN5S96C73v45Ev
  virtual void  v46(); // _ZN5S96C73v46Ev
  virtual void  v47(); // _ZN5S96C73v47Ev
  virtual void  v48(); // _ZN5S96C73v48Ev
  virtual void  v49(); // _ZN5S96C73v49Ev
  virtual void  v50(); // _ZN5S96C73v50Ev
  virtual void  v51(); // _ZN5S96C73v51Ev
  virtual void  v52(); // _ZN5S96C73v52Ev
  virtual void  v53(); // _ZN5S96C73v53Ev
  virtual void  v54(); // _ZN5S96C73v54Ev
  virtual void  v55(); // _ZN5S96C73v55Ev
  virtual void  v56(); // _ZN5S96C73v56Ev
  virtual void  v57(); // _ZN5S96C73v57Ev
  virtual void  v58(); // _ZN5S96C73v58Ev
  virtual void  v59(); // _ZN5S96C73v59Ev
  virtual void  v60(); // _ZN5S96C73v60Ev
  virtual void  v61(); // _ZN5S96C73v61Ev
  virtual void  v62(); // _ZN5S96C73v62Ev
  virtual void  v63(); // _ZN5S96C73v63Ev
  virtual void  v64(); // _ZN5S96C73v64Ev
  virtual void  v65(); // _ZN5S96C73v65Ev
  virtual void  v66(); // _ZN5S96C73v66Ev
  virtual void  v67(); // _ZN5S96C73v67Ev
  virtual void  v68(); // _ZN5S96C73v68Ev
  S96C7(); // tgen
};
//SIG(-1 S96C7) 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]}


 S96C7 ::~S96C7(){ note_dtor("S96C7", this);}
void  S96C7 ::v5(){vfunc_called(this, "_ZN5S96C72v5Ev");}
void  S96C7 ::v6(){vfunc_called(this, "_ZN5S96C72v6Ev");}
void  S96C7 ::v7(){vfunc_called(this, "_ZN5S96C72v7Ev");}
void  S96C7 ::v8(){vfunc_called(this, "_ZN5S96C72v8Ev");}
void  S96C7 ::v9(){vfunc_called(this, "_ZN5S96C72v9Ev");}
void  S96C7 ::v10(){vfunc_called(this, "_ZN5S96C73v10Ev");}
void  S96C7 ::v11(){vfunc_called(this, "_ZN5S96C73v11Ev");}
void  S96C7 ::v12(){vfunc_called(this, "_ZN5S96C73v12Ev");}
void  S96C7 ::v13(){vfunc_called(this, "_ZN5S96C73v13Ev");}
void  S96C7 ::v14(){vfunc_called(this, "_ZN5S96C73v14Ev");}
void  S96C7 ::v15(){vfunc_called(this, "_ZN5S96C73v15Ev");}
void  S96C7 ::v16(){vfunc_called(this, "_ZN5S96C73v16Ev");}
void  S96C7 ::v17(){vfunc_called(this, "_ZN5S96C73v17Ev");}
void  S96C7 ::v18(){vfunc_called(this, "_ZN5S96C73v18Ev");}
void  S96C7 ::v19(){vfunc_called(this, "_ZN5S96C73v19Ev");}
void  S96C7 ::v20(){vfunc_called(this, "_ZN5S96C73v20Ev");}
void  S96C7 ::v21(){vfunc_called(this, "_ZN5S96C73v21Ev");}
void  S96C7 ::v22(){vfunc_called(this, "_ZN5S96C73v22Ev");}
void  S96C7 ::v23(){vfunc_called(this, "_ZN5S96C73v23Ev");}
void  S96C7 ::v24(){vfunc_called(this, "_ZN5S96C73v24Ev");}
void  S96C7 ::v25(){vfunc_called(this, "_ZN5S96C73v25Ev");}
void  S96C7 ::v26(){vfunc_called(this, "_ZN5S96C73v26Ev");}
void  S96C7 ::v27(){vfunc_called(this, "_ZN5S96C73v27Ev");}
void  S96C7 ::v28(){vfunc_called(this, "_ZN5S96C73v28Ev");}
void  S96C7 ::v29(){vfunc_called(this, "_ZN5S96C73v29Ev");}
void  S96C7 ::v30(){vfunc_called(this, "_ZN5S96C73v30Ev");}
void  S96C7 ::v31(){vfunc_called(this, "_ZN5S96C73v31Ev");}
void  S96C7 ::v32(){vfunc_called(this, "_ZN5S96C73v32Ev");}
void  S96C7 ::v33(){vfunc_called(this, "_ZN5S96C73v33Ev");}
void  S96C7 ::v34(){vfunc_called(this, "_ZN5S96C73v34Ev");}
void  S96C7 ::v35(){vfunc_called(this, "_ZN5S96C73v35Ev");}
void  S96C7 ::v36(){vfunc_called(this, "_ZN5S96C73v36Ev");}
void  S96C7 ::v37(){vfunc_called(this, "_ZN5S96C73v37Ev");}
void  S96C7 ::v38(){vfunc_called(this, "_ZN5S96C73v38Ev");}
void  S96C7 ::v39(){vfunc_called(this, "_ZN5S96C73v39Ev");}
void  S96C7 ::v40(){vfunc_called(this, "_ZN5S96C73v40Ev");}
void  S96C7 ::v41(){vfunc_called(this, "_ZN5S96C73v41Ev");}
void  S96C7 ::v42(){vfunc_called(this, "_ZN5S96C73v42Ev");}
void  S96C7 ::v43(){vfunc_called(this, "_ZN5S96C73v43Ev");}
void  S96C7 ::v44(){vfunc_called(this, "_ZN5S96C73v44Ev");}
void  S96C7 ::v45(){vfunc_called(this, "_ZN5S96C73v45Ev");}
void  S96C7 ::v46(){vfunc_called(this, "_ZN5S96C73v46Ev");}
void  S96C7 ::v47(){vfunc_called(this, "_ZN5S96C73v47Ev");}
void  S96C7 ::v48(){vfunc_called(this, "_ZN5S96C73v48Ev");}
void  S96C7 ::v49(){vfunc_called(this, "_ZN5S96C73v49Ev");}
void  S96C7 ::v50(){vfunc_called(this, "_ZN5S96C73v50Ev");}
void  S96C7 ::v51(){vfunc_called(this, "_ZN5S96C73v51Ev");}
void  S96C7 ::v52(){vfunc_called(this, "_ZN5S96C73v52Ev");}
void  S96C7 ::v53(){vfunc_called(this, "_ZN5S96C73v53Ev");}
void  S96C7 ::v54(){vfunc_called(this, "_ZN5S96C73v54Ev");}
void  S96C7 ::v55(){vfunc_called(this, "_ZN5S96C73v55Ev");}
void  S96C7 ::v56(){vfunc_called(this, "_ZN5S96C73v56Ev");}
void  S96C7 ::v57(){vfunc_called(this, "_ZN5S96C73v57Ev");}
void  S96C7 ::v58(){vfunc_called(this, "_ZN5S96C73v58Ev");}
void  S96C7 ::v59(){vfunc_called(this, "_ZN5S96C73v59Ev");}
void  S96C7 ::v60(){vfunc_called(this, "_ZN5S96C73v60Ev");}
void  S96C7 ::v61(){vfunc_called(this, "_ZN5S96C73v61Ev");}
void  S96C7 ::v62(){vfunc_called(this, "_ZN5S96C73v62Ev");}
void  S96C7 ::v63(){vfunc_called(this, "_ZN5S96C73v63Ev");}
void  S96C7 ::v64(){vfunc_called(this, "_ZN5S96C73v64Ev");}
void  S96C7 ::v65(){vfunc_called(this, "_ZN5S96C73v65Ev");}
void  S96C7 ::v66(){vfunc_called(this, "_ZN5S96C73v66Ev");}
void  S96C7 ::v67(){vfunc_called(this, "_ZN5S96C73v67Ev");}
void  S96C7 ::v68(){vfunc_called(this, "_ZN5S96C73v68Ev");}
S96C7 ::S96C7(){ note_ctor("S96C7", this);} // tgen

static void Test_S96C7()
{
  extern Class_Descriptor cd_S96C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S96C7, buf);
    S96C7 *dp, &lv = *(dp=new (buf) S96C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S96C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S96C7)");
    check_field_offset(lv, s96c7f0, ABISELECT(8,4), "S96C7.s96c7f0");
    check_field_offset(lv, s96c7f1, ABISELECT(16,8), "S96C7.s96c7f1");
    check_field_offset(lv, s96c7f2, ABISELECT(24,16), "S96C7.s96c7f2");
    check_field_offset(lv, s96c7f3, ABISELECT(56,32), "S96C7.s96c7f3");
    check_field_offset(lv, s96c7f4, ABISELECT(64,40), "S96C7.s96c7f4");
    check_field_offset(lv, s96c7f5, ABISELECT(72,44), "S96C7.s96c7f5");
    check_field_offset(lv, s96c7f6, ABISELECT(80,52), "S96C7.s96c7f6");
    test_class_info(&lv, &cd_S96C7);
    dp->~S96C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS96C7(Test_S96C7, "S96C7", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN5S96C7C1Ev();
extern void _ZN5S96C7D1Ev();
Name_Map name_map_S96C7[] = {
  NSPAIR(_ZN5S96C7C1Ev),
  NSPAIR(_ZN5S96C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI5S96C7[];
extern void _ZN5S96C7D1Ev();
extern void _ZN5S96C7D0Ev();
extern void _ZN5S96C72v5Ev();
extern void _ZN5S96C72v6Ev();
extern void _ZN5S96C72v7Ev();
extern void _ZN5S96C72v8Ev();
extern void _ZN5S96C72v9Ev();
extern void _ZN5S96C73v10Ev();
extern void _ZN5S96C73v11Ev();
extern void _ZN5S96C73v12Ev();
extern void _ZN5S96C73v13Ev();
extern void _ZN5S96C73v14Ev();
extern void _ZN5S96C73v15Ev();
extern void _ZN5S96C73v16Ev();
extern void _ZN5S96C73v17Ev();
extern void _ZN5S96C73v18Ev();
extern void _ZN5S96C73v19Ev();
extern void _ZN5S96C73v20Ev();
extern void _ZN5S96C73v21Ev();
extern void _ZN5S96C73v22Ev();
extern void _ZN5S96C73v23Ev();
extern void _ZN5S96C73v24Ev();
extern void _ZN5S96C73v25Ev();
extern void _ZN5S96C73v26Ev();
extern void _ZN5S96C73v27Ev();
extern void _ZN5S96C73v28Ev();
extern void _ZN5S96C73v29Ev();
extern void _ZN5S96C73v30Ev();
extern void _ZN5S96C73v31Ev();
extern void _ZN5S96C73v32Ev();
extern void _ZN5S96C73v33Ev();
extern void _ZN5S96C73v34Ev();
extern void _ZN5S96C73v35Ev();
extern void _ZN5S96C73v36Ev();
extern void _ZN5S96C73v37Ev();
extern void _ZN5S96C73v38Ev();
extern void _ZN5S96C73v39Ev();
extern void _ZN5S96C73v40Ev();
extern void _ZN5S96C73v41Ev();
extern void _ZN5S96C73v42Ev();
extern void _ZN5S96C73v43Ev();
extern void _ZN5S96C73v44Ev();
extern void _ZN5S96C73v45Ev();
extern void _ZN5S96C73v46Ev();
extern void _ZN5S96C73v47Ev();
extern void _ZN5S96C73v48Ev();
extern void _ZN5S96C73v49Ev();
extern void _ZN5S96C73v50Ev();
extern void _ZN5S96C73v51Ev();
extern void _ZN5S96C73v52Ev();
extern void _ZN5S96C73v53Ev();
extern void _ZN5S96C73v54Ev();
extern void _ZN5S96C73v55Ev();
extern void _ZN5S96C73v56Ev();
extern void _ZN5S96C73v57Ev();
extern void _ZN5S96C73v58Ev();
extern void _ZN5S96C73v59Ev();
extern void _ZN5S96C73v60Ev();
extern void _ZN5S96C73v61Ev();
extern void _ZN5S96C73v62Ev();
extern void _ZN5S96C73v63Ev();
extern void _ZN5S96C73v64Ev();
extern void _ZN5S96C73v65Ev();
extern void _ZN5S96C73v66Ev();
extern void _ZN5S96C73v67Ev();
extern void _ZN5S96C73v68Ev();
static  VTBL_ENTRY vtc_S96C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S96C7[0]),
  (VTBL_ENTRY)&_ZN5S96C7D1Ev,
  (VTBL_ENTRY)&_ZN5S96C7D0Ev,
  (VTBL_ENTRY)&_ZN5S96C72v5Ev,
  (VTBL_ENTRY)&_ZN5S96C72v6Ev,
  (VTBL_ENTRY)&_ZN5S96C72v7Ev,
  (VTBL_ENTRY)&_ZN5S96C72v8Ev,
  (VTBL_ENTRY)&_ZN5S96C72v9Ev,
  (VTBL_ENTRY)&_ZN5S96C73v10Ev,
  (VTBL_ENTRY)&_ZN5S96C73v11Ev,
  (VTBL_ENTRY)&_ZN5S96C73v12Ev,
  (VTBL_ENTRY)&_ZN5S96C73v13Ev,
  (VTBL_ENTRY)&_ZN5S96C73v14Ev,
  (VTBL_ENTRY)&_ZN5S96C73v15Ev,
  (VTBL_ENTRY)&_ZN5S96C73v16Ev,
  (VTBL_ENTRY)&_ZN5S96C73v17Ev,
  (VTBL_ENTRY)&_ZN5S96C73v18Ev,
  (VTBL_ENTRY)&_ZN5S96C73v19Ev,
  (VTBL_ENTRY)&_ZN5S96C73v20Ev,
  (VTBL_ENTRY)&_ZN5S96C73v21Ev,
  (VTBL_ENTRY)&_ZN5S96C73v22Ev,
  (VTBL_ENTRY)&_ZN5S96C73v23Ev,
  (VTBL_ENTRY)&_ZN5S96C73v24Ev,
  (VTBL_ENTRY)&_ZN5S96C73v25Ev,
  (VTBL_ENTRY)&_ZN5S96C73v26Ev,
  (VTBL_ENTRY)&_ZN5S96C73v27Ev,
  (VTBL_ENTRY)&_ZN5S96C73v28Ev,
  (VTBL_ENTRY)&_ZN5S96C73v29Ev,
  (VTBL_ENTRY)&_ZN5S96C73v30Ev,
  (VTBL_ENTRY)&_ZN5S96C73v31Ev,
  (VTBL_ENTRY)&_ZN5S96C73v32Ev,
  (VTBL_ENTRY)&_ZN5S96C73v33Ev,
  (VTBL_ENTRY)&_ZN5S96C73v34Ev,
  (VTBL_ENTRY)&_ZN5S96C73v35Ev,
  (VTBL_ENTRY)&_ZN5S96C73v36Ev,
  (VTBL_ENTRY)&_ZN5S96C73v37Ev,
  (VTBL_ENTRY)&_ZN5S96C73v38Ev,
  (VTBL_ENTRY)&_ZN5S96C73v39Ev,
  (VTBL_ENTRY)&_ZN5S96C73v40Ev,
  (VTBL_ENTRY)&_ZN5S96C73v41Ev,
  (VTBL_ENTRY)&_ZN5S96C73v42Ev,
  (VTBL_ENTRY)&_ZN5S96C73v43Ev,
  (VTBL_ENTRY)&_ZN5S96C73v44Ev,
  (VTBL_ENTRY)&_ZN5S96C73v45Ev,
  (VTBL_ENTRY)&_ZN5S96C73v46Ev,
  (VTBL_ENTRY)&_ZN5S96C73v47Ev,
  (VTBL_ENTRY)&_ZN5S96C73v48Ev,
  (VTBL_ENTRY)&_ZN5S96C73v49Ev,
  (VTBL_ENTRY)&_ZN5S96C73v50Ev,
  (VTBL_ENTRY)&_ZN5S96C73v51Ev,
  (VTBL_ENTRY)&_ZN5S96C73v52Ev,
  (VTBL_ENTRY)&_ZN5S96C73v53Ev,
  (VTBL_ENTRY)&_ZN5S96C73v54Ev,
  (VTBL_ENTRY)&_ZN5S96C73v55Ev,
  (VTBL_ENTRY)&_ZN5S96C73v56Ev,
  (VTBL_ENTRY)&_ZN5S96C73v57Ev,
  (VTBL_ENTRY)&_ZN5S96C73v58Ev,
  (VTBL_ENTRY)&_ZN5S96C73v59Ev,
  (VTBL_ENTRY)&_ZN5S96C73v60Ev,
  (VTBL_ENTRY)&_ZN5S96C73v61Ev,
  (VTBL_ENTRY)&_ZN5S96C73v62Ev,
  (VTBL_ENTRY)&_ZN5S96C73v63Ev,
  (VTBL_ENTRY)&_ZN5S96C73v64Ev,
  (VTBL_ENTRY)&_ZN5S96C73v65Ev,
  (VTBL_ENTRY)&_ZN5S96C73v66Ev,
  (VTBL_ENTRY)&_ZN5S96C73v67Ev,
  (VTBL_ENTRY)&_ZN5S96C73v68Ev,
};
extern VTBL_ENTRY _ZTI5S96C7[];
extern  VTBL_ENTRY _ZTV5S96C7[];
Class_Descriptor cd_S96C7 = {  "S96C7", // class name
  0,0,//no base classes
  &(vtc_S96C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI5S96C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV5S96C7),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  S96C6  : S96C7 {
  int s96c6f0[2];
  void *s96c6f1;
  int s96c6f2[2];
  ::S287C8_nt s96c6f3;
  ::S287C8_nt s96c6f4;
  ::S2121C38 s96c6f5;
  ::S287C8_nt s96c6f6;
  unsigned int s96c6f7:1;
  unsigned int s96c6f8:1;
  unsigned int s96c6f9:1;
  unsigned int s96c6f10:1;
  unsigned int s96c6f11:1;
  int s96c6f12[2];
  virtual  ~S96C6(); // _ZN5S96C6D1Ev
  virtual void  v69(); // _ZN5S96C63v69Ev
  virtual void  v70(); // _ZN5S96C63v70Ev
  virtual void  v71(); // _ZN5S96C63v71Ev
  virtual void  v72(); // _ZN5S96C63v72Ev
  virtual void  v73(); // _ZN5S96C63v73Ev
  virtual void  v74(); // _ZN5S96C63v74Ev
  virtual void  v75(); // _ZN5S96C63v75Ev
  virtual void  v76(); // _ZN5S96C63v76Ev
  virtual void  v77(); // _ZN5S96C63v77Ev
  virtual void  v78(); // _ZN5S96C63v78Ev
  virtual void  v79(); // _ZN5S96C63v79Ev
  virtual void  v80(); // _ZN5S96C63v80Ev
  virtual void  v81(); // _ZN5S96C63v81Ev
  virtual void  v82(); // _ZN5S96C63v82Ev
  virtual void  v83(); // _ZN5S96C63v83Ev
  virtual void  v84(); // _ZN5S96C63v84Ev
  virtual void  v85(); // _ZN5S96C63v85Ev
  virtual void  v86(); // _ZN5S96C63v86Ev
  virtual void  v87(); // _ZN5S96C63v87Ev
  virtual void  v88(); // _ZN5S96C63v88Ev
  virtual void  v89(); // _ZN5S96C63v89Ev
  virtual void  v90(); // _ZN5S96C63v90Ev
  S96C6(); // tgen
};
//SIG(-1 S96C6) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S96C6 ::~S96C6(){ note_dtor("S96C6", this);}
void  S96C6 ::v69(){vfunc_called(this, "_ZN5S96C63v69Ev");}
void  S96C6 ::v70(){vfunc_called(this, "_ZN5S96C63v70Ev");}
void  S96C6 ::v71(){vfunc_called(this, "_ZN5S96C63v71Ev");}
void  S96C6 ::v72(){vfunc_called(this, "_ZN5S96C63v72Ev");}
void  S96C6 ::v73(){vfunc_called(this, "_ZN5S96C63v73Ev");}
void  S96C6 ::v74(){vfunc_called(this, "_ZN5S96C63v74Ev");}
void  S96C6 ::v75(){vfunc_called(this, "_ZN5S96C63v75Ev");}
void  S96C6 ::v76(){vfunc_called(this, "_ZN5S96C63v76Ev");}
void  S96C6 ::v77(){vfunc_called(this, "_ZN5S96C63v77Ev");}
void  S96C6 ::v78(){vfunc_called(this, "_ZN5S96C63v78Ev");}
void  S96C6 ::v79(){vfunc_called(this, "_ZN5S96C63v79Ev");}
void  S96C6 ::v80(){vfunc_called(this, "_ZN5S96C63v80Ev");}
void  S96C6 ::v81(){vfunc_called(this, "_ZN5S96C63v81Ev");}
void  S96C6 ::v82(){vfunc_called(this, "_ZN5S96C63v82Ev");}
void  S96C6 ::v83(){vfunc_called(this, "_ZN5S96C63v83Ev");}
void  S96C6 ::v84(){vfunc_called(this, "_ZN5S96C63v84Ev");}
void  S96C6 ::v85(){vfunc_called(this, "_ZN5S96C63v85Ev");}
void  S96C6 ::v86(){vfunc_called(this, "_ZN5S96C63v86Ev");}
void  S96C6 ::v87(){vfunc_called(this, "_ZN5S96C63v87Ev");}
void  S96C6 ::v88(){vfunc_called(this, "_ZN5S96C63v88Ev");}
void  S96C6 ::v89(){vfunc_called(this, "_ZN5S96C63v89Ev");}
void  S96C6 ::v90(){vfunc_called(this, "_ZN5S96C63v90Ev");}
S96C6 ::S96C6(){ note_ctor("S96C6", this);} // tgen

static void Test_S96C6()
{
  extern Class_Descriptor cd_S96C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S96C6, buf);
    S96C6 *dp, &lv = *(dp=new (buf) S96C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S96C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S96C6)");
    check_base_class_offset(lv, (S96C7*), 0, "S96C6");
    check_field_offset(lv, s96c6f0, ABISELECT(96,60), "S96C6.s96c6f0");
    check_field_offset(lv, s96c6f1, ABISELECT(104,68), "S96C6.s96c6f1");
    check_field_offset(lv, s96c6f2, ABISELECT(112,72), "S96C6.s96c6f2");
    check_field_offset(lv, s96c6f3, ABISELECT(120,80), "S96C6.s96c6f3");
    check_field_offset(lv, s96c6f4, ABISELECT(136,92), "S96C6.s96c6f4");
    check_field_offset(lv, s96c6f5, ABISELECT(152,104), "S96C6.s96c6f5");
    check_field_offset(lv, s96c6f6, ABISELECT(160,108), "S96C6.s96c6f6");
    set_bf_and_test(lv, s96c6f7, ABISELECT(176,120), 0, 1, 1, "S96C6");
    set_bf_and_test(lv, s96c6f8, ABISELECT(176,120), 1, 1, 1, "S96C6");
    set_bf_and_test(lv, s96c6f9, ABISELECT(176,120), 2, 1, 1, "S96C6");
    set_bf_and_test(lv, s96c6f10, ABISELECT(176,120), 3, 1, 1, "S96C6");
    set_bf_and_test(lv, s96c6f11, ABISELECT(176,120), 4, 1, 1, "S96C6");
    check_field_offset(lv, s96c6f12, ABISELECT(180,124), "S96C6.s96c6f12");
    test_class_info(&lv, &cd_S96C6);
    dp->~S96C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS96C6(Test_S96C6, "S96C6", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN5S96C6C1Ev();
extern void _ZN5S96C6D1Ev();
Name_Map name_map_S96C6[] = {
  NSPAIR(_ZN5S96C6C1Ev),
  NSPAIR(_ZN5S96C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S96C7;
extern VTBL_ENTRY _ZTI5S96C7[];
extern  VTBL_ENTRY _ZTV5S96C7[];
static Base_Class bases_S96C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S96C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI5S96C6[];
extern void _ZN5S96C6D1Ev();
extern void _ZN5S96C6D0Ev();
extern void _ZN5S96C72v5Ev();
extern void _ZN5S96C72v6Ev();
extern void _ZN5S96C72v7Ev();
extern void _ZN5S96C72v8Ev();
extern void _ZN5S96C72v9Ev();
extern void _ZN5S96C73v10Ev();
extern void _ZN5S96C73v11Ev();
extern void _ZN5S96C73v12Ev();
extern void _ZN5S96C73v13Ev();
extern void _ZN5S96C73v14Ev();
extern void _ZN5S96C73v15Ev();
extern void _ZN5S96C73v16Ev();
extern void _ZN5S96C73v17Ev();
extern void _ZN5S96C73v18Ev();
extern void _ZN5S96C73v19Ev();
extern void _ZN5S96C73v20Ev();
extern void _ZN5S96C73v21Ev();
extern void _ZN5S96C73v22Ev();
extern void _ZN5S96C73v23Ev();
extern void _ZN5S96C73v24Ev();
extern void _ZN5S96C73v25Ev();
extern void _ZN5S96C73v26Ev();
extern void _ZN5S96C73v27Ev();
extern void _ZN5S96C73v28Ev();
extern void _ZN5S96C73v29Ev();
extern void _ZN5S96C73v30Ev();
extern void _ZN5S96C73v31Ev();
extern void _ZN5S96C73v32Ev();
extern void _ZN5S96C73v33Ev();
extern void _ZN5S96C73v34Ev();
extern void _ZN5S96C73v35Ev();
extern void _ZN5S96C73v36Ev();
extern void _ZN5S96C73v37Ev();
extern void _ZN5S96C73v38Ev();
extern void _ZN5S96C73v39Ev();
extern void _ZN5S96C73v40Ev();
extern void _ZN5S96C73v41Ev();
extern void _ZN5S96C73v42Ev();
extern void _ZN5S96C73v43Ev();
extern void _ZN5S96C73v44Ev();
extern void _ZN5S96C73v45Ev();
extern void _ZN5S96C73v46Ev();
extern void _ZN5S96C73v47Ev();
extern void _ZN5S96C73v48Ev();
extern void _ZN5S96C73v49Ev();
extern void _ZN5S96C73v50Ev();
extern void _ZN5S96C73v51Ev();
extern void _ZN5S96C73v52Ev();
extern void _ZN5S96C73v53Ev();
extern void _ZN5S96C73v54Ev();
extern void _ZN5S96C73v55Ev();
extern void _ZN5S96C73v56Ev();
extern void _ZN5S96C73v57Ev();
extern void _ZN5S96C73v58Ev();
extern void _ZN5S96C73v59Ev();
extern void _ZN5S96C73v60Ev();
extern void _ZN5S96C73v61Ev();
extern void _ZN5S96C73v62Ev();
extern void _ZN5S96C73v63Ev();
extern void _ZN5S96C73v64Ev();
extern void _ZN5S96C73v65Ev();
extern void _ZN5S96C73v66Ev();
extern void _ZN5S96C73v67Ev();
extern void _ZN5S96C73v68Ev();
extern void _ZN5S96C63v69Ev();
extern void _ZN5S96C63v70Ev();
extern void _ZN5S96C63v71Ev();
extern void _ZN5S96C63v72Ev();
extern void _ZN5S96C63v73Ev();
extern void _ZN5S96C63v74Ev();
extern void _ZN5S96C63v75Ev();
extern void _ZN5S96C63v76Ev();
extern void _ZN5S96C63v77Ev();
extern void _ZN5S96C63v78Ev();
extern void _ZN5S96C63v79Ev();
extern void _ZN5S96C63v80Ev();
extern void _ZN5S96C63v81Ev();
extern void _ZN5S96C63v82Ev();
extern void _ZN5S96C63v83Ev();
extern void _ZN5S96C63v84Ev();
extern void _ZN5S96C63v85Ev();
extern void _ZN5S96C63v86Ev();
extern void _ZN5S96C63v87Ev();
extern void _ZN5S96C63v88Ev();
extern void _ZN5S96C63v89Ev();
extern void _ZN5S96C63v90Ev();
static  VTBL_ENTRY vtc_S96C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S96C6[0]),
  (VTBL_ENTRY)&_ZN5S96C6D1Ev,
  (VTBL_ENTRY)&_ZN5S96C6D0Ev,
  (VTBL_ENTRY)&_ZN5S96C72v5Ev,
  (VTBL_ENTRY)&_ZN5S96C72v6Ev,
  (VTBL_ENTRY)&_ZN5S96C72v7Ev,
  (VTBL_ENTRY)&_ZN5S96C72v8Ev,
  (VTBL_ENTRY)&_ZN5S96C72v9Ev,
  (VTBL_ENTRY)&_ZN5S96C73v10Ev,
  (VTBL_ENTRY)&_ZN5S96C73v11Ev,
  (VTBL_ENTRY)&_ZN5S96C73v12Ev,
  (VTBL_ENTRY)&_ZN5S96C73v13Ev,
  (VTBL_ENTRY)&_ZN5S96C73v14Ev,
  (VTBL_ENTRY)&_ZN5S96C73v15Ev,
  (VTBL_ENTRY)&_ZN5S96C73v16Ev,
  (VTBL_ENTRY)&_ZN5S96C73v17Ev,
  (VTBL_ENTRY)&_ZN5S96C73v18Ev,
  (VTBL_ENTRY)&_ZN5S96C73v19Ev,
  (VTBL_ENTRY)&_ZN5S96C73v20Ev,
  (VTBL_ENTRY)&_ZN5S96C73v21Ev,
  (VTBL_ENTRY)&_ZN5S96C73v22Ev,
  (VTBL_ENTRY)&_ZN5S96C73v23Ev,
  (VTBL_ENTRY)&_ZN5S96C73v24Ev,
  (VTBL_ENTRY)&_ZN5S96C73v25Ev,
  (VTBL_ENTRY)&_ZN5S96C73v26Ev,
  (VTBL_ENTRY)&_ZN5S96C73v27Ev,
  (VTBL_ENTRY)&_ZN5S96C73v28Ev,
  (VTBL_ENTRY)&_ZN5S96C73v29Ev,
  (VTBL_ENTRY)&_ZN5S96C73v30Ev,
  (VTBL_ENTRY)&_ZN5S96C73v31Ev,
  (VTBL_ENTRY)&_ZN5S96C73v32Ev,
  (VTBL_ENTRY)&_ZN5S96C73v33Ev,
  (VTBL_ENTRY)&_ZN5S96C73v34Ev,
  (VTBL_ENTRY)&_ZN5S96C73v35Ev,
  (VTBL_ENTRY)&_ZN5S96C73v36Ev,
  (VTBL_ENTRY)&_ZN5S96C73v37Ev,
  (VTBL_ENTRY)&_ZN5S96C73v38Ev,
  (VTBL_ENTRY)&_ZN5S96C73v39Ev,
  (VTBL_ENTRY)&_ZN5S96C73v40Ev,
  (VTBL_ENTRY)&_ZN5S96C73v41Ev,
  (VTBL_ENTRY)&_ZN5S96C73v42Ev,
  (VTBL_ENTRY)&_ZN5S96C73v43Ev,
  (VTBL_ENTRY)&_ZN5S96C73v44Ev,
  (VTBL_ENTRY)&_ZN5S96C73v45Ev,
  (VTBL_ENTRY)&_ZN5S96C73v46Ev,
  (VTBL_ENTRY)&_ZN5S96C73v47Ev,
  (VTBL_ENTRY)&_ZN5S96C73v48Ev,
  (VTBL_ENTRY)&_ZN5S96C73v49Ev,
  (VTBL_ENTRY)&_ZN5S96C73v50Ev,
  (VTBL_ENTRY)&_ZN5S96C73v51Ev,
  (VTBL_ENTRY)&_ZN5S96C73v52Ev,
  (VTBL_ENTRY)&_ZN5S96C73v53Ev,
  (VTBL_ENTRY)&_ZN5S96C73v54Ev,
  (VTBL_ENTRY)&_ZN5S96C73v55Ev,
  (VTBL_ENTRY)&_ZN5S96C73v56Ev,
  (VTBL_ENTRY)&_ZN5S96C73v57Ev,
  (VTBL_ENTRY)&_ZN5S96C73v58Ev,
  (VTBL_ENTRY)&_ZN5S96C73v59Ev,
  (VTBL_ENTRY)&_ZN5S96C73v60Ev,
  (VTBL_ENTRY)&_ZN5S96C73v61Ev,
  (VTBL_ENTRY)&_ZN5S96C73v62Ev,
  (VTBL_ENTRY)&_ZN5S96C73v63Ev,
  (VTBL_ENTRY)&_ZN5S96C73v64Ev,
  (VTBL_ENTRY)&_ZN5S96C73v65Ev,
  (VTBL_ENTRY)&_ZN5S96C73v66Ev,
  (VTBL_ENTRY)&_ZN5S96C73v67Ev,
  (VTBL_ENTRY)&_ZN5S96C73v68Ev,
  (VTBL_ENTRY)&_ZN5S96C63v69Ev,
  (VTBL_ENTRY)&_ZN5S96C63v70Ev,
  (VTBL_ENTRY)&_ZN5S96C63v71Ev,
  (VTBL_ENTRY)&_ZN5S96C63v72Ev,
  (VTBL_ENTRY)&_ZN5S96C63v73Ev,
  (VTBL_ENTRY)&_ZN5S96C63v74Ev,
  (VTBL_ENTRY)&_ZN5S96C63v75Ev,
  (VTBL_ENTRY)&_ZN5S96C63v76Ev,
  (VTBL_ENTRY)&_ZN5S96C63v77Ev,
  (VTBL_ENTRY)&_ZN5S96C63v78Ev,
  (VTBL_ENTRY)&_ZN5S96C63v79Ev,
  (VTBL_ENTRY)&_ZN5S96C63v80Ev,
  (VTBL_ENTRY)&_ZN5S96C63v81Ev,
  (VTBL_ENTRY)&_ZN5S96C63v82Ev,
  (VTBL_ENTRY)&_ZN5S96C63v83Ev,
  (VTBL_ENTRY)&_ZN5S96C63v84Ev,
  (VTBL_ENTRY)&_ZN5S96C63v85Ev,
  (VTBL_ENTRY)&_ZN5S96C63v86Ev,
  (VTBL_ENTRY)&_ZN5S96C63v87Ev,
  (VTBL_ENTRY)&_ZN5S96C63v88Ev,
  (VTBL_ENTRY)&_ZN5S96C63v89Ev,
  (VTBL_ENTRY)&_ZN5S96C63v90Ev,
};
extern VTBL_ENTRY _ZTI5S96C6[];
extern  VTBL_ENTRY _ZTV5S96C6[];
Class_Descriptor cd_S96C6 = {  "S96C6", // class name
  bases_S96C6, 1,
  &(vtc_S96C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI5S96C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S96C6),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S96C5  : S96C6 {
  unsigned int s96c5f0:1;
  unsigned int s96c5f1:1;
  unsigned int s96c5f2:1;
  ::S3350C17 s96c5f3;
  ::S3350C11 s96c5f4;
  ::S3350C5_nt s96c5f5;
  ::S287C27 s96c5f6;
  int s96c5f7[3];
  virtual  ~S96C5(); // _ZN5S96C5D1Ev
  virtual void  v91(); // _ZN5S96C53v91Ev
  virtual void  v92(); // _ZN5S96C53v92Ev
  virtual void  v93(); // _ZN5S96C53v93Ev
  virtual void  v94(); // _ZN5S96C53v94Ev
  virtual void  v95(); // _ZN5S96C53v95Ev
  virtual void  v96(); // _ZN5S96C53v96Ev
  virtual void  v97(); // _ZN5S96C53v97Ev
  virtual void  v98(); // _ZN5S96C53v98Ev
  virtual void  v99(); // _ZN5S96C53v99Ev
  virtual void  v100(); // _ZN5S96C54v100Ev
  virtual void  v101(); // _ZN5S96C54v101Ev
  virtual void  v102(); // _ZN5S96C54v102Ev
  virtual void  v103(); // _ZN5S96C54v103Ev
  virtual void  v104(); // _ZN5S96C54v104Ev
  virtual void  v105(); // _ZN5S96C54v105Ev
  virtual void  v106(); // _ZN5S96C54v106Ev
  virtual void  v107(); // _ZN5S96C54v107Ev
  virtual void  v108(); // _ZN5S96C54v108Ev
  virtual void  v109(); // _ZN5S96C54v109Ev
  virtual void  v110(); // _ZN5S96C54v110Ev
  S96C5(); // tgen
};
//SIG(-1 S96C5) C1{ BC2{ BC3{ vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 FC10{ BC11{ BC8}} FC12{ BC13{ BC8}} FC14{ BC15{ BC8}} FC16{ BC17{ BC8}} Fi[3]}


 S96C5 ::~S96C5(){ note_dtor("S96C5", this);}
void  S96C5 ::v91(){vfunc_called(this, "_ZN5S96C53v91Ev");}
void  S96C5 ::v92(){vfunc_called(this, "_ZN5S96C53v92Ev");}
void  S96C5 ::v93(){vfunc_called(this, "_ZN5S96C53v93Ev");}
void  S96C5 ::v94(){vfunc_called(this, "_ZN5S96C53v94Ev");}
void  S96C5 ::v95(){vfunc_called(this, "_ZN5S96C53v95Ev");}
void  S96C5 ::v96(){vfunc_called(this, "_ZN5S96C53v96Ev");}
void  S96C5 ::v97(){vfunc_called(this, "_ZN5S96C53v97Ev");}
void  S96C5 ::v98(){vfunc_called(this, "_ZN5S96C53v98Ev");}
void  S96C5 ::v99(){vfunc_called(this, "_ZN5S96C53v99Ev");}
void  S96C5 ::v100(){vfunc_called(this, "_ZN5S96C54v100Ev");}
void  S96C5 ::v101(){vfunc_called(this, "_ZN5S96C54v101Ev");}
void  S96C5 ::v102(){vfunc_called(this, "_ZN5S96C54v102Ev");}
void  S96C5 ::v103(){vfunc_called(this, "_ZN5S96C54v103Ev");}
void  S96C5 ::v104(){vfunc_called(this, "_ZN5S96C54v104Ev");}
void  S96C5 ::v105(){vfunc_called(this, "_ZN5S96C54v105Ev");}
void  S96C5 ::v106(){vfunc_called(this, "_ZN5S96C54v106Ev");}
void  S96C5 ::v107(){vfunc_called(this, "_ZN5S96C54v107Ev");}
void  S96C5 ::v108(){vfunc_called(this, "_ZN5S96C54v108Ev");}
void  S96C5 ::v109(){vfunc_called(this, "_ZN5S96C54v109Ev");}
void  S96C5 ::v110(){vfunc_called(this, "_ZN5S96C54v110Ev");}
S96C5 ::S96C5(){ note_ctor("S96C5", this);} // tgen

static void Test_S96C5()
{
  extern Class_Descriptor cd_S96C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S96C5, buf);
    S96C5 *dp, &lv = *(dp=new (buf) S96C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S96C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S96C5)");
    check_base_class_offset(lv, (S96C7*)(S96C6*), 0, "S96C5");
    check_base_class_offset(lv, (S96C6*), 0, "S96C5");
    set_bf_and_test(lv, s96c5f0, ABISELECT(188,132), 0, 1, 1, "S96C5");
    set_bf_and_test(lv, s96c5f1, ABISELECT(188,132), 1, 1, 1, "S96C5");
    set_bf_and_test(lv, s96c5f2, ABISELECT(188,132), 2, 1, 1, "S96C5");
    check_field_offset(lv, s96c5f3, ABISELECT(192,136), "S96C5.s96c5f3");
    check_field_offset(lv, s96c5f4, ABISELECT(208,148), "S96C5.s96c5f4");
    check_field_offset(lv, s96c5f5, ABISELECT(224,160), "S96C5.s96c5f5");
    check_field_offset(lv, s96c5f6, ABISELECT(240,172), "S96C5.s96c5f6");
    check_field_offset(lv, s96c5f7, ABISELECT(256,184), "S96C5.s96c5f7");
    test_class_info(&lv, &cd_S96C5);
    dp->~S96C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS96C5(Test_S96C5, "S96C5", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN5S96C5C1Ev();
extern void _ZN5S96C5D1Ev();
Name_Map name_map_S96C5[] = {
  NSPAIR(_ZN5S96C5C1Ev),
  NSPAIR(_ZN5S96C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S96C7;
extern VTBL_ENTRY _ZTI5S96C7[];
extern  VTBL_ENTRY _ZTV5S96C7[];
extern Class_Descriptor cd_S96C6;
extern VTBL_ENTRY _ZTI5S96C6[];
extern  VTBL_ENTRY _ZTV5S96C6[];
static Base_Class bases_S96C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S96C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S96C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S96C5[];
extern void _ZN5S96C5D1Ev();
extern void _ZN5S96C5D0Ev();
extern void _ZN5S96C72v5Ev();
extern void _ZN5S96C72v6Ev();
extern void _ZN5S96C72v7Ev();
extern void _ZN5S96C72v8Ev();
extern void _ZN5S96C72v9Ev();
extern void _ZN5S96C73v10Ev();
extern void _ZN5S96C73v11Ev();
extern void _ZN5S96C73v12Ev();
extern void _ZN5S96C73v13Ev();
extern void _ZN5S96C73v14Ev();
extern void _ZN5S96C73v15Ev();
extern void _ZN5S96C73v16Ev();
extern void _ZN5S96C73v17Ev();
extern void _ZN5S96C73v18Ev();
extern void _ZN5S96C73v19Ev();
extern void _ZN5S96C73v20Ev();
extern void _ZN5S96C73v21Ev();
extern void _ZN5S96C73v22Ev();
extern void _ZN5S96C73v23Ev();
extern void _ZN5S96C73v24Ev();
extern void _ZN5S96C73v25Ev();
extern void _ZN5S96C73v26Ev();
extern void _ZN5S96C73v27Ev();
extern void _ZN5S96C73v28Ev();
extern void _ZN5S96C73v29Ev();
extern void _ZN5S96C73v30Ev();
extern void _ZN5S96C73v31Ev();
extern void _ZN5S96C73v32Ev();
extern void _ZN5S96C73v33Ev();
extern void _ZN5S96C73v34Ev();
extern void _ZN5S96C73v35Ev();
extern void _ZN5S96C73v36Ev();
extern void _ZN5S96C73v37Ev();
extern void _ZN5S96C73v38Ev();
extern void _ZN5S96C73v39Ev();
extern void _ZN5S96C73v40Ev();
extern void _ZN5S96C73v41Ev();
extern void _ZN5S96C73v42Ev();
extern void _ZN5S96C73v43Ev();
extern void _ZN5S96C73v44Ev();
extern void _ZN5S96C73v45Ev();
extern void _ZN5S96C73v46Ev();
extern void _ZN5S96C73v47Ev();
extern void _ZN5S96C73v48Ev();
extern void _ZN5S96C73v49Ev();
extern void _ZN5S96C73v50Ev();
extern void _ZN5S96C73v51Ev();
extern void _ZN5S96C73v52Ev();
extern void _ZN5S96C73v53Ev();
extern void _ZN5S96C73v54Ev();
extern void _ZN5S96C73v55Ev();
extern void _ZN5S96C73v56Ev();
extern void _ZN5S96C73v57Ev();
extern void _ZN5S96C73v58Ev();
extern void _ZN5S96C73v59Ev();
extern void _ZN5S96C73v60Ev();
extern void _ZN5S96C73v61Ev();
extern void _ZN5S96C73v62Ev();
extern void _ZN5S96C73v63Ev();
extern void _ZN5S96C73v64Ev();
extern void _ZN5S96C73v65Ev();
extern void _ZN5S96C73v66Ev();
extern void _ZN5S96C73v67Ev();
extern void _ZN5S96C73v68Ev();
extern void _ZN5S96C63v69Ev();
extern void _ZN5S96C63v70Ev();
extern void _ZN5S96C63v71Ev();
extern void _ZN5S96C63v72Ev();
extern void _ZN5S96C63v73Ev();
extern void _ZN5S96C63v74Ev();
extern void _ZN5S96C63v75Ev();
extern void _ZN5S96C63v76Ev();
extern void _ZN5S96C63v77Ev();
extern void _ZN5S96C63v78Ev();
extern void _ZN5S96C63v79Ev();
extern void _ZN5S96C63v80Ev();
extern void _ZN5S96C63v81Ev();
extern void _ZN5S96C63v82Ev();
extern void _ZN5S96C63v83Ev();
extern void _ZN5S96C63v84Ev();
extern void _ZN5S96C63v85Ev();
extern void _ZN5S96C63v86Ev();
extern void _ZN5S96C63v87Ev();
extern void _ZN5S96C63v88Ev();
extern void _ZN5S96C63v89Ev();
extern void _ZN5S96C63v90Ev();
extern void _ZN5S96C53v91Ev();
extern void _ZN5S96C53v92Ev();
extern void _ZN5S96C53v93Ev();
extern void _ZN5S96C53v94Ev();
extern void _ZN5S96C53v95Ev();
extern void _ZN5S96C53v96Ev();
extern void _ZN5S96C53v97Ev();
extern void _ZN5S96C53v98Ev();
extern void _ZN5S96C53v99Ev();
extern void _ZN5S96C54v100Ev();
extern void _ZN5S96C54v101Ev();
extern void _ZN5S96C54v102Ev();
extern void _ZN5S96C54v103Ev();
extern void _ZN5S96C54v104Ev();
extern void _ZN5S96C54v105Ev();
extern void _ZN5S96C54v106Ev();
extern void _ZN5S96C54v107Ev();
extern void _ZN5S96C54v108Ev();
extern void _ZN5S96C54v109Ev();
extern void _ZN5S96C54v110Ev();
static  VTBL_ENTRY vtc_S96C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S96C5[0]),
  (VTBL_ENTRY)&_ZN5S96C5D1Ev,
  (VTBL_ENTRY)&_ZN5S96C5D0Ev,
  (VTBL_ENTRY)&_ZN5S96C72v5Ev,
  (VTBL_ENTRY)&_ZN5S96C72v6Ev,
  (VTBL_ENTRY)&_ZN5S96C72v7Ev,
  (VTBL_ENTRY)&_ZN5S96C72v8Ev,
  (VTBL_ENTRY)&_ZN5S96C72v9Ev,
  (VTBL_ENTRY)&_ZN5S96C73v10Ev,
  (VTBL_ENTRY)&_ZN5S96C73v11Ev,
  (VTBL_ENTRY)&_ZN5S96C73v12Ev,
  (VTBL_ENTRY)&_ZN5S96C73v13Ev,
  (VTBL_ENTRY)&_ZN5S96C73v14Ev,
  (VTBL_ENTRY)&_ZN5S96C73v15Ev,
  (VTBL_ENTRY)&_ZN5S96C73v16Ev,
  (VTBL_ENTRY)&_ZN5S96C73v17Ev,
  (VTBL_ENTRY)&_ZN5S96C73v18Ev,
  (VTBL_ENTRY)&_ZN5S96C73v19Ev,
  (VTBL_ENTRY)&_ZN5S96C73v20Ev,
  (VTBL_ENTRY)&_ZN5S96C73v21Ev,
  (VTBL_ENTRY)&_ZN5S96C73v22Ev,
  (VTBL_ENTRY)&_ZN5S96C73v23Ev,
  (VTBL_ENTRY)&_ZN5S96C73v24Ev,
  (VTBL_ENTRY)&_ZN5S96C73v25Ev,
  (VTBL_ENTRY)&_ZN5S96C73v26Ev,
  (VTBL_ENTRY)&_ZN5S96C73v27Ev,
  (VTBL_ENTRY)&_ZN5S96C73v28Ev,
  (VTBL_ENTRY)&_ZN5S96C73v29Ev,
  (VTBL_ENTRY)&_ZN5S96C73v30Ev,
  (VTBL_ENTRY)&_ZN5S96C73v31Ev,
  (VTBL_ENTRY)&_ZN5S96C73v32Ev,
  (VTBL_ENTRY)&_ZN5S96C73v33Ev,
  (VTBL_ENTRY)&_ZN5S96C73v34Ev,
  (VTBL_ENTRY)&_ZN5S96C73v35Ev,
  (VTBL_ENTRY)&_ZN5S96C73v36Ev,
  (VTBL_ENTRY)&_ZN5S96C73v37Ev,
  (VTBL_ENTRY)&_ZN5S96C73v38Ev,
  (VTBL_ENTRY)&_ZN5S96C73v39Ev,
  (VTBL_ENTRY)&_ZN5S96C73v40Ev,
  (VTBL_ENTRY)&_ZN5S96C73v41Ev,
  (VTBL_ENTRY)&_ZN5S96C73v42Ev,
  (VTBL_ENTRY)&_ZN5S96C73v43Ev,
  (VTBL_ENTRY)&_ZN5S96C73v44Ev,
  (VTBL_ENTRY)&_ZN5S96C73v45Ev,
  (VTBL_ENTRY)&_ZN5S96C73v46Ev,
  (VTBL_ENTRY)&_ZN5S96C73v47Ev,
  (VTBL_ENTRY)&_ZN5S96C73v48Ev,
  (VTBL_ENTRY)&_ZN5S96C73v49Ev,
  (VTBL_ENTRY)&_ZN5S96C73v50Ev,
  (VTBL_ENTRY)&_ZN5S96C73v51Ev,
  (VTBL_ENTRY)&_ZN5S96C73v52Ev,
  (VTBL_ENTRY)&_ZN5S96C73v53Ev,
  (VTBL_ENTRY)&_ZN5S96C73v54Ev,
  (VTBL_ENTRY)&_ZN5S96C73v55Ev,
  (VTBL_ENTRY)&_ZN5S96C73v56Ev,
  (VTBL_ENTRY)&_ZN5S96C73v57Ev,
  (VTBL_ENTRY)&_ZN5S96C73v58Ev,
  (VTBL_ENTRY)&_ZN5S96C73v59Ev,
  (VTBL_ENTRY)&_ZN5S96C73v60Ev,
  (VTBL_ENTRY)&_ZN5S96C73v61Ev,
  (VTBL_ENTRY)&_ZN5S96C73v62Ev,
  (VTBL_ENTRY)&_ZN5S96C73v63Ev,
  (VTBL_ENTRY)&_ZN5S96C73v64Ev,
  (VTBL_ENTRY)&_ZN5S96C73v65Ev,
  (VTBL_ENTRY)&_ZN5S96C73v66Ev,
  (VTBL_ENTRY)&_ZN5S96C73v67Ev,
  (VTBL_ENTRY)&_ZN5S96C73v68Ev,
  (VTBL_ENTRY)&_ZN5S96C63v69Ev,
  (VTBL_ENTRY)&_ZN5S96C63v70Ev,
  (VTBL_ENTRY)&_ZN5S96C63v71Ev,
  (VTBL_ENTRY)&_ZN5S96C63v72Ev,
  (VTBL_ENTRY)&_ZN5S96C63v73Ev,
  (VTBL_ENTRY)&_ZN5S96C63v74Ev,
  (VTBL_ENTRY)&_ZN5S96C63v75Ev,
  (VTBL_ENTRY)&_ZN5S96C63v76Ev,
  (VTBL_ENTRY)&_ZN5S96C63v77Ev,
  (VTBL_ENTRY)&_ZN5S96C63v78Ev,
  (VTBL_ENTRY)&_ZN5S96C63v79Ev,
  (VTBL_ENTRY)&_ZN5S96C63v80Ev,
  (VTBL_ENTRY)&_ZN5S96C63v81Ev,
  (VTBL_ENTRY)&_ZN5S96C63v82Ev,
  (VTBL_ENTRY)&_ZN5S96C63v83Ev,
  (VTBL_ENTRY)&_ZN5S96C63v84Ev,
  (VTBL_ENTRY)&_ZN5S96C63v85Ev,
  (VTBL_ENTRY)&_ZN5S96C63v86Ev,
  (VTBL_ENTRY)&_ZN5S96C63v87Ev,
  (VTBL_ENTRY)&_ZN5S96C63v88Ev,
  (VTBL_ENTRY)&_ZN5S96C63v89Ev,
  (VTBL_ENTRY)&_ZN5S96C63v90Ev,
  (VTBL_ENTRY)&_ZN5S96C53v91Ev,
  (VTBL_ENTRY)&_ZN5S96C53v92Ev,
  (VTBL_ENTRY)&_ZN5S96C53v93Ev,
  (VTBL_ENTRY)&_ZN5S96C53v94Ev,
  (VTBL_ENTRY)&_ZN5S96C53v95Ev,
  (VTBL_ENTRY)&_ZN5S96C53v96Ev,
  (VTBL_ENTRY)&_ZN5S96C53v97Ev,
  (VTBL_ENTRY)&_ZN5S96C53v98Ev,
  (VTBL_ENTRY)&_ZN5S96C53v99Ev,
  (VTBL_ENTRY)&_ZN5S96C54v100Ev,
  (VTBL_ENTRY)&_ZN5S96C54v101Ev,
  (VTBL_ENTRY)&_ZN5S96C54v102Ev,
  (VTBL_ENTRY)&_ZN5S96C54v103Ev,
  (VTBL_ENTRY)&_ZN5S96C54v104Ev,
  (VTBL_ENTRY)&_ZN5S96C54v105Ev,
  (VTBL_ENTRY)&_ZN5S96C54v106Ev,
  (VTBL_ENTRY)&_ZN5S96C54v107Ev,
  (VTBL_ENTRY)&_ZN5S96C54v108Ev,
  (VTBL_ENTRY)&_ZN5S96C54v109Ev,
  (VTBL_ENTRY)&_ZN5S96C54v110Ev,
};
extern VTBL_ENTRY _ZTI5S96C5[];
extern  VTBL_ENTRY _ZTV5S96C5[];
Class_Descriptor cd_S96C5 = {  "S96C5", // class name
  bases_S96C5, 2,
  &(vtc_S96C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI5S96C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S96C5),110, //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  S96C4  : S96C5 {
  ::S3350C4_nt s96c4f0;
  unsigned int s96c4f1:1;
  ::S287C23 s96c4f2;
  virtual  ~S96C4(); // _ZN5S96C4D1Ev
  virtual void  v111(); // _ZN5S96C44v111Ev
  virtual void  v112(); // _ZN5S96C44v112Ev
  virtual void  v113(); // _ZN5S96C44v113Ev
  virtual void  v114(); // _ZN5S96C44v114Ev
  S96C4(); // tgen
};
//SIG(-1 S96C4) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 Fi:1 Fi:1 Fi:1 FC11{ BC12{ BC9}} FC13{ BC14{ BC9}} FC15{ BC16{ BC9}} FC17{ BC18{ BC9}} Fi[3]} vd v1 v2 v3 v4 FC5 Fi:1 FC19{ BC20{ BC9}}}


 S96C4 ::~S96C4(){ note_dtor("S96C4", this);}
void  S96C4 ::v111(){vfunc_called(this, "_ZN5S96C44v111Ev");}
void  S96C4 ::v112(){vfunc_called(this, "_ZN5S96C44v112Ev");}
void  S96C4 ::v113(){vfunc_called(this, "_ZN5S96C44v113Ev");}
void  S96C4 ::v114(){vfunc_called(this, "_ZN5S96C44v114Ev");}
S96C4 ::S96C4(){ note_ctor("S96C4", this);} // tgen

static void Test_S96C4()
{
  extern Class_Descriptor cd_S96C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,56)];
    init_test(&cd_S96C4, buf);
    S96C4 *dp, &lv = *(dp=new (buf) S96C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,220), "sizeof(S96C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S96C4)");
    check_base_class_offset(lv, (S96C7*)(S96C6*)(S96C5*), 0, "S96C4");
    check_base_class_offset(lv, (S96C6*)(S96C5*), 0, "S96C4");
    check_base_class_offset(lv, (S96C5*), 0, "S96C4");
    check_field_offset(lv, s96c4f0, ABISELECT(268,196), "S96C4.s96c4f0");
    set_bf_and_test(lv, s96c4f1, ABISELECT(276,204), 0, 1, 1, "S96C4");
    check_field_offset(lv, s96c4f2, ABISELECT(280,208), "S96C4.s96c4f2");
    test_class_info(&lv, &cd_S96C4);
    dp->~S96C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS96C4(Test_S96C4, "S96C4", ABISELECT(296,220));

#else // __cplusplus

extern void _ZN5S96C4C1Ev();
extern void _ZN5S96C4D1Ev();
Name_Map name_map_S96C4[] = {
  NSPAIR(_ZN5S96C4C1Ev),
  NSPAIR(_ZN5S96C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S96C7;
extern VTBL_ENTRY _ZTI5S96C7[];
extern  VTBL_ENTRY _ZTV5S96C7[];
extern Class_Descriptor cd_S96C6;
extern VTBL_ENTRY _ZTI5S96C6[];
extern  VTBL_ENTRY _ZTV5S96C6[];
extern Class_Descriptor cd_S96C5;
extern VTBL_ENTRY _ZTI5S96C5[];
extern  VTBL_ENTRY _ZTV5S96C5[];
static Base_Class bases_S96C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S96C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S96C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S96C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S96C4[];
extern void _ZN5S96C4D1Ev();
extern void _ZN5S96C4D0Ev();
extern void _ZN5S96C72v5Ev();
extern void _ZN5S96C72v6Ev();
extern void _ZN5S96C72v7Ev();
extern void _ZN5S96C72v8Ev();
extern void _ZN5S96C72v9Ev();
extern void _ZN5S96C73v10Ev();
extern void _ZN5S96C73v11Ev();
extern void _ZN5S96C73v12Ev();
extern void _ZN5S96C73v13Ev();
extern void _ZN5S96C73v14Ev();
extern void _ZN5S96C73v15Ev();
extern void _ZN5S96C73v16Ev();
extern void _ZN5S96C73v17Ev();
extern void _ZN5S96C73v18Ev();
extern void _ZN5S96C73v19Ev();
extern void _ZN5S96C73v20Ev();
extern void _ZN5S96C73v21Ev();
extern void _ZN5S96C73v22Ev();
extern void _ZN5S96C73v23Ev();
extern void _ZN5S96C73v24Ev();
extern void _ZN5S96C73v25Ev();
extern void _ZN5S96C73v26Ev();
extern void _ZN5S96C73v27Ev();
extern void _ZN5S96C73v28Ev();
extern void _ZN5S96C73v29Ev();
extern void _ZN5S96C73v30Ev();
extern void _ZN5S96C73v31Ev();
extern void _ZN5S96C73v32Ev();
extern void _ZN5S96C73v33Ev();
extern void _ZN5S96C73v34Ev();
extern void _ZN5S96C73v35Ev();
extern void _ZN5S96C73v36Ev();
extern void _ZN5S96C73v37Ev();
extern void _ZN5S96C73v38Ev();
extern void _ZN5S96C73v39Ev();
extern void _ZN5S96C73v40Ev();
extern void _ZN5S96C73v41Ev();
extern void _ZN5S96C73v42Ev();
extern void _ZN5S96C73v43Ev();
extern void _ZN5S96C73v44Ev();
extern void _ZN5S96C73v45Ev();
extern void _ZN5S96C73v46Ev();
extern void _ZN5S96C73v47Ev();
extern void _ZN5S96C73v48Ev();
extern void _ZN5S96C73v49Ev();
extern void _ZN5S96C73v50Ev();
extern void _ZN5S96C73v51Ev();
extern void _ZN5S96C73v52Ev();
extern void _ZN5S96C73v53Ev();
extern void _ZN5S96C73v54Ev();
extern void _ZN5S96C73v55Ev();
extern void _ZN5S96C73v56Ev();
extern void _ZN5S96C73v57Ev();
extern void _ZN5S96C73v58Ev();
extern void _ZN5S96C73v59Ev();
extern void _ZN5S96C73v60Ev();
extern void _ZN5S96C73v61Ev();
extern void _ZN5S96C73v62Ev();
extern void _ZN5S96C73v63Ev();
extern void _ZN5S96C73v64Ev();
extern void _ZN5S96C73v65Ev();
extern void _ZN5S96C73v66Ev();
extern void _ZN5S96C73v67Ev();
extern void _ZN5S96C73v68Ev();
extern void _ZN5S96C63v69Ev();
extern void _ZN5S96C63v70Ev();
extern void _ZN5S96C63v71Ev();
extern void _ZN5S96C63v72Ev();
extern void _ZN5S96C63v73Ev();
extern void _ZN5S96C63v74Ev();
extern void _ZN5S96C63v75Ev();
extern void _ZN5S96C63v76Ev();
extern void _ZN5S96C63v77Ev();
extern void _ZN5S96C63v78Ev();
extern void _ZN5S96C63v79Ev();
extern void _ZN5S96C63v80Ev();
extern void _ZN5S96C63v81Ev();
extern void _ZN5S96C63v82Ev();
extern void _ZN5S96C63v83Ev();
extern void _ZN5S96C63v84Ev();
extern void _ZN5S96C63v85Ev();
extern void _ZN5S96C63v86Ev();
extern void _ZN5S96C63v87Ev();
extern void _ZN5S96C63v88Ev();
extern void _ZN5S96C63v89Ev();
extern void _ZN5S96C63v90Ev();
extern void _ZN5S96C53v91Ev();
extern void _ZN5S96C53v92Ev();
extern void _ZN5S96C53v93Ev();
extern void _ZN5S96C53v94Ev();
extern void _ZN5S96C53v95Ev();
extern void _ZN5S96C53v96Ev();
extern void _ZN5S96C53v97Ev();
extern void _ZN5S96C53v98Ev();
extern void _ZN5S96C53v99Ev();
extern void _ZN5S96C54v100Ev();
extern void _ZN5S96C54v101Ev();
extern void _ZN5S96C54v102Ev();
extern void _ZN5S96C54v103Ev();
extern void _ZN5S96C54v104Ev();
extern void _ZN5S96C54v105Ev();
extern void _ZN5S96C54v106Ev();
extern void _ZN5S96C54v107Ev();
extern void _ZN5S96C54v108Ev();
extern void _ZN5S96C54v109Ev();
extern void _ZN5S96C54v110Ev();
extern void _ZN5S96C44v111Ev();
extern void _ZN5S96C44v112Ev();
extern void _ZN5S96C44v113Ev();
extern void _ZN5S96C44v114Ev();
static  VTBL_ENTRY vtc_S96C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S96C4[0]),
  (VTBL_ENTRY)&_ZN5S96C4D1Ev,
  (VTBL_ENTRY)&_ZN5S96C4D0Ev,
  (VTBL_ENTRY)&_ZN5S96C72v5Ev,
  (VTBL_ENTRY)&_ZN5S96C72v6Ev,
  (VTBL_ENTRY)&_ZN5S96C72v7Ev,
  (VTBL_ENTRY)&_ZN5S96C72v8Ev,
  (VTBL_ENTRY)&_ZN5S96C72v9Ev,
  (VTBL_ENTRY)&_ZN5S96C73v10Ev,
  (VTBL_ENTRY)&_ZN5S96C73v11Ev,
  (VTBL_ENTRY)&_ZN5S96C73v12Ev,
  (VTBL_ENTRY)&_ZN5S96C73v13Ev,
  (VTBL_ENTRY)&_ZN5S96C73v14Ev,
  (VTBL_ENTRY)&_ZN5S96C73v15Ev,
  (VTBL_ENTRY)&_ZN5S96C73v16Ev,
  (VTBL_ENTRY)&_ZN5S96C73v17Ev,
  (VTBL_ENTRY)&_ZN5S96C73v18Ev,
  (VTBL_ENTRY)&_ZN5S96C73v19Ev,
  (VTBL_ENTRY)&_ZN5S96C73v20Ev,
  (VTBL_ENTRY)&_ZN5S96C73v21Ev,
  (VTBL_ENTRY)&_ZN5S96C73v22Ev,
  (VTBL_ENTRY)&_ZN5S96C73v23Ev,
  (VTBL_ENTRY)&_ZN5S96C73v24Ev,
  (VTBL_ENTRY)&_ZN5S96C73v25Ev,
  (VTBL_ENTRY)&_ZN5S96C73v26Ev,
  (VTBL_ENTRY)&_ZN5S96C73v27Ev,
  (VTBL_ENTRY)&_ZN5S96C73v28Ev,
  (VTBL_ENTRY)&_ZN5S96C73v29Ev,
  (VTBL_ENTRY)&_ZN5S96C73v30Ev,
  (VTBL_ENTRY)&_ZN5S96C73v31Ev,
  (VTBL_ENTRY)&_ZN5S96C73v32Ev,
  (VTBL_ENTRY)&_ZN5S96C73v33Ev,
  (VTBL_ENTRY)&_ZN5S96C73v34Ev,
  (VTBL_ENTRY)&_ZN5S96C73v35Ev,
  (VTBL_ENTRY)&_ZN5S96C73v36Ev,
  (VTBL_ENTRY)&_ZN5S96C73v37Ev,
  (VTBL_ENTRY)&_ZN5S96C73v38Ev,
  (VTBL_ENTRY)&_ZN5S96C73v39Ev,
  (VTBL_ENTRY)&_ZN5S96C73v40Ev,
  (VTBL_ENTRY)&_ZN5S96C73v41Ev,
  (VTBL_ENTRY)&_ZN5S96C73v42Ev,
  (VTBL_ENTRY)&_ZN5S96C73v43Ev,
  (VTBL_ENTRY)&_ZN5S96C73v44Ev,
  (VTBL_ENTRY)&_ZN5S96C73v45Ev,
  (VTBL_ENTRY)&_ZN5S96C73v46Ev,
  (VTBL_ENTRY)&_ZN5S96C73v47Ev,
  (VTBL_ENTRY)&_ZN5S96C73v48Ev,
  (VTBL_ENTRY)&_ZN5S96C73v49Ev,
  (VTBL_ENTRY)&_ZN5S96C73v50Ev,
  (VTBL_ENTRY)&_ZN5S96C73v51Ev,
  (VTBL_ENTRY)&_ZN5S96C73v52Ev,
  (VTBL_ENTRY)&_ZN5S96C73v53Ev,
  (VTBL_ENTRY)&_ZN5S96C73v54Ev,
  (VTBL_ENTRY)&_ZN5S96C73v55Ev,
  (VTBL_ENTRY)&_ZN5S96C73v56Ev,
  (VTBL_ENTRY)&_ZN5S96C73v57Ev,
  (VTBL_ENTRY)&_ZN5S96C73v58Ev,
  (VTBL_ENTRY)&_ZN5S96C73v59Ev,
  (VTBL_ENTRY)&_ZN5S96C73v60Ev,
  (VTBL_ENTRY)&_ZN5S96C73v61Ev,
  (VTBL_ENTRY)&_ZN5S96C73v62Ev,
  (VTBL_ENTRY)&_ZN5S96C73v63Ev,
  (VTBL_ENTRY)&_ZN5S96C73v64Ev,
  (VTBL_ENTRY)&_ZN5S96C73v65Ev,
  (VTBL_ENTRY)&_ZN5S96C73v66Ev,
  (VTBL_ENTRY)&_ZN5S96C73v67Ev,
  (VTBL_ENTRY)&_ZN5S96C73v68Ev,
  (VTBL_ENTRY)&_ZN5S96C63v69Ev,
  (VTBL_ENTRY)&_ZN5S96C63v70Ev,
  (VTBL_ENTRY)&_ZN5S96C63v71Ev,
  (VTBL_ENTRY)&_ZN5S96C63v72Ev,
  (VTBL_ENTRY)&_ZN5S96C63v73Ev,
  (VTBL_ENTRY)&_ZN5S96C63v74Ev,
  (VTBL_ENTRY)&_ZN5S96C63v75Ev,
  (VTBL_ENTRY)&_ZN5S96C63v76Ev,
  (VTBL_ENTRY)&_ZN5S96C63v77Ev,
  (VTBL_ENTRY)&_ZN5S96C63v78Ev,
  (VTBL_ENTRY)&_ZN5S96C63v79Ev,
  (VTBL_ENTRY)&_ZN5S96C63v80Ev,
  (VTBL_ENTRY)&_ZN5S96C63v81Ev,
  (VTBL_ENTRY)&_ZN5S96C63v82Ev,
  (VTBL_ENTRY)&_ZN5S96C63v83Ev,
  (VTBL_ENTRY)&_ZN5S96C63v84Ev,
  (VTBL_ENTRY)&_ZN5S96C63v85Ev,
  (VTBL_ENTRY)&_ZN5S96C63v86Ev,
  (VTBL_ENTRY)&_ZN5S96C63v87Ev,
  (VTBL_ENTRY)&_ZN5S96C63v88Ev,
  (VTBL_ENTRY)&_ZN5S96C63v89Ev,
  (VTBL_ENTRY)&_ZN5S96C63v90Ev,
  (VTBL_ENTRY)&_ZN5S96C53v91Ev,
  (VTBL_ENTRY)&_ZN5S96C53v92Ev,
  (VTBL_ENTRY)&_ZN5S96C53v93Ev,
  (VTBL_ENTRY)&_ZN5S96C53v94Ev,
  (VTBL_ENTRY)&_ZN5S96C53v95Ev,
  (VTBL_ENTRY)&_ZN5S96C53v96Ev,
  (VTBL_ENTRY)&_ZN5S96C53v97Ev,
  (VTBL_ENTRY)&_ZN5S96C53v98Ev,
  (VTBL_ENTRY)&_ZN5S96C53v99Ev,
  (VTBL_ENTRY)&_ZN5S96C54v100Ev,
  (VTBL_ENTRY)&_ZN5S96C54v101Ev,
  (VTBL_ENTRY)&_ZN5S96C54v102Ev,
  (VTBL_ENTRY)&_ZN5S96C54v103Ev,
  (VTBL_ENTRY)&_ZN5S96C54v104Ev,
  (VTBL_ENTRY)&_ZN5S96C54v105Ev,
  (VTBL_ENTRY)&_ZN5S96C54v106Ev,
  (VTBL_ENTRY)&_ZN5S96C54v107Ev,
  (VTBL_ENTRY)&_ZN5S96C54v108Ev,
  (VTBL_ENTRY)&_ZN5S96C54v109Ev,
  (VTBL_ENTRY)&_ZN5S96C54v110Ev,
  (VTBL_ENTRY)&_ZN5S96C44v111Ev,
  (VTBL_ENTRY)&_ZN5S96C44v112Ev,
  (VTBL_ENTRY)&_ZN5S96C44v113Ev,
  (VTBL_ENTRY)&_ZN5S96C44v114Ev,
};
extern VTBL_ENTRY _ZTI5S96C4[];
extern  VTBL_ENTRY _ZTV5S96C4[];
Class_Descriptor cd_S96C4 = {  "S96C4", // class name
  bases_S96C4, 3,
  &(vtc_S96C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,220), // object size
  NSPAIRA(_ZTI5S96C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S96C4),114, //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  S96C3  : S96C4 {
  ::S287C19 s96c3f0;
  unsigned int s96c3f1:1;
  virtual  ~S96C3(); // _ZN5S96C3D1Ev
  virtual void  v115(); // _ZN5S96C34v115Ev
  virtual void  v116(); // _ZN5S96C34v116Ev
  virtual void  v117(); // _ZN5S96C34v117Ev
  virtual void  v118(); // _ZN5S96C34v118Ev
  virtual void  v119(); // _ZN5S96C34v119Ev
  virtual void  v120(); // _ZN5S96C34v120Ev
  virtual void  v121(); // _ZN5S96C34v121Ev
  S96C3(); // tgen
};
//SIG(-1 S96C3) C1{ BC2{ BC3{ BC4{ BC5{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 Fi[2] Fp Fi[2] FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} FC7 FC11{ m} FC7 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 Fi:1 Fi:1 Fi:1 FC12{ BC13{ BC10}} FC14{ BC15{ BC10}} FC16{ BC17{ BC10}} FC18{ BC19{ BC10}} Fi[3]} vd v114 v115 v116 v117 FC6 Fi:1 FC20{ BC21{ BC10}}} vd v1 v2 v3 v4 v5 v6 v7 FC22{ BC23{ BC10}} Fi:1}


 S96C3 ::~S96C3(){ note_dtor("S96C3", this);}
void  S96C3 ::v115(){vfunc_called(this, "_ZN5S96C34v115Ev");}
void  S96C3 ::v116(){vfunc_called(this, "_ZN5S96C34v116Ev");}
void  S96C3 ::v117(){vfunc_called(this, "_ZN5S96C34v117Ev");}
void  S96C3 ::v118(){vfunc_called(this, "_ZN5S96C34v118Ev");}
void  S96C3 ::v119(){vfunc_called(this, "_ZN5S96C34v119Ev");}
void  S96C3 ::v120(){vfunc_called(this, "_ZN5S96C34v120Ev");}
void  S96C3 ::v121(){vfunc_called(this, "_ZN5S96C34v121Ev");}
S96C3 ::S96C3(){ note_ctor("S96C3", this);} // tgen

static void Test_S96C3()
{
  extern Class_Descriptor cd_S96C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(41,60)];
    init_test(&cd_S96C3, buf);
    S96C3 *dp, &lv = *(dp=new (buf) S96C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,236), "sizeof(S96C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S96C3)");
    check_base_class_offset(lv, (S96C7*)(S96C6*)(S96C5*)(S96C4*), 0, "S96C3");
    check_base_class_offset(lv, (S96C6*)(S96C5*)(S96C4*), 0, "S96C3");
    check_base_class_offset(lv, (S96C5*)(S96C4*), 0, "S96C3");
    check_base_class_offset(lv, (S96C4*), 0, "S96C3");
    check_field_offset(lv, s96c3f0, ABISELECT(296,220), "S96C3.s96c3f0");
    set_bf_and_test(lv, s96c3f1, ABISELECT(312,232), 0, 1, 1, "S96C3");
    test_class_info(&lv, &cd_S96C3);
    dp->~S96C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS96C3(Test_S96C3, "S96C3", ABISELECT(320,236));

#else // __cplusplus

extern void _ZN5S96C3C1Ev();
extern void _ZN5S96C3D1Ev();
Name_Map name_map_S96C3[] = {
  NSPAIR(_ZN5S96C3C1Ev),
  NSPAIR(_ZN5S96C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S96C7;
extern VTBL_ENTRY _ZTI5S96C7[];
extern  VTBL_ENTRY _ZTV5S96C7[];
extern Class_Descriptor cd_S96C6;
extern VTBL_ENTRY _ZTI5S96C6[];
extern  VTBL_ENTRY _ZTV5S96C6[];
extern Class_Descriptor cd_S96C5;
extern VTBL_ENTRY _ZTI5S96C5[];
extern  VTBL_ENTRY _ZTV5S96C5[];
extern Class_Descriptor cd_S96C4;
extern VTBL_ENTRY _ZTI5S96C4[];
extern  VTBL_ENTRY _ZTV5S96C4[];
static Base_Class bases_S96C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S96C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S96C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S96C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S96C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S96C3[];
extern void _ZN5S96C3D1Ev();
extern void _ZN5S96C3D0Ev();
extern void _ZN5S96C72v5Ev();
extern void _ZN5S96C72v6Ev();
extern void _ZN5S96C72v7Ev();
extern void _ZN5S96C72v8Ev();
extern void _ZN5S96C72v9Ev();
extern void _ZN5S96C73v10Ev();
extern void _ZN5S96C73v11Ev();
extern void _ZN5S96C73v12Ev();
extern void _ZN5S96C73v13Ev();
extern void _ZN5S96C73v14Ev();
extern void _ZN5S96C73v15Ev();
extern void _ZN5S96C73v16Ev();
extern void _ZN5S96C73v17Ev();
extern void _ZN5S96C73v18Ev();
extern void _ZN5S96C73v19Ev();
extern void _ZN5S96C73v20Ev();
extern void _ZN5S96C73v21Ev();
extern void _ZN5S96C73v22Ev();
extern void _ZN5S96C73v23Ev();
extern void _ZN5S96C73v24Ev();
extern void _ZN5S96C73v25Ev();
extern void _ZN5S96C73v26Ev();
extern void _ZN5S96C73v27Ev();
extern void _ZN5S96C73v28Ev();
extern void _ZN5S96C73v29Ev();
extern void _ZN5S96C73v30Ev();
extern void _ZN5S96C73v31Ev();
extern void _ZN5S96C73v32Ev();
extern void _ZN5S96C73v33Ev();
extern void _ZN5S96C73v34Ev();
extern void _ZN5S96C73v35Ev();
extern void _ZN5S96C73v36Ev();
extern void _ZN5S96C73v37Ev();
extern void _ZN5S96C73v38Ev();
extern void _ZN5S96C73v39Ev();
extern void _ZN5S96C73v40Ev();
extern void _ZN5S96C73v41Ev();
extern void _ZN5S96C73v42Ev();
extern void _ZN5S96C73v43Ev();
extern void _ZN5S96C73v44Ev();
extern void _ZN5S96C73v45Ev();
extern void _ZN5S96C73v46Ev();
extern void _ZN5S96C73v47Ev();
extern void _ZN5S96C73v48Ev();
extern void _ZN5S96C73v49Ev();
extern void _ZN5S96C73v50Ev();
extern void _ZN5S96C73v51Ev();
extern void _ZN5S96C73v52Ev();
extern void _ZN5S96C73v53Ev();
extern void _ZN5S96C73v54Ev();
extern void _ZN5S96C73v55Ev();
extern void _ZN5S96C73v56Ev();
extern void _ZN5S96C73v57Ev();
extern void _ZN5S96C73v58Ev();
extern void _ZN5S96C73v59Ev();
extern void _ZN5S96C73v60Ev();
extern void _ZN5S96C73v61Ev();
extern void _ZN5S96C73v62Ev();
extern void _ZN5S96C73v63Ev();
extern void _ZN5S96C73v64Ev();
extern void _ZN5S96C73v65Ev();
extern void _ZN5S96C73v66Ev();
extern void _ZN5S96C73v67Ev();
extern void _ZN5S96C73v68Ev();
extern void _ZN5S96C63v69Ev();
extern void _ZN5S96C63v70Ev();
extern void _ZN5S96C63v71Ev();
extern void _ZN5S96C63v72Ev();
extern void _ZN5S96C63v73Ev();
extern void _ZN5S96C63v74Ev();
extern void _ZN5S96C63v75Ev();
extern void _ZN5S96C63v76Ev();
extern void _ZN5S96C63v77Ev();
extern void _ZN5S96C63v78Ev();
extern void _ZN5S96C63v79Ev();
extern void _ZN5S96C63v80Ev();
extern void _ZN5S96C63v81Ev();
extern void _ZN5S96C63v82Ev();
extern void _ZN5S96C63v83Ev();
extern void _ZN5S96C63v84Ev();
extern void _ZN5S96C63v85Ev();
extern void _ZN5S96C63v86Ev();
extern void _ZN5S96C63v87Ev();
extern void _ZN5S96C63v88Ev();
extern void _ZN5S96C63v89Ev();
extern void _ZN5S96C63v90Ev();
extern void _ZN5S96C53v91Ev();
extern void _ZN5S96C53v92Ev();
extern void _ZN5S96C53v93Ev();
extern void _ZN5S96C53v94Ev();
extern void _ZN5S96C53v95Ev();
extern void _ZN5S96C53v96Ev();
extern void _ZN5S96C53v97Ev();
extern void _ZN5S96C53v98Ev();
extern void _ZN5S96C53v99Ev();
extern void _ZN5S96C54v100Ev();
extern void _ZN5S96C54v101Ev();
extern void _ZN5S96C54v102Ev();
extern void _ZN5S96C54v103Ev();
extern void _ZN5S96C54v104Ev();
extern void _ZN5S96C54v105Ev();
extern void _ZN5S96C54v106Ev();
extern void _ZN5S96C54v107Ev();
extern void _ZN5S96C54v108Ev();
extern void _ZN5S96C54v109Ev();
extern void _ZN5S96C54v110Ev();
extern void _ZN5S96C44v111Ev();
extern void _ZN5S96C44v112Ev();
extern void _ZN5S96C44v113Ev();
extern void _ZN5S96C44v114Ev();
extern void _ZN5S96C34v115Ev();
extern void _ZN5S96C34v116Ev();
extern void _ZN5S96C34v117Ev();
extern void _ZN5S96C34v118Ev();
extern void _ZN5S96C34v119Ev();
extern void _ZN5S96C34v120Ev();
extern void _ZN5S96C34v121Ev();
static  VTBL_ENTRY vtc_S96C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S96C3[0]),
  (VTBL_ENTRY)&_ZN5S96C3D1Ev,
  (VTBL_ENTRY)&_ZN5S96C3D0Ev,
  (VTBL_ENTRY)&_ZN5S96C72v5Ev,
  (VTBL_ENTRY)&_ZN5S96C72v6Ev,
  (VTBL_ENTRY)&_ZN5S96C72v7Ev,
  (VTBL_ENTRY)&_ZN5S96C72v8Ev,
  (VTBL_ENTRY)&_ZN5S96C72v9Ev,
  (VTBL_ENTRY)&_ZN5S96C73v10Ev,
  (VTBL_ENTRY)&_ZN5S96C73v11Ev,
  (VTBL_ENTRY)&_ZN5S96C73v12Ev,
  (VTBL_ENTRY)&_ZN5S96C73v13Ev,
  (VTBL_ENTRY)&_ZN5S96C73v14Ev,
  (VTBL_ENTRY)&_ZN5S96C73v15Ev,
  (VTBL_ENTRY)&_ZN5S96C73v16Ev,
  (VTBL_ENTRY)&_ZN5S96C73v17Ev,
  (VTBL_ENTRY)&_ZN5S96C73v18Ev,
  (VTBL_ENTRY)&_ZN5S96C73v19Ev,
  (VTBL_ENTRY)&_ZN5S96C73v20Ev,
  (VTBL_ENTRY)&_ZN5S96C73v21Ev,
  (VTBL_ENTRY)&_ZN5S96C73v22Ev,
  (VTBL_ENTRY)&_ZN5S96C73v23Ev,
  (VTBL_ENTRY)&_ZN5S96C73v24Ev,
  (VTBL_ENTRY)&_ZN5S96C73v25Ev,
  (VTBL_ENTRY)&_ZN5S96C73v26Ev,
  (VTBL_ENTRY)&_ZN5S96C73v27Ev,
  (VTBL_ENTRY)&_ZN5S96C73v28Ev,
  (VTBL_ENTRY)&_ZN5S96C73v29Ev,
  (VTBL_ENTRY)&_ZN5S96C73v30Ev,
  (VTBL_ENTRY)&_ZN5S96C73v31Ev,
  (VTBL_ENTRY)&_ZN5S96C73v32Ev,
  (VTBL_ENTRY)&_ZN5S96C73v33Ev,
  (VTBL_ENTRY)&_ZN5S96C73v34Ev,
  (VTBL_ENTRY)&_ZN5S96C73v35Ev,
  (VTBL_ENTRY)&_ZN5S96C73v36Ev,
  (VTBL_ENTRY)&_ZN5S96C73v37Ev,
  (VTBL_ENTRY)&_ZN5S96C73v38Ev,
  (VTBL_ENTRY)&_ZN5S96C73v39Ev,
  (VTBL_ENTRY)&_ZN5S96C73v40Ev,
  (VTBL_ENTRY)&_ZN5S96C73v41Ev,
  (VTBL_ENTRY)&_ZN5S96C73v42Ev,
  (VTBL_ENTRY)&_ZN5S96C73v43Ev,
  (VTBL_ENTRY)&_ZN5S96C73v44Ev,
  (VTBL_ENTRY)&_ZN5S96C73v45Ev,
  (VTBL_ENTRY)&_ZN5S96C73v46Ev,
  (VTBL_ENTRY)&_ZN5S96C73v47Ev,
  (VTBL_ENTRY)&_ZN5S96C73v48Ev,
  (VTBL_ENTRY)&_ZN5S96C73v49Ev,
  (VTBL_ENTRY)&_ZN5S96C73v50Ev,
  (VTBL_ENTRY)&_ZN5S96C73v51Ev,
  (VTBL_ENTRY)&_ZN5S96C73v52Ev,
  (VTBL_ENTRY)&_ZN5S96C73v53Ev,
  (VTBL_ENTRY)&_ZN5S96C73v54Ev,
  (VTBL_ENTRY)&_ZN5S96C73v55Ev,
  (VTBL_ENTRY)&_ZN5S96C73v56Ev,
  (VTBL_ENTRY)&_ZN5S96C73v57Ev,
  (VTBL_ENTRY)&_ZN5S96C73v58Ev,
  (VTBL_ENTRY)&_ZN5S96C73v59Ev,
  (VTBL_ENTRY)&_ZN5S96C73v60Ev,
  (VTBL_ENTRY)&_ZN5S96C73v61Ev,
  (VTBL_ENTRY)&_ZN5S96C73v62Ev,
  (VTBL_ENTRY)&_ZN5S96C73v63Ev,
  (VTBL_ENTRY)&_ZN5S96C73v64Ev,
  (VTBL_ENTRY)&_ZN5S96C73v65Ev,
  (VTBL_ENTRY)&_ZN5S96C73v66Ev,
  (VTBL_ENTRY)&_ZN5S96C73v67Ev,
  (VTBL_ENTRY)&_ZN5S96C73v68Ev,
  (VTBL_ENTRY)&_ZN5S96C63v69Ev,
  (VTBL_ENTRY)&_ZN5S96C63v70Ev,
  (VTBL_ENTRY)&_ZN5S96C63v71Ev,
  (VTBL_ENTRY)&_ZN5S96C63v72Ev,
  (VTBL_ENTRY)&_ZN5S96C63v73Ev,
  (VTBL_ENTRY)&_ZN5S96C63v74Ev,
  (VTBL_ENTRY)&_ZN5S96C63v75Ev,
  (VTBL_ENTRY)&_ZN5S96C63v76Ev,
  (VTBL_ENTRY)&_ZN5S96C63v77Ev,
  (VTBL_ENTRY)&_ZN5S96C63v78Ev,
  (VTBL_ENTRY)&_ZN5S96C63v79Ev,
  (VTBL_ENTRY)&_ZN5S96C63v80Ev,
  (VTBL_ENTRY)&_ZN5S96C63v81Ev,
  (VTBL_ENTRY)&_ZN5S96C63v82Ev,
  (VTBL_ENTRY)&_ZN5S96C63v83Ev,
  (VTBL_ENTRY)&_ZN5S96C63v84Ev,
  (VTBL_ENTRY)&_ZN5S96C63v85Ev,
  (VTBL_ENTRY)&_ZN5S96C63v86Ev,
  (VTBL_ENTRY)&_ZN5S96C63v87Ev,
  (VTBL_ENTRY)&_ZN5S96C63v88Ev,
  (VTBL_ENTRY)&_ZN5S96C63v89Ev,
  (VTBL_ENTRY)&_ZN5S96C63v90Ev,
  (VTBL_ENTRY)&_ZN5S96C53v91Ev,
  (VTBL_ENTRY)&_ZN5S96C53v92Ev,
  (VTBL_ENTRY)&_ZN5S96C53v93Ev,
  (VTBL_ENTRY)&_ZN5S96C53v94Ev,
  (VTBL_ENTRY)&_ZN5S96C53v95Ev,
  (VTBL_ENTRY)&_ZN5S96C53v96Ev,
  (VTBL_ENTRY)&_ZN5S96C53v97Ev,
  (VTBL_ENTRY)&_ZN5S96C53v98Ev,
  (VTBL_ENTRY)&_ZN5S96C53v99Ev,
  (VTBL_ENTRY)&_ZN5S96C54v100Ev,
  (VTBL_ENTRY)&_ZN5S96C54v101Ev,
  (VTBL_ENTRY)&_ZN5S96C54v102Ev,
  (VTBL_ENTRY)&_ZN5S96C54v103Ev,
  (VTBL_ENTRY)&_ZN5S96C54v104Ev,
  (VTBL_ENTRY)&_ZN5S96C54v105Ev,
  (VTBL_ENTRY)&_ZN5S96C54v106Ev,
  (VTBL_ENTRY)&_ZN5S96C54v107Ev,
  (VTBL_ENTRY)&_ZN5S96C54v108Ev,
  (VTBL_ENTRY)&_ZN5S96C54v109Ev,
  (VTBL_ENTRY)&_ZN5S96C54v110Ev,
  (VTBL_ENTRY)&_ZN5S96C44v111Ev,
  (VTBL_ENTRY)&_ZN5S96C44v112Ev,
  (VTBL_ENTRY)&_ZN5S96C44v113Ev,
  (VTBL_ENTRY)&_ZN5S96C44v114Ev,
  (VTBL_ENTRY)&_ZN5S96C34v115Ev,
  (VTBL_ENTRY)&_ZN5S96C34v116Ev,
  (VTBL_ENTRY)&_ZN5S96C34v117Ev,
  (VTBL_ENTRY)&_ZN5S96C34v118Ev,
  (VTBL_ENTRY)&_ZN5S96C34v119Ev,
  (VTBL_ENTRY)&_ZN5S96C34v120Ev,
  (VTBL_ENTRY)&_ZN5S96C34v121Ev,
};
extern VTBL_ENTRY _ZTI5S96C3[];
extern  VTBL_ENTRY _ZTV5S96C3[];
Class_Descriptor cd_S96C3 = {  "S96C3", // class name
  bases_S96C3, 4,
  &(vtc_S96C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(320,236), // object size
  NSPAIRA(_ZTI5S96C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S96C3),121, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S96C2  : S96C3 {
  unsigned int s96c2f0:1;
  unsigned int s96c2f1:1;
  virtual  ~S96C2(); // _ZN5S96C2D1Ev
  virtual void  v122(); // _ZN5S96C24v122Ev
  virtual void  v123(); // _ZN5S96C24v123Ev
  S96C2(); // tgen
};
//SIG(-1 S96C2) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ 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 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 Fi FL Fp[4] Fi[2] Fp FC7{ m Fi[2]} Fp[2]} vd v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fi[2] Fp Fi[2] FC8{ BC9{ BC10{ BC11{ m Fp Fi[2]}}}} FC8 FC12{ m} FC8 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 Fi:1 Fi:1 Fi:1 FC13{ BC14{ BC11}} FC15{ BC16{ BC11}} FC17{ BC18{ BC11}} FC19{ BC20{ BC11}} Fi[3]} vd v109 v110 v111 v112 FC7 Fi:1 FC21{ BC22{ BC11}}} vd v113 v114 v115 v116 v117 v118 v119 FC23{ BC24{ BC11}} Fi:1} vd v1 v2 Fi:1 Fi:1}


 S96C2 ::~S96C2(){ note_dtor("S96C2", this);}
void  S96C2 ::v122(){vfunc_called(this, "_ZN5S96C24v122Ev");}
void  S96C2 ::v123(){vfunc_called(this, "_ZN5S96C24v123Ev");}
S96C2 ::S96C2(){ note_ctor("S96C2", this);} // tgen

static void Test_S96C2()
{
  extern Class_Descriptor cd_S96C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(41,60)];
    init_test(&cd_S96C2, buf);
    S96C2 *dp, &lv = *(dp=new (buf) S96C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,236), "sizeof(S96C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S96C2)");
    check_base_class_offset(lv, (S96C7*)(S96C6*)(S96C5*)(S96C4*)(S96C3*), 0, "S96C2");
    check_base_class_offset(lv, (S96C6*)(S96C5*)(S96C4*)(S96C3*), 0, "S96C2");
    check_base_class_offset(lv, (S96C5*)(S96C4*)(S96C3*), 0, "S96C2");
    check_base_class_offset(lv, (S96C4*)(S96C3*), 0, "S96C2");
    check_base_class_offset(lv, (S96C3*), 0, "S96C2");
    set_bf_and_test(lv, s96c2f0, ABISELECT(313,233), 0, 1, 1, "S96C2");
    set_bf_and_test(lv, s96c2f1, ABISELECT(313,233), 1, 1, 1, "S96C2");
    test_class_info(&lv, &cd_S96C2);
    dp->~S96C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS96C2(Test_S96C2, "S96C2", ABISELECT(320,236));

#else // __cplusplus

extern void _ZN5S96C2C1Ev();
extern void _ZN5S96C2D1Ev();
Name_Map name_map_S96C2[] = {
  NSPAIR(_ZN5S96C2C1Ev),
  NSPAIR(_ZN5S96C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S96C7;
extern VTBL_ENTRY _ZTI5S96C7[];
extern  VTBL_ENTRY _ZTV5S96C7[];
extern Class_Descriptor cd_S96C6;
extern VTBL_ENTRY _ZTI5S96C6[];
extern  VTBL_ENTRY _ZTV5S96C6[];
extern Class_Descriptor cd_S96C5;
extern VTBL_ENTRY _ZTI5S96C5[];
extern  VTBL_ENTRY _ZTV5S96C5[];
extern Class_Descriptor cd_S96C4;
extern VTBL_ENTRY _ZTI5S96C4[];
extern  VTBL_ENTRY _ZTV5S96C4[];
extern Class_Descriptor cd_S96C3;
extern VTBL_ENTRY _ZTI5S96C3[];
extern  VTBL_ENTRY _ZTV5S96C3[];
static Base_Class bases_S96C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S96C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S96C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S96C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S96C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S96C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S96C2[];
extern void _ZN5S96C2D1Ev();
extern void _ZN5S96C2D0Ev();
extern void _ZN5S96C72v5Ev();
extern void _ZN5S96C72v6Ev();
extern void _ZN5S96C72v7Ev();
extern void _ZN5S96C72v8Ev();
extern void _ZN5S96C72v9Ev();
extern void _ZN5S96C73v10Ev();
extern void _ZN5S96C73v11Ev();
extern void _ZN5S96C73v12Ev();
extern void _ZN5S96C73v13Ev();
extern void _ZN5S96C73v14Ev();
extern void _ZN5S96C73v15Ev();
extern void _ZN5S96C73v16Ev();
extern void _ZN5S96C73v17Ev();
extern void _ZN5S96C73v18Ev();
extern void _ZN5S96C73v19Ev();
extern void _ZN5S96C73v20Ev();
extern void _ZN5S96C73v21Ev();
extern void _ZN5S96C73v22Ev();
extern void _ZN5S96C73v23Ev();
extern void _ZN5S96C73v24Ev();
extern void _ZN5S96C73v25Ev();
extern void _ZN5S96C73v26Ev();
extern void _ZN5S96C73v27Ev();
extern void _ZN5S96C73v28Ev();
extern void _ZN5S96C73v29Ev();
extern void _ZN5S96C73v30Ev();
extern void _ZN5S96C73v31Ev();
extern void _ZN5S96C73v32Ev();
extern void _ZN5S96C73v33Ev();
extern void _ZN5S96C73v34Ev();
extern void _ZN5S96C73v35Ev();
extern void _ZN5S96C73v36Ev();
extern void _ZN5S96C73v37Ev();
extern void _ZN5S96C73v38Ev();
extern void _ZN5S96C73v39Ev();
extern void _ZN5S96C73v40Ev();
extern void _ZN5S96C73v41Ev();
extern void _ZN5S96C73v42Ev();
extern void _ZN5S96C73v43Ev();
extern void _ZN5S96C73v44Ev();
extern void _ZN5S96C73v45Ev();
extern void _ZN5S96C73v46Ev();
extern void _ZN5S96C73v47Ev();
extern void _ZN5S96C73v48Ev();
extern void _ZN5S96C73v49Ev();
extern void _ZN5S96C73v50Ev();
extern void _ZN5S96C73v51Ev();
extern void _ZN5S96C73v52Ev();
extern void _ZN5S96C73v53Ev();
extern void _ZN5S96C73v54Ev();
extern void _ZN5S96C73v55Ev();
extern void _ZN5S96C73v56Ev();
extern void _ZN5S96C73v57Ev();
extern void _ZN5S96C73v58Ev();
extern void _ZN5S96C73v59Ev();
extern void _ZN5S96C73v60Ev();
extern void _ZN5S96C73v61Ev();
extern void _ZN5S96C73v62Ev();
extern void _ZN5S96C73v63Ev();
extern void _ZN5S96C73v64Ev();
extern void _ZN5S96C73v65Ev();
extern void _ZN5S96C73v66Ev();
extern void _ZN5S96C73v67Ev();
extern void _ZN5S96C73v68Ev();
extern void _ZN5S96C63v69Ev();
extern void _ZN5S96C63v70Ev();
extern void _ZN5S96C63v71Ev();
extern void _ZN5S96C63v72Ev();
extern void _ZN5S96C63v73Ev();
extern void _ZN5S96C63v74Ev();
extern void _ZN5S96C63v75Ev();
extern void _ZN5S96C63v76Ev();
extern void _ZN5S96C63v77Ev();
extern void _ZN5S96C63v78Ev();
extern void _ZN5S96C63v79Ev();
extern void _ZN5S96C63v80Ev();
extern void _ZN5S96C63v81Ev();
extern void _ZN5S96C63v82Ev();
extern void _ZN5S96C63v83Ev();
extern void _ZN5S96C63v84Ev();
extern void _ZN5S96C63v85Ev();
extern void _ZN5S96C63v86Ev();
extern void _ZN5S96C63v87Ev();
extern void _ZN5S96C63v88Ev();
extern void _ZN5S96C63v89Ev();
extern void _ZN5S96C63v90Ev();
extern void _ZN5S96C53v91Ev();
extern void _ZN5S96C53v92Ev();
extern void _ZN5S96C53v93Ev();
extern void _ZN5S96C53v94Ev();
extern void _ZN5S96C53v95Ev();
extern void _ZN5S96C53v96Ev();
extern void _ZN5S96C53v97Ev();
extern void _ZN5S96C53v98Ev();
extern void _ZN5S96C53v99Ev();
extern void _ZN5S96C54v100Ev();
extern void _ZN5S96C54v101Ev();
extern void _ZN5S96C54v102Ev();
extern void _ZN5S96C54v103Ev();
extern void _ZN5S96C54v104Ev();
extern void _ZN5S96C54v105Ev();
extern void _ZN5S96C54v106Ev();
extern void _ZN5S96C54v107Ev();
extern void _ZN5S96C54v108Ev();
extern void _ZN5S96C54v109Ev();
extern void _ZN5S96C54v110Ev();
extern void _ZN5S96C44v111Ev();
extern void _ZN5S96C44v112Ev();
extern void _ZN5S96C44v113Ev();
extern void _ZN5S96C44v114Ev();
extern void _ZN5S96C34v115Ev();
extern void _ZN5S96C34v116Ev();
extern void _ZN5S96C34v117Ev();
extern void _ZN5S96C34v118Ev();
extern void _ZN5S96C34v119Ev();
extern void _ZN5S96C34v120Ev();
extern void _ZN5S96C34v121Ev();
extern void _ZN5S96C24v122Ev();
extern void _ZN5S96C24v123Ev();
static  VTBL_ENTRY vtc_S96C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S96C2[0]),
  (VTBL_ENTRY)&_ZN5S96C2D1Ev,
  (VTBL_ENTRY)&_ZN5S96C2D0Ev,
  (VTBL_ENTRY)&_ZN5S96C72v5Ev,
  (VTBL_ENTRY)&_ZN5S96C72v6Ev,
  (VTBL_ENTRY)&_ZN5S96C72v7Ev,
  (VTBL_ENTRY)&_ZN5S96C72v8Ev,
  (VTBL_ENTRY)&_ZN5S96C72v9Ev,
  (VTBL_ENTRY)&_ZN5S96C73v10Ev,
  (VTBL_ENTRY)&_ZN5S96C73v11Ev,
  (VTBL_ENTRY)&_ZN5S96C73v12Ev,
  (VTBL_ENTRY)&_ZN5S96C73v13Ev,
  (VTBL_ENTRY)&_ZN5S96C73v14Ev,
  (VTBL_ENTRY)&_ZN5S96C73v15Ev,
  (VTBL_ENTRY)&_ZN5S96C73v16Ev,
  (VTBL_ENTRY)&_ZN5S96C73v17Ev,
  (VTBL_ENTRY)&_ZN5S96C73v18Ev,
  (VTBL_ENTRY)&_ZN5S96C73v19Ev,
  (VTBL_ENTRY)&_ZN5S96C73v20Ev,
  (VTBL_ENTRY)&_ZN5S96C73v21Ev,
  (VTBL_ENTRY)&_ZN5S96C73v22Ev,
  (VTBL_ENTRY)&_ZN5S96C73v23Ev,
  (VTBL_ENTRY)&_ZN5S96C73v24Ev,
  (VTBL_ENTRY)&_ZN5S96C73v25Ev,
  (VTBL_ENTRY)&_ZN5S96C73v26Ev,
  (VTBL_ENTRY)&_ZN5S96C73v27Ev,
  (VTBL_ENTRY)&_ZN5S96C73v28Ev,
  (VTBL_ENTRY)&_ZN5S96C73v29Ev,
  (VTBL_ENTRY)&_ZN5S96C73v30Ev,
  (VTBL_ENTRY)&_ZN5S96C73v31Ev,
  (VTBL_ENTRY)&_ZN5S96C73v32Ev,
  (VTBL_ENTRY)&_ZN5S96C73v33Ev,
  (VTBL_ENTRY)&_ZN5S96C73v34Ev,
  (VTBL_ENTRY)&_ZN5S96C73v35Ev,
  (VTBL_ENTRY)&_ZN5S96C73v36Ev,
  (VTBL_ENTRY)&_ZN5S96C73v37Ev,
  (VTBL_ENTRY)&_ZN5S96C73v38Ev,
  (VTBL_ENTRY)&_ZN5S96C73v39Ev,
  (VTBL_ENTRY)&_ZN5S96C73v40Ev,
  (VTBL_ENTRY)&_ZN5S96C73v41Ev,
  (VTBL_ENTRY)&_ZN5S96C73v42Ev,
  (VTBL_ENTRY)&_ZN5S96C73v43Ev,
  (VTBL_ENTRY)&_ZN5S96C73v44Ev,
  (VTBL_ENTRY)&_ZN5S96C73v45Ev,
  (VTBL_ENTRY)&_ZN5S96C73v46Ev,
  (VTBL_ENTRY)&_ZN5S96C73v47Ev,
  (VTBL_ENTRY)&_ZN5S96C73v48Ev,
  (VTBL_ENTRY)&_ZN5S96C73v49Ev,
  (VTBL_ENTRY)&_ZN5S96C73v50Ev,
  (VTBL_ENTRY)&_ZN5S96C73v51Ev,
  (VTBL_ENTRY)&_ZN5S96C73v52Ev,
  (VTBL_ENTRY)&_ZN5S96C73v53Ev,
  (VTBL_ENTRY)&_ZN5S96C73v54Ev,
  (VTBL_ENTRY)&_ZN5S96C73v55Ev,
  (VTBL_ENTRY)&_ZN5S96C73v56Ev,
  (VTBL_ENTRY)&_ZN5S96C73v57Ev,
  (VTBL_ENTRY)&_ZN5S96C73v58Ev,
  (VTBL_ENTRY)&_ZN5S96C73v59Ev,
  (VTBL_ENTRY)&_ZN5S96C73v60Ev,
  (VTBL_ENTRY)&_ZN5S96C73v61Ev,
  (VTBL_ENTRY)&_ZN5S96C73v62Ev,
  (VTBL_ENTRY)&_ZN5S96C73v63Ev,
  (VTBL_ENTRY)&_ZN5S96C73v64Ev,
  (VTBL_ENTRY)&_ZN5S96C73v65Ev,
  (VTBL_ENTRY)&_ZN5S96C73v66Ev,
  (VTBL_ENTRY)&_ZN5S96C73v67Ev,
  (VTBL_ENTRY)&_ZN5S96C73v68Ev,
  (VTBL_ENTRY)&_ZN5S96C63v69Ev,
  (VTBL_ENTRY)&_ZN5S96C63v70Ev,
  (VTBL_ENTRY)&_ZN5S96C63v71Ev,
  (VTBL_ENTRY)&_ZN5S96C63v72Ev,
  (VTBL_ENTRY)&_ZN5S96C63v73Ev,
  (VTBL_ENTRY)&_ZN5S96C63v74Ev,
  (VTBL_ENTRY)&_ZN5S96C63v75Ev,
  (VTBL_ENTRY)&_ZN5S96C63v76Ev,
  (VTBL_ENTRY)&_ZN5S96C63v77Ev,
  (VTBL_ENTRY)&_ZN5S96C63v78Ev,
  (VTBL_ENTRY)&_ZN5S96C63v79Ev,
  (VTBL_ENTRY)&_ZN5S96C63v80Ev,
  (VTBL_ENTRY)&_ZN5S96C63v81Ev,
  (VTBL_ENTRY)&_ZN5S96C63v82Ev,
  (VTBL_ENTRY)&_ZN5S96C63v83Ev,
  (VTBL_ENTRY)&_ZN5S96C63v84Ev,
  (VTBL_ENTRY)&_ZN5S96C63v85Ev,
  (VTBL_ENTRY)&_ZN5S96C63v86Ev,
  (VTBL_ENTRY)&_ZN5S96C63v87Ev,
  (VTBL_ENTRY)&_ZN5S96C63v88Ev,
  (VTBL_ENTRY)&_ZN5S96C63v89Ev,
  (VTBL_ENTRY)&_ZN5S96C63v90Ev,
  (VTBL_ENTRY)&_ZN5S96C53v91Ev,
  (VTBL_ENTRY)&_ZN5S96C53v92Ev,
  (VTBL_ENTRY)&_ZN5S96C53v93Ev,
  (VTBL_ENTRY)&_ZN5S96C53v94Ev,
  (VTBL_ENTRY)&_ZN5S96C53v95Ev,
  (VTBL_ENTRY)&_ZN5S96C53v96Ev,
  (VTBL_ENTRY)&_ZN5S96C53v97Ev,
  (VTBL_ENTRY)&_ZN5S96C53v98Ev,
  (VTBL_ENTRY)&_ZN5S96C53v99Ev,
  (VTBL_ENTRY)&_ZN5S96C54v100Ev,
  (VTBL_ENTRY)&_ZN5S96C54v101Ev,
  (VTBL_ENTRY)&_ZN5S96C54v102Ev,
  (VTBL_ENTRY)&_ZN5S96C54v103Ev,
  (VTBL_ENTRY)&_ZN5S96C54v104Ev,
  (VTBL_ENTRY)&_ZN5S96C54v105Ev,
  (VTBL_ENTRY)&_ZN5S96C54v106Ev,
  (VTBL_ENTRY)&_ZN5S96C54v107Ev,
  (VTBL_ENTRY)&_ZN5S96C54v108Ev,
  (VTBL_ENTRY)&_ZN5S96C54v109Ev,
  (VTBL_ENTRY)&_ZN5S96C54v110Ev,
  (VTBL_ENTRY)&_ZN5S96C44v111Ev,
  (VTBL_ENTRY)&_ZN5S96C44v112Ev,
  (VTBL_ENTRY)&_ZN5S96C44v113Ev,
  (VTBL_ENTRY)&_ZN5S96C44v114Ev,
  (VTBL_ENTRY)&_ZN5S96C34v115Ev,
  (VTBL_ENTRY)&_ZN5S96C34v116Ev,
  (VTBL_ENTRY)&_ZN5S96C34v117Ev,
  (VTBL_ENTRY)&_ZN5S96C34v118Ev,
  (VTBL_ENTRY)&_ZN5S96C34v119Ev,
  (VTBL_ENTRY)&_ZN5S96C34v120Ev,
  (VTBL_ENTRY)&_ZN5S96C34v121Ev,
  (VTBL_ENTRY)&_ZN5S96C24v122Ev,
  (VTBL_ENTRY)&_ZN5S96C24v123Ev,
};
extern VTBL_ENTRY _ZTI5S96C2[];
extern  VTBL_ENTRY _ZTV5S96C2[];
Class_Descriptor cd_S96C2 = {  "S96C2", // class name
  bases_S96C2, 5,
  &(vtc_S96C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(320,236), // object size
  NSPAIRA(_ZTI5S96C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S96C2),123, //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  S96C1  : S96C2 {
  ::S287C9 s96c1f0;
  virtual  ~S96C1(); // _ZN5S96C1D1Ev
  virtual void  v1(); // _ZN5S96C12v1Ev
  virtual void  v2(); // _ZN5S96C12v2Ev
  virtual void  v3(); // _ZN5S96C12v3Ev
  virtual void  v4(); // _ZN5S96C12v4Ev
  S96C1(); // tgen
};
//SIG(1 S96C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ BC7{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 Fi FL Fp[4] Fi[2] Fp FC8{ m Fi[2]} Fp[2]} vd v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 Fi[2] Fp Fi[2] FC9{ BC10{ BC11{ BC12{ m Fp Fi[2]}}}} FC9 FC13{ m} FC9 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 Fi:1 Fi:1 Fi:1 FC14{ BC15{ BC12}} FC16{ BC17{ BC12}} FC18{ BC19{ BC12}} FC20{ BC21{ BC12}} Fi[3]} vd v111 v112 v113 v114 FC8 Fi:1 FC22{ BC23{ BC12}}} vd v115 v116 v117 v118 v119 v120 v121 FC24{ BC25{ BC12}} Fi:1} vd v122 v123 Fi:1 Fi:1} vd v1 v2 v3 v4 FC10}


 S96C1 ::~S96C1(){ note_dtor("S96C1", this);}
void  S96C1 ::v1(){vfunc_called(this, "_ZN5S96C12v1Ev");}
void  S96C1 ::v2(){vfunc_called(this, "_ZN5S96C12v2Ev");}
void  S96C1 ::v3(){vfunc_called(this, "_ZN5S96C12v3Ev");}
void  S96C1 ::v4(){vfunc_called(this, "_ZN5S96C12v4Ev");}
S96C1 ::S96C1(){ note_ctor("S96C1", this);} // tgen

static void Test_S96C1()
{
  extern Class_Descriptor cd_S96C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(43,63)];
    init_test(&cd_S96C1, buf);
    S96C1 *dp, &lv = *(dp=new (buf) S96C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,248), "sizeof(S96C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S96C1)");
    check_base_class_offset(lv, (S96C7*)(S96C6*)(S96C5*)(S96C4*)(S96C3*)(S96C2*), 0, "S96C1");
    check_base_class_offset(lv, (S96C6*)(S96C5*)(S96C4*)(S96C3*)(S96C2*), 0, "S96C1");
    check_base_class_offset(lv, (S96C5*)(S96C4*)(S96C3*)(S96C2*), 0, "S96C1");
    check_base_class_offset(lv, (S96C4*)(S96C3*)(S96C2*), 0, "S96C1");
    check_base_class_offset(lv, (S96C3*)(S96C2*), 0, "S96C1");
    check_base_class_offset(lv, (S96C2*), 0, "S96C1");
    check_field_offset(lv, s96c1f0, ABISELECT(320,236), "S96C1.s96c1f0");
    test_class_info(&lv, &cd_S96C1);
    dp->~S96C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS96C1(Test_S96C1, "S96C1", ABISELECT(336,248));

#else // __cplusplus

extern void _ZN5S96C1C1Ev();
extern void _ZN5S96C1D1Ev();
Name_Map name_map_S96C1[] = {
  NSPAIR(_ZN5S96C1C1Ev),
  NSPAIR(_ZN5S96C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S96C7;
extern VTBL_ENTRY _ZTI5S96C7[];
extern  VTBL_ENTRY _ZTV5S96C7[];
extern Class_Descriptor cd_S96C6;
extern VTBL_ENTRY _ZTI5S96C6[];
extern  VTBL_ENTRY _ZTV5S96C6[];
extern Class_Descriptor cd_S96C5;
extern VTBL_ENTRY _ZTI5S96C5[];
extern  VTBL_ENTRY _ZTV5S96C5[];
extern Class_Descriptor cd_S96C4;
extern VTBL_ENTRY _ZTI5S96C4[];
extern  VTBL_ENTRY _ZTV5S96C4[];
extern Class_Descriptor cd_S96C3;
extern VTBL_ENTRY _ZTI5S96C3[];
extern  VTBL_ENTRY _ZTV5S96C3[];
extern Class_Descriptor cd_S96C2;
extern VTBL_ENTRY _ZTI5S96C2[];
extern  VTBL_ENTRY _ZTV5S96C2[];
static Base_Class bases_S96C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S96C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S96C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S96C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S96C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S96C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S96C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S96C1[];
extern void _ZN5S96C1D1Ev();
extern void _ZN5S96C1D0Ev();
extern void _ZN5S96C72v5Ev();
extern void _ZN5S96C72v6Ev();
extern void _ZN5S96C72v7Ev();
extern void _ZN5S96C72v8Ev();
extern void _ZN5S96C72v9Ev();
extern void _ZN5S96C73v10Ev();
extern void _ZN5S96C73v11Ev();
extern void _ZN5S96C73v12Ev();
extern void _ZN5S96C73v13Ev();
extern void _ZN5S96C73v14Ev();
extern void _ZN5S96C73v15Ev();
extern void _ZN5S96C73v16Ev();
extern void _ZN5S96C73v17Ev();
extern void _ZN5S96C73v18Ev();
extern void _ZN5S96C73v19Ev();
extern void _ZN5S96C73v20Ev();
extern void _ZN5S96C73v21Ev();
extern void _ZN5S96C73v22Ev();
extern void _ZN5S96C73v23Ev();
extern void _ZN5S96C73v24Ev();
extern void _ZN5S96C73v25Ev();
extern void _ZN5S96C73v26Ev();
extern void _ZN5S96C73v27Ev();
extern void _ZN5S96C73v28Ev();
extern void _ZN5S96C73v29Ev();
extern void _ZN5S96C73v30Ev();
extern void _ZN5S96C73v31Ev();
extern void _ZN5S96C73v32Ev();
extern void _ZN5S96C73v33Ev();
extern void _ZN5S96C73v34Ev();
extern void _ZN5S96C73v35Ev();
extern void _ZN5S96C73v36Ev();
extern void _ZN5S96C73v37Ev();
extern void _ZN5S96C73v38Ev();
extern void _ZN5S96C73v39Ev();
extern void _ZN5S96C73v40Ev();
extern void _ZN5S96C73v41Ev();
extern void _ZN5S96C73v42Ev();
extern void _ZN5S96C73v43Ev();
extern void _ZN5S96C73v44Ev();
extern void _ZN5S96C73v45Ev();
extern void _ZN5S96C73v46Ev();
extern void _ZN5S96C73v47Ev();
extern void _ZN5S96C73v48Ev();
extern void _ZN5S96C73v49Ev();
extern void _ZN5S96C73v50Ev();
extern void _ZN5S96C73v51Ev();
extern void _ZN5S96C73v52Ev();
extern void _ZN5S96C73v53Ev();
extern void _ZN5S96C73v54Ev();
extern void _ZN5S96C73v55Ev();
extern void _ZN5S96C73v56Ev();
extern void _ZN5S96C73v57Ev();
extern void _ZN5S96C73v58Ev();
extern void _ZN5S96C73v59Ev();
extern void _ZN5S96C73v60Ev();
extern void _ZN5S96C73v61Ev();
extern void _ZN5S96C73v62Ev();
extern void _ZN5S96C73v63Ev();
extern void _ZN5S96C73v64Ev();
extern void _ZN5S96C73v65Ev();
extern void _ZN5S96C73v66Ev();
extern void _ZN5S96C73v67Ev();
extern void _ZN5S96C73v68Ev();
extern void _ZN5S96C63v69Ev();
extern void _ZN5S96C63v70Ev();
extern void _ZN5S96C63v71Ev();
extern void _ZN5S96C63v72Ev();
extern void _ZN5S96C63v73Ev();
extern void _ZN5S96C63v74Ev();
extern void _ZN5S96C63v75Ev();
extern void _ZN5S96C63v76Ev();
extern void _ZN5S96C63v77Ev();
extern void _ZN5S96C63v78Ev();
extern void _ZN5S96C63v79Ev();
extern void _ZN5S96C63v80Ev();
extern void _ZN5S96C63v81Ev();
extern void _ZN5S96C63v82Ev();
extern void _ZN5S96C63v83Ev();
extern void _ZN5S96C63v84Ev();
extern void _ZN5S96C63v85Ev();
extern void _ZN5S96C63v86Ev();
extern void _ZN5S96C63v87Ev();
extern void _ZN5S96C63v88Ev();
extern void _ZN5S96C63v89Ev();
extern void _ZN5S96C63v90Ev();
extern void _ZN5S96C53v91Ev();
extern void _ZN5S96C53v92Ev();
extern void _ZN5S96C53v93Ev();
extern void _ZN5S96C53v94Ev();
extern void _ZN5S96C53v95Ev();
extern void _ZN5S96C53v96Ev();
extern void _ZN5S96C53v97Ev();
extern void _ZN5S96C53v98Ev();
extern void _ZN5S96C53v99Ev();
extern void _ZN5S96C54v100Ev();
extern void _ZN5S96C54v101Ev();
extern void _ZN5S96C54v102Ev();
extern void _ZN5S96C54v103Ev();
extern void _ZN5S96C54v104Ev();
extern void _ZN5S96C54v105Ev();
extern void _ZN5S96C54v106Ev();
extern void _ZN5S96C54v107Ev();
extern void _ZN5S96C54v108Ev();
extern void _ZN5S96C54v109Ev();
extern void _ZN5S96C54v110Ev();
extern void _ZN5S96C44v111Ev();
extern void _ZN5S96C44v112Ev();
extern void _ZN5S96C44v113Ev();
extern void _ZN5S96C44v114Ev();
extern void _ZN5S96C34v115Ev();
extern void _ZN5S96C34v116Ev();
extern void _ZN5S96C34v117Ev();
extern void _ZN5S96C34v118Ev();
extern void _ZN5S96C34v119Ev();
extern void _ZN5S96C34v120Ev();
extern void _ZN5S96C34v121Ev();
extern void _ZN5S96C24v122Ev();
extern void _ZN5S96C24v123Ev();
extern void _ZN5S96C12v1Ev();
extern void _ZN5S96C12v2Ev();
extern void _ZN5S96C12v3Ev();
extern void _ZN5S96C12v4Ev();
static  VTBL_ENTRY vtc_S96C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S96C1[0]),
  (VTBL_ENTRY)&_ZN5S96C1D1Ev,
  (VTBL_ENTRY)&_ZN5S96C1D0Ev,
  (VTBL_ENTRY)&_ZN5S96C72v5Ev,
  (VTBL_ENTRY)&_ZN5S96C72v6Ev,
  (VTBL_ENTRY)&_ZN5S96C72v7Ev,
  (VTBL_ENTRY)&_ZN5S96C72v8Ev,
  (VTBL_ENTRY)&_ZN5S96C72v9Ev,
  (VTBL_ENTRY)&_ZN5S96C73v10Ev,
  (VTBL_ENTRY)&_ZN5S96C73v11Ev,
  (VTBL_ENTRY)&_ZN5S96C73v12Ev,
  (VTBL_ENTRY)&_ZN5S96C73v13Ev,
  (VTBL_ENTRY)&_ZN5S96C73v14Ev,
  (VTBL_ENTRY)&_ZN5S96C73v15Ev,
  (VTBL_ENTRY)&_ZN5S96C73v16Ev,
  (VTBL_ENTRY)&_ZN5S96C73v17Ev,
  (VTBL_ENTRY)&_ZN5S96C73v18Ev,
  (VTBL_ENTRY)&_ZN5S96C73v19Ev,
  (VTBL_ENTRY)&_ZN5S96C73v20Ev,
  (VTBL_ENTRY)&_ZN5S96C73v21Ev,
  (VTBL_ENTRY)&_ZN5S96C73v22Ev,
  (VTBL_ENTRY)&_ZN5S96C73v23Ev,
  (VTBL_ENTRY)&_ZN5S96C73v24Ev,
  (VTBL_ENTRY)&_ZN5S96C73v25Ev,
  (VTBL_ENTRY)&_ZN5S96C73v26Ev,
  (VTBL_ENTRY)&_ZN5S96C73v27Ev,
  (VTBL_ENTRY)&_ZN5S96C73v28Ev,
  (VTBL_ENTRY)&_ZN5S96C73v29Ev,
  (VTBL_ENTRY)&_ZN5S96C73v30Ev,
  (VTBL_ENTRY)&_ZN5S96C73v31Ev,
  (VTBL_ENTRY)&_ZN5S96C73v32Ev,
  (VTBL_ENTRY)&_ZN5S96C73v33Ev,
  (VTBL_ENTRY)&_ZN5S96C73v34Ev,
  (VTBL_ENTRY)&_ZN5S96C73v35Ev,
  (VTBL_ENTRY)&_ZN5S96C73v36Ev,
  (VTBL_ENTRY)&_ZN5S96C73v37Ev,
  (VTBL_ENTRY)&_ZN5S96C73v38Ev,
  (VTBL_ENTRY)&_ZN5S96C73v39Ev,
  (VTBL_ENTRY)&_ZN5S96C73v40Ev,
  (VTBL_ENTRY)&_ZN5S96C73v41Ev,
  (VTBL_ENTRY)&_ZN5S96C73v42Ev,
  (VTBL_ENTRY)&_ZN5S96C73v43Ev,
  (VTBL_ENTRY)&_ZN5S96C73v44Ev,
  (VTBL_ENTRY)&_ZN5S96C73v45Ev,
  (VTBL_ENTRY)&_ZN5S96C73v46Ev,
  (VTBL_ENTRY)&_ZN5S96C73v47Ev,
  (VTBL_ENTRY)&_ZN5S96C73v48Ev,
  (VTBL_ENTRY)&_ZN5S96C73v49Ev,
  (VTBL_ENTRY)&_ZN5S96C73v50Ev,
  (VTBL_ENTRY)&_ZN5S96C73v51Ev,
  (VTBL_ENTRY)&_ZN5S96C73v52Ev,
  (VTBL_ENTRY)&_ZN5S96C73v53Ev,
  (VTBL_ENTRY)&_ZN5S96C73v54Ev,
  (VTBL_ENTRY)&_ZN5S96C73v55Ev,
  (VTBL_ENTRY)&_ZN5S96C73v56Ev,
  (VTBL_ENTRY)&_ZN5S96C73v57Ev,
  (VTBL_ENTRY)&_ZN5S96C73v58Ev,
  (VTBL_ENTRY)&_ZN5S96C73v59Ev,
  (VTBL_ENTRY)&_ZN5S96C73v60Ev,
  (VTBL_ENTRY)&_ZN5S96C73v61Ev,
  (VTBL_ENTRY)&_ZN5S96C73v62Ev,
  (VTBL_ENTRY)&_ZN5S96C73v63Ev,
  (VTBL_ENTRY)&_ZN5S96C73v64Ev,
  (VTBL_ENTRY)&_ZN5S96C73v65Ev,
  (VTBL_ENTRY)&_ZN5S96C73v66Ev,
  (VTBL_ENTRY)&_ZN5S96C73v67Ev,
  (VTBL_ENTRY)&_ZN5S96C73v68Ev,
  (VTBL_ENTRY)&_ZN5S96C63v69Ev,
  (VTBL_ENTRY)&_ZN5S96C63v70Ev,
  (VTBL_ENTRY)&_ZN5S96C63v71Ev,
  (VTBL_ENTRY)&_ZN5S96C63v72Ev,
  (VTBL_ENTRY)&_ZN5S96C63v73Ev,
  (VTBL_ENTRY)&_ZN5S96C63v74Ev,
  (VTBL_ENTRY)&_ZN5S96C63v75Ev,
  (VTBL_ENTRY)&_ZN5S96C63v76Ev,
  (VTBL_ENTRY)&_ZN5S96C63v77Ev,
  (VTBL_ENTRY)&_ZN5S96C63v78Ev,
  (VTBL_ENTRY)&_ZN5S96C63v79Ev,
  (VTBL_ENTRY)&_ZN5S96C63v80Ev,
  (VTBL_ENTRY)&_ZN5S96C63v81Ev,
  (VTBL_ENTRY)&_ZN5S96C63v82Ev,
  (VTBL_ENTRY)&_ZN5S96C63v83Ev,
  (VTBL_ENTRY)&_ZN5S96C63v84Ev,
  (VTBL_ENTRY)&_ZN5S96C63v85Ev,
  (VTBL_ENTRY)&_ZN5S96C63v86Ev,
  (VTBL_ENTRY)&_ZN5S96C63v87Ev,
  (VTBL_ENTRY)&_ZN5S96C63v88Ev,
  (VTBL_ENTRY)&_ZN5S96C63v89Ev,
  (VTBL_ENTRY)&_ZN5S96C63v90Ev,
  (VTBL_ENTRY)&_ZN5S96C53v91Ev,
  (VTBL_ENTRY)&_ZN5S96C53v92Ev,
  (VTBL_ENTRY)&_ZN5S96C53v93Ev,
  (VTBL_ENTRY)&_ZN5S96C53v94Ev,
  (VTBL_ENTRY)&_ZN5S96C53v95Ev,
  (VTBL_ENTRY)&_ZN5S96C53v96Ev,
  (VTBL_ENTRY)&_ZN5S96C53v97Ev,
  (VTBL_ENTRY)&_ZN5S96C53v98Ev,
  (VTBL_ENTRY)&_ZN5S96C53v99Ev,
  (VTBL_ENTRY)&_ZN5S96C54v100Ev,
  (VTBL_ENTRY)&_ZN5S96C54v101Ev,
  (VTBL_ENTRY)&_ZN5S96C54v102Ev,
  (VTBL_ENTRY)&_ZN5S96C54v103Ev,
  (VTBL_ENTRY)&_ZN5S96C54v104Ev,
  (VTBL_ENTRY)&_ZN5S96C54v105Ev,
  (VTBL_ENTRY)&_ZN5S96C54v106Ev,
  (VTBL_ENTRY)&_ZN5S96C54v107Ev,
  (VTBL_ENTRY)&_ZN5S96C54v108Ev,
  (VTBL_ENTRY)&_ZN5S96C54v109Ev,
  (VTBL_ENTRY)&_ZN5S96C54v110Ev,
  (VTBL_ENTRY)&_ZN5S96C44v111Ev,
  (VTBL_ENTRY)&_ZN5S96C44v112Ev,
  (VTBL_ENTRY)&_ZN5S96C44v113Ev,
  (VTBL_ENTRY)&_ZN5S96C44v114Ev,
  (VTBL_ENTRY)&_ZN5S96C34v115Ev,
  (VTBL_ENTRY)&_ZN5S96C34v116Ev,
  (VTBL_ENTRY)&_ZN5S96C34v117Ev,
  (VTBL_ENTRY)&_ZN5S96C34v118Ev,
  (VTBL_ENTRY)&_ZN5S96C34v119Ev,
  (VTBL_ENTRY)&_ZN5S96C34v120Ev,
  (VTBL_ENTRY)&_ZN5S96C34v121Ev,
  (VTBL_ENTRY)&_ZN5S96C24v122Ev,
  (VTBL_ENTRY)&_ZN5S96C24v123Ev,
  (VTBL_ENTRY)&_ZN5S96C12v1Ev,
  (VTBL_ENTRY)&_ZN5S96C12v2Ev,
  (VTBL_ENTRY)&_ZN5S96C12v3Ev,
  (VTBL_ENTRY)&_ZN5S96C12v4Ev,
};
extern VTBL_ENTRY _ZTI5S96C1[];
extern  VTBL_ENTRY _ZTV5S96C1[];
Class_Descriptor cd_S96C1 = {  "S96C1", // class name
  bases_S96C1, 6,
  &(vtc_S96C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(336,248), // object size
  NSPAIRA(_ZTI5S96C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S96C1),127, //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  S34C8  {
  int s34c8f0;
  __tsi64 s34c8f1;
  void *s34c8f2[4];
  int s34c8f3[2];
  void *s34c8f4;
  ::S3350C4_nt s34c8f5;
  void *s34c8f6[2];
  virtual  ~S34C8(); // _ZN5S34C8D1Ev
  virtual void  v4(); // _ZN5S34C82v4Ev
  virtual void  v5(); // _ZN5S34C82v5Ev
  virtual void  v6(); // _ZN5S34C82v6Ev
  virtual void  v7(); // _ZN5S34C82v7Ev
  virtual void  v8(); // _ZN5S34C82v8Ev
  virtual void  v9(); // _ZN5S34C82v9Ev
  virtual void  v10(); // _ZN5S34C83v10Ev
  virtual void  v11(); // _ZN5S34C83v11Ev
  virtual void  v12(); // _ZN5S34C83v12Ev
  virtual void  v13(); // _ZN5S34C83v13Ev
  virtual void  v14(); // _ZN5S34C83v14Ev
  virtual void  v15(); // _ZN5S34C83v15Ev
  virtual void  v16(); // _ZN5S34C83v16Ev
  virtual void  v17(); // _ZN5S34C83v17Ev
  virtual void  v18(); // _ZN5S34C83v18Ev
  virtual void  v19(); // _ZN5S34C83v19Ev
  virtual void  v20(); // _ZN5S34C83v20Ev
  virtual void  v21(); // _ZN5S34C83v21Ev
  virtual void  v22(); // _ZN5S34C83v22Ev
  virtual void  v23(); // _ZN5S34C83v23Ev
  virtual void  v24(); // _ZN5S34C83v24Ev
  virtual void  v25(); // _ZN5S34C83v25Ev
  virtual void  v26(); // _ZN5S34C83v26Ev
  virtual void  v27(); // _ZN5S34C83v27Ev
  virtual void  v28(); // _ZN5S34C83v28Ev
  virtual void  v29(); // _ZN5S34C83v29Ev
  virtual void  v30(); // _ZN5S34C83v30Ev
  virtual void  v31(); // _ZN5S34C83v31Ev
  virtual void  v32(); // _ZN5S34C83v32Ev
  virtual void  v33(); // _ZN5S34C83v33Ev
  virtual void  v34(); // _ZN5S34C83v34Ev
  virtual void  v35(); // _ZN5S34C83v35Ev
  virtual void  v36(); // _ZN5S34C83v36Ev
  virtual void  v37(); // _ZN5S34C83v37Ev
  virtual void  v38(); // _ZN5S34C83v38Ev
  virtual void  v39(); // _ZN5S34C83v39Ev
  virtual void  v40(); // _ZN5S34C83v40Ev
  virtual void  v41(); // _ZN5S34C83v41Ev
  virtual void  v42(); // _ZN5S34C83v42Ev
  virtual void  v43(); // _ZN5S34C83v43Ev
  virtual void  v44(); // _ZN5S34C83v44Ev
  virtual void  v45(); // _ZN5S34C83v45Ev
  virtual void  v46(); // _ZN5S34C83v46Ev
  virtual void  v47(); // _ZN5S34C83v47Ev
  virtual void  v48(); // _ZN5S34C83v48Ev
  virtual void  v49(); // _ZN5S34C83v49Ev
  virtual void  v50(); // _ZN5S34C83v50Ev
  virtual void  v51(); // _ZN5S34C83v51Ev
  virtual void  v52(); // _ZN5S34C83v52Ev
  virtual void  v53(); // _ZN5S34C83v53Ev
  virtual void  v54(); // _ZN5S34C83v54Ev
  virtual void  v55(); // _ZN5S34C83v55Ev
  virtual void  v56(); // _ZN5S34C83v56Ev
  virtual void  v57(); // _ZN5S34C83v57Ev
  virtual void  v58(); // _ZN5S34C83v58Ev
  virtual void  v59(); // _ZN5S34C83v59Ev
  virtual void  v60(); // _ZN5S34C83v60Ev
  virtual void  v61(); // _ZN5S34C83v61Ev
  virtual void  v62(); // _ZN5S34C83v62Ev
  virtual void  v63(); // _ZN5S34C83v63Ev
  virtual void  v64(); // _ZN5S34C83v64Ev
  virtual void  v65(); // _ZN5S34C83v65Ev
  virtual void  v66(); // _ZN5S34C83v66Ev
  virtual void  v67(); // _ZN5S34C83v67Ev
  S34C8(); // tgen
};
//SIG(-1 S34C8) 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]}


 S34C8 ::~S34C8(){ note_dtor("S34C8", this);}
void  S34C8 ::v4(){vfunc_called(this, "_ZN5S34C82v4Ev");}
void  S34C8 ::v5(){vfunc_called(this, "_ZN5S34C82v5Ev");}
void  S34C8 ::v6(){vfunc_called(this, "_ZN5S34C82v6Ev");}
void  S34C8 ::v7(){vfunc_called(this, "_ZN5S34C82v7Ev");}
void  S34C8 ::v8(){vfunc_called(this, "_ZN5S34C82v8Ev");}
void  S34C8 ::v9(){vfunc_called(this, "_ZN5S34C82v9Ev");}
void  S34C8 ::v10(){vfunc_called(this, "_ZN5S34C83v10Ev");}
void  S34C8 ::v11(){vfunc_called(this, "_ZN5S34C83v11Ev");}
void  S34C8 ::v12(){vfunc_called(this, "_ZN5S34C83v12Ev");}
void  S34C8 ::v13(){vfunc_called(this, "_ZN5S34C83v13Ev");}
void  S34C8 ::v14(){vfunc_called(this, "_ZN5S34C83v14Ev");}
void  S34C8 ::v15(){vfunc_called(this, "_ZN5S34C83v15Ev");}
void  S34C8 ::v16(){vfunc_called(this, "_ZN5S34C83v16Ev");}
void  S34C8 ::v17(){vfunc_called(this, "_ZN5S34C83v17Ev");}
void  S34C8 ::v18(){vfunc_called(this, "_ZN5S34C83v18Ev");}
void  S34C8 ::v19(){vfunc_called(this, "_ZN5S34C83v19Ev");}
void  S34C8 ::v20(){vfunc_called(this, "_ZN5S34C83v20Ev");}
void  S34C8 ::v21(){vfunc_called(this, "_ZN5S34C83v21Ev");}
void  S34C8 ::v22(){vfunc_called(this, "_ZN5S34C83v22Ev");}
void  S34C8 ::v23(){vfunc_called(this, "_ZN5S34C83v23Ev");}
void  S34C8 ::v24(){vfunc_called(this, "_ZN5S34C83v24Ev");}
void  S34C8 ::v25(){vfunc_called(this, "_ZN5S34C83v25Ev");}
void  S34C8 ::v26(){vfunc_called(this, "_ZN5S34C83v26Ev");}
void  S34C8 ::v27(){vfunc_called(this, "_ZN5S34C83v27Ev");}
void  S34C8 ::v28(){vfunc_called(this, "_ZN5S34C83v28Ev");}
void  S34C8 ::v29(){vfunc_called(this, "_ZN5S34C83v29Ev");}
void  S34C8 ::v30(){vfunc_called(this, "_ZN5S34C83v30Ev");}
void  S34C8 ::v31(){vfunc_called(this, "_ZN5S34C83v31Ev");}
void  S34C8 ::v32(){vfunc_called(this, "_ZN5S34C83v32Ev");}
void  S34C8 ::v33(){vfunc_called(this, "_ZN5S34C83v33Ev");}
void  S34C8 ::v34(){vfunc_called(this, "_ZN5S34C83v34Ev");}
void  S34C8 ::v35(){vfunc_called(this, "_ZN5S34C83v35Ev");}
void  S34C8 ::v36(){vfunc_called(this, "_ZN5S34C83v36Ev");}
void  S34C8 ::v37(){vfunc_called(this, "_ZN5S34C83v37Ev");}
void  S34C8 ::v38(){vfunc_called(this, "_ZN5S34C83v38Ev");}
void  S34C8 ::v39(){vfunc_called(this, "_ZN5S34C83v39Ev");}
void  S34C8 ::v40(){vfunc_called(this, "_ZN5S34C83v40Ev");}
void  S34C8 ::v41(){vfunc_called(this, "_ZN5S34C83v41Ev");}
void  S34C8 ::v42(){vfunc_called(this, "_ZN5S34C83v42Ev");}
void  S34C8 ::v43(){vfunc_called(this, "_ZN5S34C83v43Ev");}
void  S34C8 ::v44(){vfunc_called(this, "_ZN5S34C83v44Ev");}
void  S34C8 ::v45(){vfunc_called(this, "_ZN5S34C83v45Ev");}
void  S34C8 ::v46(){vfunc_called(this, "_ZN5S34C83v46Ev");}
void  S34C8 ::v47(){vfunc_called(this, "_ZN5S34C83v47Ev");}
void  S34C8 ::v48(){vfunc_called(this, "_ZN5S34C83v48Ev");}
void  S34C8 ::v49(){vfunc_called(this, "_ZN5S34C83v49Ev");}
void  S34C8 ::v50(){vfunc_called(this, "_ZN5S34C83v50Ev");}
void  S34C8 ::v51(){vfunc_called(this, "_ZN5S34C83v51Ev");}
void  S34C8 ::v52(){vfunc_called(this, "_ZN5S34C83v52Ev");}
void  S34C8 ::v53(){vfunc_called(this, "_ZN5S34C83v53Ev");}
void  S34C8 ::v54(){vfunc_called(this, "_ZN5S34C83v54Ev");}
void  S34C8 ::v55(){vfunc_called(this, "_ZN5S34C83v55Ev");}
void  S34C8 ::v56(){vfunc_called(this, "_ZN5S34C83v56Ev");}
void  S34C8 ::v57(){vfunc_called(this, "_ZN5S34C83v57Ev");}
void  S34C8 ::v58(){vfunc_called(this, "_ZN5S34C83v58Ev");}
void  S34C8 ::v59(){vfunc_called(this, "_ZN5S34C83v59Ev");}
void  S34C8 ::v60(){vfunc_called(this, "_ZN5S34C83v60Ev");}
void  S34C8 ::v61(){vfunc_called(this, "_ZN5S34C83v61Ev");}
void  S34C8 ::v62(){vfunc_called(this, "_ZN5S34C83v62Ev");}
void  S34C8 ::v63(){vfunc_called(this, "_ZN5S34C83v63Ev");}
void  S34C8 ::v64(){vfunc_called(this, "_ZN5S34C83v64Ev");}
void  S34C8 ::v65(){vfunc_called(this, "_ZN5S34C83v65Ev");}
void  S34C8 ::v66(){vfunc_called(this, "_ZN5S34C83v66Ev");}
void  S34C8 ::v67(){vfunc_called(this, "_ZN5S34C83v67Ev");}
S34C8 ::S34C8(){ note_ctor("S34C8", this);} // tgen

static void Test_S34C8()
{
  extern Class_Descriptor cd_S34C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S34C8, buf);
    S34C8 *dp, &lv = *(dp=new (buf) S34C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S34C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S34C8)");
    check_field_offset(lv, s34c8f0, ABISELECT(8,4), "S34C8.s34c8f0");
    check_field_offset(lv, s34c8f1, ABISELECT(16,8), "S34C8.s34c8f1");
    check_field_offset(lv, s34c8f2, ABISELECT(24,16), "S34C8.s34c8f2");
    check_field_offset(lv, s34c8f3, ABISELECT(56,32), "S34C8.s34c8f3");
    check_field_offset(lv, s34c8f4, ABISELECT(64,40), "S34C8.s34c8f4");
    check_field_offset(lv, s34c8f5, ABISELECT(72,44), "S34C8.s34c8f5");
    check_field_offset(lv, s34c8f6, ABISELECT(80,52), "S34C8.s34c8f6");
    test_class_info(&lv, &cd_S34C8);
    dp->~S34C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS34C8(Test_S34C8, "S34C8", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN5S34C8C1Ev();
extern void _ZN5S34C8D1Ev();
Name_Map name_map_S34C8[] = {
  NSPAIR(_ZN5S34C8C1Ev),
  NSPAIR(_ZN5S34C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI5S34C8[];
extern void _ZN5S34C8D1Ev();
extern void _ZN5S34C8D0Ev();
extern void _ZN5S34C82v4Ev();
extern void _ZN5S34C82v5Ev();
extern void _ZN5S34C82v6Ev();
extern void _ZN5S34C82v7Ev();
extern void _ZN5S34C82v8Ev();
extern void _ZN5S34C82v9Ev();
extern void _ZN5S34C83v10Ev();
extern void _ZN5S34C83v11Ev();
extern void _ZN5S34C83v12Ev();
extern void _ZN5S34C83v13Ev();
extern void _ZN5S34C83v14Ev();
extern void _ZN5S34C83v15Ev();
extern void _ZN5S34C83v16Ev();
extern void _ZN5S34C83v17Ev();
extern void _ZN5S34C83v18Ev();
extern void _ZN5S34C83v19Ev();
extern void _ZN5S34C83v20Ev();
extern void _ZN5S34C83v21Ev();
extern void _ZN5S34C83v22Ev();
extern void _ZN5S34C83v23Ev();
extern void _ZN5S34C83v24Ev();
extern void _ZN5S34C83v25Ev();
extern void _ZN5S34C83v26Ev();
extern void _ZN5S34C83v27Ev();
extern void _ZN5S34C83v28Ev();
extern void _ZN5S34C83v29Ev();
extern void _ZN5S34C83v30Ev();
extern void _ZN5S34C83v31Ev();
extern void _ZN5S34C83v32Ev();
extern void _ZN5S34C83v33Ev();
extern void _ZN5S34C83v34Ev();
extern void _ZN5S34C83v35Ev();
extern void _ZN5S34C83v36Ev();
extern void _ZN5S34C83v37Ev();
extern void _ZN5S34C83v38Ev();
extern void _ZN5S34C83v39Ev();
extern void _ZN5S34C83v40Ev();
extern void _ZN5S34C83v41Ev();
extern void _ZN5S34C83v42Ev();
extern void _ZN5S34C83v43Ev();
extern void _ZN5S34C83v44Ev();
extern void _ZN5S34C83v45Ev();
extern void _ZN5S34C83v46Ev();
extern void _ZN5S34C83v47Ev();
extern void _ZN5S34C83v48Ev();
extern void _ZN5S34C83v49Ev();
extern void _ZN5S34C83v50Ev();
extern void _ZN5S34C83v51Ev();
extern void _ZN5S34C83v52Ev();
extern void _ZN5S34C83v53Ev();
extern void _ZN5S34C83v54Ev();
extern void _ZN5S34C83v55Ev();
extern void _ZN5S34C83v56Ev();
extern void _ZN5S34C83v57Ev();
extern void _ZN5S34C83v58Ev();
extern void _ZN5S34C83v59Ev();
extern void _ZN5S34C83v60Ev();
extern void _ZN5S34C83v61Ev();
extern void _ZN5S34C83v62Ev();
extern void _ZN5S34C83v63Ev();
extern void _ZN5S34C83v64Ev();
extern void _ZN5S34C83v65Ev();
extern void _ZN5S34C83v66Ev();
extern void _ZN5S34C83v67Ev();
static  VTBL_ENTRY vtc_S34C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S34C8[0]),
  (VTBL_ENTRY)&_ZN5S34C8D1Ev,
  (VTBL_ENTRY)&_ZN5S34C8D0Ev,
  (VTBL_ENTRY)&_ZN5S34C82v4Ev,
  (VTBL_ENTRY)&_ZN5S34C82v5Ev,
  (VTBL_ENTRY)&_ZN5S34C82v6Ev,
  (VTBL_ENTRY)&_ZN5S34C82v7Ev,
  (VTBL_ENTRY)&_ZN5S34C82v8Ev,
  (VTBL_ENTRY)&_ZN5S34C82v9Ev,
  (VTBL_ENTRY)&_ZN5S34C83v10Ev,
  (VTBL_ENTRY)&_ZN5S34C83v11Ev,
  (VTBL_ENTRY)&_ZN5S34C83v12Ev,
  (VTBL_ENTRY)&_ZN5S34C83v13Ev,
  (VTBL_ENTRY)&_ZN5S34C83v14Ev,
  (VTBL_ENTRY)&_ZN5S34C83v15Ev,
  (VTBL_ENTRY)&_ZN5S34C83v16Ev,
  (VTBL_ENTRY)&_ZN5S34C83v17Ev,
  (VTBL_ENTRY)&_ZN5S34C83v18Ev,
  (VTBL_ENTRY)&_ZN5S34C83v19Ev,
  (VTBL_ENTRY)&_ZN5S34C83v20Ev,
  (VTBL_ENTRY)&_ZN5S34C83v21Ev,
  (VTBL_ENTRY)&_ZN5S34C83v22Ev,
  (VTBL_ENTRY)&_ZN5S34C83v23Ev,
  (VTBL_ENTRY)&_ZN5S34C83v24Ev,
  (VTBL_ENTRY)&_ZN5S34C83v25Ev,
  (VTBL_ENTRY)&_ZN5S34C83v26Ev,
  (VTBL_ENTRY)&_ZN5S34C83v27Ev,
  (VTBL_ENTRY)&_ZN5S34C83v28Ev,
  (VTBL_ENTRY)&_ZN5S34C83v29Ev,
  (VTBL_ENTRY)&_ZN5S34C83v30Ev,
  (VTBL_ENTRY)&_ZN5S34C83v31Ev,
  (VTBL_ENTRY)&_ZN5S34C83v32Ev,
  (VTBL_ENTRY)&_ZN5S34C83v33Ev,
  (VTBL_ENTRY)&_ZN5S34C83v34Ev,
  (VTBL_ENTRY)&_ZN5S34C83v35Ev,
  (VTBL_ENTRY)&_ZN5S34C83v36Ev,
  (VTBL_ENTRY)&_ZN5S34C83v37Ev,
  (VTBL_ENTRY)&_ZN5S34C83v38Ev,
  (VTBL_ENTRY)&_ZN5S34C83v39Ev,
  (VTBL_ENTRY)&_ZN5S34C83v40Ev,
  (VTBL_ENTRY)&_ZN5S34C83v41Ev,
  (VTBL_ENTRY)&_ZN5S34C83v42Ev,
  (VTBL_ENTRY)&_ZN5S34C83v43Ev,
  (VTBL_ENTRY)&_ZN5S34C83v44Ev,
  (VTBL_ENTRY)&_ZN5S34C83v45Ev,
  (VTBL_ENTRY)&_ZN5S34C83v46Ev,
  (VTBL_ENTRY)&_ZN5S34C83v47Ev,
  (VTBL_ENTRY)&_ZN5S34C83v48Ev,
  (VTBL_ENTRY)&_ZN5S34C83v49Ev,
  (VTBL_ENTRY)&_ZN5S34C83v50Ev,
  (VTBL_ENTRY)&_ZN5S34C83v51Ev,
  (VTBL_ENTRY)&_ZN5S34C83v52Ev,
  (VTBL_ENTRY)&_ZN5S34C83v53Ev,
  (VTBL_ENTRY)&_ZN5S34C83v54Ev,
  (VTBL_ENTRY)&_ZN5S34C83v55Ev,
  (VTBL_ENTRY)&_ZN5S34C83v56Ev,
  (VTBL_ENTRY)&_ZN5S34C83v57Ev,
  (VTBL_ENTRY)&_ZN5S34C83v58Ev,
  (VTBL_ENTRY)&_ZN5S34C83v59Ev,
  (VTBL_ENTRY)&_ZN5S34C83v60Ev,
  (VTBL_ENTRY)&_ZN5S34C83v61Ev,
  (VTBL_ENTRY)&_ZN5S34C83v62Ev,
  (VTBL_ENTRY)&_ZN5S34C83v63Ev,
  (VTBL_ENTRY)&_ZN5S34C83v64Ev,
  (VTBL_ENTRY)&_ZN5S34C83v65Ev,
  (VTBL_ENTRY)&_ZN5S34C83v66Ev,
  (VTBL_ENTRY)&_ZN5S34C83v67Ev,
};
extern VTBL_ENTRY _ZTI5S34C8[];
extern  VTBL_ENTRY _ZTV5S34C8[];
Class_Descriptor cd_S34C8 = {  "S34C8", // class name
  0,0,//no base classes
  &(vtc_S34C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI5S34C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV5S34C8),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  S34C7  : S34C8 {
  int s34c7f0[2];
  void *s34c7f1;
  int s34c7f2[2];
  ::S287C8_nt s34c7f3;
  ::S287C8_nt s34c7f4;
  ::S2121C38 s34c7f5;
  ::S287C8_nt s34c7f6;
  unsigned int s34c7f7:1;
  unsigned int s34c7f8:1;
  unsigned int s34c7f9:1;
  unsigned int s34c7f10:1;
  unsigned int s34c7f11:1;
  int s34c7f12[2];
  virtual  ~S34C7(); // _ZN5S34C7D1Ev
  virtual void  v68(); // _ZN5S34C73v68Ev
  virtual void  v69(); // _ZN5S34C73v69Ev
  virtual void  v70(); // _ZN5S34C73v70Ev
  virtual void  v71(); // _ZN5S34C73v71Ev
  virtual void  v72(); // _ZN5S34C73v72Ev
  virtual void  v73(); // _ZN5S34C73v73Ev
  virtual void  v74(); // _ZN5S34C73v74Ev
  virtual void  v75(); // _ZN5S34C73v75Ev
  virtual void  v76(); // _ZN5S34C73v76Ev
  virtual void  v77(); // _ZN5S34C73v77Ev
  virtual void  v78(); // _ZN5S34C73v78Ev
  virtual void  v79(); // _ZN5S34C73v79Ev
  virtual void  v80(); // _ZN5S34C73v80Ev
  virtual void  v81(); // _ZN5S34C73v81Ev
  virtual void  v82(); // _ZN5S34C73v82Ev
  virtual void  v83(); // _ZN5S34C73v83Ev
  virtual void  v84(); // _ZN5S34C73v84Ev
  virtual void  v85(); // _ZN5S34C73v85Ev
  virtual void  v86(); // _ZN5S34C73v86Ev
  virtual void  v87(); // _ZN5S34C73v87Ev
  virtual void  v88(); // _ZN5S34C73v88Ev
  virtual void  v89(); // _ZN5S34C73v89Ev
  S34C7(); // tgen
};
//SIG(-1 S34C7) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S34C7 ::~S34C7(){ note_dtor("S34C7", this);}
void  S34C7 ::v68(){vfunc_called(this, "_ZN5S34C73v68Ev");}
void  S34C7 ::v69(){vfunc_called(this, "_ZN5S34C73v69Ev");}
void  S34C7 ::v70(){vfunc_called(this, "_ZN5S34C73v70Ev");}
void  S34C7 ::v71(){vfunc_called(this, "_ZN5S34C73v71Ev");}
void  S34C7 ::v72(){vfunc_called(this, "_ZN5S34C73v72Ev");}
void  S34C7 ::v73(){vfunc_called(this, "_ZN5S34C73v73Ev");}
void  S34C7 ::v74(){vfunc_called(this, "_ZN5S34C73v74Ev");}
void  S34C7 ::v75(){vfunc_called(this, "_ZN5S34C73v75Ev");}
void  S34C7 ::v76(){vfunc_called(this, "_ZN5S34C73v76Ev");}
void  S34C7 ::v77(){vfunc_called(this, "_ZN5S34C73v77Ev");}
void  S34C7 ::v78(){vfunc_called(this, "_ZN5S34C73v78Ev");}
void  S34C7 ::v79(){vfunc_called(this, "_ZN5S34C73v79Ev");}
void  S34C7 ::v80(){vfunc_called(this, "_ZN5S34C73v80Ev");}
void  S34C7 ::v81(){vfunc_called(this, "_ZN5S34C73v81Ev");}
void  S34C7 ::v82(){vfunc_called(this, "_ZN5S34C73v82Ev");}
void  S34C7 ::v83(){vfunc_called(this, "_ZN5S34C73v83Ev");}
void  S34C7 ::v84(){vfunc_called(this, "_ZN5S34C73v84Ev");}
void  S34C7 ::v85(){vfunc_called(this, "_ZN5S34C73v85Ev");}
void  S34C7 ::v86(){vfunc_called(this, "_ZN5S34C73v86Ev");}
void  S34C7 ::v87(){vfunc_called(this, "_ZN5S34C73v87Ev");}
void  S34C7 ::v88(){vfunc_called(this, "_ZN5S34C73v88Ev");}
void  S34C7 ::v89(){vfunc_called(this, "_ZN5S34C73v89Ev");}
S34C7 ::S34C7(){ note_ctor("S34C7", this);} // tgen

static void Test_S34C7()
{
  extern Class_Descriptor cd_S34C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S34C7, buf);
    S34C7 *dp, &lv = *(dp=new (buf) S34C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S34C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S34C7)");
    check_base_class_offset(lv, (S34C8*), 0, "S34C7");
    check_field_offset(lv, s34c7f0, ABISELECT(96,60), "S34C7.s34c7f0");
    check_field_offset(lv, s34c7f1, ABISELECT(104,68), "S34C7.s34c7f1");
    check_field_offset(lv, s34c7f2, ABISELECT(112,72), "S34C7.s34c7f2");
    check_field_offset(lv, s34c7f3, ABISELECT(120,80), "S34C7.s34c7f3");
    check_field_offset(lv, s34c7f4, ABISELECT(136,92), "S34C7.s34c7f4");
    check_field_offset(lv, s34c7f5, ABISELECT(152,104), "S34C7.s34c7f5");
    check_field_offset(lv, s34c7f6, ABISELECT(160,108), "S34C7.s34c7f6");
    set_bf_and_test(lv, s34c7f7, ABISELECT(176,120), 0, 1, 1, "S34C7");
    set_bf_and_test(lv, s34c7f8, ABISELECT(176,120), 1, 1, 1, "S34C7");
    set_bf_and_test(lv, s34c7f9, ABISELECT(176,120), 2, 1, 1, "S34C7");
    set_bf_and_test(lv, s34c7f10, ABISELECT(176,120), 3, 1, 1, "S34C7");
    set_bf_and_test(lv, s34c7f11, ABISELECT(176,120), 4, 1, 1, "S34C7");
    check_field_offset(lv, s34c7f12, ABISELECT(180,124), "S34C7.s34c7f12");
    test_class_info(&lv, &cd_S34C7);
    dp->~S34C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS34C7(Test_S34C7, "S34C7", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN5S34C7C1Ev();
extern void _ZN5S34C7D1Ev();
Name_Map name_map_S34C7[] = {
  NSPAIR(_ZN5S34C7C1Ev),
  NSPAIR(_ZN5S34C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S34C8;
extern VTBL_ENTRY _ZTI5S34C8[];
extern  VTBL_ENTRY _ZTV5S34C8[];
static Base_Class bases_S34C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S34C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI5S34C7[];
extern void _ZN5S34C7D1Ev();
extern void _ZN5S34C7D0Ev();
extern void _ZN5S34C82v4Ev();
extern void _ZN5S34C82v5Ev();
extern void _ZN5S34C82v6Ev();
extern void _ZN5S34C82v7Ev();
extern void _ZN5S34C82v8Ev();
extern void _ZN5S34C82v9Ev();
extern void _ZN5S34C83v10Ev();
extern void _ZN5S34C83v11Ev();
extern void _ZN5S34C83v12Ev();
extern void _ZN5S34C83v13Ev();
extern void _ZN5S34C83v14Ev();
extern void _ZN5S34C83v15Ev();
extern void _ZN5S34C83v16Ev();
extern void _ZN5S34C83v17Ev();
extern void _ZN5S34C83v18Ev();
extern void _ZN5S34C83v19Ev();
extern void _ZN5S34C83v20Ev();
extern void _ZN5S34C83v21Ev();
extern void _ZN5S34C83v22Ev();
extern void _ZN5S34C83v23Ev();
extern void _ZN5S34C83v24Ev();
extern void _ZN5S34C83v25Ev();
extern void _ZN5S34C83v26Ev();
extern void _ZN5S34C83v27Ev();
extern void _ZN5S34C83v28Ev();
extern void _ZN5S34C83v29Ev();
extern void _ZN5S34C83v30Ev();
extern void _ZN5S34C83v31Ev();
extern void _ZN5S34C83v32Ev();
extern void _ZN5S34C83v33Ev();
extern void _ZN5S34C83v34Ev();
extern void _ZN5S34C83v35Ev();
extern void _ZN5S34C83v36Ev();
extern void _ZN5S34C83v37Ev();
extern void _ZN5S34C83v38Ev();
extern void _ZN5S34C83v39Ev();
extern void _ZN5S34C83v40Ev();
extern void _ZN5S34C83v41Ev();
extern void _ZN5S34C83v42Ev();
extern void _ZN5S34C83v43Ev();
extern void _ZN5S34C83v44Ev();
extern void _ZN5S34C83v45Ev();
extern void _ZN5S34C83v46Ev();
extern void _ZN5S34C83v47Ev();
extern void _ZN5S34C83v48Ev();
extern void _ZN5S34C83v49Ev();
extern void _ZN5S34C83v50Ev();
extern void _ZN5S34C83v51Ev();
extern void _ZN5S34C83v52Ev();
extern void _ZN5S34C83v53Ev();
extern void _ZN5S34C83v54Ev();
extern void _ZN5S34C83v55Ev();
extern void _ZN5S34C83v56Ev();
extern void _ZN5S34C83v57Ev();
extern void _ZN5S34C83v58Ev();
extern void _ZN5S34C83v59Ev();
extern void _ZN5S34C83v60Ev();
extern void _ZN5S34C83v61Ev();
extern void _ZN5S34C83v62Ev();
extern void _ZN5S34C83v63Ev();
extern void _ZN5S34C83v64Ev();
extern void _ZN5S34C83v65Ev();
extern void _ZN5S34C83v66Ev();
extern void _ZN5S34C83v67Ev();
extern void _ZN5S34C73v68Ev();
extern void _ZN5S34C73v69Ev();
extern void _ZN5S34C73v70Ev();
extern void _ZN5S34C73v71Ev();
extern void _ZN5S34C73v72Ev();
extern void _ZN5S34C73v73Ev();
extern void _ZN5S34C73v74Ev();
extern void _ZN5S34C73v75Ev();
extern void _ZN5S34C73v76Ev();
extern void _ZN5S34C73v77Ev();
extern void _ZN5S34C73v78Ev();
extern void _ZN5S34C73v79Ev();
extern void _ZN5S34C73v80Ev();
extern void _ZN5S34C73v81Ev();
extern void _ZN5S34C73v82Ev();
extern void _ZN5S34C73v83Ev();
extern void _ZN5S34C73v84Ev();
extern void _ZN5S34C73v85Ev();
extern void _ZN5S34C73v86Ev();
extern void _ZN5S34C73v87Ev();
extern void _ZN5S34C73v88Ev();
extern void _ZN5S34C73v89Ev();
static  VTBL_ENTRY vtc_S34C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S34C7[0]),
  (VTBL_ENTRY)&_ZN5S34C7D1Ev,
  (VTBL_ENTRY)&_ZN5S34C7D0Ev,
  (VTBL_ENTRY)&_ZN5S34C82v4Ev,
  (VTBL_ENTRY)&_ZN5S34C82v5Ev,
  (VTBL_ENTRY)&_ZN5S34C82v6Ev,
  (VTBL_ENTRY)&_ZN5S34C82v7Ev,
  (VTBL_ENTRY)&_ZN5S34C82v8Ev,
  (VTBL_ENTRY)&_ZN5S34C82v9Ev,
  (VTBL_ENTRY)&_ZN5S34C83v10Ev,
  (VTBL_ENTRY)&_ZN5S34C83v11Ev,
  (VTBL_ENTRY)&_ZN5S34C83v12Ev,
  (VTBL_ENTRY)&_ZN5S34C83v13Ev,
  (VTBL_ENTRY)&_ZN5S34C83v14Ev,
  (VTBL_ENTRY)&_ZN5S34C83v15Ev,
  (VTBL_ENTRY)&_ZN5S34C83v16Ev,
  (VTBL_ENTRY)&_ZN5S34C83v17Ev,
  (VTBL_ENTRY)&_ZN5S34C83v18Ev,
  (VTBL_ENTRY)&_ZN5S34C83v19Ev,
  (VTBL_ENTRY)&_ZN5S34C83v20Ev,
  (VTBL_ENTRY)&_ZN5S34C83v21Ev,
  (VTBL_ENTRY)&_ZN5S34C83v22Ev,
  (VTBL_ENTRY)&_ZN5S34C83v23Ev,
  (VTBL_ENTRY)&_ZN5S34C83v24Ev,
  (VTBL_ENTRY)&_ZN5S34C83v25Ev,
  (VTBL_ENTRY)&_ZN5S34C83v26Ev,
  (VTBL_ENTRY)&_ZN5S34C83v27Ev,
  (VTBL_ENTRY)&_ZN5S34C83v28Ev,
  (VTBL_ENTRY)&_ZN5S34C83v29Ev,
  (VTBL_ENTRY)&_ZN5S34C83v30Ev,
  (VTBL_ENTRY)&_ZN5S34C83v31Ev,
  (VTBL_ENTRY)&_ZN5S34C83v32Ev,
  (VTBL_ENTRY)&_ZN5S34C83v33Ev,
  (VTBL_ENTRY)&_ZN5S34C83v34Ev,
  (VTBL_ENTRY)&_ZN5S34C83v35Ev,
  (VTBL_ENTRY)&_ZN5S34C83v36Ev,
  (VTBL_ENTRY)&_ZN5S34C83v37Ev,
  (VTBL_ENTRY)&_ZN5S34C83v38Ev,
  (VTBL_ENTRY)&_ZN5S34C83v39Ev,
  (VTBL_ENTRY)&_ZN5S34C83v40Ev,
  (VTBL_ENTRY)&_ZN5S34C83v41Ev,
  (VTBL_ENTRY)&_ZN5S34C83v42Ev,
  (VTBL_ENTRY)&_ZN5S34C83v43Ev,
  (VTBL_ENTRY)&_ZN5S34C83v44Ev,
  (VTBL_ENTRY)&_ZN5S34C83v45Ev,
  (VTBL_ENTRY)&_ZN5S34C83v46Ev,
  (VTBL_ENTRY)&_ZN5S34C83v47Ev,
  (VTBL_ENTRY)&_ZN5S34C83v48Ev,
  (VTBL_ENTRY)&_ZN5S34C83v49Ev,
  (VTBL_ENTRY)&_ZN5S34C83v50Ev,
  (VTBL_ENTRY)&_ZN5S34C83v51Ev,
  (VTBL_ENTRY)&_ZN5S34C83v52Ev,
  (VTBL_ENTRY)&_ZN5S34C83v53Ev,
  (VTBL_ENTRY)&_ZN5S34C83v54Ev,
  (VTBL_ENTRY)&_ZN5S34C83v55Ev,
  (VTBL_ENTRY)&_ZN5S34C83v56Ev,
  (VTBL_ENTRY)&_ZN5S34C83v57Ev,
  (VTBL_ENTRY)&_ZN5S34C83v58Ev,
  (VTBL_ENTRY)&_ZN5S34C83v59Ev,
  (VTBL_ENTRY)&_ZN5S34C83v60Ev,
  (VTBL_ENTRY)&_ZN5S34C83v61Ev,
  (VTBL_ENTRY)&_ZN5S34C83v62Ev,
  (VTBL_ENTRY)&_ZN5S34C83v63Ev,
  (VTBL_ENTRY)&_ZN5S34C83v64Ev,
  (VTBL_ENTRY)&_ZN5S34C83v65Ev,
  (VTBL_ENTRY)&_ZN5S34C83v66Ev,
  (VTBL_ENTRY)&_ZN5S34C83v67Ev,
  (VTBL_ENTRY)&_ZN5S34C73v68Ev,
  (VTBL_ENTRY)&_ZN5S34C73v69Ev,
  (VTBL_ENTRY)&_ZN5S34C73v70Ev,
  (VTBL_ENTRY)&_ZN5S34C73v71Ev,
  (VTBL_ENTRY)&_ZN5S34C73v72Ev,
  (VTBL_ENTRY)&_ZN5S34C73v73Ev,
  (VTBL_ENTRY)&_ZN5S34C73v74Ev,
  (VTBL_ENTRY)&_ZN5S34C73v75Ev,
  (VTBL_ENTRY)&_ZN5S34C73v76Ev,
  (VTBL_ENTRY)&_ZN5S34C73v77Ev,
  (VTBL_ENTRY)&_ZN5S34C73v78Ev,
  (VTBL_ENTRY)&_ZN5S34C73v79Ev,
  (VTBL_ENTRY)&_ZN5S34C73v80Ev,
  (VTBL_ENTRY)&_ZN5S34C73v81Ev,
  (VTBL_ENTRY)&_ZN5S34C73v82Ev,
  (VTBL_ENTRY)&_ZN5S34C73v83Ev,
  (VTBL_ENTRY)&_ZN5S34C73v84Ev,
  (VTBL_ENTRY)&_ZN5S34C73v85Ev,
  (VTBL_ENTRY)&_ZN5S34C73v86Ev,
  (VTBL_ENTRY)&_ZN5S34C73v87Ev,
  (VTBL_ENTRY)&_ZN5S34C73v88Ev,
  (VTBL_ENTRY)&_ZN5S34C73v89Ev,
};
extern VTBL_ENTRY _ZTI5S34C7[];
extern  VTBL_ENTRY _ZTV5S34C7[];
Class_Descriptor cd_S34C7 = {  "S34C7", // class name
  bases_S34C7, 1,
  &(vtc_S34C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI5S34C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S34C7),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S34C6  : S34C7 {
  unsigned int s34c6f0:1;
  unsigned int s34c6f1:1;
  unsigned int s34c6f2:1;
  ::S3350C17 s34c6f3;
  ::S3350C11 s34c6f4;
  ::S3350C5_nt s34c6f5;
  ::S287C27 s34c6f6;
  int s34c6f7[3];
  virtual  ~S34C6(); // _ZN5S34C6D1Ev
  virtual void  v90(); // _ZN5S34C63v90Ev
  virtual void  v91(); // _ZN5S34C63v91Ev
  virtual void  v92(); // _ZN5S34C63v92Ev
  virtual void  v93(); // _ZN5S34C63v93Ev
  virtual void  v94(); // _ZN5S34C63v94Ev
  virtual void  v95(); // _ZN5S34C63v95Ev
  virtual void  v96(); // _ZN5S34C63v96Ev
  virtual void  v97(); // _ZN5S34C63v97Ev
  virtual void  v98(); // _ZN5S34C63v98Ev
  virtual void  v99(); // _ZN5S34C63v99Ev
  virtual void  v100(); // _ZN5S34C64v100Ev
  virtual void  v101(); // _ZN5S34C64v101Ev
  virtual void  v102(); // _ZN5S34C64v102Ev
  virtual void  v103(); // _ZN5S34C64v103Ev
  virtual void  v104(); // _ZN5S34C64v104Ev
  virtual void  v105(); // _ZN5S34C64v105Ev
  virtual void  v106(); // _ZN5S34C64v106Ev
  virtual void  v107(); // _ZN5S34C64v107Ev
  virtual void  v108(); // _ZN5S34C64v108Ev
  virtual void  v109(); // _ZN5S34C64v109Ev
  S34C6(); // tgen
};
//SIG(-1 S34C6) C1{ BC2{ BC3{ vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 FC10{ BC11{ BC8}} FC12{ BC13{ BC8}} FC14{ BC15{ BC8}} FC16{ BC17{ BC8}} Fi[3]}


 S34C6 ::~S34C6(){ note_dtor("S34C6", this);}
void  S34C6 ::v90(){vfunc_called(this, "_ZN5S34C63v90Ev");}
void  S34C6 ::v91(){vfunc_called(this, "_ZN5S34C63v91Ev");}
void  S34C6 ::v92(){vfunc_called(this, "_ZN5S34C63v92Ev");}
void  S34C6 ::v93(){vfunc_called(this, "_ZN5S34C63v93Ev");}
void  S34C6 ::v94(){vfunc_called(this, "_ZN5S34C63v94Ev");}
void  S34C6 ::v95(){vfunc_called(this, "_ZN5S34C63v95Ev");}
void  S34C6 ::v96(){vfunc_called(this, "_ZN5S34C63v96Ev");}
void  S34C6 ::v97(){vfunc_called(this, "_ZN5S34C63v97Ev");}
void  S34C6 ::v98(){vfunc_called(this, "_ZN5S34C63v98Ev");}
void  S34C6 ::v99(){vfunc_called(this, "_ZN5S34C63v99Ev");}
void  S34C6 ::v100(){vfunc_called(this, "_ZN5S34C64v100Ev");}
void  S34C6 ::v101(){vfunc_called(this, "_ZN5S34C64v101Ev");}
void  S34C6 ::v102(){vfunc_called(this, "_ZN5S34C64v102Ev");}
void  S34C6 ::v103(){vfunc_called(this, "_ZN5S34C64v103Ev");}
void  S34C6 ::v104(){vfunc_called(this, "_ZN5S34C64v104Ev");}
void  S34C6 ::v105(){vfunc_called(this, "_ZN5S34C64v105Ev");}
void  S34C6 ::v106(){vfunc_called(this, "_ZN5S34C64v106Ev");}
void  S34C6 ::v107(){vfunc_called(this, "_ZN5S34C64v107Ev");}
void  S34C6 ::v108(){vfunc_called(this, "_ZN5S34C64v108Ev");}
void  S34C6 ::v109(){vfunc_called(this, "_ZN5S34C64v109Ev");}
S34C6 ::S34C6(){ note_ctor("S34C6", this);} // tgen

static void Test_S34C6()
{
  extern Class_Descriptor cd_S34C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S34C6, buf);
    S34C6 *dp, &lv = *(dp=new (buf) S34C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S34C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S34C6)");
    check_base_class_offset(lv, (S34C8*)(S34C7*), 0, "S34C6");
    check_base_class_offset(lv, (S34C7*), 0, "S34C6");
    set_bf_and_test(lv, s34c6f0, ABISELECT(188,132), 0, 1, 1, "S34C6");
    set_bf_and_test(lv, s34c6f1, ABISELECT(188,132), 1, 1, 1, "S34C6");
    set_bf_and_test(lv, s34c6f2, ABISELECT(188,132), 2, 1, 1, "S34C6");
    check_field_offset(lv, s34c6f3, ABISELECT(192,136), "S34C6.s34c6f3");
    check_field_offset(lv, s34c6f4, ABISELECT(208,148), "S34C6.s34c6f4");
    check_field_offset(lv, s34c6f5, ABISELECT(224,160), "S34C6.s34c6f5");
    check_field_offset(lv, s34c6f6, ABISELECT(240,172), "S34C6.s34c6f6");
    check_field_offset(lv, s34c6f7, ABISELECT(256,184), "S34C6.s34c6f7");
    test_class_info(&lv, &cd_S34C6);
    dp->~S34C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS34C6(Test_S34C6, "S34C6", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN5S34C6C1Ev();
extern void _ZN5S34C6D1Ev();
Name_Map name_map_S34C6[] = {
  NSPAIR(_ZN5S34C6C1Ev),
  NSPAIR(_ZN5S34C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S34C8;
extern VTBL_ENTRY _ZTI5S34C8[];
extern  VTBL_ENTRY _ZTV5S34C8[];
extern Class_Descriptor cd_S34C7;
extern VTBL_ENTRY _ZTI5S34C7[];
extern  VTBL_ENTRY _ZTV5S34C7[];
static Base_Class bases_S34C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S34C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S34C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S34C6[];
extern void _ZN5S34C6D1Ev();
extern void _ZN5S34C6D0Ev();
extern void _ZN5S34C82v4Ev();
extern void _ZN5S34C82v5Ev();
extern void _ZN5S34C82v6Ev();
extern void _ZN5S34C82v7Ev();
extern void _ZN5S34C82v8Ev();
extern void _ZN5S34C82v9Ev();
extern void _ZN5S34C83v10Ev();
extern void _ZN5S34C83v11Ev();
extern void _ZN5S34C83v12Ev();
extern void _ZN5S34C83v13Ev();
extern void _ZN5S34C83v14Ev();
extern void _ZN5S34C83v15Ev();
extern void _ZN5S34C83v16Ev();
extern void _ZN5S34C83v17Ev();
extern void _ZN5S34C83v18Ev();
extern void _ZN5S34C83v19Ev();
extern void _ZN5S34C83v20Ev();
extern void _ZN5S34C83v21Ev();
extern void _ZN5S34C83v22Ev();
extern void _ZN5S34C83v23Ev();
extern void _ZN5S34C83v24Ev();
extern void _ZN5S34C83v25Ev();
extern void _ZN5S34C83v26Ev();
extern void _ZN5S34C83v27Ev();
extern void _ZN5S34C83v28Ev();
extern void _ZN5S34C83v29Ev();
extern void _ZN5S34C83v30Ev();
extern void _ZN5S34C83v31Ev();
extern void _ZN5S34C83v32Ev();
extern void _ZN5S34C83v33Ev();
extern void _ZN5S34C83v34Ev();
extern void _ZN5S34C83v35Ev();
extern void _ZN5S34C83v36Ev();
extern void _ZN5S34C83v37Ev();
extern void _ZN5S34C83v38Ev();
extern void _ZN5S34C83v39Ev();
extern void _ZN5S34C83v40Ev();
extern void _ZN5S34C83v41Ev();
extern void _ZN5S34C83v42Ev();
extern void _ZN5S34C83v43Ev();
extern void _ZN5S34C83v44Ev();
extern void _ZN5S34C83v45Ev();
extern void _ZN5S34C83v46Ev();
extern void _ZN5S34C83v47Ev();
extern void _ZN5S34C83v48Ev();
extern void _ZN5S34C83v49Ev();
extern void _ZN5S34C83v50Ev();
extern void _ZN5S34C83v51Ev();
extern void _ZN5S34C83v52Ev();
extern void _ZN5S34C83v53Ev();
extern void _ZN5S34C83v54Ev();
extern void _ZN5S34C83v55Ev();
extern void _ZN5S34C83v56Ev();
extern void _ZN5S34C83v57Ev();
extern void _ZN5S34C83v58Ev();
extern void _ZN5S34C83v59Ev();
extern void _ZN5S34C83v60Ev();
extern void _ZN5S34C83v61Ev();
extern void _ZN5S34C83v62Ev();
extern void _ZN5S34C83v63Ev();
extern void _ZN5S34C83v64Ev();
extern void _ZN5S34C83v65Ev();
extern void _ZN5S34C83v66Ev();
extern void _ZN5S34C83v67Ev();
extern void _ZN5S34C73v68Ev();
extern void _ZN5S34C73v69Ev();
extern void _ZN5S34C73v70Ev();
extern void _ZN5S34C73v71Ev();
extern void _ZN5S34C73v72Ev();
extern void _ZN5S34C73v73Ev();
extern void _ZN5S34C73v74Ev();
extern void _ZN5S34C73v75Ev();
extern void _ZN5S34C73v76Ev();
extern void _ZN5S34C73v77Ev();
extern void _ZN5S34C73v78Ev();
extern void _ZN5S34C73v79Ev();
extern void _ZN5S34C73v80Ev();
extern void _ZN5S34C73v81Ev();
extern void _ZN5S34C73v82Ev();
extern void _ZN5S34C73v83Ev();
extern void _ZN5S34C73v84Ev();
extern void _ZN5S34C73v85Ev();
extern void _ZN5S34C73v86Ev();
extern void _ZN5S34C73v87Ev();
extern void _ZN5S34C73v88Ev();
extern void _ZN5S34C73v89Ev();
extern void _ZN5S34C63v90Ev();
extern void _ZN5S34C63v91Ev();
extern void _ZN5S34C63v92Ev();
extern void _ZN5S34C63v93Ev();
extern void _ZN5S34C63v94Ev();
extern void _ZN5S34C63v95Ev();
extern void _ZN5S34C63v96Ev();
extern void _ZN5S34C63v97Ev();
extern void _ZN5S34C63v98Ev();
extern void _ZN5S34C63v99Ev();
extern void _ZN5S34C64v100Ev();
extern void _ZN5S34C64v101Ev();
extern void _ZN5S34C64v102Ev();
extern void _ZN5S34C64v103Ev();
extern void _ZN5S34C64v104Ev();
extern void _ZN5S34C64v105Ev();
extern void _ZN5S34C64v106Ev();
extern void _ZN5S34C64v107Ev();
extern void _ZN5S34C64v108Ev();
extern void _ZN5S34C64v109Ev();
static  VTBL_ENTRY vtc_S34C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S34C6[0]),
  (VTBL_ENTRY)&_ZN5S34C6D1Ev,
  (VTBL_ENTRY)&_ZN5S34C6D0Ev,
  (VTBL_ENTRY)&_ZN5S34C82v4Ev,
  (VTBL_ENTRY)&_ZN5S34C82v5Ev,
  (VTBL_ENTRY)&_ZN5S34C82v6Ev,
  (VTBL_ENTRY)&_ZN5S34C82v7Ev,
  (VTBL_ENTRY)&_ZN5S34C82v8Ev,
  (VTBL_ENTRY)&_ZN5S34C82v9Ev,
  (VTBL_ENTRY)&_ZN5S34C83v10Ev,
  (VTBL_ENTRY)&_ZN5S34C83v11Ev,
  (VTBL_ENTRY)&_ZN5S34C83v12Ev,
  (VTBL_ENTRY)&_ZN5S34C83v13Ev,
  (VTBL_ENTRY)&_ZN5S34C83v14Ev,
  (VTBL_ENTRY)&_ZN5S34C83v15Ev,
  (VTBL_ENTRY)&_ZN5S34C83v16Ev,
  (VTBL_ENTRY)&_ZN5S34C83v17Ev,
  (VTBL_ENTRY)&_ZN5S34C83v18Ev,
  (VTBL_ENTRY)&_ZN5S34C83v19Ev,
  (VTBL_ENTRY)&_ZN5S34C83v20Ev,
  (VTBL_ENTRY)&_ZN5S34C83v21Ev,
  (VTBL_ENTRY)&_ZN5S34C83v22Ev,
  (VTBL_ENTRY)&_ZN5S34C83v23Ev,
  (VTBL_ENTRY)&_ZN5S34C83v24Ev,
  (VTBL_ENTRY)&_ZN5S34C83v25Ev,
  (VTBL_ENTRY)&_ZN5S34C83v26Ev,
  (VTBL_ENTRY)&_ZN5S34C83v27Ev,
  (VTBL_ENTRY)&_ZN5S34C83v28Ev,
  (VTBL_ENTRY)&_ZN5S34C83v29Ev,
  (VTBL_ENTRY)&_ZN5S34C83v30Ev,
  (VTBL_ENTRY)&_ZN5S34C83v31Ev,
  (VTBL_ENTRY)&_ZN5S34C83v32Ev,
  (VTBL_ENTRY)&_ZN5S34C83v33Ev,
  (VTBL_ENTRY)&_ZN5S34C83v34Ev,
  (VTBL_ENTRY)&_ZN5S34C83v35Ev,
  (VTBL_ENTRY)&_ZN5S34C83v36Ev,
  (VTBL_ENTRY)&_ZN5S34C83v37Ev,
  (VTBL_ENTRY)&_ZN5S34C83v38Ev,
  (VTBL_ENTRY)&_ZN5S34C83v39Ev,
  (VTBL_ENTRY)&_ZN5S34C83v40Ev,
  (VTBL_ENTRY)&_ZN5S34C83v41Ev,
  (VTBL_ENTRY)&_ZN5S34C83v42Ev,
  (VTBL_ENTRY)&_ZN5S34C83v43Ev,
  (VTBL_ENTRY)&_ZN5S34C83v44Ev,
  (VTBL_ENTRY)&_ZN5S34C83v45Ev,
  (VTBL_ENTRY)&_ZN5S34C83v46Ev,
  (VTBL_ENTRY)&_ZN5S34C83v47Ev,
  (VTBL_ENTRY)&_ZN5S34C83v48Ev,
  (VTBL_ENTRY)&_ZN5S34C83v49Ev,
  (VTBL_ENTRY)&_ZN5S34C83v50Ev,
  (VTBL_ENTRY)&_ZN5S34C83v51Ev,
  (VTBL_ENTRY)&_ZN5S34C83v52Ev,
  (VTBL_ENTRY)&_ZN5S34C83v53Ev,
  (VTBL_ENTRY)&_ZN5S34C83v54Ev,
  (VTBL_ENTRY)&_ZN5S34C83v55Ev,
  (VTBL_ENTRY)&_ZN5S34C83v56Ev,
  (VTBL_ENTRY)&_ZN5S34C83v57Ev,
  (VTBL_ENTRY)&_ZN5S34C83v58Ev,
  (VTBL_ENTRY)&_ZN5S34C83v59Ev,
  (VTBL_ENTRY)&_ZN5S34C83v60Ev,
  (VTBL_ENTRY)&_ZN5S34C83v61Ev,
  (VTBL_ENTRY)&_ZN5S34C83v62Ev,
  (VTBL_ENTRY)&_ZN5S34C83v63Ev,
  (VTBL_ENTRY)&_ZN5S34C83v64Ev,
  (VTBL_ENTRY)&_ZN5S34C83v65Ev,
  (VTBL_ENTRY)&_ZN5S34C83v66Ev,
  (VTBL_ENTRY)&_ZN5S34C83v67Ev,
  (VTBL_ENTRY)&_ZN5S34C73v68Ev,
  (VTBL_ENTRY)&_ZN5S34C73v69Ev,
  (VTBL_ENTRY)&_ZN5S34C73v70Ev,
  (VTBL_ENTRY)&_ZN5S34C73v71Ev,
  (VTBL_ENTRY)&_ZN5S34C73v72Ev,
  (VTBL_ENTRY)&_ZN5S34C73v73Ev,
  (VTBL_ENTRY)&_ZN5S34C73v74Ev,
  (VTBL_ENTRY)&_ZN5S34C73v75Ev,
  (VTBL_ENTRY)&_ZN5S34C73v76Ev,
  (VTBL_ENTRY)&_ZN5S34C73v77Ev,
  (VTBL_ENTRY)&_ZN5S34C73v78Ev,
  (VTBL_ENTRY)&_ZN5S34C73v79Ev,
  (VTBL_ENTRY)&_ZN5S34C73v80Ev,
  (VTBL_ENTRY)&_ZN5S34C73v81Ev,
  (VTBL_ENTRY)&_ZN5S34C73v82Ev,
  (VTBL_ENTRY)&_ZN5S34C73v83Ev,
  (VTBL_ENTRY)&_ZN5S34C73v84Ev,
  (VTBL_ENTRY)&_ZN5S34C73v85Ev,
  (VTBL_ENTRY)&_ZN5S34C73v86Ev,
  (VTBL_ENTRY)&_ZN5S34C73v87Ev,
  (VTBL_ENTRY)&_ZN5S34C73v88Ev,
  (VTBL_ENTRY)&_ZN5S34C73v89Ev,
  (VTBL_ENTRY)&_ZN5S34C63v90Ev,
  (VTBL_ENTRY)&_ZN5S34C63v91Ev,
  (VTBL_ENTRY)&_ZN5S34C63v92Ev,
  (VTBL_ENTRY)&_ZN5S34C63v93Ev,
  (VTBL_ENTRY)&_ZN5S34C63v94Ev,
  (VTBL_ENTRY)&_ZN5S34C63v95Ev,
  (VTBL_ENTRY)&_ZN5S34C63v96Ev,
  (VTBL_ENTRY)&_ZN5S34C63v97Ev,
  (VTBL_ENTRY)&_ZN5S34C63v98Ev,
  (VTBL_ENTRY)&_ZN5S34C63v99Ev,
  (VTBL_ENTRY)&_ZN5S34C64v100Ev,
  (VTBL_ENTRY)&_ZN5S34C64v101Ev,
  (VTBL_ENTRY)&_ZN5S34C64v102Ev,
  (VTBL_ENTRY)&_ZN5S34C64v103Ev,
  (VTBL_ENTRY)&_ZN5S34C64v104Ev,
  (VTBL_ENTRY)&_ZN5S34C64v105Ev,
  (VTBL_ENTRY)&_ZN5S34C64v106Ev,
  (VTBL_ENTRY)&_ZN5S34C64v107Ev,
  (VTBL_ENTRY)&_ZN5S34C64v108Ev,
  (VTBL_ENTRY)&_ZN5S34C64v109Ev,
};
extern VTBL_ENTRY _ZTI5S34C6[];
extern  VTBL_ENTRY _ZTV5S34C6[];
Class_Descriptor cd_S34C6 = {  "S34C6", // class name
  bases_S34C6, 2,
  &(vtc_S34C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI5S34C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S34C6),110, //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  S34C5  : S34C6 {
  ::S3350C4_nt s34c5f0;
  unsigned int s34c5f1:1;
  ::S287C23 s34c5f2;
  virtual  ~S34C5(); // _ZN5S34C5D1Ev
  virtual void  v110(); // _ZN5S34C54v110Ev
  virtual void  v111(); // _ZN5S34C54v111Ev
  virtual void  v112(); // _ZN5S34C54v112Ev
  virtual void  v113(); // _ZN5S34C54v113Ev
  S34C5(); // tgen
};
//SIG(-1 S34C5) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 Fi:1 Fi:1 Fi:1 FC11{ BC12{ BC9}} FC13{ BC14{ BC9}} FC15{ BC16{ BC9}} FC17{ BC18{ BC9}} Fi[3]} vd v1 v2 v3 v4 FC5 Fi:1 FC19{ BC20{ BC9}}}


 S34C5 ::~S34C5(){ note_dtor("S34C5", this);}
void  S34C5 ::v110(){vfunc_called(this, "_ZN5S34C54v110Ev");}
void  S34C5 ::v111(){vfunc_called(this, "_ZN5S34C54v111Ev");}
void  S34C5 ::v112(){vfunc_called(this, "_ZN5S34C54v112Ev");}
void  S34C5 ::v113(){vfunc_called(this, "_ZN5S34C54v113Ev");}
S34C5 ::S34C5(){ note_ctor("S34C5", this);} // tgen

static void Test_S34C5()
{
  extern Class_Descriptor cd_S34C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,56)];
    init_test(&cd_S34C5, buf);
    S34C5 *dp, &lv = *(dp=new (buf) S34C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,220), "sizeof(S34C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S34C5)");
    check_base_class_offset(lv, (S34C8*)(S34C7*)(S34C6*), 0, "S34C5");
    check_base_class_offset(lv, (S34C7*)(S34C6*), 0, "S34C5");
    check_base_class_offset(lv, (S34C6*), 0, "S34C5");
    check_field_offset(lv, s34c5f0, ABISELECT(268,196), "S34C5.s34c5f0");
    set_bf_and_test(lv, s34c5f1, ABISELECT(276,204), 0, 1, 1, "S34C5");
    check_field_offset(lv, s34c5f2, ABISELECT(280,208), "S34C5.s34c5f2");
    test_class_info(&lv, &cd_S34C5);
    dp->~S34C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS34C5(Test_S34C5, "S34C5", ABISELECT(296,220));

#else // __cplusplus

extern void _ZN5S34C5C1Ev();
extern void _ZN5S34C5D1Ev();
Name_Map name_map_S34C5[] = {
  NSPAIR(_ZN5S34C5C1Ev),
  NSPAIR(_ZN5S34C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S34C8;
extern VTBL_ENTRY _ZTI5S34C8[];
extern  VTBL_ENTRY _ZTV5S34C8[];
extern Class_Descriptor cd_S34C7;
extern VTBL_ENTRY _ZTI5S34C7[];
extern  VTBL_ENTRY _ZTV5S34C7[];
extern Class_Descriptor cd_S34C6;
extern VTBL_ENTRY _ZTI5S34C6[];
extern  VTBL_ENTRY _ZTV5S34C6[];
static Base_Class bases_S34C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S34C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S34C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S34C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S34C5[];
extern void _ZN5S34C5D1Ev();
extern void _ZN5S34C5D0Ev();
extern void _ZN5S34C82v4Ev();
extern void _ZN5S34C82v5Ev();
extern void _ZN5S34C82v6Ev();
extern void _ZN5S34C82v7Ev();
extern void _ZN5S34C82v8Ev();
extern void _ZN5S34C82v9Ev();
extern void _ZN5S34C83v10Ev();
extern void _ZN5S34C83v11Ev();
extern void _ZN5S34C83v12Ev();
extern void _ZN5S34C83v13Ev();
extern void _ZN5S34C83v14Ev();
extern void _ZN5S34C83v15Ev();
extern void _ZN5S34C83v16Ev();
extern void _ZN5S34C83v17Ev();
extern void _ZN5S34C83v18Ev();
extern void _ZN5S34C83v19Ev();
extern void _ZN5S34C83v20Ev();
extern void _ZN5S34C83v21Ev();
extern void _ZN5S34C83v22Ev();
extern void _ZN5S34C83v23Ev();
extern void _ZN5S34C83v24Ev();
extern void _ZN5S34C83v25Ev();
extern void _ZN5S34C83v26Ev();
extern void _ZN5S34C83v27Ev();
extern void _ZN5S34C83v28Ev();
extern void _ZN5S34C83v29Ev();
extern void _ZN5S34C83v30Ev();
extern void _ZN5S34C83v31Ev();
extern void _ZN5S34C83v32Ev();
extern void _ZN5S34C83v33Ev();
extern void _ZN5S34C83v34Ev();
extern void _ZN5S34C83v35Ev();
extern void _ZN5S34C83v36Ev();
extern void _ZN5S34C83v37Ev();
extern void _ZN5S34C83v38Ev();
extern void _ZN5S34C83v39Ev();
extern void _ZN5S34C83v40Ev();
extern void _ZN5S34C83v41Ev();
extern void _ZN5S34C83v42Ev();
extern void _ZN5S34C83v43Ev();
extern void _ZN5S34C83v44Ev();
extern void _ZN5S34C83v45Ev();
extern void _ZN5S34C83v46Ev();
extern void _ZN5S34C83v47Ev();
extern void _ZN5S34C83v48Ev();
extern void _ZN5S34C83v49Ev();
extern void _ZN5S34C83v50Ev();
extern void _ZN5S34C83v51Ev();
extern void _ZN5S34C83v52Ev();
extern void _ZN5S34C83v53Ev();
extern void _ZN5S34C83v54Ev();
extern void _ZN5S34C83v55Ev();
extern void _ZN5S34C83v56Ev();
extern void _ZN5S34C83v57Ev();
extern void _ZN5S34C83v58Ev();
extern void _ZN5S34C83v59Ev();
extern void _ZN5S34C83v60Ev();
extern void _ZN5S34C83v61Ev();
extern void _ZN5S34C83v62Ev();
extern void _ZN5S34C83v63Ev();
extern void _ZN5S34C83v64Ev();
extern void _ZN5S34C83v65Ev();
extern void _ZN5S34C83v66Ev();
extern void _ZN5S34C83v67Ev();
extern void _ZN5S34C73v68Ev();
extern void _ZN5S34C73v69Ev();
extern void _ZN5S34C73v70Ev();
extern void _ZN5S34C73v71Ev();
extern void _ZN5S34C73v72Ev();
extern void _ZN5S34C73v73Ev();
extern void _ZN5S34C73v74Ev();
extern void _ZN5S34C73v75Ev();
extern void _ZN5S34C73v76Ev();
extern void _ZN5S34C73v77Ev();
extern void _ZN5S34C73v78Ev();
extern void _ZN5S34C73v79Ev();
extern void _ZN5S34C73v80Ev();
extern void _ZN5S34C73v81Ev();
extern void _ZN5S34C73v82Ev();
extern void _ZN5S34C73v83Ev();
extern void _ZN5S34C73v84Ev();
extern void _ZN5S34C73v85Ev();
extern void _ZN5S34C73v86Ev();
extern void _ZN5S34C73v87Ev();
extern void _ZN5S34C73v88Ev();
extern void _ZN5S34C73v89Ev();
extern void _ZN5S34C63v90Ev();
extern void _ZN5S34C63v91Ev();
extern void _ZN5S34C63v92Ev();
extern void _ZN5S34C63v93Ev();
extern void _ZN5S34C63v94Ev();
extern void _ZN5S34C63v95Ev();
extern void _ZN5S34C63v96Ev();
extern void _ZN5S34C63v97Ev();
extern void _ZN5S34C63v98Ev();
extern void _ZN5S34C63v99Ev();
extern void _ZN5S34C64v100Ev();
extern void _ZN5S34C64v101Ev();
extern void _ZN5S34C64v102Ev();
extern void _ZN5S34C64v103Ev();
extern void _ZN5S34C64v104Ev();
extern void _ZN5S34C64v105Ev();
extern void _ZN5S34C64v106Ev();
extern void _ZN5S34C64v107Ev();
extern void _ZN5S34C64v108Ev();
extern void _ZN5S34C64v109Ev();
extern void _ZN5S34C54v110Ev();
extern void _ZN5S34C54v111Ev();
extern void _ZN5S34C54v112Ev();
extern void _ZN5S34C54v113Ev();
static  VTBL_ENTRY vtc_S34C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S34C5[0]),
  (VTBL_ENTRY)&_ZN5S34C5D1Ev,
  (VTBL_ENTRY)&_ZN5S34C5D0Ev,
  (VTBL_ENTRY)&_ZN5S34C82v4Ev,
  (VTBL_ENTRY)&_ZN5S34C82v5Ev,
  (VTBL_ENTRY)&_ZN5S34C82v6Ev,
  (VTBL_ENTRY)&_ZN5S34C82v7Ev,
  (VTBL_ENTRY)&_ZN5S34C82v8Ev,
  (VTBL_ENTRY)&_ZN5S34C82v9Ev,
  (VTBL_ENTRY)&_ZN5S34C83v10Ev,
  (VTBL_ENTRY)&_ZN5S34C83v11Ev,
  (VTBL_ENTRY)&_ZN5S34C83v12Ev,
  (VTBL_ENTRY)&_ZN5S34C83v13Ev,
  (VTBL_ENTRY)&_ZN5S34C83v14Ev,
  (VTBL_ENTRY)&_ZN5S34C83v15Ev,
  (VTBL_ENTRY)&_ZN5S34C83v16Ev,
  (VTBL_ENTRY)&_ZN5S34C83v17Ev,
  (VTBL_ENTRY)&_ZN5S34C83v18Ev,
  (VTBL_ENTRY)&_ZN5S34C83v19Ev,
  (VTBL_ENTRY)&_ZN5S34C83v20Ev,
  (VTBL_ENTRY)&_ZN5S34C83v21Ev,
  (VTBL_ENTRY)&_ZN5S34C83v22Ev,
  (VTBL_ENTRY)&_ZN5S34C83v23Ev,
  (VTBL_ENTRY)&_ZN5S34C83v24Ev,
  (VTBL_ENTRY)&_ZN5S34C83v25Ev,
  (VTBL_ENTRY)&_ZN5S34C83v26Ev,
  (VTBL_ENTRY)&_ZN5S34C83v27Ev,
  (VTBL_ENTRY)&_ZN5S34C83v28Ev,
  (VTBL_ENTRY)&_ZN5S34C83v29Ev,
  (VTBL_ENTRY)&_ZN5S34C83v30Ev,
  (VTBL_ENTRY)&_ZN5S34C83v31Ev,
  (VTBL_ENTRY)&_ZN5S34C83v32Ev,
  (VTBL_ENTRY)&_ZN5S34C83v33Ev,
  (VTBL_ENTRY)&_ZN5S34C83v34Ev,
  (VTBL_ENTRY)&_ZN5S34C83v35Ev,
  (VTBL_ENTRY)&_ZN5S34C83v36Ev,
  (VTBL_ENTRY)&_ZN5S34C83v37Ev,
  (VTBL_ENTRY)&_ZN5S34C83v38Ev,
  (VTBL_ENTRY)&_ZN5S34C83v39Ev,
  (VTBL_ENTRY)&_ZN5S34C83v40Ev,
  (VTBL_ENTRY)&_ZN5S34C83v41Ev,
  (VTBL_ENTRY)&_ZN5S34C83v42Ev,
  (VTBL_ENTRY)&_ZN5S34C83v43Ev,
  (VTBL_ENTRY)&_ZN5S34C83v44Ev,
  (VTBL_ENTRY)&_ZN5S34C83v45Ev,
  (VTBL_ENTRY)&_ZN5S34C83v46Ev,
  (VTBL_ENTRY)&_ZN5S34C83v47Ev,
  (VTBL_ENTRY)&_ZN5S34C83v48Ev,
  (VTBL_ENTRY)&_ZN5S34C83v49Ev,
  (VTBL_ENTRY)&_ZN5S34C83v50Ev,
  (VTBL_ENTRY)&_ZN5S34C83v51Ev,
  (VTBL_ENTRY)&_ZN5S34C83v52Ev,
  (VTBL_ENTRY)&_ZN5S34C83v53Ev,
  (VTBL_ENTRY)&_ZN5S34C83v54Ev,
  (VTBL_ENTRY)&_ZN5S34C83v55Ev,
  (VTBL_ENTRY)&_ZN5S34C83v56Ev,
  (VTBL_ENTRY)&_ZN5S34C83v57Ev,
  (VTBL_ENTRY)&_ZN5S34C83v58Ev,
  (VTBL_ENTRY)&_ZN5S34C83v59Ev,
  (VTBL_ENTRY)&_ZN5S34C83v60Ev,
  (VTBL_ENTRY)&_ZN5S34C83v61Ev,
  (VTBL_ENTRY)&_ZN5S34C83v62Ev,
  (VTBL_ENTRY)&_ZN5S34C83v63Ev,
  (VTBL_ENTRY)&_ZN5S34C83v64Ev,
  (VTBL_ENTRY)&_ZN5S34C83v65Ev,
  (VTBL_ENTRY)&_ZN5S34C83v66Ev,
  (VTBL_ENTRY)&_ZN5S34C83v67Ev,
  (VTBL_ENTRY)&_ZN5S34C73v68Ev,
  (VTBL_ENTRY)&_ZN5S34C73v69Ev,
  (VTBL_ENTRY)&_ZN5S34C73v70Ev,
  (VTBL_ENTRY)&_ZN5S34C73v71Ev,
  (VTBL_ENTRY)&_ZN5S34C73v72Ev,
  (VTBL_ENTRY)&_ZN5S34C73v73Ev,
  (VTBL_ENTRY)&_ZN5S34C73v74Ev,
  (VTBL_ENTRY)&_ZN5S34C73v75Ev,
  (VTBL_ENTRY)&_ZN5S34C73v76Ev,
  (VTBL_ENTRY)&_ZN5S34C73v77Ev,
  (VTBL_ENTRY)&_ZN5S34C73v78Ev,
  (VTBL_ENTRY)&_ZN5S34C73v79Ev,
  (VTBL_ENTRY)&_ZN5S34C73v80Ev,
  (VTBL_ENTRY)&_ZN5S34C73v81Ev,
  (VTBL_ENTRY)&_ZN5S34C73v82Ev,
  (VTBL_ENTRY)&_ZN5S34C73v83Ev,
  (VTBL_ENTRY)&_ZN5S34C73v84Ev,
  (VTBL_ENTRY)&_ZN5S34C73v85Ev,
  (VTBL_ENTRY)&_ZN5S34C73v86Ev,
  (VTBL_ENTRY)&_ZN5S34C73v87Ev,
  (VTBL_ENTRY)&_ZN5S34C73v88Ev,
  (VTBL_ENTRY)&_ZN5S34C73v89Ev,
  (VTBL_ENTRY)&_ZN5S34C63v90Ev,
  (VTBL_ENTRY)&_ZN5S34C63v91Ev,
  (VTBL_ENTRY)&_ZN5S34C63v92Ev,
  (VTBL_ENTRY)&_ZN5S34C63v93Ev,
  (VTBL_ENTRY)&_ZN5S34C63v94Ev,
  (VTBL_ENTRY)&_ZN5S34C63v95Ev,
  (VTBL_ENTRY)&_ZN5S34C63v96Ev,
  (VTBL_ENTRY)&_ZN5S34C63v97Ev,
  (VTBL_ENTRY)&_ZN5S34C63v98Ev,
  (VTBL_ENTRY)&_ZN5S34C63v99Ev,
  (VTBL_ENTRY)&_ZN5S34C64v100Ev,
  (VTBL_ENTRY)&_ZN5S34C64v101Ev,
  (VTBL_ENTRY)&_ZN5S34C64v102Ev,
  (VTBL_ENTRY)&_ZN5S34C64v103Ev,
  (VTBL_ENTRY)&_ZN5S34C64v104Ev,
  (VTBL_ENTRY)&_ZN5S34C64v105Ev,
  (VTBL_ENTRY)&_ZN5S34C64v106Ev,
  (VTBL_ENTRY)&_ZN5S34C64v107Ev,
  (VTBL_ENTRY)&_ZN5S34C64v108Ev,
  (VTBL_ENTRY)&_ZN5S34C64v109Ev,
  (VTBL_ENTRY)&_ZN5S34C54v110Ev,
  (VTBL_ENTRY)&_ZN5S34C54v111Ev,
  (VTBL_ENTRY)&_ZN5S34C54v112Ev,
  (VTBL_ENTRY)&_ZN5S34C54v113Ev,
};
extern VTBL_ENTRY _ZTI5S34C5[];
extern  VTBL_ENTRY _ZTV5S34C5[];
Class_Descriptor cd_S34C5 = {  "S34C5", // class name
  bases_S34C5, 3,
  &(vtc_S34C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,220), // object size
  NSPAIRA(_ZTI5S34C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S34C5),114, //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  S34C4  : S34C5 {
  int s34c4f0;
  unsigned int s34c4f1:1;
  virtual  ~S34C4(); // _ZN5S34C4D1Ev
  virtual void  v114(); // _ZN5S34C44v114Ev
  virtual void  v115(); // _ZN5S34C44v115Ev
  virtual void  v116(); // _ZN5S34C44v116Ev
  virtual void  v117(); // _ZN5S34C44v117Ev
  virtual void  v118(); // _ZN5S34C44v118Ev
  virtual void  v119(); // _ZN5S34C44v119Ev
  virtual void  v120(); // _ZN5S34C44v120Ev
  virtual void  v121(); // _ZN5S34C44v121Ev
  S34C4(); // tgen
};
//SIG(-1 S34C4) C1{ BC2{ BC3{ BC4{ BC5{ vd v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 Fi[2] Fp Fi[2] FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} FC7 FC11{ m} FC7 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 Fi:1 Fi:1 Fi:1 FC12{ BC13{ BC10}} FC14{ BC15{ BC10}} FC16{ BC17{ BC10}} FC18{ BC19{ BC10}} Fi[3]} vd v115 v116 v117 v118 FC6 Fi:1 FC20{ BC21{ BC10}}} vd v1 v2 v3 v4 v5 v6 v7 v8 Fi Fi:1}


 S34C4 ::~S34C4(){ note_dtor("S34C4", this);}
void  S34C4 ::v114(){vfunc_called(this, "_ZN5S34C44v114Ev");}
void  S34C4 ::v115(){vfunc_called(this, "_ZN5S34C44v115Ev");}
void  S34C4 ::v116(){vfunc_called(this, "_ZN5S34C44v116Ev");}
void  S34C4 ::v117(){vfunc_called(this, "_ZN5S34C44v117Ev");}
void  S34C4 ::v118(){vfunc_called(this, "_ZN5S34C44v118Ev");}
void  S34C4 ::v119(){vfunc_called(this, "_ZN5S34C44v119Ev");}
void  S34C4 ::v120(){vfunc_called(this, "_ZN5S34C44v120Ev");}
void  S34C4 ::v121(){vfunc_called(this, "_ZN5S34C44v121Ev");}
S34C4 ::S34C4(){ note_ctor("S34C4", this);} // tgen

static void Test_S34C4()
{
  extern Class_Descriptor cd_S34C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(39,58)];
    init_test(&cd_S34C4, buf);
    S34C4 *dp, &lv = *(dp=new (buf) S34C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,228), "sizeof(S34C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S34C4)");
    check_base_class_offset(lv, (S34C8*)(S34C7*)(S34C6*)(S34C5*), 0, "S34C4");
    check_base_class_offset(lv, (S34C7*)(S34C6*)(S34C5*), 0, "S34C4");
    check_base_class_offset(lv, (S34C6*)(S34C5*), 0, "S34C4");
    check_base_class_offset(lv, (S34C5*), 0, "S34C4");
    check_field_offset(lv, s34c4f0, ABISELECT(296,220), "S34C4.s34c4f0");
    set_bf_and_test(lv, s34c4f1, ABISELECT(300,224), 0, 1, 1, "S34C4");
    test_class_info(&lv, &cd_S34C4);
    dp->~S34C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS34C4(Test_S34C4, "S34C4", ABISELECT(304,228));

#else // __cplusplus

extern void _ZN5S34C4C1Ev();
extern void _ZN5S34C4D1Ev();
Name_Map name_map_S34C4[] = {
  NSPAIR(_ZN5S34C4C1Ev),
  NSPAIR(_ZN5S34C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S34C8;
extern VTBL_ENTRY _ZTI5S34C8[];
extern  VTBL_ENTRY _ZTV5S34C8[];
extern Class_Descriptor cd_S34C7;
extern VTBL_ENTRY _ZTI5S34C7[];
extern  VTBL_ENTRY _ZTV5S34C7[];
extern Class_Descriptor cd_S34C6;
extern VTBL_ENTRY _ZTI5S34C6[];
extern  VTBL_ENTRY _ZTV5S34C6[];
extern Class_Descriptor cd_S34C5;
extern VTBL_ENTRY _ZTI5S34C5[];
extern  VTBL_ENTRY _ZTV5S34C5[];
static Base_Class bases_S34C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S34C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S34C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S34C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S34C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S34C4[];
extern void _ZN5S34C4D1Ev();
extern void _ZN5S34C4D0Ev();
extern void _ZN5S34C82v4Ev();
extern void _ZN5S34C82v5Ev();
extern void _ZN5S34C82v6Ev();
extern void _ZN5S34C82v7Ev();
extern void _ZN5S34C82v8Ev();
extern void _ZN5S34C82v9Ev();
extern void _ZN5S34C83v10Ev();
extern void _ZN5S34C83v11Ev();
extern void _ZN5S34C83v12Ev();
extern void _ZN5S34C83v13Ev();
extern void _ZN5S34C83v14Ev();
extern void _ZN5S34C83v15Ev();
extern void _ZN5S34C83v16Ev();
extern void _ZN5S34C83v17Ev();
extern void _ZN5S34C83v18Ev();
extern void _ZN5S34C83v19Ev();
extern void _ZN5S34C83v20Ev();
extern void _ZN5S34C83v21Ev();
extern void _ZN5S34C83v22Ev();
extern void _ZN5S34C83v23Ev();
extern void _ZN5S34C83v24Ev();
extern void _ZN5S34C83v25Ev();
extern void _ZN5S34C83v26Ev();
extern void _ZN5S34C83v27Ev();
extern void _ZN5S34C83v28Ev();
extern void _ZN5S34C83v29Ev();
extern void _ZN5S34C83v30Ev();
extern void _ZN5S34C83v31Ev();
extern void _ZN5S34C83v32Ev();
extern void _ZN5S34C83v33Ev();
extern void _ZN5S34C83v34Ev();
extern void _ZN5S34C83v35Ev();
extern void _ZN5S34C83v36Ev();
extern void _ZN5S34C83v37Ev();
extern void _ZN5S34C83v38Ev();
extern void _ZN5S34C83v39Ev();
extern void _ZN5S34C83v40Ev();
extern void _ZN5S34C83v41Ev();
extern void _ZN5S34C83v42Ev();
extern void _ZN5S34C83v43Ev();
extern void _ZN5S34C83v44Ev();
extern void _ZN5S34C83v45Ev();
extern void _ZN5S34C83v46Ev();
extern void _ZN5S34C83v47Ev();
extern void _ZN5S34C83v48Ev();
extern void _ZN5S34C83v49Ev();
extern void _ZN5S34C83v50Ev();
extern void _ZN5S34C83v51Ev();
extern void _ZN5S34C83v52Ev();
extern void _ZN5S34C83v53Ev();
extern void _ZN5S34C83v54Ev();
extern void _ZN5S34C83v55Ev();
extern void _ZN5S34C83v56Ev();
extern void _ZN5S34C83v57Ev();
extern void _ZN5S34C83v58Ev();
extern void _ZN5S34C83v59Ev();
extern void _ZN5S34C83v60Ev();
extern void _ZN5S34C83v61Ev();
extern void _ZN5S34C83v62Ev();
extern void _ZN5S34C83v63Ev();
extern void _ZN5S34C83v64Ev();
extern void _ZN5S34C83v65Ev();
extern void _ZN5S34C83v66Ev();
extern void _ZN5S34C83v67Ev();
extern void _ZN5S34C73v68Ev();
extern void _ZN5S34C73v69Ev();
extern void _ZN5S34C73v70Ev();
extern void _ZN5S34C73v71Ev();
extern void _ZN5S34C73v72Ev();
extern void _ZN5S34C73v73Ev();
extern void _ZN5S34C73v74Ev();
extern void _ZN5S34C73v75Ev();
extern void _ZN5S34C73v76Ev();
extern void _ZN5S34C73v77Ev();
extern void _ZN5S34C73v78Ev();
extern void _ZN5S34C73v79Ev();
extern void _ZN5S34C73v80Ev();
extern void _ZN5S34C73v81Ev();
extern void _ZN5S34C73v82Ev();
extern void _ZN5S34C73v83Ev();
extern void _ZN5S34C73v84Ev();
extern void _ZN5S34C73v85Ev();
extern void _ZN5S34C73v86Ev();
extern void _ZN5S34C73v87Ev();
extern void _ZN5S34C73v88Ev();
extern void _ZN5S34C73v89Ev();
extern void _ZN5S34C63v90Ev();
extern void _ZN5S34C63v91Ev();
extern void _ZN5S34C63v92Ev();
extern void _ZN5S34C63v93Ev();
extern void _ZN5S34C63v94Ev();
extern void _ZN5S34C63v95Ev();
extern void _ZN5S34C63v96Ev();
extern void _ZN5S34C63v97Ev();
extern void _ZN5S34C63v98Ev();
extern void _ZN5S34C63v99Ev();
extern void _ZN5S34C64v100Ev();
extern void _ZN5S34C64v101Ev();
extern void _ZN5S34C64v102Ev();
extern void _ZN5S34C64v103Ev();
extern void _ZN5S34C64v104Ev();
extern void _ZN5S34C64v105Ev();
extern void _ZN5S34C64v106Ev();
extern void _ZN5S34C64v107Ev();
extern void _ZN5S34C64v108Ev();
extern void _ZN5S34C64v109Ev();
extern void _ZN5S34C54v110Ev();
extern void _ZN5S34C54v111Ev();
extern void _ZN5S34C54v112Ev();
extern void _ZN5S34C54v113Ev();
extern void _ZN5S34C44v114Ev();
extern void _ZN5S34C44v115Ev();
extern void _ZN5S34C44v116Ev();
extern void _ZN5S34C44v117Ev();
extern void _ZN5S34C44v118Ev();
extern void _ZN5S34C44v119Ev();
extern void _ZN5S34C44v120Ev();
extern void _ZN5S34C44v121Ev();
static  VTBL_ENTRY vtc_S34C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S34C4[0]),
  (VTBL_ENTRY)&_ZN5S34C4D1Ev,
  (VTBL_ENTRY)&_ZN5S34C4D0Ev,
  (VTBL_ENTRY)&_ZN5S34C82v4Ev,
  (VTBL_ENTRY)&_ZN5S34C82v5Ev,
  (VTBL_ENTRY)&_ZN5S34C82v6Ev,
  (VTBL_ENTRY)&_ZN5S34C82v7Ev,
  (VTBL_ENTRY)&_ZN5S34C82v8Ev,
  (VTBL_ENTRY)&_ZN5S34C82v9Ev,
  (VTBL_ENTRY)&_ZN5S34C83v10Ev,
  (VTBL_ENTRY)&_ZN5S34C83v11Ev,
  (VTBL_ENTRY)&_ZN5S34C83v12Ev,
  (VTBL_ENTRY)&_ZN5S34C83v13Ev,
  (VTBL_ENTRY)&_ZN5S34C83v14Ev,
  (VTBL_ENTRY)&_ZN5S34C83v15Ev,
  (VTBL_ENTRY)&_ZN5S34C83v16Ev,
  (VTBL_ENTRY)&_ZN5S34C83v17Ev,
  (VTBL_ENTRY)&_ZN5S34C83v18Ev,
  (VTBL_ENTRY)&_ZN5S34C83v19Ev,
  (VTBL_ENTRY)&_ZN5S34C83v20Ev,
  (VTBL_ENTRY)&_ZN5S34C83v21Ev,
  (VTBL_ENTRY)&_ZN5S34C83v22Ev,
  (VTBL_ENTRY)&_ZN5S34C83v23Ev,
  (VTBL_ENTRY)&_ZN5S34C83v24Ev,
  (VTBL_ENTRY)&_ZN5S34C83v25Ev,
  (VTBL_ENTRY)&_ZN5S34C83v26Ev,
  (VTBL_ENTRY)&_ZN5S34C83v27Ev,
  (VTBL_ENTRY)&_ZN5S34C83v28Ev,
  (VTBL_ENTRY)&_ZN5S34C83v29Ev,
  (VTBL_ENTRY)&_ZN5S34C83v30Ev,
  (VTBL_ENTRY)&_ZN5S34C83v31Ev,
  (VTBL_ENTRY)&_ZN5S34C83v32Ev,
  (VTBL_ENTRY)&_ZN5S34C83v33Ev,
  (VTBL_ENTRY)&_ZN5S34C83v34Ev,
  (VTBL_ENTRY)&_ZN5S34C83v35Ev,
  (VTBL_ENTRY)&_ZN5S34C83v36Ev,
  (VTBL_ENTRY)&_ZN5S34C83v37Ev,
  (VTBL_ENTRY)&_ZN5S34C83v38Ev,
  (VTBL_ENTRY)&_ZN5S34C83v39Ev,
  (VTBL_ENTRY)&_ZN5S34C83v40Ev,
  (VTBL_ENTRY)&_ZN5S34C83v41Ev,
  (VTBL_ENTRY)&_ZN5S34C83v42Ev,
  (VTBL_ENTRY)&_ZN5S34C83v43Ev,
  (VTBL_ENTRY)&_ZN5S34C83v44Ev,
  (VTBL_ENTRY)&_ZN5S34C83v45Ev,
  (VTBL_ENTRY)&_ZN5S34C83v46Ev,
  (VTBL_ENTRY)&_ZN5S34C83v47Ev,
  (VTBL_ENTRY)&_ZN5S34C83v48Ev,
  (VTBL_ENTRY)&_ZN5S34C83v49Ev,
  (VTBL_ENTRY)&_ZN5S34C83v50Ev,
  (VTBL_ENTRY)&_ZN5S34C83v51Ev,
  (VTBL_ENTRY)&_ZN5S34C83v52Ev,
  (VTBL_ENTRY)&_ZN5S34C83v53Ev,
  (VTBL_ENTRY)&_ZN5S34C83v54Ev,
  (VTBL_ENTRY)&_ZN5S34C83v55Ev,
  (VTBL_ENTRY)&_ZN5S34C83v56Ev,
  (VTBL_ENTRY)&_ZN5S34C83v57Ev,
  (VTBL_ENTRY)&_ZN5S34C83v58Ev,
  (VTBL_ENTRY)&_ZN5S34C83v59Ev,
  (VTBL_ENTRY)&_ZN5S34C83v60Ev,
  (VTBL_ENTRY)&_ZN5S34C83v61Ev,
  (VTBL_ENTRY)&_ZN5S34C83v62Ev,
  (VTBL_ENTRY)&_ZN5S34C83v63Ev,
  (VTBL_ENTRY)&_ZN5S34C83v64Ev,
  (VTBL_ENTRY)&_ZN5S34C83v65Ev,
  (VTBL_ENTRY)&_ZN5S34C83v66Ev,
  (VTBL_ENTRY)&_ZN5S34C83v67Ev,
  (VTBL_ENTRY)&_ZN5S34C73v68Ev,
  (VTBL_ENTRY)&_ZN5S34C73v69Ev,
  (VTBL_ENTRY)&_ZN5S34C73v70Ev,
  (VTBL_ENTRY)&_ZN5S34C73v71Ev,
  (VTBL_ENTRY)&_ZN5S34C73v72Ev,
  (VTBL_ENTRY)&_ZN5S34C73v73Ev,
  (VTBL_ENTRY)&_ZN5S34C73v74Ev,
  (VTBL_ENTRY)&_ZN5S34C73v75Ev,
  (VTBL_ENTRY)&_ZN5S34C73v76Ev,
  (VTBL_ENTRY)&_ZN5S34C73v77Ev,
  (VTBL_ENTRY)&_ZN5S34C73v78Ev,
  (VTBL_ENTRY)&_ZN5S34C73v79Ev,
  (VTBL_ENTRY)&_ZN5S34C73v80Ev,
  (VTBL_ENTRY)&_ZN5S34C73v81Ev,
  (VTBL_ENTRY)&_ZN5S34C73v82Ev,
  (VTBL_ENTRY)&_ZN5S34C73v83Ev,
  (VTBL_ENTRY)&_ZN5S34C73v84Ev,
  (VTBL_ENTRY)&_ZN5S34C73v85Ev,
  (VTBL_ENTRY)&_ZN5S34C73v86Ev,
  (VTBL_ENTRY)&_ZN5S34C73v87Ev,
  (VTBL_ENTRY)&_ZN5S34C73v88Ev,
  (VTBL_ENTRY)&_ZN5S34C73v89Ev,
  (VTBL_ENTRY)&_ZN5S34C63v90Ev,
  (VTBL_ENTRY)&_ZN5S34C63v91Ev,
  (VTBL_ENTRY)&_ZN5S34C63v92Ev,
  (VTBL_ENTRY)&_ZN5S34C63v93Ev,
  (VTBL_ENTRY)&_ZN5S34C63v94Ev,
  (VTBL_ENTRY)&_ZN5S34C63v95Ev,
  (VTBL_ENTRY)&_ZN5S34C63v96Ev,
  (VTBL_ENTRY)&_ZN5S34C63v97Ev,
  (VTBL_ENTRY)&_ZN5S34C63v98Ev,
  (VTBL_ENTRY)&_ZN5S34C63v99Ev,
  (VTBL_ENTRY)&_ZN5S34C64v100Ev,
  (VTBL_ENTRY)&_ZN5S34C64v101Ev,
  (VTBL_ENTRY)&_ZN5S34C64v102Ev,
  (VTBL_ENTRY)&_ZN5S34C64v103Ev,
  (VTBL_ENTRY)&_ZN5S34C64v104Ev,
  (VTBL_ENTRY)&_ZN5S34C64v105Ev,
  (VTBL_ENTRY)&_ZN5S34C64v106Ev,
  (VTBL_ENTRY)&_ZN5S34C64v107Ev,
  (VTBL_ENTRY)&_ZN5S34C64v108Ev,
  (VTBL_ENTRY)&_ZN5S34C64v109Ev,
  (VTBL_ENTRY)&_ZN5S34C54v110Ev,
  (VTBL_ENTRY)&_ZN5S34C54v111Ev,
  (VTBL_ENTRY)&_ZN5S34C54v112Ev,
  (VTBL_ENTRY)&_ZN5S34C54v113Ev,
  (VTBL_ENTRY)&_ZN5S34C44v114Ev,
  (VTBL_ENTRY)&_ZN5S34C44v115Ev,
  (VTBL_ENTRY)&_ZN5S34C44v116Ev,
  (VTBL_ENTRY)&_ZN5S34C44v117Ev,
  (VTBL_ENTRY)&_ZN5S34C44v118Ev,
  (VTBL_ENTRY)&_ZN5S34C44v119Ev,
  (VTBL_ENTRY)&_ZN5S34C44v120Ev,
  (VTBL_ENTRY)&_ZN5S34C44v121Ev,
};
extern VTBL_ENTRY _ZTI5S34C4[];
extern  VTBL_ENTRY _ZTV5S34C4[];
Class_Descriptor cd_S34C4 = {  "S34C4", // class name
  bases_S34C4, 4,
  &(vtc_S34C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(304,228), // object size
  NSPAIRA(_ZTI5S34C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S34C4),122, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S34C3  : S34C4 {
  int s34c3f0;
  virtual  ~S34C3(); // _ZN5S34C3D1Ev
  virtual void  v122(); // _ZN5S34C34v122Ev
  virtual void  v123(); // _ZN5S34C34v123Ev
  S34C3(); // tgen
};
//SIG(-1 S34C3) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ 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 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 Fi FL Fp[4] Fi[2] Fp FC7{ m Fi[2]} Fp[2]} vd v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fi[2] Fp Fi[2] FC8{ BC9{ BC10{ BC11{ m Fp Fi[2]}}}} FC8 FC12{ m} FC8 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 Fi:1 Fi:1 Fi:1 FC13{ BC14{ BC11}} FC15{ BC16{ BC11}} FC17{ BC18{ BC11}} FC19{ BC20{ BC11}} Fi[3]} vd v109 v110 v111 v112 FC7 Fi:1 FC21{ BC22{ BC11}}} vd v113 v114 v115 v116 v117 v118 v119 v120 Fi Fi:1} vd v1 v2 Fi}


 S34C3 ::~S34C3(){ note_dtor("S34C3", this);}
void  S34C3 ::v122(){vfunc_called(this, "_ZN5S34C34v122Ev");}
void  S34C3 ::v123(){vfunc_called(this, "_ZN5S34C34v123Ev");}
S34C3 ::S34C3(){ note_ctor("S34C3", this);} // tgen

static void Test_S34C3()
{
  extern Class_Descriptor cd_S34C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(40,59)];
    init_test(&cd_S34C3, buf);
    S34C3 *dp, &lv = *(dp=new (buf) S34C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(312,232), "sizeof(S34C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S34C3)");
    check_base_class_offset(lv, (S34C8*)(S34C7*)(S34C6*)(S34C5*)(S34C4*), 0, "S34C3");
    check_base_class_offset(lv, (S34C7*)(S34C6*)(S34C5*)(S34C4*), 0, "S34C3");
    check_base_class_offset(lv, (S34C6*)(S34C5*)(S34C4*), 0, "S34C3");
    check_base_class_offset(lv, (S34C5*)(S34C4*), 0, "S34C3");
    check_base_class_offset(lv, (S34C4*), 0, "S34C3");
    check_field_offset(lv, s34c3f0, ABISELECT(304,228), "S34C3.s34c3f0");
    test_class_info(&lv, &cd_S34C3);
    dp->~S34C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS34C3(Test_S34C3, "S34C3", ABISELECT(312,232));

#else // __cplusplus

extern void _ZN5S34C3C1Ev();
extern void _ZN5S34C3D1Ev();
Name_Map name_map_S34C3[] = {
  NSPAIR(_ZN5S34C3C1Ev),
  NSPAIR(_ZN5S34C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S34C8;
extern VTBL_ENTRY _ZTI5S34C8[];
extern  VTBL_ENTRY _ZTV5S34C8[];
extern Class_Descriptor cd_S34C7;
extern VTBL_ENTRY _ZTI5S34C7[];
extern  VTBL_ENTRY _ZTV5S34C7[];
extern Class_Descriptor cd_S34C6;
extern VTBL_ENTRY _ZTI5S34C6[];
extern  VTBL_ENTRY _ZTV5S34C6[];
extern Class_Descriptor cd_S34C5;
extern VTBL_ENTRY _ZTI5S34C5[];
extern  VTBL_ENTRY _ZTV5S34C5[];
extern Class_Descriptor cd_S34C4;
extern VTBL_ENTRY _ZTI5S34C4[];
extern  VTBL_ENTRY _ZTV5S34C4[];
static Base_Class bases_S34C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S34C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S34C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S34C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S34C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S34C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S34C3[];
extern void _ZN5S34C3D1Ev();
extern void _ZN5S34C3D0Ev();
extern void _ZN5S34C82v4Ev();
extern void _ZN5S34C82v5Ev();
extern void _ZN5S34C82v6Ev();
extern void _ZN5S34C82v7Ev();
extern void _ZN5S34C82v8Ev();
extern void _ZN5S34C82v9Ev();
extern void _ZN5S34C83v10Ev();
extern void _ZN5S34C83v11Ev();
extern void _ZN5S34C83v12Ev();
extern void _ZN5S34C83v13Ev();
extern void _ZN5S34C83v14Ev();
extern void _ZN5S34C83v15Ev();
extern void _ZN5S34C83v16Ev();
extern void _ZN5S34C83v17Ev();
extern void _ZN5S34C83v18Ev();
extern void _ZN5S34C83v19Ev();
extern void _ZN5S34C83v20Ev();
extern void _ZN5S34C83v21Ev();
extern void _ZN5S34C83v22Ev();
extern void _ZN5S34C83v23Ev();
extern void _ZN5S34C83v24Ev();
extern void _ZN5S34C83v25Ev();
extern void _ZN5S34C83v26Ev();
extern void _ZN5S34C83v27Ev();
extern void _ZN5S34C83v28Ev();
extern void _ZN5S34C83v29Ev();
extern void _ZN5S34C83v30Ev();
extern void _ZN5S34C83v31Ev();
extern void _ZN5S34C83v32Ev();
extern void _ZN5S34C83v33Ev();
extern void _ZN5S34C83v34Ev();
extern void _ZN5S34C83v35Ev();
extern void _ZN5S34C83v36Ev();
extern void _ZN5S34C83v37Ev();
extern void _ZN5S34C83v38Ev();
extern void _ZN5S34C83v39Ev();
extern void _ZN5S34C83v40Ev();
extern void _ZN5S34C83v41Ev();
extern void _ZN5S34C83v42Ev();
extern void _ZN5S34C83v43Ev();
extern void _ZN5S34C83v44Ev();
extern void _ZN5S34C83v45Ev();
extern void _ZN5S34C83v46Ev();
extern void _ZN5S34C83v47Ev();
extern void _ZN5S34C83v48Ev();
extern void _ZN5S34C83v49Ev();
extern void _ZN5S34C83v50Ev();
extern void _ZN5S34C83v51Ev();
extern void _ZN5S34C83v52Ev();
extern void _ZN5S34C83v53Ev();
extern void _ZN5S34C83v54Ev();
extern void _ZN5S34C83v55Ev();
extern void _ZN5S34C83v56Ev();
extern void _ZN5S34C83v57Ev();
extern void _ZN5S34C83v58Ev();
extern void _ZN5S34C83v59Ev();
extern void _ZN5S34C83v60Ev();
extern void _ZN5S34C83v61Ev();
extern void _ZN5S34C83v62Ev();
extern void _ZN5S34C83v63Ev();
extern void _ZN5S34C83v64Ev();
extern void _ZN5S34C83v65Ev();
extern void _ZN5S34C83v66Ev();
extern void _ZN5S34C83v67Ev();
extern void _ZN5S34C73v68Ev();
extern void _ZN5S34C73v69Ev();
extern void _ZN5S34C73v70Ev();
extern void _ZN5S34C73v71Ev();
extern void _ZN5S34C73v72Ev();
extern void _ZN5S34C73v73Ev();
extern void _ZN5S34C73v74Ev();
extern void _ZN5S34C73v75Ev();
extern void _ZN5S34C73v76Ev();
extern void _ZN5S34C73v77Ev();
extern void _ZN5S34C73v78Ev();
extern void _ZN5S34C73v79Ev();
extern void _ZN5S34C73v80Ev();
extern void _ZN5S34C73v81Ev();
extern void _ZN5S34C73v82Ev();
extern void _ZN5S34C73v83Ev();
extern void _ZN5S34C73v84Ev();
extern void _ZN5S34C73v85Ev();
extern void _ZN5S34C73v86Ev();
extern void _ZN5S34C73v87Ev();
extern void _ZN5S34C73v88Ev();
extern void _ZN5S34C73v89Ev();
extern void _ZN5S34C63v90Ev();
extern void _ZN5S34C63v91Ev();
extern void _ZN5S34C63v92Ev();
extern void _ZN5S34C63v93Ev();
extern void _ZN5S34C63v94Ev();
extern void _ZN5S34C63v95Ev();
extern void _ZN5S34C63v96Ev();
extern void _ZN5S34C63v97Ev();
extern void _ZN5S34C63v98Ev();
extern void _ZN5S34C63v99Ev();
extern void _ZN5S34C64v100Ev();
extern void _ZN5S34C64v101Ev();
extern void _ZN5S34C64v102Ev();
extern void _ZN5S34C64v103Ev();
extern void _ZN5S34C64v104Ev();
extern void _ZN5S34C64v105Ev();
extern void _ZN5S34C64v106Ev();
extern void _ZN5S34C64v107Ev();
extern void _ZN5S34C64v108Ev();
extern void _ZN5S34C64v109Ev();
extern void _ZN5S34C54v110Ev();
extern void _ZN5S34C54v111Ev();
extern void _ZN5S34C54v112Ev();
extern void _ZN5S34C54v113Ev();
extern void _ZN5S34C44v114Ev();
extern void _ZN5S34C44v115Ev();
extern void _ZN5S34C44v116Ev();
extern void _ZN5S34C44v117Ev();
extern void _ZN5S34C44v118Ev();
extern void _ZN5S34C44v119Ev();
extern void _ZN5S34C44v120Ev();
extern void _ZN5S34C44v121Ev();
extern void _ZN5S34C34v122Ev();
extern void _ZN5S34C34v123Ev();
static  VTBL_ENTRY vtc_S34C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S34C3[0]),
  (VTBL_ENTRY)&_ZN5S34C3D1Ev,
  (VTBL_ENTRY)&_ZN5S34C3D0Ev,
  (VTBL_ENTRY)&_ZN5S34C82v4Ev,
  (VTBL_ENTRY)&_ZN5S34C82v5Ev,
  (VTBL_ENTRY)&_ZN5S34C82v6Ev,
  (VTBL_ENTRY)&_ZN5S34C82v7Ev,
  (VTBL_ENTRY)&_ZN5S34C82v8Ev,
  (VTBL_ENTRY)&_ZN5S34C82v9Ev,
  (VTBL_ENTRY)&_ZN5S34C83v10Ev,
  (VTBL_ENTRY)&_ZN5S34C83v11Ev,
  (VTBL_ENTRY)&_ZN5S34C83v12Ev,
  (VTBL_ENTRY)&_ZN5S34C83v13Ev,
  (VTBL_ENTRY)&_ZN5S34C83v14Ev,
  (VTBL_ENTRY)&_ZN5S34C83v15Ev,
  (VTBL_ENTRY)&_ZN5S34C83v16Ev,
  (VTBL_ENTRY)&_ZN5S34C83v17Ev,
  (VTBL_ENTRY)&_ZN5S34C83v18Ev,
  (VTBL_ENTRY)&_ZN5S34C83v19Ev,
  (VTBL_ENTRY)&_ZN5S34C83v20Ev,
  (VTBL_ENTRY)&_ZN5S34C83v21Ev,
  (VTBL_ENTRY)&_ZN5S34C83v22Ev,
  (VTBL_ENTRY)&_ZN5S34C83v23Ev,
  (VTBL_ENTRY)&_ZN5S34C83v24Ev,
  (VTBL_ENTRY)&_ZN5S34C83v25Ev,
  (VTBL_ENTRY)&_ZN5S34C83v26Ev,
  (VTBL_ENTRY)&_ZN5S34C83v27Ev,
  (VTBL_ENTRY)&_ZN5S34C83v28Ev,
  (VTBL_ENTRY)&_ZN5S34C83v29Ev,
  (VTBL_ENTRY)&_ZN5S34C83v30Ev,
  (VTBL_ENTRY)&_ZN5S34C83v31Ev,
  (VTBL_ENTRY)&_ZN5S34C83v32Ev,
  (VTBL_ENTRY)&_ZN5S34C83v33Ev,
  (VTBL_ENTRY)&_ZN5S34C83v34Ev,
  (VTBL_ENTRY)&_ZN5S34C83v35Ev,
  (VTBL_ENTRY)&_ZN5S34C83v36Ev,
  (VTBL_ENTRY)&_ZN5S34C83v37Ev,
  (VTBL_ENTRY)&_ZN5S34C83v38Ev,
  (VTBL_ENTRY)&_ZN5S34C83v39Ev,
  (VTBL_ENTRY)&_ZN5S34C83v40Ev,
  (VTBL_ENTRY)&_ZN5S34C83v41Ev,
  (VTBL_ENTRY)&_ZN5S34C83v42Ev,
  (VTBL_ENTRY)&_ZN5S34C83v43Ev,
  (VTBL_ENTRY)&_ZN5S34C83v44Ev,
  (VTBL_ENTRY)&_ZN5S34C83v45Ev,
  (VTBL_ENTRY)&_ZN5S34C83v46Ev,
  (VTBL_ENTRY)&_ZN5S34C83v47Ev,
  (VTBL_ENTRY)&_ZN5S34C83v48Ev,
  (VTBL_ENTRY)&_ZN5S34C83v49Ev,
  (VTBL_ENTRY)&_ZN5S34C83v50Ev,
  (VTBL_ENTRY)&_ZN5S34C83v51Ev,
  (VTBL_ENTRY)&_ZN5S34C83v52Ev,
  (VTBL_ENTRY)&_ZN5S34C83v53Ev,
  (VTBL_ENTRY)&_ZN5S34C83v54Ev,
  (VTBL_ENTRY)&_ZN5S34C83v55Ev,
  (VTBL_ENTRY)&_ZN5S34C83v56Ev,
  (VTBL_ENTRY)&_ZN5S34C83v57Ev,
  (VTBL_ENTRY)&_ZN5S34C83v58Ev,
  (VTBL_ENTRY)&_ZN5S34C83v59Ev,
  (VTBL_ENTRY)&_ZN5S34C83v60Ev,
  (VTBL_ENTRY)&_ZN5S34C83v61Ev,
  (VTBL_ENTRY)&_ZN5S34C83v62Ev,
  (VTBL_ENTRY)&_ZN5S34C83v63Ev,
  (VTBL_ENTRY)&_ZN5S34C83v64Ev,
  (VTBL_ENTRY)&_ZN5S34C83v65Ev,
  (VTBL_ENTRY)&_ZN5S34C83v66Ev,
  (VTBL_ENTRY)&_ZN5S34C83v67Ev,
  (VTBL_ENTRY)&_ZN5S34C73v68Ev,
  (VTBL_ENTRY)&_ZN5S34C73v69Ev,
  (VTBL_ENTRY)&_ZN5S34C73v70Ev,
  (VTBL_ENTRY)&_ZN5S34C73v71Ev,
  (VTBL_ENTRY)&_ZN5S34C73v72Ev,
  (VTBL_ENTRY)&_ZN5S34C73v73Ev,
  (VTBL_ENTRY)&_ZN5S34C73v74Ev,
  (VTBL_ENTRY)&_ZN5S34C73v75Ev,
  (VTBL_ENTRY)&_ZN5S34C73v76Ev,
  (VTBL_ENTRY)&_ZN5S34C73v77Ev,
  (VTBL_ENTRY)&_ZN5S34C73v78Ev,
  (VTBL_ENTRY)&_ZN5S34C73v79Ev,
  (VTBL_ENTRY)&_ZN5S34C73v80Ev,
  (VTBL_ENTRY)&_ZN5S34C73v81Ev,
  (VTBL_ENTRY)&_ZN5S34C73v82Ev,
  (VTBL_ENTRY)&_ZN5S34C73v83Ev,
  (VTBL_ENTRY)&_ZN5S34C73v84Ev,
  (VTBL_ENTRY)&_ZN5S34C73v85Ev,
  (VTBL_ENTRY)&_ZN5S34C73v86Ev,
  (VTBL_ENTRY)&_ZN5S34C73v87Ev,
  (VTBL_ENTRY)&_ZN5S34C73v88Ev,
  (VTBL_ENTRY)&_ZN5S34C73v89Ev,
  (VTBL_ENTRY)&_ZN5S34C63v90Ev,
  (VTBL_ENTRY)&_ZN5S34C63v91Ev,
  (VTBL_ENTRY)&_ZN5S34C63v92Ev,
  (VTBL_ENTRY)&_ZN5S34C63v93Ev,
  (VTBL_ENTRY)&_ZN5S34C63v94Ev,
  (VTBL_ENTRY)&_ZN5S34C63v95Ev,
  (VTBL_ENTRY)&_ZN5S34C63v96Ev,
  (VTBL_ENTRY)&_ZN5S34C63v97Ev,
  (VTBL_ENTRY)&_ZN5S34C63v98Ev,
  (VTBL_ENTRY)&_ZN5S34C63v99Ev,
  (VTBL_ENTRY)&_ZN5S34C64v100Ev,
  (VTBL_ENTRY)&_ZN5S34C64v101Ev,
  (VTBL_ENTRY)&_ZN5S34C64v102Ev,
  (VTBL_ENTRY)&_ZN5S34C64v103Ev,
  (VTBL_ENTRY)&_ZN5S34C64v104Ev,
  (VTBL_ENTRY)&_ZN5S34C64v105Ev,
  (VTBL_ENTRY)&_ZN5S34C64v106Ev,
  (VTBL_ENTRY)&_ZN5S34C64v107Ev,
  (VTBL_ENTRY)&_ZN5S34C64v108Ev,
  (VTBL_ENTRY)&_ZN5S34C64v109Ev,
  (VTBL_ENTRY)&_ZN5S34C54v110Ev,
  (VTBL_ENTRY)&_ZN5S34C54v111Ev,
  (VTBL_ENTRY)&_ZN5S34C54v112Ev,
  (VTBL_ENTRY)&_ZN5S34C54v113Ev,
  (VTBL_ENTRY)&_ZN5S34C44v114Ev,
  (VTBL_ENTRY)&_ZN5S34C44v115Ev,
  (VTBL_ENTRY)&_ZN5S34C44v116Ev,
  (VTBL_ENTRY)&_ZN5S34C44v117Ev,
  (VTBL_ENTRY)&_ZN5S34C44v118Ev,
  (VTBL_ENTRY)&_ZN5S34C44v119Ev,
  (VTBL_ENTRY)&_ZN5S34C44v120Ev,
  (VTBL_ENTRY)&_ZN5S34C44v121Ev,
  (VTBL_ENTRY)&_ZN5S34C34v122Ev,
  (VTBL_ENTRY)&_ZN5S34C34v123Ev,
};
extern VTBL_ENTRY _ZTI5S34C3[];
extern  VTBL_ENTRY _ZTV5S34C3[];
Class_Descriptor cd_S34C3 = {  "S34C3", // class name
  bases_S34C3, 5,
  &(vtc_S34C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(312,232), // object size
  NSPAIRA(_ZTI5S34C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S34C3),124, //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  S34C2  : S34C3 {
  void *s34c2f0;
  ::S287C8_nt s34c2f1;
  virtual  ~S34C2(); // _ZN5S34C2D1Ev
  virtual void  v124(); // _ZN5S34C24v124Ev
  virtual void  v125(); // _ZN5S34C24v125Ev
  S34C2(); // tgen
};
//SIG(-1 S34C2) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ 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 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 Fi FL Fp[4] Fi[2] Fp FC8{ m Fi[2]} Fp[2]} vd v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fi[2] Fp Fi[2] FC9{ BC10{ BC11{ BC12{ m Fp Fi[2]}}}} FC9 FC13{ m} FC9 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 Fi:1 Fi:1 Fi:1 FC14{ BC15{ BC12}} FC16{ BC17{ BC12}} FC18{ BC19{ BC12}} FC20{ BC21{ BC12}} Fi[3]} vd v109 v110 v111 v112 FC8 Fi:1 FC22{ BC23{ BC12}}} vd v113 v114 v115 v116 v117 v118 v119 v120 Fi Fi:1} vd v121 v122 Fi} vd v1 v2 Fp FC9}


 S34C2 ::~S34C2(){ note_dtor("S34C2", this);}
void  S34C2 ::v124(){vfunc_called(this, "_ZN5S34C24v124Ev");}
void  S34C2 ::v125(){vfunc_called(this, "_ZN5S34C24v125Ev");}
S34C2 ::S34C2(){ note_ctor("S34C2", this);} // tgen

static void Test_S34C2()
{
  extern Class_Descriptor cd_S34C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(43,63)];
    init_test(&cd_S34C2, buf);
    S34C2 *dp, &lv = *(dp=new (buf) S34C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,248), "sizeof(S34C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S34C2)");
    check_base_class_offset(lv, (S34C8*)(S34C7*)(S34C6*)(S34C5*)(S34C4*)(S34C3*), 0, "S34C2");
    check_base_class_offset(lv, (S34C7*)(S34C6*)(S34C5*)(S34C4*)(S34C3*), 0, "S34C2");
    check_base_class_offset(lv, (S34C6*)(S34C5*)(S34C4*)(S34C3*), 0, "S34C2");
    check_base_class_offset(lv, (S34C5*)(S34C4*)(S34C3*), 0, "S34C2");
    check_base_class_offset(lv, (S34C4*)(S34C3*), 0, "S34C2");
    check_base_class_offset(lv, (S34C3*), 0, "S34C2");
    check_field_offset(lv, s34c2f0, ABISELECT(312,232), "S34C2.s34c2f0");
    check_field_offset(lv, s34c2f1, ABISELECT(320,236), "S34C2.s34c2f1");
    test_class_info(&lv, &cd_S34C2);
    dp->~S34C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS34C2(Test_S34C2, "S34C2", ABISELECT(336,248));

#else // __cplusplus

extern void _ZN5S34C2C1Ev();
extern void _ZN5S34C2D1Ev();
Name_Map name_map_S34C2[] = {
  NSPAIR(_ZN5S34C2C1Ev),
  NSPAIR(_ZN5S34C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S34C8;
extern VTBL_ENTRY _ZTI5S34C8[];
extern  VTBL_ENTRY _ZTV5S34C8[];
extern Class_Descriptor cd_S34C7;
extern VTBL_ENTRY _ZTI5S34C7[];
extern  VTBL_ENTRY _ZTV5S34C7[];
extern Class_Descriptor cd_S34C6;
extern VTBL_ENTRY _ZTI5S34C6[];
extern  VTBL_ENTRY _ZTV5S34C6[];
extern Class_Descriptor cd_S34C5;
extern VTBL_ENTRY _ZTI5S34C5[];
extern  VTBL_ENTRY _ZTV5S34C5[];
extern Class_Descriptor cd_S34C4;
extern VTBL_ENTRY _ZTI5S34C4[];
extern  VTBL_ENTRY _ZTV5S34C4[];
extern Class_Descriptor cd_S34C3;
extern VTBL_ENTRY _ZTI5S34C3[];
extern  VTBL_ENTRY _ZTV5S34C3[];
static Base_Class bases_S34C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S34C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S34C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S34C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S34C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S34C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S34C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S34C2[];
extern void _ZN5S34C2D1Ev();
extern void _ZN5S34C2D0Ev();
extern void _ZN5S34C82v4Ev();
extern void _ZN5S34C82v5Ev();
extern void _ZN5S34C82v6Ev();
extern void _ZN5S34C82v7Ev();
extern void _ZN5S34C82v8Ev();
extern void _ZN5S34C82v9Ev();
extern void _ZN5S34C83v10Ev();
extern void _ZN5S34C83v11Ev();
extern void _ZN5S34C83v12Ev();
extern void _ZN5S34C83v13Ev();
extern void _ZN5S34C83v14Ev();
extern void _ZN5S34C83v15Ev();
extern void _ZN5S34C83v16Ev();
extern void _ZN5S34C83v17Ev();
extern void _ZN5S34C83v18Ev();
extern void _ZN5S34C83v19Ev();
extern void _ZN5S34C83v20Ev();
extern void _ZN5S34C83v21Ev();
extern void _ZN5S34C83v22Ev();
extern void _ZN5S34C83v23Ev();
extern void _ZN5S34C83v24Ev();
extern void _ZN5S34C83v25Ev();
extern void _ZN5S34C83v26Ev();
extern void _ZN5S34C83v27Ev();
extern void _ZN5S34C83v28Ev();
extern void _ZN5S34C83v29Ev();
extern void _ZN5S34C83v30Ev();
extern void _ZN5S34C83v31Ev();
extern void _ZN5S34C83v32Ev();
extern void _ZN5S34C83v33Ev();
extern void _ZN5S34C83v34Ev();
extern void _ZN5S34C83v35Ev();
extern void _ZN5S34C83v36Ev();
extern void _ZN5S34C83v37Ev();
extern void _ZN5S34C83v38Ev();
extern void _ZN5S34C83v39Ev();
extern void _ZN5S34C83v40Ev();
extern void _ZN5S34C83v41Ev();
extern void _ZN5S34C83v42Ev();
extern void _ZN5S34C83v43Ev();
extern void _ZN5S34C83v44Ev();
extern void _ZN5S34C83v45Ev();
extern void _ZN5S34C83v46Ev();
extern void _ZN5S34C83v47Ev();
extern void _ZN5S34C83v48Ev();
extern void _ZN5S34C83v49Ev();
extern void _ZN5S34C83v50Ev();
extern void _ZN5S34C83v51Ev();
extern void _ZN5S34C83v52Ev();
extern void _ZN5S34C83v53Ev();
extern void _ZN5S34C83v54Ev();
extern void _ZN5S34C83v55Ev();
extern void _ZN5S34C83v56Ev();
extern void _ZN5S34C83v57Ev();
extern void _ZN5S34C83v58Ev();
extern void _ZN5S34C83v59Ev();
extern void _ZN5S34C83v60Ev();
extern void _ZN5S34C83v61Ev();
extern void _ZN5S34C83v62Ev();
extern void _ZN5S34C83v63Ev();
extern void _ZN5S34C83v64Ev();
extern void _ZN5S34C83v65Ev();
extern void _ZN5S34C83v66Ev();
extern void _ZN5S34C83v67Ev();
extern void _ZN5S34C73v68Ev();
extern void _ZN5S34C73v69Ev();
extern void _ZN5S34C73v70Ev();
extern void _ZN5S34C73v71Ev();
extern void _ZN5S34C73v72Ev();
extern void _ZN5S34C73v73Ev();
extern void _ZN5S34C73v74Ev();
extern void _ZN5S34C73v75Ev();
extern void _ZN5S34C73v76Ev();
extern void _ZN5S34C73v77Ev();
extern void _ZN5S34C73v78Ev();
extern void _ZN5S34C73v79Ev();
extern void _ZN5S34C73v80Ev();
extern void _ZN5S34C73v81Ev();
extern void _ZN5S34C73v82Ev();
extern void _ZN5S34C73v83Ev();
extern void _ZN5S34C73v84Ev();
extern void _ZN5S34C73v85Ev();
extern void _ZN5S34C73v86Ev();
extern void _ZN5S34C73v87Ev();
extern void _ZN5S34C73v88Ev();
extern void _ZN5S34C73v89Ev();
extern void _ZN5S34C63v90Ev();
extern void _ZN5S34C63v91Ev();
extern void _ZN5S34C63v92Ev();
extern void _ZN5S34C63v93Ev();
extern void _ZN5S34C63v94Ev();
extern void _ZN5S34C63v95Ev();
extern void _ZN5S34C63v96Ev();
extern void _ZN5S34C63v97Ev();
extern void _ZN5S34C63v98Ev();
extern void _ZN5S34C63v99Ev();
extern void _ZN5S34C64v100Ev();
extern void _ZN5S34C64v101Ev();
extern void _ZN5S34C64v102Ev();
extern void _ZN5S34C64v103Ev();
extern void _ZN5S34C64v104Ev();
extern void _ZN5S34C64v105Ev();
extern void _ZN5S34C64v106Ev();
extern void _ZN5S34C64v107Ev();
extern void _ZN5S34C64v108Ev();
extern void _ZN5S34C64v109Ev();
extern void _ZN5S34C54v110Ev();
extern void _ZN5S34C54v111Ev();
extern void _ZN5S34C54v112Ev();
extern void _ZN5S34C54v113Ev();
extern void _ZN5S34C44v114Ev();
extern void _ZN5S34C44v115Ev();
extern void _ZN5S34C44v116Ev();
extern void _ZN5S34C44v117Ev();
extern void _ZN5S34C44v118Ev();
extern void _ZN5S34C44v119Ev();
extern void _ZN5S34C44v120Ev();
extern void _ZN5S34C44v121Ev();
extern void _ZN5S34C34v122Ev();
extern void _ZN5S34C34v123Ev();
extern void _ZN5S34C24v124Ev();
extern void _ZN5S34C24v125Ev();
static  VTBL_ENTRY vtc_S34C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S34C2[0]),
  (VTBL_ENTRY)&_ZN5S34C2D1Ev,
  (VTBL_ENTRY)&_ZN5S34C2D0Ev,
  (VTBL_ENTRY)&_ZN5S34C82v4Ev,
  (VTBL_ENTRY)&_ZN5S34C82v5Ev,
  (VTBL_ENTRY)&_ZN5S34C82v6Ev,
  (VTBL_ENTRY)&_ZN5S34C82v7Ev,
  (VTBL_ENTRY)&_ZN5S34C82v8Ev,
  (VTBL_ENTRY)&_ZN5S34C82v9Ev,
  (VTBL_ENTRY)&_ZN5S34C83v10Ev,
  (VTBL_ENTRY)&_ZN5S34C83v11Ev,
  (VTBL_ENTRY)&_ZN5S34C83v12Ev,
  (VTBL_ENTRY)&_ZN5S34C83v13Ev,
  (VTBL_ENTRY)&_ZN5S34C83v14Ev,
  (VTBL_ENTRY)&_ZN5S34C83v15Ev,
  (VTBL_ENTRY)&_ZN5S34C83v16Ev,
  (VTBL_ENTRY)&_ZN5S34C83v17Ev,
  (VTBL_ENTRY)&_ZN5S34C83v18Ev,
  (VTBL_ENTRY)&_ZN5S34C83v19Ev,
  (VTBL_ENTRY)&_ZN5S34C83v20Ev,
  (VTBL_ENTRY)&_ZN5S34C83v21Ev,
  (VTBL_ENTRY)&_ZN5S34C83v22Ev,
  (VTBL_ENTRY)&_ZN5S34C83v23Ev,
  (VTBL_ENTRY)&_ZN5S34C83v24Ev,
  (VTBL_ENTRY)&_ZN5S34C83v25Ev,
  (VTBL_ENTRY)&_ZN5S34C83v26Ev,
  (VTBL_ENTRY)&_ZN5S34C83v27Ev,
  (VTBL_ENTRY)&_ZN5S34C83v28Ev,
  (VTBL_ENTRY)&_ZN5S34C83v29Ev,
  (VTBL_ENTRY)&_ZN5S34C83v30Ev,
  (VTBL_ENTRY)&_ZN5S34C83v31Ev,
  (VTBL_ENTRY)&_ZN5S34C83v32Ev,
  (VTBL_ENTRY)&_ZN5S34C83v33Ev,
  (VTBL_ENTRY)&_ZN5S34C83v34Ev,
  (VTBL_ENTRY)&_ZN5S34C83v35Ev,
  (VTBL_ENTRY)&_ZN5S34C83v36Ev,
  (VTBL_ENTRY)&_ZN5S34C83v37Ev,
  (VTBL_ENTRY)&_ZN5S34C83v38Ev,
  (VTBL_ENTRY)&_ZN5S34C83v39Ev,
  (VTBL_ENTRY)&_ZN5S34C83v40Ev,
  (VTBL_ENTRY)&_ZN5S34C83v41Ev,
  (VTBL_ENTRY)&_ZN5S34C83v42Ev,
  (VTBL_ENTRY)&_ZN5S34C83v43Ev,
  (VTBL_ENTRY)&_ZN5S34C83v44Ev,
  (VTBL_ENTRY)&_ZN5S34C83v45Ev,
  (VTBL_ENTRY)&_ZN5S34C83v46Ev,
  (VTBL_ENTRY)&_ZN5S34C83v47Ev,
  (VTBL_ENTRY)&_ZN5S34C83v48Ev,
  (VTBL_ENTRY)&_ZN5S34C83v49Ev,
  (VTBL_ENTRY)&_ZN5S34C83v50Ev,
  (VTBL_ENTRY)&_ZN5S34C83v51Ev,
  (VTBL_ENTRY)&_ZN5S34C83v52Ev,
  (VTBL_ENTRY)&_ZN5S34C83v53Ev,
  (VTBL_ENTRY)&_ZN5S34C83v54Ev,
  (VTBL_ENTRY)&_ZN5S34C83v55Ev,
  (VTBL_ENTRY)&_ZN5S34C83v56Ev,
  (VTBL_ENTRY)&_ZN5S34C83v57Ev,
  (VTBL_ENTRY)&_ZN5S34C83v58Ev,
  (VTBL_ENTRY)&_ZN5S34C83v59Ev,
  (VTBL_ENTRY)&_ZN5S34C83v60Ev,
  (VTBL_ENTRY)&_ZN5S34C83v61Ev,
  (VTBL_ENTRY)&_ZN5S34C83v62Ev,
  (VTBL_ENTRY)&_ZN5S34C83v63Ev,
  (VTBL_ENTRY)&_ZN5S34C83v64Ev,
  (VTBL_ENTRY)&_ZN5S34C83v65Ev,
  (VTBL_ENTRY)&_ZN5S34C83v66Ev,
  (VTBL_ENTRY)&_ZN5S34C83v67Ev,
  (VTBL_ENTRY)&_ZN5S34C73v68Ev,
  (VTBL_ENTRY)&_ZN5S34C73v69Ev,
  (VTBL_ENTRY)&_ZN5S34C73v70Ev,
  (VTBL_ENTRY)&_ZN5S34C73v71Ev,
  (VTBL_ENTRY)&_ZN5S34C73v72Ev,
  (VTBL_ENTRY)&_ZN5S34C73v73Ev,
  (VTBL_ENTRY)&_ZN5S34C73v74Ev,
  (VTBL_ENTRY)&_ZN5S34C73v75Ev,
  (VTBL_ENTRY)&_ZN5S34C73v76Ev,
  (VTBL_ENTRY)&_ZN5S34C73v77Ev,
  (VTBL_ENTRY)&_ZN5S34C73v78Ev,
  (VTBL_ENTRY)&_ZN5S34C73v79Ev,
  (VTBL_ENTRY)&_ZN5S34C73v80Ev,
  (VTBL_ENTRY)&_ZN5S34C73v81Ev,
  (VTBL_ENTRY)&_ZN5S34C73v82Ev,
  (VTBL_ENTRY)&_ZN5S34C73v83Ev,
  (VTBL_ENTRY)&_ZN5S34C73v84Ev,
  (VTBL_ENTRY)&_ZN5S34C73v85Ev,
  (VTBL_ENTRY)&_ZN5S34C73v86Ev,
  (VTBL_ENTRY)&_ZN5S34C73v87Ev,
  (VTBL_ENTRY)&_ZN5S34C73v88Ev,
  (VTBL_ENTRY)&_ZN5S34C73v89Ev,
  (VTBL_ENTRY)&_ZN5S34C63v90Ev,
  (VTBL_ENTRY)&_ZN5S34C63v91Ev,
  (VTBL_ENTRY)&_ZN5S34C63v92Ev,
  (VTBL_ENTRY)&_ZN5S34C63v93Ev,
  (VTBL_ENTRY)&_ZN5S34C63v94Ev,
  (VTBL_ENTRY)&_ZN5S34C63v95Ev,
  (VTBL_ENTRY)&_ZN5S34C63v96Ev,
  (VTBL_ENTRY)&_ZN5S34C63v97Ev,
  (VTBL_ENTRY)&_ZN5S34C63v98Ev,
  (VTBL_ENTRY)&_ZN5S34C63v99Ev,
  (VTBL_ENTRY)&_ZN5S34C64v100Ev,
  (VTBL_ENTRY)&_ZN5S34C64v101Ev,
  (VTBL_ENTRY)&_ZN5S34C64v102Ev,
  (VTBL_ENTRY)&_ZN5S34C64v103Ev,
  (VTBL_ENTRY)&_ZN5S34C64v104Ev,
  (VTBL_ENTRY)&_ZN5S34C64v105Ev,
  (VTBL_ENTRY)&_ZN5S34C64v106Ev,
  (VTBL_ENTRY)&_ZN5S34C64v107Ev,
  (VTBL_ENTRY)&_ZN5S34C64v108Ev,
  (VTBL_ENTRY)&_ZN5S34C64v109Ev,
  (VTBL_ENTRY)&_ZN5S34C54v110Ev,
  (VTBL_ENTRY)&_ZN5S34C54v111Ev,
  (VTBL_ENTRY)&_ZN5S34C54v112Ev,
  (VTBL_ENTRY)&_ZN5S34C54v113Ev,
  (VTBL_ENTRY)&_ZN5S34C44v114Ev,
  (VTBL_ENTRY)&_ZN5S34C44v115Ev,
  (VTBL_ENTRY)&_ZN5S34C44v116Ev,
  (VTBL_ENTRY)&_ZN5S34C44v117Ev,
  (VTBL_ENTRY)&_ZN5S34C44v118Ev,
  (VTBL_ENTRY)&_ZN5S34C44v119Ev,
  (VTBL_ENTRY)&_ZN5S34C44v120Ev,
  (VTBL_ENTRY)&_ZN5S34C44v121Ev,
  (VTBL_ENTRY)&_ZN5S34C34v122Ev,
  (VTBL_ENTRY)&_ZN5S34C34v123Ev,
  (VTBL_ENTRY)&_ZN5S34C24v124Ev,
  (VTBL_ENTRY)&_ZN5S34C24v125Ev,
};
extern VTBL_ENTRY _ZTI5S34C2[];
extern  VTBL_ENTRY _ZTV5S34C2[];
Class_Descriptor cd_S34C2 = {  "S34C2", // class name
  bases_S34C2, 6,
  &(vtc_S34C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(336,248), // object size
  NSPAIRA(_ZTI5S34C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S34C2),126, //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  S34C1  : S34C2 {
  unsigned int s34c1f0:1;
  char s34c1f1;
  virtual  ~S34C1(); // _ZN5S34C1D1Ev
  virtual void  v1(); // _ZN5S34C12v1Ev
  virtual void  v2(); // _ZN5S34C12v2Ev
  virtual void  v3(); // _ZN5S34C12v3Ev
  S34C1(); // tgen
};
//SIG(1 S34C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ BC7{ BC8{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 Fi FL Fp[4] Fi[2] Fp FC9{ m Fi[2]} Fp[2]} vd v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 Fi[2] Fp Fi[2] FC10{ BC11{ BC12{ BC13{ m Fp Fi[2]}}}} FC10 FC14{ m} FC10 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 Fi:1 Fi:1 Fi:1 FC15{ BC16{ BC13}} FC17{ BC18{ BC13}} FC19{ BC20{ BC13}} FC21{ BC22{ BC13}} Fi[3]} vd v110 v111 v112 v113 FC9 Fi:1 FC23{ BC24{ BC13}}} vd v114 v115 v116 v117 v118 v119 v120 v121 Fi Fi:1} vd v122 v123 Fi} vd v124 v125 Fp FC10} vd v1 v2 v3 Fi:1 Fc}


 S34C1 ::~S34C1(){ note_dtor("S34C1", this);}
void  S34C1 ::v1(){vfunc_called(this, "_ZN5S34C12v1Ev");}
void  S34C1 ::v2(){vfunc_called(this, "_ZN5S34C12v2Ev");}
void  S34C1 ::v3(){vfunc_called(this, "_ZN5S34C12v3Ev");}
S34C1 ::S34C1(){ note_ctor("S34C1", this);} // tgen

static void Test_S34C1()
{
  extern Class_Descriptor cd_S34C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(44,64)];
    init_test(&cd_S34C1, buf);
    S34C1 *dp, &lv = *(dp=new (buf) S34C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(344,252), "sizeof(S34C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S34C1)");
    check_base_class_offset(lv, (S34C8*)(S34C7*)(S34C6*)(S34C5*)(S34C4*)(S34C3*)(S34C2*), 0, "S34C1");
    check_base_class_offset(lv, (S34C7*)(S34C6*)(S34C5*)(S34C4*)(S34C3*)(S34C2*), 0, "S34C1");
    check_base_class_offset(lv, (S34C6*)(S34C5*)(S34C4*)(S34C3*)(S34C2*), 0, "S34C1");
    check_base_class_offset(lv, (S34C5*)(S34C4*)(S34C3*)(S34C2*), 0, "S34C1");
    check_base_class_offset(lv, (S34C4*)(S34C3*)(S34C2*), 0, "S34C1");
    check_base_class_offset(lv, (S34C3*)(S34C2*), 0, "S34C1");
    check_base_class_offset(lv, (S34C2*), 0, "S34C1");
    set_bf_and_test(lv, s34c1f0, ABISELECT(336,248), 0, 1, 1, "S34C1");
    check_field_offset(lv, s34c1f1, ABISELECT(337,249), "S34C1.s34c1f1");
    test_class_info(&lv, &cd_S34C1);
    dp->~S34C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS34C1(Test_S34C1, "S34C1", ABISELECT(344,252));

#else // __cplusplus

extern void _ZN5S34C1C1Ev();
extern void _ZN5S34C1D1Ev();
Name_Map name_map_S34C1[] = {
  NSPAIR(_ZN5S34C1C1Ev),
  NSPAIR(_ZN5S34C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S34C8;
extern VTBL_ENTRY _ZTI5S34C8[];
extern  VTBL_ENTRY _ZTV5S34C8[];
extern Class_Descriptor cd_S34C7;
extern VTBL_ENTRY _ZTI5S34C7[];
extern  VTBL_ENTRY _ZTV5S34C7[];
extern Class_Descriptor cd_S34C6;
extern VTBL_ENTRY _ZTI5S34C6[];
extern  VTBL_ENTRY _ZTV5S34C6[];
extern Class_Descriptor cd_S34C5;
extern VTBL_ENTRY _ZTI5S34C5[];
extern  VTBL_ENTRY _ZTV5S34C5[];
extern Class_Descriptor cd_S34C4;
extern VTBL_ENTRY _ZTI5S34C4[];
extern  VTBL_ENTRY _ZTV5S34C4[];
extern Class_Descriptor cd_S34C3;
extern VTBL_ENTRY _ZTI5S34C3[];
extern  VTBL_ENTRY _ZTV5S34C3[];
extern Class_Descriptor cd_S34C2;
extern VTBL_ENTRY _ZTI5S34C2[];
extern  VTBL_ENTRY _ZTV5S34C2[];
static Base_Class bases_S34C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S34C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S34C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S34C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S34C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S34C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S34C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S34C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S34C1[];
extern void _ZN5S34C1D1Ev();
extern void _ZN5S34C1D0Ev();
extern void _ZN5S34C82v4Ev();
extern void _ZN5S34C82v5Ev();
extern void _ZN5S34C82v6Ev();
extern void _ZN5S34C82v7Ev();
extern void _ZN5S34C82v8Ev();
extern void _ZN5S34C82v9Ev();
extern void _ZN5S34C83v10Ev();
extern void _ZN5S34C83v11Ev();
extern void _ZN5S34C83v12Ev();
extern void _ZN5S34C83v13Ev();
extern void _ZN5S34C83v14Ev();
extern void _ZN5S34C83v15Ev();
extern void _ZN5S34C83v16Ev();
extern void _ZN5S34C83v17Ev();
extern void _ZN5S34C83v18Ev();
extern void _ZN5S34C83v19Ev();
extern void _ZN5S34C83v20Ev();
extern void _ZN5S34C83v21Ev();
extern void _ZN5S34C83v22Ev();
extern void _ZN5S34C83v23Ev();
extern void _ZN5S34C83v24Ev();
extern void _ZN5S34C83v25Ev();
extern void _ZN5S34C83v26Ev();
extern void _ZN5S34C83v27Ev();
extern void _ZN5S34C83v28Ev();
extern void _ZN5S34C83v29Ev();
extern void _ZN5S34C83v30Ev();
extern void _ZN5S34C83v31Ev();
extern void _ZN5S34C83v32Ev();
extern void _ZN5S34C83v33Ev();
extern void _ZN5S34C83v34Ev();
extern void _ZN5S34C83v35Ev();
extern void _ZN5S34C83v36Ev();
extern void _ZN5S34C83v37Ev();
extern void _ZN5S34C83v38Ev();
extern void _ZN5S34C83v39Ev();
extern void _ZN5S34C83v40Ev();
extern void _ZN5S34C83v41Ev();
extern void _ZN5S34C83v42Ev();
extern void _ZN5S34C83v43Ev();
extern void _ZN5S34C83v44Ev();
extern void _ZN5S34C83v45Ev();
extern void _ZN5S34C83v46Ev();
extern void _ZN5S34C83v47Ev();
extern void _ZN5S34C83v48Ev();
extern void _ZN5S34C83v49Ev();
extern void _ZN5S34C83v50Ev();
extern void _ZN5S34C83v51Ev();
extern void _ZN5S34C83v52Ev();
extern void _ZN5S34C83v53Ev();
extern void _ZN5S34C83v54Ev();
extern void _ZN5S34C83v55Ev();
extern void _ZN5S34C83v56Ev();
extern void _ZN5S34C83v57Ev();
extern void _ZN5S34C83v58Ev();
extern void _ZN5S34C83v59Ev();
extern void _ZN5S34C83v60Ev();
extern void _ZN5S34C83v61Ev();
extern void _ZN5S34C83v62Ev();
extern void _ZN5S34C83v63Ev();
extern void _ZN5S34C83v64Ev();
extern void _ZN5S34C83v65Ev();
extern void _ZN5S34C83v66Ev();
extern void _ZN5S34C83v67Ev();
extern void _ZN5S34C73v68Ev();
extern void _ZN5S34C73v69Ev();
extern void _ZN5S34C73v70Ev();
extern void _ZN5S34C73v71Ev();
extern void _ZN5S34C73v72Ev();
extern void _ZN5S34C73v73Ev();
extern void _ZN5S34C73v74Ev();
extern void _ZN5S34C73v75Ev();
extern void _ZN5S34C73v76Ev();
extern void _ZN5S34C73v77Ev();
extern void _ZN5S34C73v78Ev();
extern void _ZN5S34C73v79Ev();
extern void _ZN5S34C73v80Ev();
extern void _ZN5S34C73v81Ev();
extern void _ZN5S34C73v82Ev();
extern void _ZN5S34C73v83Ev();
extern void _ZN5S34C73v84Ev();
extern void _ZN5S34C73v85Ev();
extern void _ZN5S34C73v86Ev();
extern void _ZN5S34C73v87Ev();
extern void _ZN5S34C73v88Ev();
extern void _ZN5S34C73v89Ev();
extern void _ZN5S34C63v90Ev();
extern void _ZN5S34C63v91Ev();
extern void _ZN5S34C63v92Ev();
extern void _ZN5S34C63v93Ev();
extern void _ZN5S34C63v94Ev();
extern void _ZN5S34C63v95Ev();
extern void _ZN5S34C63v96Ev();
extern void _ZN5S34C63v97Ev();
extern void _ZN5S34C63v98Ev();
extern void _ZN5S34C63v99Ev();
extern void _ZN5S34C64v100Ev();
extern void _ZN5S34C64v101Ev();
extern void _ZN5S34C64v102Ev();
extern void _ZN5S34C64v103Ev();
extern void _ZN5S34C64v104Ev();
extern void _ZN5S34C64v105Ev();
extern void _ZN5S34C64v106Ev();
extern void _ZN5S34C64v107Ev();
extern void _ZN5S34C64v108Ev();
extern void _ZN5S34C64v109Ev();
extern void _ZN5S34C54v110Ev();
extern void _ZN5S34C54v111Ev();
extern void _ZN5S34C54v112Ev();
extern void _ZN5S34C54v113Ev();
extern void _ZN5S34C44v114Ev();
extern void _ZN5S34C44v115Ev();
extern void _ZN5S34C44v116Ev();
extern void _ZN5S34C44v117Ev();
extern void _ZN5S34C44v118Ev();
extern void _ZN5S34C44v119Ev();
extern void _ZN5S34C44v120Ev();
extern void _ZN5S34C44v121Ev();
extern void _ZN5S34C34v122Ev();
extern void _ZN5S34C34v123Ev();
extern void _ZN5S34C24v124Ev();
extern void _ZN5S34C24v125Ev();
extern void _ZN5S34C12v1Ev();
extern void _ZN5S34C12v2Ev();
extern void _ZN5S34C12v3Ev();
static  VTBL_ENTRY vtc_S34C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S34C1[0]),
  (VTBL_ENTRY)&_ZN5S34C1D1Ev,
  (VTBL_ENTRY)&_ZN5S34C1D0Ev,
  (VTBL_ENTRY)&_ZN5S34C82v4Ev,
  (VTBL_ENTRY)&_ZN5S34C82v5Ev,
  (VTBL_ENTRY)&_ZN5S34C82v6Ev,
  (VTBL_ENTRY)&_ZN5S34C82v7Ev,
  (VTBL_ENTRY)&_ZN5S34C82v8Ev,
  (VTBL_ENTRY)&_ZN5S34C82v9Ev,
  (VTBL_ENTRY)&_ZN5S34C83v10Ev,
  (VTBL_ENTRY)&_ZN5S34C83v11Ev,
  (VTBL_ENTRY)&_ZN5S34C83v12Ev,
  (VTBL_ENTRY)&_ZN5S34C83v13Ev,
  (VTBL_ENTRY)&_ZN5S34C83v14Ev,
  (VTBL_ENTRY)&_ZN5S34C83v15Ev,
  (VTBL_ENTRY)&_ZN5S34C83v16Ev,
  (VTBL_ENTRY)&_ZN5S34C83v17Ev,
  (VTBL_ENTRY)&_ZN5S34C83v18Ev,
  (VTBL_ENTRY)&_ZN5S34C83v19Ev,
  (VTBL_ENTRY)&_ZN5S34C83v20Ev,
  (VTBL_ENTRY)&_ZN5S34C83v21Ev,
  (VTBL_ENTRY)&_ZN5S34C83v22Ev,
  (VTBL_ENTRY)&_ZN5S34C83v23Ev,
  (VTBL_ENTRY)&_ZN5S34C83v24Ev,
  (VTBL_ENTRY)&_ZN5S34C83v25Ev,
  (VTBL_ENTRY)&_ZN5S34C83v26Ev,
  (VTBL_ENTRY)&_ZN5S34C83v27Ev,
  (VTBL_ENTRY)&_ZN5S34C83v28Ev,
  (VTBL_ENTRY)&_ZN5S34C83v29Ev,
  (VTBL_ENTRY)&_ZN5S34C83v30Ev,
  (VTBL_ENTRY)&_ZN5S34C83v31Ev,
  (VTBL_ENTRY)&_ZN5S34C83v32Ev,
  (VTBL_ENTRY)&_ZN5S34C83v33Ev,
  (VTBL_ENTRY)&_ZN5S34C83v34Ev,
  (VTBL_ENTRY)&_ZN5S34C83v35Ev,
  (VTBL_ENTRY)&_ZN5S34C83v36Ev,
  (VTBL_ENTRY)&_ZN5S34C83v37Ev,
  (VTBL_ENTRY)&_ZN5S34C83v38Ev,
  (VTBL_ENTRY)&_ZN5S34C83v39Ev,
  (VTBL_ENTRY)&_ZN5S34C83v40Ev,
  (VTBL_ENTRY)&_ZN5S34C83v41Ev,
  (VTBL_ENTRY)&_ZN5S34C83v42Ev,
  (VTBL_ENTRY)&_ZN5S34C83v43Ev,
  (VTBL_ENTRY)&_ZN5S34C83v44Ev,
  (VTBL_ENTRY)&_ZN5S34C83v45Ev,
  (VTBL_ENTRY)&_ZN5S34C83v46Ev,
  (VTBL_ENTRY)&_ZN5S34C83v47Ev,
  (VTBL_ENTRY)&_ZN5S34C83v48Ev,
  (VTBL_ENTRY)&_ZN5S34C83v49Ev,
  (VTBL_ENTRY)&_ZN5S34C83v50Ev,
  (VTBL_ENTRY)&_ZN5S34C83v51Ev,
  (VTBL_ENTRY)&_ZN5S34C83v52Ev,
  (VTBL_ENTRY)&_ZN5S34C83v53Ev,
  (VTBL_ENTRY)&_ZN5S34C83v54Ev,
  (VTBL_ENTRY)&_ZN5S34C83v55Ev,
  (VTBL_ENTRY)&_ZN5S34C83v56Ev,
  (VTBL_ENTRY)&_ZN5S34C83v57Ev,
  (VTBL_ENTRY)&_ZN5S34C83v58Ev,
  (VTBL_ENTRY)&_ZN5S34C83v59Ev,
  (VTBL_ENTRY)&_ZN5S34C83v60Ev,
  (VTBL_ENTRY)&_ZN5S34C83v61Ev,
  (VTBL_ENTRY)&_ZN5S34C83v62Ev,
  (VTBL_ENTRY)&_ZN5S34C83v63Ev,
  (VTBL_ENTRY)&_ZN5S34C83v64Ev,
  (VTBL_ENTRY)&_ZN5S34C83v65Ev,
  (VTBL_ENTRY)&_ZN5S34C83v66Ev,
  (VTBL_ENTRY)&_ZN5S34C83v67Ev,
  (VTBL_ENTRY)&_ZN5S34C73v68Ev,
  (VTBL_ENTRY)&_ZN5S34C73v69Ev,
  (VTBL_ENTRY)&_ZN5S34C73v70Ev,
  (VTBL_ENTRY)&_ZN5S34C73v71Ev,
  (VTBL_ENTRY)&_ZN5S34C73v72Ev,
  (VTBL_ENTRY)&_ZN5S34C73v73Ev,
  (VTBL_ENTRY)&_ZN5S34C73v74Ev,
  (VTBL_ENTRY)&_ZN5S34C73v75Ev,
  (VTBL_ENTRY)&_ZN5S34C73v76Ev,
  (VTBL_ENTRY)&_ZN5S34C73v77Ev,
  (VTBL_ENTRY)&_ZN5S34C73v78Ev,
  (VTBL_ENTRY)&_ZN5S34C73v79Ev,
  (VTBL_ENTRY)&_ZN5S34C73v80Ev,
  (VTBL_ENTRY)&_ZN5S34C73v81Ev,
  (VTBL_ENTRY)&_ZN5S34C73v82Ev,
  (VTBL_ENTRY)&_ZN5S34C73v83Ev,
  (VTBL_ENTRY)&_ZN5S34C73v84Ev,
  (VTBL_ENTRY)&_ZN5S34C73v85Ev,
  (VTBL_ENTRY)&_ZN5S34C73v86Ev,
  (VTBL_ENTRY)&_ZN5S34C73v87Ev,
  (VTBL_ENTRY)&_ZN5S34C73v88Ev,
  (VTBL_ENTRY)&_ZN5S34C73v89Ev,
  (VTBL_ENTRY)&_ZN5S34C63v90Ev,
  (VTBL_ENTRY)&_ZN5S34C63v91Ev,
  (VTBL_ENTRY)&_ZN5S34C63v92Ev,
  (VTBL_ENTRY)&_ZN5S34C63v93Ev,
  (VTBL_ENTRY)&_ZN5S34C63v94Ev,
  (VTBL_ENTRY)&_ZN5S34C63v95Ev,
  (VTBL_ENTRY)&_ZN5S34C63v96Ev,
  (VTBL_ENTRY)&_ZN5S34C63v97Ev,
  (VTBL_ENTRY)&_ZN5S34C63v98Ev,
  (VTBL_ENTRY)&_ZN5S34C63v99Ev,
  (VTBL_ENTRY)&_ZN5S34C64v100Ev,
  (VTBL_ENTRY)&_ZN5S34C64v101Ev,
  (VTBL_ENTRY)&_ZN5S34C64v102Ev,
  (VTBL_ENTRY)&_ZN5S34C64v103Ev,
  (VTBL_ENTRY)&_ZN5S34C64v104Ev,
  (VTBL_ENTRY)&_ZN5S34C64v105Ev,
  (VTBL_ENTRY)&_ZN5S34C64v106Ev,
  (VTBL_ENTRY)&_ZN5S34C64v107Ev,
  (VTBL_ENTRY)&_ZN5S34C64v108Ev,
  (VTBL_ENTRY)&_ZN5S34C64v109Ev,
  (VTBL_ENTRY)&_ZN5S34C54v110Ev,
  (VTBL_ENTRY)&_ZN5S34C54v111Ev,
  (VTBL_ENTRY)&_ZN5S34C54v112Ev,
  (VTBL_ENTRY)&_ZN5S34C54v113Ev,
  (VTBL_ENTRY)&_ZN5S34C44v114Ev,
  (VTBL_ENTRY)&_ZN5S34C44v115Ev,
  (VTBL_ENTRY)&_ZN5S34C44v116Ev,
  (VTBL_ENTRY)&_ZN5S34C44v117Ev,
  (VTBL_ENTRY)&_ZN5S34C44v118Ev,
  (VTBL_ENTRY)&_ZN5S34C44v119Ev,
  (VTBL_ENTRY)&_ZN5S34C44v120Ev,
  (VTBL_ENTRY)&_ZN5S34C44v121Ev,
  (VTBL_ENTRY)&_ZN5S34C34v122Ev,
  (VTBL_ENTRY)&_ZN5S34C34v123Ev,
  (VTBL_ENTRY)&_ZN5S34C24v124Ev,
  (VTBL_ENTRY)&_ZN5S34C24v125Ev,
  (VTBL_ENTRY)&_ZN5S34C12v1Ev,
  (VTBL_ENTRY)&_ZN5S34C12v2Ev,
  (VTBL_ENTRY)&_ZN5S34C12v3Ev,
};
extern VTBL_ENTRY _ZTI5S34C1[];
extern  VTBL_ENTRY _ZTV5S34C1[];
Class_Descriptor cd_S34C1 = {  "S34C1", // class name
  bases_S34C1, 7,
  &(vtc_S34C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(344,252), // object size
  NSPAIRA(_ZTI5S34C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S34C1),129, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  7, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S73C7  {
  int s73c7f0;
  __tsi64 s73c7f1;
  void *s73c7f2[4];
  int s73c7f3[2];
  void *s73c7f4;
  ::S3350C4_nt s73c7f5;
  void *s73c7f6[2];
  virtual  ~S73C7(); // _ZN5S73C7D1Ev
  virtual void  v4(); // _ZN5S73C72v4Ev
  virtual void  v5(); // _ZN5S73C72v5Ev
  virtual void  v6(); // _ZN5S73C72v6Ev
  virtual void  v7(); // _ZN5S73C72v7Ev
  virtual void  v8(); // _ZN5S73C72v8Ev
  virtual void  v9(); // _ZN5S73C72v9Ev
  virtual void  v10(); // _ZN5S73C73v10Ev
  virtual void  v11(); // _ZN5S73C73v11Ev
  virtual void  v12(); // _ZN5S73C73v12Ev
  virtual void  v13(); // _ZN5S73C73v13Ev
  virtual void  v14(); // _ZN5S73C73v14Ev
  virtual void  v15(); // _ZN5S73C73v15Ev
  virtual void  v16(); // _ZN5S73C73v16Ev
  virtual void  v17(); // _ZN5S73C73v17Ev
  virtual void  v18(); // _ZN5S73C73v18Ev
  virtual void  v19(); // _ZN5S73C73v19Ev
  virtual void  v20(); // _ZN5S73C73v20Ev
  virtual void  v21(); // _ZN5S73C73v21Ev
  virtual void  v22(); // _ZN5S73C73v22Ev
  virtual void  v23(); // _ZN5S73C73v23Ev
  virtual void  v24(); // _ZN5S73C73v24Ev
  virtual void  v25(); // _ZN5S73C73v25Ev
  virtual void  v26(); // _ZN5S73C73v26Ev
  virtual void  v27(); // _ZN5S73C73v27Ev
  virtual void  v28(); // _ZN5S73C73v28Ev
  virtual void  v29(); // _ZN5S73C73v29Ev
  virtual void  v30(); // _ZN5S73C73v30Ev
  virtual void  v31(); // _ZN5S73C73v31Ev
  virtual void  v32(); // _ZN5S73C73v32Ev
  virtual void  v33(); // _ZN5S73C73v33Ev
  virtual void  v34(); // _ZN5S73C73v34Ev
  virtual void  v35(); // _ZN5S73C73v35Ev
  virtual void  v36(); // _ZN5S73C73v36Ev
  virtual void  v37(); // _ZN5S73C73v37Ev
  virtual void  v38(); // _ZN5S73C73v38Ev
  virtual void  v39(); // _ZN5S73C73v39Ev
  virtual void  v40(); // _ZN5S73C73v40Ev
  virtual void  v41(); // _ZN5S73C73v41Ev
  virtual void  v42(); // _ZN5S73C73v42Ev
  virtual void  v43(); // _ZN5S73C73v43Ev
  virtual void  v44(); // _ZN5S73C73v44Ev
  virtual void  v45(); // _ZN5S73C73v45Ev
  virtual void  v46(); // _ZN5S73C73v46Ev
  virtual void  v47(); // _ZN5S73C73v47Ev
  virtual void  v48(); // _ZN5S73C73v48Ev
  virtual void  v49(); // _ZN5S73C73v49Ev
  virtual void  v50(); // _ZN5S73C73v50Ev
  virtual void  v51(); // _ZN5S73C73v51Ev
  virtual void  v52(); // _ZN5S73C73v52Ev
  virtual void  v53(); // _ZN5S73C73v53Ev
  virtual void  v54(); // _ZN5S73C73v54Ev
  virtual void  v55(); // _ZN5S73C73v55Ev
  virtual void  v56(); // _ZN5S73C73v56Ev
  virtual void  v57(); // _ZN5S73C73v57Ev
  virtual void  v58(); // _ZN5S73C73v58Ev
  virtual void  v59(); // _ZN5S73C73v59Ev
  virtual void  v60(); // _ZN5S73C73v60Ev
  virtual void  v61(); // _ZN5S73C73v61Ev
  virtual void  v62(); // _ZN5S73C73v62Ev
  virtual void  v63(); // _ZN5S73C73v63Ev
  virtual void  v64(); // _ZN5S73C73v64Ev
  virtual void  v65(); // _ZN5S73C73v65Ev
  virtual void  v66(); // _ZN5S73C73v66Ev
  virtual void  v67(); // _ZN5S73C73v67Ev
  S73C7(); // tgen
};
//SIG(-1 S73C7) 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]}


 S73C7 ::~S73C7(){ note_dtor("S73C7", this);}
void  S73C7 ::v4(){vfunc_called(this, "_ZN5S73C72v4Ev");}
void  S73C7 ::v5(){vfunc_called(this, "_ZN5S73C72v5Ev");}
void  S73C7 ::v6(){vfunc_called(this, "_ZN5S73C72v6Ev");}
void  S73C7 ::v7(){vfunc_called(this, "_ZN5S73C72v7Ev");}
void  S73C7 ::v8(){vfunc_called(this, "_ZN5S73C72v8Ev");}
void  S73C7 ::v9(){vfunc_called(this, "_ZN5S73C72v9Ev");}
void  S73C7 ::v10(){vfunc_called(this, "_ZN5S73C73v10Ev");}
void  S73C7 ::v11(){vfunc_called(this, "_ZN5S73C73v11Ev");}
void  S73C7 ::v12(){vfunc_called(this, "_ZN5S73C73v12Ev");}
void  S73C7 ::v13(){vfunc_called(this, "_ZN5S73C73v13Ev");}
void  S73C7 ::v14(){vfunc_called(this, "_ZN5S73C73v14Ev");}
void  S73C7 ::v15(){vfunc_called(this, "_ZN5S73C73v15Ev");}
void  S73C7 ::v16(){vfunc_called(this, "_ZN5S73C73v16Ev");}
void  S73C7 ::v17(){vfunc_called(this, "_ZN5S73C73v17Ev");}
void  S73C7 ::v18(){vfunc_called(this, "_ZN5S73C73v18Ev");}
void  S73C7 ::v19(){vfunc_called(this, "_ZN5S73C73v19Ev");}
void  S73C7 ::v20(){vfunc_called(this, "_ZN5S73C73v20Ev");}
void  S73C7 ::v21(){vfunc_called(this, "_ZN5S73C73v21Ev");}
void  S73C7 ::v22(){vfunc_called(this, "_ZN5S73C73v22Ev");}
void  S73C7 ::v23(){vfunc_called(this, "_ZN5S73C73v23Ev");}
void  S73C7 ::v24(){vfunc_called(this, "_ZN5S73C73v24Ev");}
void  S73C7 ::v25(){vfunc_called(this, "_ZN5S73C73v25Ev");}
void  S73C7 ::v26(){vfunc_called(this, "_ZN5S73C73v26Ev");}
void  S73C7 ::v27(){vfunc_called(this, "_ZN5S73C73v27Ev");}
void  S73C7 ::v28(){vfunc_called(this, "_ZN5S73C73v28Ev");}
void  S73C7 ::v29(){vfunc_called(this, "_ZN5S73C73v29Ev");}
void  S73C7 ::v30(){vfunc_called(this, "_ZN5S73C73v30Ev");}
void  S73C7 ::v31(){vfunc_called(this, "_ZN5S73C73v31Ev");}
void  S73C7 ::v32(){vfunc_called(this, "_ZN5S73C73v32Ev");}
void  S73C7 ::v33(){vfunc_called(this, "_ZN5S73C73v33Ev");}
void  S73C7 ::v34(){vfunc_called(this, "_ZN5S73C73v34Ev");}
void  S73C7 ::v35(){vfunc_called(this, "_ZN5S73C73v35Ev");}
void  S73C7 ::v36(){vfunc_called(this, "_ZN5S73C73v36Ev");}
void  S73C7 ::v37(){vfunc_called(this, "_ZN5S73C73v37Ev");}
void  S73C7 ::v38(){vfunc_called(this, "_ZN5S73C73v38Ev");}
void  S73C7 ::v39(){vfunc_called(this, "_ZN5S73C73v39Ev");}
void  S73C7 ::v40(){vfunc_called(this, "_ZN5S73C73v40Ev");}
void  S73C7 ::v41(){vfunc_called(this, "_ZN5S73C73v41Ev");}
void  S73C7 ::v42(){vfunc_called(this, "_ZN5S73C73v42Ev");}
void  S73C7 ::v43(){vfunc_called(this, "_ZN5S73C73v43Ev");}
void  S73C7 ::v44(){vfunc_called(this, "_ZN5S73C73v44Ev");}
void  S73C7 ::v45(){vfunc_called(this, "_ZN5S73C73v45Ev");}
void  S73C7 ::v46(){vfunc_called(this, "_ZN5S73C73v46Ev");}
void  S73C7 ::v47(){vfunc_called(this, "_ZN5S73C73v47Ev");}
void  S73C7 ::v48(){vfunc_called(this, "_ZN5S73C73v48Ev");}
void  S73C7 ::v49(){vfunc_called(this, "_ZN5S73C73v49Ev");}
void  S73C7 ::v50(){vfunc_called(this, "_ZN5S73C73v50Ev");}
void  S73C7 ::v51(){vfunc_called(this, "_ZN5S73C73v51Ev");}
void  S73C7 ::v52(){vfunc_called(this, "_ZN5S73C73v52Ev");}
void  S73C7 ::v53(){vfunc_called(this, "_ZN5S73C73v53Ev");}
void  S73C7 ::v54(){vfunc_called(this, "_ZN5S73C73v54Ev");}
void  S73C7 ::v55(){vfunc_called(this, "_ZN5S73C73v55Ev");}
void  S73C7 ::v56(){vfunc_called(this, "_ZN5S73C73v56Ev");}
void  S73C7 ::v57(){vfunc_called(this, "_ZN5S73C73v57Ev");}
void  S73C7 ::v58(){vfunc_called(this, "_ZN5S73C73v58Ev");}
void  S73C7 ::v59(){vfunc_called(this, "_ZN5S73C73v59Ev");}
void  S73C7 ::v60(){vfunc_called(this, "_ZN5S73C73v60Ev");}
void  S73C7 ::v61(){vfunc_called(this, "_ZN5S73C73v61Ev");}
void  S73C7 ::v62(){vfunc_called(this, "_ZN5S73C73v62Ev");}
void  S73C7 ::v63(){vfunc_called(this, "_ZN5S73C73v63Ev");}
void  S73C7 ::v64(){vfunc_called(this, "_ZN5S73C73v64Ev");}
void  S73C7 ::v65(){vfunc_called(this, "_ZN5S73C73v65Ev");}
void  S73C7 ::v66(){vfunc_called(this, "_ZN5S73C73v66Ev");}
void  S73C7 ::v67(){vfunc_called(this, "_ZN5S73C73v67Ev");}
S73C7 ::S73C7(){ note_ctor("S73C7", this);} // tgen

static void Test_S73C7()
{
  extern Class_Descriptor cd_S73C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S73C7, buf);
    S73C7 *dp, &lv = *(dp=new (buf) S73C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S73C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S73C7)");
    check_field_offset(lv, s73c7f0, ABISELECT(8,4), "S73C7.s73c7f0");
    check_field_offset(lv, s73c7f1, ABISELECT(16,8), "S73C7.s73c7f1");
    check_field_offset(lv, s73c7f2, ABISELECT(24,16), "S73C7.s73c7f2");
    check_field_offset(lv, s73c7f3, ABISELECT(56,32), "S73C7.s73c7f3");
    check_field_offset(lv, s73c7f4, ABISELECT(64,40), "S73C7.s73c7f4");
    check_field_offset(lv, s73c7f5, ABISELECT(72,44), "S73C7.s73c7f5");
    check_field_offset(lv, s73c7f6, ABISELECT(80,52), "S73C7.s73c7f6");
    test_class_info(&lv, &cd_S73C7);
    dp->~S73C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS73C7(Test_S73C7, "S73C7", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN5S73C7C1Ev();
extern void _ZN5S73C7D1Ev();
Name_Map name_map_S73C7[] = {
  NSPAIR(_ZN5S73C7C1Ev),
  NSPAIR(_ZN5S73C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI5S73C7[];
extern void _ZN5S73C7D1Ev();
extern void _ZN5S73C7D0Ev();
extern void _ZN5S73C72v4Ev();
extern void _ZN5S73C72v5Ev();
extern void _ZN5S73C72v6Ev();
extern void _ZN5S73C72v7Ev();
extern void _ZN5S73C72v8Ev();
extern void _ZN5S73C72v9Ev();
extern void _ZN5S73C73v10Ev();
extern void _ZN5S73C73v11Ev();
extern void _ZN5S73C73v12Ev();
extern void _ZN5S73C73v13Ev();
extern void _ZN5S73C73v14Ev();
extern void _ZN5S73C73v15Ev();
extern void _ZN5S73C73v16Ev();
extern void _ZN5S73C73v17Ev();
extern void _ZN5S73C73v18Ev();
extern void _ZN5S73C73v19Ev();
extern void _ZN5S73C73v20Ev();
extern void _ZN5S73C73v21Ev();
extern void _ZN5S73C73v22Ev();
extern void _ZN5S73C73v23Ev();
extern void _ZN5S73C73v24Ev();
extern void _ZN5S73C73v25Ev();
extern void _ZN5S73C73v26Ev();
extern void _ZN5S73C73v27Ev();
extern void _ZN5S73C73v28Ev();
extern void _ZN5S73C73v29Ev();
extern void _ZN5S73C73v30Ev();
extern void _ZN5S73C73v31Ev();
extern void _ZN5S73C73v32Ev();
extern void _ZN5S73C73v33Ev();
extern void _ZN5S73C73v34Ev();
extern void _ZN5S73C73v35Ev();
extern void _ZN5S73C73v36Ev();
extern void _ZN5S73C73v37Ev();
extern void _ZN5S73C73v38Ev();
extern void _ZN5S73C73v39Ev();
extern void _ZN5S73C73v40Ev();
extern void _ZN5S73C73v41Ev();
extern void _ZN5S73C73v42Ev();
extern void _ZN5S73C73v43Ev();
extern void _ZN5S73C73v44Ev();
extern void _ZN5S73C73v45Ev();
extern void _ZN5S73C73v46Ev();
extern void _ZN5S73C73v47Ev();
extern void _ZN5S73C73v48Ev();
extern void _ZN5S73C73v49Ev();
extern void _ZN5S73C73v50Ev();
extern void _ZN5S73C73v51Ev();
extern void _ZN5S73C73v52Ev();
extern void _ZN5S73C73v53Ev();
extern void _ZN5S73C73v54Ev();
extern void _ZN5S73C73v55Ev();
extern void _ZN5S73C73v56Ev();
extern void _ZN5S73C73v57Ev();
extern void _ZN5S73C73v58Ev();
extern void _ZN5S73C73v59Ev();
extern void _ZN5S73C73v60Ev();
extern void _ZN5S73C73v61Ev();
extern void _ZN5S73C73v62Ev();
extern void _ZN5S73C73v63Ev();
extern void _ZN5S73C73v64Ev();
extern void _ZN5S73C73v65Ev();
extern void _ZN5S73C73v66Ev();
extern void _ZN5S73C73v67Ev();
static  VTBL_ENTRY vtc_S73C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S73C7[0]),
  (VTBL_ENTRY)&_ZN5S73C7D1Ev,
  (VTBL_ENTRY)&_ZN5S73C7D0Ev,
  (VTBL_ENTRY)&_ZN5S73C72v4Ev,
  (VTBL_ENTRY)&_ZN5S73C72v5Ev,
  (VTBL_ENTRY)&_ZN5S73C72v6Ev,
  (VTBL_ENTRY)&_ZN5S73C72v7Ev,
  (VTBL_ENTRY)&_ZN5S73C72v8Ev,
  (VTBL_ENTRY)&_ZN5S73C72v9Ev,
  (VTBL_ENTRY)&_ZN5S73C73v10Ev,
  (VTBL_ENTRY)&_ZN5S73C73v11Ev,
  (VTBL_ENTRY)&_ZN5S73C73v12Ev,
  (VTBL_ENTRY)&_ZN5S73C73v13Ev,
  (VTBL_ENTRY)&_ZN5S73C73v14Ev,
  (VTBL_ENTRY)&_ZN5S73C73v15Ev,
  (VTBL_ENTRY)&_ZN5S73C73v16Ev,
  (VTBL_ENTRY)&_ZN5S73C73v17Ev,
  (VTBL_ENTRY)&_ZN5S73C73v18Ev,
  (VTBL_ENTRY)&_ZN5S73C73v19Ev,
  (VTBL_ENTRY)&_ZN5S73C73v20Ev,
  (VTBL_ENTRY)&_ZN5S73C73v21Ev,
  (VTBL_ENTRY)&_ZN5S73C73v22Ev,
  (VTBL_ENTRY)&_ZN5S73C73v23Ev,
  (VTBL_ENTRY)&_ZN5S73C73v24Ev,
  (VTBL_ENTRY)&_ZN5S73C73v25Ev,
  (VTBL_ENTRY)&_ZN5S73C73v26Ev,
  (VTBL_ENTRY)&_ZN5S73C73v27Ev,
  (VTBL_ENTRY)&_ZN5S73C73v28Ev,
  (VTBL_ENTRY)&_ZN5S73C73v29Ev,
  (VTBL_ENTRY)&_ZN5S73C73v30Ev,
  (VTBL_ENTRY)&_ZN5S73C73v31Ev,
  (VTBL_ENTRY)&_ZN5S73C73v32Ev,
  (VTBL_ENTRY)&_ZN5S73C73v33Ev,
  (VTBL_ENTRY)&_ZN5S73C73v34Ev,
  (VTBL_ENTRY)&_ZN5S73C73v35Ev,
  (VTBL_ENTRY)&_ZN5S73C73v36Ev,
  (VTBL_ENTRY)&_ZN5S73C73v37Ev,
  (VTBL_ENTRY)&_ZN5S73C73v38Ev,
  (VTBL_ENTRY)&_ZN5S73C73v39Ev,
  (VTBL_ENTRY)&_ZN5S73C73v40Ev,
  (VTBL_ENTRY)&_ZN5S73C73v41Ev,
  (VTBL_ENTRY)&_ZN5S73C73v42Ev,
  (VTBL_ENTRY)&_ZN5S73C73v43Ev,
  (VTBL_ENTRY)&_ZN5S73C73v44Ev,
  (VTBL_ENTRY)&_ZN5S73C73v45Ev,
  (VTBL_ENTRY)&_ZN5S73C73v46Ev,
  (VTBL_ENTRY)&_ZN5S73C73v47Ev,
  (VTBL_ENTRY)&_ZN5S73C73v48Ev,
  (VTBL_ENTRY)&_ZN5S73C73v49Ev,
  (VTBL_ENTRY)&_ZN5S73C73v50Ev,
  (VTBL_ENTRY)&_ZN5S73C73v51Ev,
  (VTBL_ENTRY)&_ZN5S73C73v52Ev,
  (VTBL_ENTRY)&_ZN5S73C73v53Ev,
  (VTBL_ENTRY)&_ZN5S73C73v54Ev,
  (VTBL_ENTRY)&_ZN5S73C73v55Ev,
  (VTBL_ENTRY)&_ZN5S73C73v56Ev,
  (VTBL_ENTRY)&_ZN5S73C73v57Ev,
  (VTBL_ENTRY)&_ZN5S73C73v58Ev,
  (VTBL_ENTRY)&_ZN5S73C73v59Ev,
  (VTBL_ENTRY)&_ZN5S73C73v60Ev,
  (VTBL_ENTRY)&_ZN5S73C73v61Ev,
  (VTBL_ENTRY)&_ZN5S73C73v62Ev,
  (VTBL_ENTRY)&_ZN5S73C73v63Ev,
  (VTBL_ENTRY)&_ZN5S73C73v64Ev,
  (VTBL_ENTRY)&_ZN5S73C73v65Ev,
  (VTBL_ENTRY)&_ZN5S73C73v66Ev,
  (VTBL_ENTRY)&_ZN5S73C73v67Ev,
};
extern VTBL_ENTRY _ZTI5S73C7[];
extern  VTBL_ENTRY _ZTV5S73C7[];
Class_Descriptor cd_S73C7 = {  "S73C7", // class name
  0,0,//no base classes
  &(vtc_S73C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI5S73C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV5S73C7),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  S73C6  : S73C7 {
  int s73c6f0[2];
  void *s73c6f1;
  int s73c6f2[2];
  ::S287C8_nt s73c6f3;
  ::S287C8_nt s73c6f4;
  ::S2121C38 s73c6f5;
  ::S287C8_nt s73c6f6;
  unsigned int s73c6f7:1;
  unsigned int s73c6f8:1;
  unsigned int s73c6f9:1;
  unsigned int s73c6f10:1;
  unsigned int s73c6f11:1;
  int s73c6f12[2];
  virtual  ~S73C6(); // _ZN5S73C6D1Ev
  virtual void  v68(); // _ZN5S73C63v68Ev
  virtual void  v69(); // _ZN5S73C63v69Ev
  virtual void  v70(); // _ZN5S73C63v70Ev
  virtual void  v71(); // _ZN5S73C63v71Ev
  virtual void  v72(); // _ZN5S73C63v72Ev
  virtual void  v73(); // _ZN5S73C63v73Ev
  virtual void  v74(); // _ZN5S73C63v74Ev
  virtual void  v75(); // _ZN5S73C63v75Ev
  virtual void  v76(); // _ZN5S73C63v76Ev
  virtual void  v77(); // _ZN5S73C63v77Ev
  virtual void  v78(); // _ZN5S73C63v78Ev
  virtual void  v79(); // _ZN5S73C63v79Ev
  virtual void  v80(); // _ZN5S73C63v80Ev
  virtual void  v81(); // _ZN5S73C63v81Ev
  virtual void  v82(); // _ZN5S73C63v82Ev
  virtual void  v83(); // _ZN5S73C63v83Ev
  virtual void  v84(); // _ZN5S73C63v84Ev
  virtual void  v85(); // _ZN5S73C63v85Ev
  virtual void  v86(); // _ZN5S73C63v86Ev
  virtual void  v87(); // _ZN5S73C63v87Ev
  virtual void  v88(); // _ZN5S73C63v88Ev
  virtual void  v89(); // _ZN5S73C63v89Ev
  S73C6(); // tgen
};
//SIG(-1 S73C6) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S73C6 ::~S73C6(){ note_dtor("S73C6", this);}
void  S73C6 ::v68(){vfunc_called(this, "_ZN5S73C63v68Ev");}
void  S73C6 ::v69(){vfunc_called(this, "_ZN5S73C63v69Ev");}
void  S73C6 ::v70(){vfunc_called(this, "_ZN5S73C63v70Ev");}
void  S73C6 ::v71(){vfunc_called(this, "_ZN5S73C63v71Ev");}
void  S73C6 ::v72(){vfunc_called(this, "_ZN5S73C63v72Ev");}
void  S73C6 ::v73(){vfunc_called(this, "_ZN5S73C63v73Ev");}
void  S73C6 ::v74(){vfunc_called(this, "_ZN5S73C63v74Ev");}
void  S73C6 ::v75(){vfunc_called(this, "_ZN5S73C63v75Ev");}
void  S73C6 ::v76(){vfunc_called(this, "_ZN5S73C63v76Ev");}
void  S73C6 ::v77(){vfunc_called(this, "_ZN5S73C63v77Ev");}
void  S73C6 ::v78(){vfunc_called(this, "_ZN5S73C63v78Ev");}
void  S73C6 ::v79(){vfunc_called(this, "_ZN5S73C63v79Ev");}
void  S73C6 ::v80(){vfunc_called(this, "_ZN5S73C63v80Ev");}
void  S73C6 ::v81(){vfunc_called(this, "_ZN5S73C63v81Ev");}
void  S73C6 ::v82(){vfunc_called(this, "_ZN5S73C63v82Ev");}
void  S73C6 ::v83(){vfunc_called(this, "_ZN5S73C63v83Ev");}
void  S73C6 ::v84(){vfunc_called(this, "_ZN5S73C63v84Ev");}
void  S73C6 ::v85(){vfunc_called(this, "_ZN5S73C63v85Ev");}
void  S73C6 ::v86(){vfunc_called(this, "_ZN5S73C63v86Ev");}
void  S73C6 ::v87(){vfunc_called(this, "_ZN5S73C63v87Ev");}
void  S73C6 ::v88(){vfunc_called(this, "_ZN5S73C63v88Ev");}
void  S73C6 ::v89(){vfunc_called(this, "_ZN5S73C63v89Ev");}
S73C6 ::S73C6(){ note_ctor("S73C6", this);} // tgen

static void Test_S73C6()
{
  extern Class_Descriptor cd_S73C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S73C6, buf);
    S73C6 *dp, &lv = *(dp=new (buf) S73C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S73C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S73C6)");
    check_base_class_offset(lv, (S73C7*), 0, "S73C6");
    check_field_offset(lv, s73c6f0, ABISELECT(96,60), "S73C6.s73c6f0");
    check_field_offset(lv, s73c6f1, ABISELECT(104,68), "S73C6.s73c6f1");
    check_field_offset(lv, s73c6f2, ABISELECT(112,72), "S73C6.s73c6f2");
    check_field_offset(lv, s73c6f3, ABISELECT(120,80), "S73C6.s73c6f3");
    check_field_offset(lv, s73c6f4, ABISELECT(136,92), "S73C6.s73c6f4");
    check_field_offset(lv, s73c6f5, ABISELECT(152,104), "S73C6.s73c6f5");
    check_field_offset(lv, s73c6f6, ABISELECT(160,108), "S73C6.s73c6f6");
    set_bf_and_test(lv, s73c6f7, ABISELECT(176,120), 0, 1, 1, "S73C6");
    set_bf_and_test(lv, s73c6f8, ABISELECT(176,120), 1, 1, 1, "S73C6");
    set_bf_and_test(lv, s73c6f9, ABISELECT(176,120), 2, 1, 1, "S73C6");
    set_bf_and_test(lv, s73c6f10, ABISELECT(176,120), 3, 1, 1, "S73C6");
    set_bf_and_test(lv, s73c6f11, ABISELECT(176,120), 4, 1, 1, "S73C6");
    check_field_offset(lv, s73c6f12, ABISELECT(180,124), "S73C6.s73c6f12");
    test_class_info(&lv, &cd_S73C6);
    dp->~S73C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS73C6(Test_S73C6, "S73C6", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN5S73C6C1Ev();
extern void _ZN5S73C6D1Ev();
Name_Map name_map_S73C6[] = {
  NSPAIR(_ZN5S73C6C1Ev),
  NSPAIR(_ZN5S73C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S73C7;
extern VTBL_ENTRY _ZTI5S73C7[];
extern  VTBL_ENTRY _ZTV5S73C7[];
static Base_Class bases_S73C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S73C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI5S73C6[];
extern void _ZN5S73C6D1Ev();
extern void _ZN5S73C6D0Ev();
extern void _ZN5S73C72v4Ev();
extern void _ZN5S73C72v5Ev();
extern void _ZN5S73C72v6Ev();
extern void _ZN5S73C72v7Ev();
extern void _ZN5S73C72v8Ev();
extern void _ZN5S73C72v9Ev();
extern void _ZN5S73C73v10Ev();
extern void _ZN5S73C73v11Ev();
extern void _ZN5S73C73v12Ev();
extern void _ZN5S73C73v13Ev();
extern void _ZN5S73C73v14Ev();
extern void _ZN5S73C73v15Ev();
extern void _ZN5S73C73v16Ev();
extern void _ZN5S73C73v17Ev();
extern void _ZN5S73C73v18Ev();
extern void _ZN5S73C73v19Ev();
extern void _ZN5S73C73v20Ev();
extern void _ZN5S73C73v21Ev();
extern void _ZN5S73C73v22Ev();
extern void _ZN5S73C73v23Ev();
extern void _ZN5S73C73v24Ev();
extern void _ZN5S73C73v25Ev();
extern void _ZN5S73C73v26Ev();
extern void _ZN5S73C73v27Ev();
extern void _ZN5S73C73v28Ev();
extern void _ZN5S73C73v29Ev();
extern void _ZN5S73C73v30Ev();
extern void _ZN5S73C73v31Ev();
extern void _ZN5S73C73v32Ev();
extern void _ZN5S73C73v33Ev();
extern void _ZN5S73C73v34Ev();
extern void _ZN5S73C73v35Ev();
extern void _ZN5S73C73v36Ev();
extern void _ZN5S73C73v37Ev();
extern void _ZN5S73C73v38Ev();
extern void _ZN5S73C73v39Ev();
extern void _ZN5S73C73v40Ev();
extern void _ZN5S73C73v41Ev();
extern void _ZN5S73C73v42Ev();
extern void _ZN5S73C73v43Ev();
extern void _ZN5S73C73v44Ev();
extern void _ZN5S73C73v45Ev();
extern void _ZN5S73C73v46Ev();
extern void _ZN5S73C73v47Ev();
extern void _ZN5S73C73v48Ev();
extern void _ZN5S73C73v49Ev();
extern void _ZN5S73C73v50Ev();
extern void _ZN5S73C73v51Ev();
extern void _ZN5S73C73v52Ev();
extern void _ZN5S73C73v53Ev();
extern void _ZN5S73C73v54Ev();
extern void _ZN5S73C73v55Ev();
extern void _ZN5S73C73v56Ev();
extern void _ZN5S73C73v57Ev();
extern void _ZN5S73C73v58Ev();
extern void _ZN5S73C73v59Ev();
extern void _ZN5S73C73v60Ev();
extern void _ZN5S73C73v61Ev();
extern void _ZN5S73C73v62Ev();
extern void _ZN5S73C73v63Ev();
extern void _ZN5S73C73v64Ev();
extern void _ZN5S73C73v65Ev();
extern void _ZN5S73C73v66Ev();
extern void _ZN5S73C73v67Ev();
extern void _ZN5S73C63v68Ev();
extern void _ZN5S73C63v69Ev();
extern void _ZN5S73C63v70Ev();
extern void _ZN5S73C63v71Ev();
extern void _ZN5S73C63v72Ev();
extern void _ZN5S73C63v73Ev();
extern void _ZN5S73C63v74Ev();
extern void _ZN5S73C63v75Ev();
extern void _ZN5S73C63v76Ev();
extern void _ZN5S73C63v77Ev();
extern void _ZN5S73C63v78Ev();
extern void _ZN5S73C63v79Ev();
extern void _ZN5S73C63v80Ev();
extern void _ZN5S73C63v81Ev();
extern void _ZN5S73C63v82Ev();
extern void _ZN5S73C63v83Ev();
extern void _ZN5S73C63v84Ev();
extern void _ZN5S73C63v85Ev();
extern void _ZN5S73C63v86Ev();
extern void _ZN5S73C63v87Ev();
extern void _ZN5S73C63v88Ev();
extern void _ZN5S73C63v89Ev();
static  VTBL_ENTRY vtc_S73C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S73C6[0]),
  (VTBL_ENTRY)&_ZN5S73C6D1Ev,
  (VTBL_ENTRY)&_ZN5S73C6D0Ev,
  (VTBL_ENTRY)&_ZN5S73C72v4Ev,
  (VTBL_ENTRY)&_ZN5S73C72v5Ev,
  (VTBL_ENTRY)&_ZN5S73C72v6Ev,
  (VTBL_ENTRY)&_ZN5S73C72v7Ev,
  (VTBL_ENTRY)&_ZN5S73C72v8Ev,
  (VTBL_ENTRY)&_ZN5S73C72v9Ev,
  (VTBL_ENTRY)&_ZN5S73C73v10Ev,
  (VTBL_ENTRY)&_ZN5S73C73v11Ev,
  (VTBL_ENTRY)&_ZN5S73C73v12Ev,
  (VTBL_ENTRY)&_ZN5S73C73v13Ev,
  (VTBL_ENTRY)&_ZN5S73C73v14Ev,
  (VTBL_ENTRY)&_ZN5S73C73v15Ev,
  (VTBL_ENTRY)&_ZN5S73C73v16Ev,
  (VTBL_ENTRY)&_ZN5S73C73v17Ev,
  (VTBL_ENTRY)&_ZN5S73C73v18Ev,
  (VTBL_ENTRY)&_ZN5S73C73v19Ev,
  (VTBL_ENTRY)&_ZN5S73C73v20Ev,
  (VTBL_ENTRY)&_ZN5S73C73v21Ev,
  (VTBL_ENTRY)&_ZN5S73C73v22Ev,
  (VTBL_ENTRY)&_ZN5S73C73v23Ev,
  (VTBL_ENTRY)&_ZN5S73C73v24Ev,
  (VTBL_ENTRY)&_ZN5S73C73v25Ev,
  (VTBL_ENTRY)&_ZN5S73C73v26Ev,
  (VTBL_ENTRY)&_ZN5S73C73v27Ev,
  (VTBL_ENTRY)&_ZN5S73C73v28Ev,
  (VTBL_ENTRY)&_ZN5S73C73v29Ev,
  (VTBL_ENTRY)&_ZN5S73C73v30Ev,
  (VTBL_ENTRY)&_ZN5S73C73v31Ev,
  (VTBL_ENTRY)&_ZN5S73C73v32Ev,
  (VTBL_ENTRY)&_ZN5S73C73v33Ev,
  (VTBL_ENTRY)&_ZN5S73C73v34Ev,
  (VTBL_ENTRY)&_ZN5S73C73v35Ev,
  (VTBL_ENTRY)&_ZN5S73C73v36Ev,
  (VTBL_ENTRY)&_ZN5S73C73v37Ev,
  (VTBL_ENTRY)&_ZN5S73C73v38Ev,
  (VTBL_ENTRY)&_ZN5S73C73v39Ev,
  (VTBL_ENTRY)&_ZN5S73C73v40Ev,
  (VTBL_ENTRY)&_ZN5S73C73v41Ev,
  (VTBL_ENTRY)&_ZN5S73C73v42Ev,
  (VTBL_ENTRY)&_ZN5S73C73v43Ev,
  (VTBL_ENTRY)&_ZN5S73C73v44Ev,
  (VTBL_ENTRY)&_ZN5S73C73v45Ev,
  (VTBL_ENTRY)&_ZN5S73C73v46Ev,
  (VTBL_ENTRY)&_ZN5S73C73v47Ev,
  (VTBL_ENTRY)&_ZN5S73C73v48Ev,
  (VTBL_ENTRY)&_ZN5S73C73v49Ev,
  (VTBL_ENTRY)&_ZN5S73C73v50Ev,
  (VTBL_ENTRY)&_ZN5S73C73v51Ev,
  (VTBL_ENTRY)&_ZN5S73C73v52Ev,
  (VTBL_ENTRY)&_ZN5S73C73v53Ev,
  (VTBL_ENTRY)&_ZN5S73C73v54Ev,
  (VTBL_ENTRY)&_ZN5S73C73v55Ev,
  (VTBL_ENTRY)&_ZN5S73C73v56Ev,
  (VTBL_ENTRY)&_ZN5S73C73v57Ev,
  (VTBL_ENTRY)&_ZN5S73C73v58Ev,
  (VTBL_ENTRY)&_ZN5S73C73v59Ev,
  (VTBL_ENTRY)&_ZN5S73C73v60Ev,
  (VTBL_ENTRY)&_ZN5S73C73v61Ev,
  (VTBL_ENTRY)&_ZN5S73C73v62Ev,
  (VTBL_ENTRY)&_ZN5S73C73v63Ev,
  (VTBL_ENTRY)&_ZN5S73C73v64Ev,
  (VTBL_ENTRY)&_ZN5S73C73v65Ev,
  (VTBL_ENTRY)&_ZN5S73C73v66Ev,
  (VTBL_ENTRY)&_ZN5S73C73v67Ev,
  (VTBL_ENTRY)&_ZN5S73C63v68Ev,
  (VTBL_ENTRY)&_ZN5S73C63v69Ev,
  (VTBL_ENTRY)&_ZN5S73C63v70Ev,
  (VTBL_ENTRY)&_ZN5S73C63v71Ev,
  (VTBL_ENTRY)&_ZN5S73C63v72Ev,
  (VTBL_ENTRY)&_ZN5S73C63v73Ev,
  (VTBL_ENTRY)&_ZN5S73C63v74Ev,
  (VTBL_ENTRY)&_ZN5S73C63v75Ev,
  (VTBL_ENTRY)&_ZN5S73C63v76Ev,
  (VTBL_ENTRY)&_ZN5S73C63v77Ev,
  (VTBL_ENTRY)&_ZN5S73C63v78Ev,
  (VTBL_ENTRY)&_ZN5S73C63v79Ev,
  (VTBL_ENTRY)&_ZN5S73C63v80Ev,
  (VTBL_ENTRY)&_ZN5S73C63v81Ev,
  (VTBL_ENTRY)&_ZN5S73C63v82Ev,
  (VTBL_ENTRY)&_ZN5S73C63v83Ev,
  (VTBL_ENTRY)&_ZN5S73C63v84Ev,
  (VTBL_ENTRY)&_ZN5S73C63v85Ev,
  (VTBL_ENTRY)&_ZN5S73C63v86Ev,
  (VTBL_ENTRY)&_ZN5S73C63v87Ev,
  (VTBL_ENTRY)&_ZN5S73C63v88Ev,
  (VTBL_ENTRY)&_ZN5S73C63v89Ev,
};
extern VTBL_ENTRY _ZTI5S73C6[];
extern  VTBL_ENTRY _ZTV5S73C6[];
Class_Descriptor cd_S73C6 = {  "S73C6", // class name
  bases_S73C6, 1,
  &(vtc_S73C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI5S73C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S73C6),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S73C5  : S73C6 {
  unsigned int s73c5f0:1;
  unsigned int s73c5f1:1;
  unsigned int s73c5f2:1;
  ::S3350C17 s73c5f3;
  ::S3350C11 s73c5f4;
  ::S3350C5_nt s73c5f5;
  ::S287C27 s73c5f6;
  int s73c5f7[3];
  virtual  ~S73C5(); // _ZN5S73C5D1Ev
  virtual void  v90(); // _ZN5S73C53v90Ev
  virtual void  v91(); // _ZN5S73C53v91Ev
  virtual void  v92(); // _ZN5S73C53v92Ev
  virtual void  v93(); // _ZN5S73C53v93Ev
  virtual void  v94(); // _ZN5S73C53v94Ev
  virtual void  v95(); // _ZN5S73C53v95Ev
  virtual void  v96(); // _ZN5S73C53v96Ev
  virtual void  v97(); // _ZN5S73C53v97Ev
  virtual void  v98(); // _ZN5S73C53v98Ev
  virtual void  v99(); // _ZN5S73C53v99Ev
  virtual void  v100(); // _ZN5S73C54v100Ev
  virtual void  v101(); // _ZN5S73C54v101Ev
  virtual void  v102(); // _ZN5S73C54v102Ev
  virtual void  v103(); // _ZN5S73C54v103Ev
  virtual void  v104(); // _ZN5S73C54v104Ev
  virtual void  v105(); // _ZN5S73C54v105Ev
  virtual void  v106(); // _ZN5S73C54v106Ev
  virtual void  v107(); // _ZN5S73C54v107Ev
  virtual void  v108(); // _ZN5S73C54v108Ev
  virtual void  v109(); // _ZN5S73C54v109Ev
  S73C5(); // tgen
};
//SIG(-1 S73C5) C1{ BC2{ BC3{ vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 FC10{ BC11{ BC8}} FC12{ BC13{ BC8}} FC14{ BC15{ BC8}} FC16{ BC17{ BC8}} Fi[3]}


 S73C5 ::~S73C5(){ note_dtor("S73C5", this);}
void  S73C5 ::v90(){vfunc_called(this, "_ZN5S73C53v90Ev");}
void  S73C5 ::v91(){vfunc_called(this, "_ZN5S73C53v91Ev");}
void  S73C5 ::v92(){vfunc_called(this, "_ZN5S73C53v92Ev");}
void  S73C5 ::v93(){vfunc_called(this, "_ZN5S73C53v93Ev");}
void  S73C5 ::v94(){vfunc_called(this, "_ZN5S73C53v94Ev");}
void  S73C5 ::v95(){vfunc_called(this, "_ZN5S73C53v95Ev");}
void  S73C5 ::v96(){vfunc_called(this, "_ZN5S73C53v96Ev");}
void  S73C5 ::v97(){vfunc_called(this, "_ZN5S73C53v97Ev");}
void  S73C5 ::v98(){vfunc_called(this, "_ZN5S73C53v98Ev");}
void  S73C5 ::v99(){vfunc_called(this, "_ZN5S73C53v99Ev");}
void  S73C5 ::v100(){vfunc_called(this, "_ZN5S73C54v100Ev");}
void  S73C5 ::v101(){vfunc_called(this, "_ZN5S73C54v101Ev");}
void  S73C5 ::v102(){vfunc_called(this, "_ZN5S73C54v102Ev");}
void  S73C5 ::v103(){vfunc_called(this, "_ZN5S73C54v103Ev");}
void  S73C5 ::v104(){vfunc_called(this, "_ZN5S73C54v104Ev");}
void  S73C5 ::v105(){vfunc_called(this, "_ZN5S73C54v105Ev");}
void  S73C5 ::v106(){vfunc_called(this, "_ZN5S73C54v106Ev");}
void  S73C5 ::v107(){vfunc_called(this, "_ZN5S73C54v107Ev");}
void  S73C5 ::v108(){vfunc_called(this, "_ZN5S73C54v108Ev");}
void  S73C5 ::v109(){vfunc_called(this, "_ZN5S73C54v109Ev");}
S73C5 ::S73C5(){ note_ctor("S73C5", this);} // tgen

static void Test_S73C5()
{
  extern Class_Descriptor cd_S73C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S73C5, buf);
    S73C5 *dp, &lv = *(dp=new (buf) S73C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S73C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S73C5)");
    check_base_class_offset(lv, (S73C7*)(S73C6*), 0, "S73C5");
    check_base_class_offset(lv, (S73C6*), 0, "S73C5");
    set_bf_and_test(lv, s73c5f0, ABISELECT(188,132), 0, 1, 1, "S73C5");
    set_bf_and_test(lv, s73c5f1, ABISELECT(188,132), 1, 1, 1, "S73C5");
    set_bf_and_test(lv, s73c5f2, ABISELECT(188,132), 2, 1, 1, "S73C5");
    check_field_offset(lv, s73c5f3, ABISELECT(192,136), "S73C5.s73c5f3");
    check_field_offset(lv, s73c5f4, ABISELECT(208,148), "S73C5.s73c5f4");
    check_field_offset(lv, s73c5f5, ABISELECT(224,160), "S73C5.s73c5f5");
    check_field_offset(lv, s73c5f6, ABISELECT(240,172), "S73C5.s73c5f6");
    check_field_offset(lv, s73c5f7, ABISELECT(256,184), "S73C5.s73c5f7");
    test_class_info(&lv, &cd_S73C5);
    dp->~S73C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS73C5(Test_S73C5, "S73C5", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN5S73C5C1Ev();
extern void _ZN5S73C5D1Ev();
Name_Map name_map_S73C5[] = {
  NSPAIR(_ZN5S73C5C1Ev),
  NSPAIR(_ZN5S73C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S73C7;
extern VTBL_ENTRY _ZTI5S73C7[];
extern  VTBL_ENTRY _ZTV5S73C7[];
extern Class_Descriptor cd_S73C6;
extern VTBL_ENTRY _ZTI5S73C6[];
extern  VTBL_ENTRY _ZTV5S73C6[];
static Base_Class bases_S73C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S73C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S73C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S73C5[];
extern void _ZN5S73C5D1Ev();
extern void _ZN5S73C5D0Ev();
extern void _ZN5S73C72v4Ev();
extern void _ZN5S73C72v5Ev();
extern void _ZN5S73C72v6Ev();
extern void _ZN5S73C72v7Ev();
extern void _ZN5S73C72v8Ev();
extern void _ZN5S73C72v9Ev();
extern void _ZN5S73C73v10Ev();
extern void _ZN5S73C73v11Ev();
extern void _ZN5S73C73v12Ev();
extern void _ZN5S73C73v13Ev();
extern void _ZN5S73C73v14Ev();
extern void _ZN5S73C73v15Ev();
extern void _ZN5S73C73v16Ev();
extern void _ZN5S73C73v17Ev();
extern void _ZN5S73C73v18Ev();
extern void _ZN5S73C73v19Ev();
extern void _ZN5S73C73v20Ev();
extern void _ZN5S73C73v21Ev();
extern void _ZN5S73C73v22Ev();
extern void _ZN5S73C73v23Ev();
extern void _ZN5S73C73v24Ev();
extern void _ZN5S73C73v25Ev();
extern void _ZN5S73C73v26Ev();
extern void _ZN5S73C73v27Ev();
extern void _ZN5S73C73v28Ev();
extern void _ZN5S73C73v29Ev();
extern void _ZN5S73C73v30Ev();
extern void _ZN5S73C73v31Ev();
extern void _ZN5S73C73v32Ev();
extern void _ZN5S73C73v33Ev();
extern void _ZN5S73C73v34Ev();
extern void _ZN5S73C73v35Ev();
extern void _ZN5S73C73v36Ev();
extern void _ZN5S73C73v37Ev();
extern void _ZN5S73C73v38Ev();
extern void _ZN5S73C73v39Ev();
extern void _ZN5S73C73v40Ev();
extern void _ZN5S73C73v41Ev();
extern void _ZN5S73C73v42Ev();
extern void _ZN5S73C73v43Ev();
extern void _ZN5S73C73v44Ev();
extern void _ZN5S73C73v45Ev();
extern void _ZN5S73C73v46Ev();
extern void _ZN5S73C73v47Ev();
extern void _ZN5S73C73v48Ev();
extern void _ZN5S73C73v49Ev();
extern void _ZN5S73C73v50Ev();
extern void _ZN5S73C73v51Ev();
extern void _ZN5S73C73v52Ev();
extern void _ZN5S73C73v53Ev();
extern void _ZN5S73C73v54Ev();
extern void _ZN5S73C73v55Ev();
extern void _ZN5S73C73v56Ev();
extern void _ZN5S73C73v57Ev();
extern void _ZN5S73C73v58Ev();
extern void _ZN5S73C73v59Ev();
extern void _ZN5S73C73v60Ev();
extern void _ZN5S73C73v61Ev();
extern void _ZN5S73C73v62Ev();
extern void _ZN5S73C73v63Ev();
extern void _ZN5S73C73v64Ev();
extern void _ZN5S73C73v65Ev();
extern void _ZN5S73C73v66Ev();
extern void _ZN5S73C73v67Ev();
extern void _ZN5S73C63v68Ev();
extern void _ZN5S73C63v69Ev();
extern void _ZN5S73C63v70Ev();
extern void _ZN5S73C63v71Ev();
extern void _ZN5S73C63v72Ev();
extern void _ZN5S73C63v73Ev();
extern void _ZN5S73C63v74Ev();
extern void _ZN5S73C63v75Ev();
extern void _ZN5S73C63v76Ev();
extern void _ZN5S73C63v77Ev();
extern void _ZN5S73C63v78Ev();
extern void _ZN5S73C63v79Ev();
extern void _ZN5S73C63v80Ev();
extern void _ZN5S73C63v81Ev();
extern void _ZN5S73C63v82Ev();
extern void _ZN5S73C63v83Ev();
extern void _ZN5S73C63v84Ev();
extern void _ZN5S73C63v85Ev();
extern void _ZN5S73C63v86Ev();
extern void _ZN5S73C63v87Ev();
extern void _ZN5S73C63v88Ev();
extern void _ZN5S73C63v89Ev();
extern void _ZN5S73C53v90Ev();
extern void _ZN5S73C53v91Ev();
extern void _ZN5S73C53v92Ev();
extern void _ZN5S73C53v93Ev();
extern void _ZN5S73C53v94Ev();
extern void _ZN5S73C53v95Ev();
extern void _ZN5S73C53v96Ev();
extern void _ZN5S73C53v97Ev();
extern void _ZN5S73C53v98Ev();
extern void _ZN5S73C53v99Ev();
extern void _ZN5S73C54v100Ev();
extern void _ZN5S73C54v101Ev();
extern void _ZN5S73C54v102Ev();
extern void _ZN5S73C54v103Ev();
extern void _ZN5S73C54v104Ev();
extern void _ZN5S73C54v105Ev();
extern void _ZN5S73C54v106Ev();
extern void _ZN5S73C54v107Ev();
extern void _ZN5S73C54v108Ev();
extern void _ZN5S73C54v109Ev();
static  VTBL_ENTRY vtc_S73C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S73C5[0]),
  (VTBL_ENTRY)&_ZN5S73C5D1Ev,
  (VTBL_ENTRY)&_ZN5S73C5D0Ev,
  (VTBL_ENTRY)&_ZN5S73C72v4Ev,
  (VTBL_ENTRY)&_ZN5S73C72v5Ev,
  (VTBL_ENTRY)&_ZN5S73C72v6Ev,
  (VTBL_ENTRY)&_ZN5S73C72v7Ev,
  (VTBL_ENTRY)&_ZN5S73C72v8Ev,
  (VTBL_ENTRY)&_ZN5S73C72v9Ev,
  (VTBL_ENTRY)&_ZN5S73C73v10Ev,
  (VTBL_ENTRY)&_ZN5S73C73v11Ev,
  (VTBL_ENTRY)&_ZN5S73C73v12Ev,
  (VTBL_ENTRY)&_ZN5S73C73v13Ev,
  (VTBL_ENTRY)&_ZN5S73C73v14Ev,
  (VTBL_ENTRY)&_ZN5S73C73v15Ev,
  (VTBL_ENTRY)&_ZN5S73C73v16Ev,
  (VTBL_ENTRY)&_ZN5S73C73v17Ev,
  (VTBL_ENTRY)&_ZN5S73C73v18Ev,
  (VTBL_ENTRY)&_ZN5S73C73v19Ev,
  (VTBL_ENTRY)&_ZN5S73C73v20Ev,
  (VTBL_ENTRY)&_ZN5S73C73v21Ev,
  (VTBL_ENTRY)&_ZN5S73C73v22Ev,
  (VTBL_ENTRY)&_ZN5S73C73v23Ev,
  (VTBL_ENTRY)&_ZN5S73C73v24Ev,
  (VTBL_ENTRY)&_ZN5S73C73v25Ev,
  (VTBL_ENTRY)&_ZN5S73C73v26Ev,
  (VTBL_ENTRY)&_ZN5S73C73v27Ev,
  (VTBL_ENTRY)&_ZN5S73C73v28Ev,
  (VTBL_ENTRY)&_ZN5S73C73v29Ev,
  (VTBL_ENTRY)&_ZN5S73C73v30Ev,
  (VTBL_ENTRY)&_ZN5S73C73v31Ev,
  (VTBL_ENTRY)&_ZN5S73C73v32Ev,
  (VTBL_ENTRY)&_ZN5S73C73v33Ev,
  (VTBL_ENTRY)&_ZN5S73C73v34Ev,
  (VTBL_ENTRY)&_ZN5S73C73v35Ev,
  (VTBL_ENTRY)&_ZN5S73C73v36Ev,
  (VTBL_ENTRY)&_ZN5S73C73v37Ev,
  (VTBL_ENTRY)&_ZN5S73C73v38Ev,
  (VTBL_ENTRY)&_ZN5S73C73v39Ev,
  (VTBL_ENTRY)&_ZN5S73C73v40Ev,
  (VTBL_ENTRY)&_ZN5S73C73v41Ev,
  (VTBL_ENTRY)&_ZN5S73C73v42Ev,
  (VTBL_ENTRY)&_ZN5S73C73v43Ev,
  (VTBL_ENTRY)&_ZN5S73C73v44Ev,
  (VTBL_ENTRY)&_ZN5S73C73v45Ev,
  (VTBL_ENTRY)&_ZN5S73C73v46Ev,
  (VTBL_ENTRY)&_ZN5S73C73v47Ev,
  (VTBL_ENTRY)&_ZN5S73C73v48Ev,
  (VTBL_ENTRY)&_ZN5S73C73v49Ev,
  (VTBL_ENTRY)&_ZN5S73C73v50Ev,
  (VTBL_ENTRY)&_ZN5S73C73v51Ev,
  (VTBL_ENTRY)&_ZN5S73C73v52Ev,
  (VTBL_ENTRY)&_ZN5S73C73v53Ev,
  (VTBL_ENTRY)&_ZN5S73C73v54Ev,
  (VTBL_ENTRY)&_ZN5S73C73v55Ev,
  (VTBL_ENTRY)&_ZN5S73C73v56Ev,
  (VTBL_ENTRY)&_ZN5S73C73v57Ev,
  (VTBL_ENTRY)&_ZN5S73C73v58Ev,
  (VTBL_ENTRY)&_ZN5S73C73v59Ev,
  (VTBL_ENTRY)&_ZN5S73C73v60Ev,
  (VTBL_ENTRY)&_ZN5S73C73v61Ev,
  (VTBL_ENTRY)&_ZN5S73C73v62Ev,
  (VTBL_ENTRY)&_ZN5S73C73v63Ev,
  (VTBL_ENTRY)&_ZN5S73C73v64Ev,
  (VTBL_ENTRY)&_ZN5S73C73v65Ev,
  (VTBL_ENTRY)&_ZN5S73C73v66Ev,
  (VTBL_ENTRY)&_ZN5S73C73v67Ev,
  (VTBL_ENTRY)&_ZN5S73C63v68Ev,
  (VTBL_ENTRY)&_ZN5S73C63v69Ev,
  (VTBL_ENTRY)&_ZN5S73C63v70Ev,
  (VTBL_ENTRY)&_ZN5S73C63v71Ev,
  (VTBL_ENTRY)&_ZN5S73C63v72Ev,
  (VTBL_ENTRY)&_ZN5S73C63v73Ev,
  (VTBL_ENTRY)&_ZN5S73C63v74Ev,
  (VTBL_ENTRY)&_ZN5S73C63v75Ev,
  (VTBL_ENTRY)&_ZN5S73C63v76Ev,
  (VTBL_ENTRY)&_ZN5S73C63v77Ev,
  (VTBL_ENTRY)&_ZN5S73C63v78Ev,
  (VTBL_ENTRY)&_ZN5S73C63v79Ev,
  (VTBL_ENTRY)&_ZN5S73C63v80Ev,
  (VTBL_ENTRY)&_ZN5S73C63v81Ev,
  (VTBL_ENTRY)&_ZN5S73C63v82Ev,
  (VTBL_ENTRY)&_ZN5S73C63v83Ev,
  (VTBL_ENTRY)&_ZN5S73C63v84Ev,
  (VTBL_ENTRY)&_ZN5S73C63v85Ev,
  (VTBL_ENTRY)&_ZN5S73C63v86Ev,
  (VTBL_ENTRY)&_ZN5S73C63v87Ev,
  (VTBL_ENTRY)&_ZN5S73C63v88Ev,
  (VTBL_ENTRY)&_ZN5S73C63v89Ev,
  (VTBL_ENTRY)&_ZN5S73C53v90Ev,
  (VTBL_ENTRY)&_ZN5S73C53v91Ev,
  (VTBL_ENTRY)&_ZN5S73C53v92Ev,
  (VTBL_ENTRY)&_ZN5S73C53v93Ev,
  (VTBL_ENTRY)&_ZN5S73C53v94Ev,
  (VTBL_ENTRY)&_ZN5S73C53v95Ev,
  (VTBL_ENTRY)&_ZN5S73C53v96Ev,
  (VTBL_ENTRY)&_ZN5S73C53v97Ev,
  (VTBL_ENTRY)&_ZN5S73C53v98Ev,
  (VTBL_ENTRY)&_ZN5S73C53v99Ev,
  (VTBL_ENTRY)&_ZN5S73C54v100Ev,
  (VTBL_ENTRY)&_ZN5S73C54v101Ev,
  (VTBL_ENTRY)&_ZN5S73C54v102Ev,
  (VTBL_ENTRY)&_ZN5S73C54v103Ev,
  (VTBL_ENTRY)&_ZN5S73C54v104Ev,
  (VTBL_ENTRY)&_ZN5S73C54v105Ev,
  (VTBL_ENTRY)&_ZN5S73C54v106Ev,
  (VTBL_ENTRY)&_ZN5S73C54v107Ev,
  (VTBL_ENTRY)&_ZN5S73C54v108Ev,
  (VTBL_ENTRY)&_ZN5S73C54v109Ev,
};
extern VTBL_ENTRY _ZTI5S73C5[];
extern  VTBL_ENTRY _ZTV5S73C5[];
Class_Descriptor cd_S73C5 = {  "S73C5", // class name
  bases_S73C5, 2,
  &(vtc_S73C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI5S73C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S73C5),110, //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  S73C4  : S73C5 {
  ::S3350C4_nt s73c4f0;
  unsigned int s73c4f1:1;
  ::S287C23 s73c4f2;
  virtual  ~S73C4(); // _ZN5S73C4D1Ev
  virtual void  v110(); // _ZN5S73C44v110Ev
  virtual void  v111(); // _ZN5S73C44v111Ev
  virtual void  v112(); // _ZN5S73C44v112Ev
  virtual void  v113(); // _ZN5S73C44v113Ev
  S73C4(); // tgen
};
//SIG(-1 S73C4) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 Fi:1 Fi:1 Fi:1 FC11{ BC12{ BC9}} FC13{ BC14{ BC9}} FC15{ BC16{ BC9}} FC17{ BC18{ BC9}} Fi[3]} vd v1 v2 v3 v4 FC5 Fi:1 FC19{ BC20{ BC9}}}


 S73C4 ::~S73C4(){ note_dtor("S73C4", this);}
void  S73C4 ::v110(){vfunc_called(this, "_ZN5S73C44v110Ev");}
void  S73C4 ::v111(){vfunc_called(this, "_ZN5S73C44v111Ev");}
void  S73C4 ::v112(){vfunc_called(this, "_ZN5S73C44v112Ev");}
void  S73C4 ::v113(){vfunc_called(this, "_ZN5S73C44v113Ev");}
S73C4 ::S73C4(){ note_ctor("S73C4", this);} // tgen

static void Test_S73C4()
{
  extern Class_Descriptor cd_S73C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,56)];
    init_test(&cd_S73C4, buf);
    S73C4 *dp, &lv = *(dp=new (buf) S73C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,220), "sizeof(S73C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S73C4)");
    check_base_class_offset(lv, (S73C7*)(S73C6*)(S73C5*), 0, "S73C4");
    check_base_class_offset(lv, (S73C6*)(S73C5*), 0, "S73C4");
    check_base_class_offset(lv, (S73C5*), 0, "S73C4");
    check_field_offset(lv, s73c4f0, ABISELECT(268,196), "S73C4.s73c4f0");
    set_bf_and_test(lv, s73c4f1, ABISELECT(276,204), 0, 1, 1, "S73C4");
    check_field_offset(lv, s73c4f2, ABISELECT(280,208), "S73C4.s73c4f2");
    test_class_info(&lv, &cd_S73C4);
    dp->~S73C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS73C4(Test_S73C4, "S73C4", ABISELECT(296,220));

#else // __cplusplus

extern void _ZN5S73C4C1Ev();
extern void _ZN5S73C4D1Ev();
Name_Map name_map_S73C4[] = {
  NSPAIR(_ZN5S73C4C1Ev),
  NSPAIR(_ZN5S73C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S73C7;
extern VTBL_ENTRY _ZTI5S73C7[];
extern  VTBL_ENTRY _ZTV5S73C7[];
extern Class_Descriptor cd_S73C6;
extern VTBL_ENTRY _ZTI5S73C6[];
extern  VTBL_ENTRY _ZTV5S73C6[];
extern Class_Descriptor cd_S73C5;
extern VTBL_ENTRY _ZTI5S73C5[];
extern  VTBL_ENTRY _ZTV5S73C5[];
static Base_Class bases_S73C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S73C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S73C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S73C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S73C4[];
extern void _ZN5S73C4D1Ev();
extern void _ZN5S73C4D0Ev();
extern void _ZN5S73C72v4Ev();
extern void _ZN5S73C72v5Ev();
extern void _ZN5S73C72v6Ev();
extern void _ZN5S73C72v7Ev();
extern void _ZN5S73C72v8Ev();
extern void _ZN5S73C72v9Ev();
extern void _ZN5S73C73v10Ev();
extern void _ZN5S73C73v11Ev();
extern void _ZN5S73C73v12Ev();
extern void _ZN5S73C73v13Ev();
extern void _ZN5S73C73v14Ev();
extern void _ZN5S73C73v15Ev();
extern void _ZN5S73C73v16Ev();
extern void _ZN5S73C73v17Ev();
extern void _ZN5S73C73v18Ev();
extern void _ZN5S73C73v19Ev();
extern void _ZN5S73C73v20Ev();
extern void _ZN5S73C73v21Ev();
extern void _ZN5S73C73v22Ev();
extern void _ZN5S73C73v23Ev();
extern void _ZN5S73C73v24Ev();
extern void _ZN5S73C73v25Ev();
extern void _ZN5S73C73v26Ev();
extern void _ZN5S73C73v27Ev();
extern void _ZN5S73C73v28Ev();
extern void _ZN5S73C73v29Ev();
extern void _ZN5S73C73v30Ev();
extern void _ZN5S73C73v31Ev();
extern void _ZN5S73C73v32Ev();
extern void _ZN5S73C73v33Ev();
extern void _ZN5S73C73v34Ev();
extern void _ZN5S73C73v35Ev();
extern void _ZN5S73C73v36Ev();
extern void _ZN5S73C73v37Ev();
extern void _ZN5S73C73v38Ev();
extern void _ZN5S73C73v39Ev();
extern void _ZN5S73C73v40Ev();
extern void _ZN5S73C73v41Ev();
extern void _ZN5S73C73v42Ev();
extern void _ZN5S73C73v43Ev();
extern void _ZN5S73C73v44Ev();
extern void _ZN5S73C73v45Ev();
extern void _ZN5S73C73v46Ev();
extern void _ZN5S73C73v47Ev();
extern void _ZN5S73C73v48Ev();
extern void _ZN5S73C73v49Ev();
extern void _ZN5S73C73v50Ev();
extern void _ZN5S73C73v51Ev();
extern void _ZN5S73C73v52Ev();
extern void _ZN5S73C73v53Ev();
extern void _ZN5S73C73v54Ev();
extern void _ZN5S73C73v55Ev();
extern void _ZN5S73C73v56Ev();
extern void _ZN5S73C73v57Ev();
extern void _ZN5S73C73v58Ev();
extern void _ZN5S73C73v59Ev();
extern void _ZN5S73C73v60Ev();
extern void _ZN5S73C73v61Ev();
extern void _ZN5S73C73v62Ev();
extern void _ZN5S73C73v63Ev();
extern void _ZN5S73C73v64Ev();
extern void _ZN5S73C73v65Ev();
extern void _ZN5S73C73v66Ev();
extern void _ZN5S73C73v67Ev();
extern void _ZN5S73C63v68Ev();
extern void _ZN5S73C63v69Ev();
extern void _ZN5S73C63v70Ev();
extern void _ZN5S73C63v71Ev();
extern void _ZN5S73C63v72Ev();
extern void _ZN5S73C63v73Ev();
extern void _ZN5S73C63v74Ev();
extern void _ZN5S73C63v75Ev();
extern void _ZN5S73C63v76Ev();
extern void _ZN5S73C63v77Ev();
extern void _ZN5S73C63v78Ev();
extern void _ZN5S73C63v79Ev();
extern void _ZN5S73C63v80Ev();
extern void _ZN5S73C63v81Ev();
extern void _ZN5S73C63v82Ev();
extern void _ZN5S73C63v83Ev();
extern void _ZN5S73C63v84Ev();
extern void _ZN5S73C63v85Ev();
extern void _ZN5S73C63v86Ev();
extern void _ZN5S73C63v87Ev();
extern void _ZN5S73C63v88Ev();
extern void _ZN5S73C63v89Ev();
extern void _ZN5S73C53v90Ev();
extern void _ZN5S73C53v91Ev();
extern void _ZN5S73C53v92Ev();
extern void _ZN5S73C53v93Ev();
extern void _ZN5S73C53v94Ev();
extern void _ZN5S73C53v95Ev();
extern void _ZN5S73C53v96Ev();
extern void _ZN5S73C53v97Ev();
extern void _ZN5S73C53v98Ev();
extern void _ZN5S73C53v99Ev();
extern void _ZN5S73C54v100Ev();
extern void _ZN5S73C54v101Ev();
extern void _ZN5S73C54v102Ev();
extern void _ZN5S73C54v103Ev();
extern void _ZN5S73C54v104Ev();
extern void _ZN5S73C54v105Ev();
extern void _ZN5S73C54v106Ev();
extern void _ZN5S73C54v107Ev();
extern void _ZN5S73C54v108Ev();
extern void _ZN5S73C54v109Ev();
extern void _ZN5S73C44v110Ev();
extern void _ZN5S73C44v111Ev();
extern void _ZN5S73C44v112Ev();
extern void _ZN5S73C44v113Ev();
static  VTBL_ENTRY vtc_S73C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S73C4[0]),
  (VTBL_ENTRY)&_ZN5S73C4D1Ev,
  (VTBL_ENTRY)&_ZN5S73C4D0Ev,
  (VTBL_ENTRY)&_ZN5S73C72v4Ev,
  (VTBL_ENTRY)&_ZN5S73C72v5Ev,
  (VTBL_ENTRY)&_ZN5S73C72v6Ev,
  (VTBL_ENTRY)&_ZN5S73C72v7Ev,
  (VTBL_ENTRY)&_ZN5S73C72v8Ev,
  (VTBL_ENTRY)&_ZN5S73C72v9Ev,
  (VTBL_ENTRY)&_ZN5S73C73v10Ev,
  (VTBL_ENTRY)&_ZN5S73C73v11Ev,
  (VTBL_ENTRY)&_ZN5S73C73v12Ev,
  (VTBL_ENTRY)&_ZN5S73C73v13Ev,
  (VTBL_ENTRY)&_ZN5S73C73v14Ev,
  (VTBL_ENTRY)&_ZN5S73C73v15Ev,
  (VTBL_ENTRY)&_ZN5S73C73v16Ev,
  (VTBL_ENTRY)&_ZN5S73C73v17Ev,
  (VTBL_ENTRY)&_ZN5S73C73v18Ev,
  (VTBL_ENTRY)&_ZN5S73C73v19Ev,
  (VTBL_ENTRY)&_ZN5S73C73v20Ev,
  (VTBL_ENTRY)&_ZN5S73C73v21Ev,
  (VTBL_ENTRY)&_ZN5S73C73v22Ev,
  (VTBL_ENTRY)&_ZN5S73C73v23Ev,
  (VTBL_ENTRY)&_ZN5S73C73v24Ev,
  (VTBL_ENTRY)&_ZN5S73C73v25Ev,
  (VTBL_ENTRY)&_ZN5S73C73v26Ev,
  (VTBL_ENTRY)&_ZN5S73C73v27Ev,
  (VTBL_ENTRY)&_ZN5S73C73v28Ev,
  (VTBL_ENTRY)&_ZN5S73C73v29Ev,
  (VTBL_ENTRY)&_ZN5S73C73v30Ev,
  (VTBL_ENTRY)&_ZN5S73C73v31Ev,
  (VTBL_ENTRY)&_ZN5S73C73v32Ev,
  (VTBL_ENTRY)&_ZN5S73C73v33Ev,
  (VTBL_ENTRY)&_ZN5S73C73v34Ev,
  (VTBL_ENTRY)&_ZN5S73C73v35Ev,
  (VTBL_ENTRY)&_ZN5S73C73v36Ev,
  (VTBL_ENTRY)&_ZN5S73C73v37Ev,
  (VTBL_ENTRY)&_ZN5S73C73v38Ev,
  (VTBL_ENTRY)&_ZN5S73C73v39Ev,
  (VTBL_ENTRY)&_ZN5S73C73v40Ev,
  (VTBL_ENTRY)&_ZN5S73C73v41Ev,
  (VTBL_ENTRY)&_ZN5S73C73v42Ev,
  (VTBL_ENTRY)&_ZN5S73C73v43Ev,
  (VTBL_ENTRY)&_ZN5S73C73v44Ev,
  (VTBL_ENTRY)&_ZN5S73C73v45Ev,
  (VTBL_ENTRY)&_ZN5S73C73v46Ev,
  (VTBL_ENTRY)&_ZN5S73C73v47Ev,
  (VTBL_ENTRY)&_ZN5S73C73v48Ev,
  (VTBL_ENTRY)&_ZN5S73C73v49Ev,
  (VTBL_ENTRY)&_ZN5S73C73v50Ev,
  (VTBL_ENTRY)&_ZN5S73C73v51Ev,
  (VTBL_ENTRY)&_ZN5S73C73v52Ev,
  (VTBL_ENTRY)&_ZN5S73C73v53Ev,
  (VTBL_ENTRY)&_ZN5S73C73v54Ev,
  (VTBL_ENTRY)&_ZN5S73C73v55Ev,
  (VTBL_ENTRY)&_ZN5S73C73v56Ev,
  (VTBL_ENTRY)&_ZN5S73C73v57Ev,
  (VTBL_ENTRY)&_ZN5S73C73v58Ev,
  (VTBL_ENTRY)&_ZN5S73C73v59Ev,
  (VTBL_ENTRY)&_ZN5S73C73v60Ev,
  (VTBL_ENTRY)&_ZN5S73C73v61Ev,
  (VTBL_ENTRY)&_ZN5S73C73v62Ev,
  (VTBL_ENTRY)&_ZN5S73C73v63Ev,
  (VTBL_ENTRY)&_ZN5S73C73v64Ev,
  (VTBL_ENTRY)&_ZN5S73C73v65Ev,
  (VTBL_ENTRY)&_ZN5S73C73v66Ev,
  (VTBL_ENTRY)&_ZN5S73C73v67Ev,
  (VTBL_ENTRY)&_ZN5S73C63v68Ev,
  (VTBL_ENTRY)&_ZN5S73C63v69Ev,
  (VTBL_ENTRY)&_ZN5S73C63v70Ev,
  (VTBL_ENTRY)&_ZN5S73C63v71Ev,
  (VTBL_ENTRY)&_ZN5S73C63v72Ev,
  (VTBL_ENTRY)&_ZN5S73C63v73Ev,
  (VTBL_ENTRY)&_ZN5S73C63v74Ev,
  (VTBL_ENTRY)&_ZN5S73C63v75Ev,
  (VTBL_ENTRY)&_ZN5S73C63v76Ev,
  (VTBL_ENTRY)&_ZN5S73C63v77Ev,
  (VTBL_ENTRY)&_ZN5S73C63v78Ev,
  (VTBL_ENTRY)&_ZN5S73C63v79Ev,
  (VTBL_ENTRY)&_ZN5S73C63v80Ev,
  (VTBL_ENTRY)&_ZN5S73C63v81Ev,
  (VTBL_ENTRY)&_ZN5S73C63v82Ev,
  (VTBL_ENTRY)&_ZN5S73C63v83Ev,
  (VTBL_ENTRY)&_ZN5S73C63v84Ev,
  (VTBL_ENTRY)&_ZN5S73C63v85Ev,
  (VTBL_ENTRY)&_ZN5S73C63v86Ev,
  (VTBL_ENTRY)&_ZN5S73C63v87Ev,
  (VTBL_ENTRY)&_ZN5S73C63v88Ev,
  (VTBL_ENTRY)&_ZN5S73C63v89Ev,
  (VTBL_ENTRY)&_ZN5S73C53v90Ev,
  (VTBL_ENTRY)&_ZN5S73C53v91Ev,
  (VTBL_ENTRY)&_ZN5S73C53v92Ev,
  (VTBL_ENTRY)&_ZN5S73C53v93Ev,
  (VTBL_ENTRY)&_ZN5S73C53v94Ev,
  (VTBL_ENTRY)&_ZN5S73C53v95Ev,
  (VTBL_ENTRY)&_ZN5S73C53v96Ev,
  (VTBL_ENTRY)&_ZN5S73C53v97Ev,
  (VTBL_ENTRY)&_ZN5S73C53v98Ev,
  (VTBL_ENTRY)&_ZN5S73C53v99Ev,
  (VTBL_ENTRY)&_ZN5S73C54v100Ev,
  (VTBL_ENTRY)&_ZN5S73C54v101Ev,
  (VTBL_ENTRY)&_ZN5S73C54v102Ev,
  (VTBL_ENTRY)&_ZN5S73C54v103Ev,
  (VTBL_ENTRY)&_ZN5S73C54v104Ev,
  (VTBL_ENTRY)&_ZN5S73C54v105Ev,
  (VTBL_ENTRY)&_ZN5S73C54v106Ev,
  (VTBL_ENTRY)&_ZN5S73C54v107Ev,
  (VTBL_ENTRY)&_ZN5S73C54v108Ev,
  (VTBL_ENTRY)&_ZN5S73C54v109Ev,
  (VTBL_ENTRY)&_ZN5S73C44v110Ev,
  (VTBL_ENTRY)&_ZN5S73C44v111Ev,
  (VTBL_ENTRY)&_ZN5S73C44v112Ev,
  (VTBL_ENTRY)&_ZN5S73C44v113Ev,
};
extern VTBL_ENTRY _ZTI5S73C4[];
extern  VTBL_ENTRY _ZTV5S73C4[];
Class_Descriptor cd_S73C4 = {  "S73C4", // class name
  bases_S73C4, 3,
  &(vtc_S73C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,220), // object size
  NSPAIRA(_ZTI5S73C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S73C4),114, //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  S73C3  : S73C4 {
  int s73c3f0;
  unsigned int s73c3f1:1;
  virtual  ~S73C3(); // _ZN5S73C3D1Ev
  virtual void  v114(); // _ZN5S73C34v114Ev
  virtual void  v115(); // _ZN5S73C34v115Ev
  virtual void  v116(); // _ZN5S73C34v116Ev
  virtual void  v117(); // _ZN5S73C34v117Ev
  virtual void  v118(); // _ZN5S73C34v118Ev
  virtual void  v119(); // _ZN5S73C34v119Ev
  virtual void  v120(); // _ZN5S73C34v120Ev
  virtual void  v121(); // _ZN5S73C34v121Ev
  S73C3(); // tgen
};
//SIG(-1 S73C3) C1{ BC2{ BC3{ BC4{ BC5{ vd v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 Fi[2] Fp Fi[2] FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} FC7 FC11{ m} FC7 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 Fi:1 Fi:1 Fi:1 FC12{ BC13{ BC10}} FC14{ BC15{ BC10}} FC16{ BC17{ BC10}} FC18{ BC19{ BC10}} Fi[3]} vd v115 v116 v117 v118 FC6 Fi:1 FC20{ BC21{ BC10}}} vd v1 v2 v3 v4 v5 v6 v7 v8 Fi Fi:1}


 S73C3 ::~S73C3(){ note_dtor("S73C3", this);}
void  S73C3 ::v114(){vfunc_called(this, "_ZN5S73C34v114Ev");}
void  S73C3 ::v115(){vfunc_called(this, "_ZN5S73C34v115Ev");}
void  S73C3 ::v116(){vfunc_called(this, "_ZN5S73C34v116Ev");}
void  S73C3 ::v117(){vfunc_called(this, "_ZN5S73C34v117Ev");}
void  S73C3 ::v118(){vfunc_called(this, "_ZN5S73C34v118Ev");}
void  S73C3 ::v119(){vfunc_called(this, "_ZN5S73C34v119Ev");}
void  S73C3 ::v120(){vfunc_called(this, "_ZN5S73C34v120Ev");}
void  S73C3 ::v121(){vfunc_called(this, "_ZN5S73C34v121Ev");}
S73C3 ::S73C3(){ note_ctor("S73C3", this);} // tgen

static void Test_S73C3()
{
  extern Class_Descriptor cd_S73C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(39,58)];
    init_test(&cd_S73C3, buf);
    S73C3 *dp, &lv = *(dp=new (buf) S73C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,228), "sizeof(S73C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S73C3)");
    check_base_class_offset(lv, (S73C7*)(S73C6*)(S73C5*)(S73C4*), 0, "S73C3");
    check_base_class_offset(lv, (S73C6*)(S73C5*)(S73C4*), 0, "S73C3");
    check_base_class_offset(lv, (S73C5*)(S73C4*), 0, "S73C3");
    check_base_class_offset(lv, (S73C4*), 0, "S73C3");
    check_field_offset(lv, s73c3f0, ABISELECT(296,220), "S73C3.s73c3f0");
    set_bf_and_test(lv, s73c3f1, ABISELECT(300,224), 0, 1, 1, "S73C3");
    test_class_info(&lv, &cd_S73C3);
    dp->~S73C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS73C3(Test_S73C3, "S73C3", ABISELECT(304,228));

#else // __cplusplus

extern void _ZN5S73C3C1Ev();
extern void _ZN5S73C3D1Ev();
Name_Map name_map_S73C3[] = {
  NSPAIR(_ZN5S73C3C1Ev),
  NSPAIR(_ZN5S73C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S73C7;
extern VTBL_ENTRY _ZTI5S73C7[];
extern  VTBL_ENTRY _ZTV5S73C7[];
extern Class_Descriptor cd_S73C6;
extern VTBL_ENTRY _ZTI5S73C6[];
extern  VTBL_ENTRY _ZTV5S73C6[];
extern Class_Descriptor cd_S73C5;
extern VTBL_ENTRY _ZTI5S73C5[];
extern  VTBL_ENTRY _ZTV5S73C5[];
extern Class_Descriptor cd_S73C4;
extern VTBL_ENTRY _ZTI5S73C4[];
extern  VTBL_ENTRY _ZTV5S73C4[];
static Base_Class bases_S73C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S73C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S73C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S73C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S73C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S73C3[];
extern void _ZN5S73C3D1Ev();
extern void _ZN5S73C3D0Ev();
extern void _ZN5S73C72v4Ev();
extern void _ZN5S73C72v5Ev();
extern void _ZN5S73C72v6Ev();
extern void _ZN5S73C72v7Ev();
extern void _ZN5S73C72v8Ev();
extern void _ZN5S73C72v9Ev();
extern void _ZN5S73C73v10Ev();
extern void _ZN5S73C73v11Ev();
extern void _ZN5S73C73v12Ev();
extern void _ZN5S73C73v13Ev();
extern void _ZN5S73C73v14Ev();
extern void _ZN5S73C73v15Ev();
extern void _ZN5S73C73v16Ev();
extern void _ZN5S73C73v17Ev();
extern void _ZN5S73C73v18Ev();
extern void _ZN5S73C73v19Ev();
extern void _ZN5S73C73v20Ev();
extern void _ZN5S73C73v21Ev();
extern void _ZN5S73C73v22Ev();
extern void _ZN5S73C73v23Ev();
extern void _ZN5S73C73v24Ev();
extern void _ZN5S73C73v25Ev();
extern void _ZN5S73C73v26Ev();
extern void _ZN5S73C73v27Ev();
extern void _ZN5S73C73v28Ev();
extern void _ZN5S73C73v29Ev();
extern void _ZN5S73C73v30Ev();
extern void _ZN5S73C73v31Ev();
extern void _ZN5S73C73v32Ev();
extern void _ZN5S73C73v33Ev();
extern void _ZN5S73C73v34Ev();
extern void _ZN5S73C73v35Ev();
extern void _ZN5S73C73v36Ev();
extern void _ZN5S73C73v37Ev();
extern void _ZN5S73C73v38Ev();
extern void _ZN5S73C73v39Ev();
extern void _ZN5S73C73v40Ev();
extern void _ZN5S73C73v41Ev();
extern void _ZN5S73C73v42Ev();
extern void _ZN5S73C73v43Ev();
extern void _ZN5S73C73v44Ev();
extern void _ZN5S73C73v45Ev();
extern void _ZN5S73C73v46Ev();
extern void _ZN5S73C73v47Ev();
extern void _ZN5S73C73v48Ev();
extern void _ZN5S73C73v49Ev();
extern void _ZN5S73C73v50Ev();
extern void _ZN5S73C73v51Ev();
extern void _ZN5S73C73v52Ev();
extern void _ZN5S73C73v53Ev();
extern void _ZN5S73C73v54Ev();
extern void _ZN5S73C73v55Ev();
extern void _ZN5S73C73v56Ev();
extern void _ZN5S73C73v57Ev();
extern void _ZN5S73C73v58Ev();
extern void _ZN5S73C73v59Ev();
extern void _ZN5S73C73v60Ev();
extern void _ZN5S73C73v61Ev();
extern void _ZN5S73C73v62Ev();
extern void _ZN5S73C73v63Ev();
extern void _ZN5S73C73v64Ev();
extern void _ZN5S73C73v65Ev();
extern void _ZN5S73C73v66Ev();
extern void _ZN5S73C73v67Ev();
extern void _ZN5S73C63v68Ev();
extern void _ZN5S73C63v69Ev();
extern void _ZN5S73C63v70Ev();
extern void _ZN5S73C63v71Ev();
extern void _ZN5S73C63v72Ev();
extern void _ZN5S73C63v73Ev();
extern void _ZN5S73C63v74Ev();
extern void _ZN5S73C63v75Ev();
extern void _ZN5S73C63v76Ev();
extern void _ZN5S73C63v77Ev();
extern void _ZN5S73C63v78Ev();
extern void _ZN5S73C63v79Ev();
extern void _ZN5S73C63v80Ev();
extern void _ZN5S73C63v81Ev();
extern void _ZN5S73C63v82Ev();
extern void _ZN5S73C63v83Ev();
extern void _ZN5S73C63v84Ev();
extern void _ZN5S73C63v85Ev();
extern void _ZN5S73C63v86Ev();
extern void _ZN5S73C63v87Ev();
extern void _ZN5S73C63v88Ev();
extern void _ZN5S73C63v89Ev();
extern void _ZN5S73C53v90Ev();
extern void _ZN5S73C53v91Ev();
extern void _ZN5S73C53v92Ev();
extern void _ZN5S73C53v93Ev();
extern void _ZN5S73C53v94Ev();
extern void _ZN5S73C53v95Ev();
extern void _ZN5S73C53v96Ev();
extern void _ZN5S73C53v97Ev();
extern void _ZN5S73C53v98Ev();
extern void _ZN5S73C53v99Ev();
extern void _ZN5S73C54v100Ev();
extern void _ZN5S73C54v101Ev();
extern void _ZN5S73C54v102Ev();
extern void _ZN5S73C54v103Ev();
extern void _ZN5S73C54v104Ev();
extern void _ZN5S73C54v105Ev();
extern void _ZN5S73C54v106Ev();
extern void _ZN5S73C54v107Ev();
extern void _ZN5S73C54v108Ev();
extern void _ZN5S73C54v109Ev();
extern void _ZN5S73C44v110Ev();
extern void _ZN5S73C44v111Ev();
extern void _ZN5S73C44v112Ev();
extern void _ZN5S73C44v113Ev();
extern void _ZN5S73C34v114Ev();
extern void _ZN5S73C34v115Ev();
extern void _ZN5S73C34v116Ev();
extern void _ZN5S73C34v117Ev();
extern void _ZN5S73C34v118Ev();
extern void _ZN5S73C34v119Ev();
extern void _ZN5S73C34v120Ev();
extern void _ZN5S73C34v121Ev();
static  VTBL_ENTRY vtc_S73C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S73C3[0]),
  (VTBL_ENTRY)&_ZN5S73C3D1Ev,
  (VTBL_ENTRY)&_ZN5S73C3D0Ev,
  (VTBL_ENTRY)&_ZN5S73C72v4Ev,
  (VTBL_ENTRY)&_ZN5S73C72v5Ev,
  (VTBL_ENTRY)&_ZN5S73C72v6Ev,
  (VTBL_ENTRY)&_ZN5S73C72v7Ev,
  (VTBL_ENTRY)&_ZN5S73C72v8Ev,
  (VTBL_ENTRY)&_ZN5S73C72v9Ev,
  (VTBL_ENTRY)&_ZN5S73C73v10Ev,
  (VTBL_ENTRY)&_ZN5S73C73v11Ev,
  (VTBL_ENTRY)&_ZN5S73C73v12Ev,
  (VTBL_ENTRY)&_ZN5S73C73v13Ev,
  (VTBL_ENTRY)&_ZN5S73C73v14Ev,
  (VTBL_ENTRY)&_ZN5S73C73v15Ev,
  (VTBL_ENTRY)&_ZN5S73C73v16Ev,
  (VTBL_ENTRY)&_ZN5S73C73v17Ev,
  (VTBL_ENTRY)&_ZN5S73C73v18Ev,
  (VTBL_ENTRY)&_ZN5S73C73v19Ev,
  (VTBL_ENTRY)&_ZN5S73C73v20Ev,
  (VTBL_ENTRY)&_ZN5S73C73v21Ev,
  (VTBL_ENTRY)&_ZN5S73C73v22Ev,
  (VTBL_ENTRY)&_ZN5S73C73v23Ev,
  (VTBL_ENTRY)&_ZN5S73C73v24Ev,
  (VTBL_ENTRY)&_ZN5S73C73v25Ev,
  (VTBL_ENTRY)&_ZN5S73C73v26Ev,
  (VTBL_ENTRY)&_ZN5S73C73v27Ev,
  (VTBL_ENTRY)&_ZN5S73C73v28Ev,
  (VTBL_ENTRY)&_ZN5S73C73v29Ev,
  (VTBL_ENTRY)&_ZN5S73C73v30Ev,
  (VTBL_ENTRY)&_ZN5S73C73v31Ev,
  (VTBL_ENTRY)&_ZN5S73C73v32Ev,
  (VTBL_ENTRY)&_ZN5S73C73v33Ev,
  (VTBL_ENTRY)&_ZN5S73C73v34Ev,
  (VTBL_ENTRY)&_ZN5S73C73v35Ev,
  (VTBL_ENTRY)&_ZN5S73C73v36Ev,
  (VTBL_ENTRY)&_ZN5S73C73v37Ev,
  (VTBL_ENTRY)&_ZN5S73C73v38Ev,
  (VTBL_ENTRY)&_ZN5S73C73v39Ev,
  (VTBL_ENTRY)&_ZN5S73C73v40Ev,
  (VTBL_ENTRY)&_ZN5S73C73v41Ev,
  (VTBL_ENTRY)&_ZN5S73C73v42Ev,
  (VTBL_ENTRY)&_ZN5S73C73v43Ev,
  (VTBL_ENTRY)&_ZN5S73C73v44Ev,
  (VTBL_ENTRY)&_ZN5S73C73v45Ev,
  (VTBL_ENTRY)&_ZN5S73C73v46Ev,
  (VTBL_ENTRY)&_ZN5S73C73v47Ev,
  (VTBL_ENTRY)&_ZN5S73C73v48Ev,
  (VTBL_ENTRY)&_ZN5S73C73v49Ev,
  (VTBL_ENTRY)&_ZN5S73C73v50Ev,
  (VTBL_ENTRY)&_ZN5S73C73v51Ev,
  (VTBL_ENTRY)&_ZN5S73C73v52Ev,
  (VTBL_ENTRY)&_ZN5S73C73v53Ev,
  (VTBL_ENTRY)&_ZN5S73C73v54Ev,
  (VTBL_ENTRY)&_ZN5S73C73v55Ev,
  (VTBL_ENTRY)&_ZN5S73C73v56Ev,
  (VTBL_ENTRY)&_ZN5S73C73v57Ev,
  (VTBL_ENTRY)&_ZN5S73C73v58Ev,
  (VTBL_ENTRY)&_ZN5S73C73v59Ev,
  (VTBL_ENTRY)&_ZN5S73C73v60Ev,
  (VTBL_ENTRY)&_ZN5S73C73v61Ev,
  (VTBL_ENTRY)&_ZN5S73C73v62Ev,
  (VTBL_ENTRY)&_ZN5S73C73v63Ev,
  (VTBL_ENTRY)&_ZN5S73C73v64Ev,
  (VTBL_ENTRY)&_ZN5S73C73v65Ev,
  (VTBL_ENTRY)&_ZN5S73C73v66Ev,
  (VTBL_ENTRY)&_ZN5S73C73v67Ev,
  (VTBL_ENTRY)&_ZN5S73C63v68Ev,
  (VTBL_ENTRY)&_ZN5S73C63v69Ev,
  (VTBL_ENTRY)&_ZN5S73C63v70Ev,
  (VTBL_ENTRY)&_ZN5S73C63v71Ev,
  (VTBL_ENTRY)&_ZN5S73C63v72Ev,
  (VTBL_ENTRY)&_ZN5S73C63v73Ev,
  (VTBL_ENTRY)&_ZN5S73C63v74Ev,
  (VTBL_ENTRY)&_ZN5S73C63v75Ev,
  (VTBL_ENTRY)&_ZN5S73C63v76Ev,
  (VTBL_ENTRY)&_ZN5S73C63v77Ev,
  (VTBL_ENTRY)&_ZN5S73C63v78Ev,
  (VTBL_ENTRY)&_ZN5S73C63v79Ev,
  (VTBL_ENTRY)&_ZN5S73C63v80Ev,
  (VTBL_ENTRY)&_ZN5S73C63v81Ev,
  (VTBL_ENTRY)&_ZN5S73C63v82Ev,
  (VTBL_ENTRY)&_ZN5S73C63v83Ev,
  (VTBL_ENTRY)&_ZN5S73C63v84Ev,
  (VTBL_ENTRY)&_ZN5S73C63v85Ev,
  (VTBL_ENTRY)&_ZN5S73C63v86Ev,
  (VTBL_ENTRY)&_ZN5S73C63v87Ev,
  (VTBL_ENTRY)&_ZN5S73C63v88Ev,
  (VTBL_ENTRY)&_ZN5S73C63v89Ev,
  (VTBL_ENTRY)&_ZN5S73C53v90Ev,
  (VTBL_ENTRY)&_ZN5S73C53v91Ev,
  (VTBL_ENTRY)&_ZN5S73C53v92Ev,
  (VTBL_ENTRY)&_ZN5S73C53v93Ev,
  (VTBL_ENTRY)&_ZN5S73C53v94Ev,
  (VTBL_ENTRY)&_ZN5S73C53v95Ev,
  (VTBL_ENTRY)&_ZN5S73C53v96Ev,
  (VTBL_ENTRY)&_ZN5S73C53v97Ev,
  (VTBL_ENTRY)&_ZN5S73C53v98Ev,
  (VTBL_ENTRY)&_ZN5S73C53v99Ev,
  (VTBL_ENTRY)&_ZN5S73C54v100Ev,
  (VTBL_ENTRY)&_ZN5S73C54v101Ev,
  (VTBL_ENTRY)&_ZN5S73C54v102Ev,
  (VTBL_ENTRY)&_ZN5S73C54v103Ev,
  (VTBL_ENTRY)&_ZN5S73C54v104Ev,
  (VTBL_ENTRY)&_ZN5S73C54v105Ev,
  (VTBL_ENTRY)&_ZN5S73C54v106Ev,
  (VTBL_ENTRY)&_ZN5S73C54v107Ev,
  (VTBL_ENTRY)&_ZN5S73C54v108Ev,
  (VTBL_ENTRY)&_ZN5S73C54v109Ev,
  (VTBL_ENTRY)&_ZN5S73C44v110Ev,
  (VTBL_ENTRY)&_ZN5S73C44v111Ev,
  (VTBL_ENTRY)&_ZN5S73C44v112Ev,
  (VTBL_ENTRY)&_ZN5S73C44v113Ev,
  (VTBL_ENTRY)&_ZN5S73C34v114Ev,
  (VTBL_ENTRY)&_ZN5S73C34v115Ev,
  (VTBL_ENTRY)&_ZN5S73C34v116Ev,
  (VTBL_ENTRY)&_ZN5S73C34v117Ev,
  (VTBL_ENTRY)&_ZN5S73C34v118Ev,
  (VTBL_ENTRY)&_ZN5S73C34v119Ev,
  (VTBL_ENTRY)&_ZN5S73C34v120Ev,
  (VTBL_ENTRY)&_ZN5S73C34v121Ev,
};
extern VTBL_ENTRY _ZTI5S73C3[];
extern  VTBL_ENTRY _ZTV5S73C3[];
Class_Descriptor cd_S73C3 = {  "S73C3", // class name
  bases_S73C3, 4,
  &(vtc_S73C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(304,228), // object size
  NSPAIRA(_ZTI5S73C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S73C3),122, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S73C2  : S73C3 {
  int s73c2f0;
  virtual  ~S73C2(); // _ZN5S73C2D1Ev
  virtual void  v122(); // _ZN5S73C24v122Ev
  virtual void  v123(); // _ZN5S73C24v123Ev
  S73C2(); // tgen
};
//SIG(-1 S73C2) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ 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 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 Fi FL Fp[4] Fi[2] Fp FC7{ m Fi[2]} Fp[2]} vd v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fi[2] Fp Fi[2] FC8{ BC9{ BC10{ BC11{ m Fp Fi[2]}}}} FC8 FC12{ m} FC8 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 Fi:1 Fi:1 Fi:1 FC13{ BC14{ BC11}} FC15{ BC16{ BC11}} FC17{ BC18{ BC11}} FC19{ BC20{ BC11}} Fi[3]} vd v109 v110 v111 v112 FC7 Fi:1 FC21{ BC22{ BC11}}} vd v113 v114 v115 v116 v117 v118 v119 v120 Fi Fi:1} vd v1 v2 Fi}


 S73C2 ::~S73C2(){ note_dtor("S73C2", this);}
void  S73C2 ::v122(){vfunc_called(this, "_ZN5S73C24v122Ev");}
void  S73C2 ::v123(){vfunc_called(this, "_ZN5S73C24v123Ev");}
S73C2 ::S73C2(){ note_ctor("S73C2", this);} // tgen

static void Test_S73C2()
{
  extern Class_Descriptor cd_S73C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(40,59)];
    init_test(&cd_S73C2, buf);
    S73C2 *dp, &lv = *(dp=new (buf) S73C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(312,232), "sizeof(S73C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S73C2)");
    check_base_class_offset(lv, (S73C7*)(S73C6*)(S73C5*)(S73C4*)(S73C3*), 0, "S73C2");
    check_base_class_offset(lv, (S73C6*)(S73C5*)(S73C4*)(S73C3*), 0, "S73C2");
    check_base_class_offset(lv, (S73C5*)(S73C4*)(S73C3*), 0, "S73C2");
    check_base_class_offset(lv, (S73C4*)(S73C3*), 0, "S73C2");
    check_base_class_offset(lv, (S73C3*), 0, "S73C2");
    check_field_offset(lv, s73c2f0, ABISELECT(304,228), "S73C2.s73c2f0");
    test_class_info(&lv, &cd_S73C2);
    dp->~S73C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS73C2(Test_S73C2, "S73C2", ABISELECT(312,232));

#else // __cplusplus

extern void _ZN5S73C2C1Ev();
extern void _ZN5S73C2D1Ev();
Name_Map name_map_S73C2[] = {
  NSPAIR(_ZN5S73C2C1Ev),
  NSPAIR(_ZN5S73C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S73C7;
extern VTBL_ENTRY _ZTI5S73C7[];
extern  VTBL_ENTRY _ZTV5S73C7[];
extern Class_Descriptor cd_S73C6;
extern VTBL_ENTRY _ZTI5S73C6[];
extern  VTBL_ENTRY _ZTV5S73C6[];
extern Class_Descriptor cd_S73C5;
extern VTBL_ENTRY _ZTI5S73C5[];
extern  VTBL_ENTRY _ZTV5S73C5[];
extern Class_Descriptor cd_S73C4;
extern VTBL_ENTRY _ZTI5S73C4[];
extern  VTBL_ENTRY _ZTV5S73C4[];
extern Class_Descriptor cd_S73C3;
extern VTBL_ENTRY _ZTI5S73C3[];
extern  VTBL_ENTRY _ZTV5S73C3[];
static Base_Class bases_S73C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S73C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S73C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S73C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S73C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S73C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S73C2[];
extern void _ZN5S73C2D1Ev();
extern void _ZN5S73C2D0Ev();
extern void _ZN5S73C72v4Ev();
extern void _ZN5S73C72v5Ev();
extern void _ZN5S73C72v6Ev();
extern void _ZN5S73C72v7Ev();
extern void _ZN5S73C72v8Ev();
extern void _ZN5S73C72v9Ev();
extern void _ZN5S73C73v10Ev();
extern void _ZN5S73C73v11Ev();
extern void _ZN5S73C73v12Ev();
extern void _ZN5S73C73v13Ev();
extern void _ZN5S73C73v14Ev();
extern void _ZN5S73C73v15Ev();
extern void _ZN5S73C73v16Ev();
extern void _ZN5S73C73v17Ev();
extern void _ZN5S73C73v18Ev();
extern void _ZN5S73C73v19Ev();
extern void _ZN5S73C73v20Ev();
extern void _ZN5S73C73v21Ev();
extern void _ZN5S73C73v22Ev();
extern void _ZN5S73C73v23Ev();
extern void _ZN5S73C73v24Ev();
extern void _ZN5S73C73v25Ev();
extern void _ZN5S73C73v26Ev();
extern void _ZN5S73C73v27Ev();
extern void _ZN5S73C73v28Ev();
extern void _ZN5S73C73v29Ev();
extern void _ZN5S73C73v30Ev();
extern void _ZN5S73C73v31Ev();
extern void _ZN5S73C73v32Ev();
extern void _ZN5S73C73v33Ev();
extern void _ZN5S73C73v34Ev();
extern void _ZN5S73C73v35Ev();
extern void _ZN5S73C73v36Ev();
extern void _ZN5S73C73v37Ev();
extern void _ZN5S73C73v38Ev();
extern void _ZN5S73C73v39Ev();
extern void _ZN5S73C73v40Ev();
extern void _ZN5S73C73v41Ev();
extern void _ZN5S73C73v42Ev();
extern void _ZN5S73C73v43Ev();
extern void _ZN5S73C73v44Ev();
extern void _ZN5S73C73v45Ev();
extern void _ZN5S73C73v46Ev();
extern void _ZN5S73C73v47Ev();
extern void _ZN5S73C73v48Ev();
extern void _ZN5S73C73v49Ev();
extern void _ZN5S73C73v50Ev();
extern void _ZN5S73C73v51Ev();
extern void _ZN5S73C73v52Ev();
extern void _ZN5S73C73v53Ev();
extern void _ZN5S73C73v54Ev();
extern void _ZN5S73C73v55Ev();
extern void _ZN5S73C73v56Ev();
extern void _ZN5S73C73v57Ev();
extern void _ZN5S73C73v58Ev();
extern void _ZN5S73C73v59Ev();
extern void _ZN5S73C73v60Ev();
extern void _ZN5S73C73v61Ev();
extern void _ZN5S73C73v62Ev();
extern void _ZN5S73C73v63Ev();
extern void _ZN5S73C73v64Ev();
extern void _ZN5S73C73v65Ev();
extern void _ZN5S73C73v66Ev();
extern void _ZN5S73C73v67Ev();
extern void _ZN5S73C63v68Ev();
extern void _ZN5S73C63v69Ev();
extern void _ZN5S73C63v70Ev();
extern void _ZN5S73C63v71Ev();
extern void _ZN5S73C63v72Ev();
extern void _ZN5S73C63v73Ev();
extern void _ZN5S73C63v74Ev();
extern void _ZN5S73C63v75Ev();
extern void _ZN5S73C63v76Ev();
extern void _ZN5S73C63v77Ev();
extern void _ZN5S73C63v78Ev();
extern void _ZN5S73C63v79Ev();
extern void _ZN5S73C63v80Ev();
extern void _ZN5S73C63v81Ev();
extern void _ZN5S73C63v82Ev();
extern void _ZN5S73C63v83Ev();
extern void _ZN5S73C63v84Ev();
extern void _ZN5S73C63v85Ev();
extern void _ZN5S73C63v86Ev();
extern void _ZN5S73C63v87Ev();
extern void _ZN5S73C63v88Ev();
extern void _ZN5S73C63v89Ev();
extern void _ZN5S73C53v90Ev();
extern void _ZN5S73C53v91Ev();
extern void _ZN5S73C53v92Ev();
extern void _ZN5S73C53v93Ev();
extern void _ZN5S73C53v94Ev();
extern void _ZN5S73C53v95Ev();
extern void _ZN5S73C53v96Ev();
extern void _ZN5S73C53v97Ev();
extern void _ZN5S73C53v98Ev();
extern void _ZN5S73C53v99Ev();
extern void _ZN5S73C54v100Ev();
extern void _ZN5S73C54v101Ev();
extern void _ZN5S73C54v102Ev();
extern void _ZN5S73C54v103Ev();
extern void _ZN5S73C54v104Ev();
extern void _ZN5S73C54v105Ev();
extern void _ZN5S73C54v106Ev();
extern void _ZN5S73C54v107Ev();
extern void _ZN5S73C54v108Ev();
extern void _ZN5S73C54v109Ev();
extern void _ZN5S73C44v110Ev();
extern void _ZN5S73C44v111Ev();
extern void _ZN5S73C44v112Ev();
extern void _ZN5S73C44v113Ev();
extern void _ZN5S73C34v114Ev();
extern void _ZN5S73C34v115Ev();
extern void _ZN5S73C34v116Ev();
extern void _ZN5S73C34v117Ev();
extern void _ZN5S73C34v118Ev();
extern void _ZN5S73C34v119Ev();
extern void _ZN5S73C34v120Ev();
extern void _ZN5S73C34v121Ev();
extern void _ZN5S73C24v122Ev();
extern void _ZN5S73C24v123Ev();
static  VTBL_ENTRY vtc_S73C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S73C2[0]),
  (VTBL_ENTRY)&_ZN5S73C2D1Ev,
  (VTBL_ENTRY)&_ZN5S73C2D0Ev,
  (VTBL_ENTRY)&_ZN5S73C72v4Ev,
  (VTBL_ENTRY)&_ZN5S73C72v5Ev,
  (VTBL_ENTRY)&_ZN5S73C72v6Ev,
  (VTBL_ENTRY)&_ZN5S73C72v7Ev,
  (VTBL_ENTRY)&_ZN5S73C72v8Ev,
  (VTBL_ENTRY)&_ZN5S73C72v9Ev,
  (VTBL_ENTRY)&_ZN5S73C73v10Ev,
  (VTBL_ENTRY)&_ZN5S73C73v11Ev,
  (VTBL_ENTRY)&_ZN5S73C73v12Ev,
  (VTBL_ENTRY)&_ZN5S73C73v13Ev,
  (VTBL_ENTRY)&_ZN5S73C73v14Ev,
  (VTBL_ENTRY)&_ZN5S73C73v15Ev,
  (VTBL_ENTRY)&_ZN5S73C73v16Ev,
  (VTBL_ENTRY)&_ZN5S73C73v17Ev,
  (VTBL_ENTRY)&_ZN5S73C73v18Ev,
  (VTBL_ENTRY)&_ZN5S73C73v19Ev,
  (VTBL_ENTRY)&_ZN5S73C73v20Ev,
  (VTBL_ENTRY)&_ZN5S73C73v21Ev,
  (VTBL_ENTRY)&_ZN5S73C73v22Ev,
  (VTBL_ENTRY)&_ZN5S73C73v23Ev,
  (VTBL_ENTRY)&_ZN5S73C73v24Ev,
  (VTBL_ENTRY)&_ZN5S73C73v25Ev,
  (VTBL_ENTRY)&_ZN5S73C73v26Ev,
  (VTBL_ENTRY)&_ZN5S73C73v27Ev,
  (VTBL_ENTRY)&_ZN5S73C73v28Ev,
  (VTBL_ENTRY)&_ZN5S73C73v29Ev,
  (VTBL_ENTRY)&_ZN5S73C73v30Ev,
  (VTBL_ENTRY)&_ZN5S73C73v31Ev,
  (VTBL_ENTRY)&_ZN5S73C73v32Ev,
  (VTBL_ENTRY)&_ZN5S73C73v33Ev,
  (VTBL_ENTRY)&_ZN5S73C73v34Ev,
  (VTBL_ENTRY)&_ZN5S73C73v35Ev,
  (VTBL_ENTRY)&_ZN5S73C73v36Ev,
  (VTBL_ENTRY)&_ZN5S73C73v37Ev,
  (VTBL_ENTRY)&_ZN5S73C73v38Ev,
  (VTBL_ENTRY)&_ZN5S73C73v39Ev,
  (VTBL_ENTRY)&_ZN5S73C73v40Ev,
  (VTBL_ENTRY)&_ZN5S73C73v41Ev,
  (VTBL_ENTRY)&_ZN5S73C73v42Ev,
  (VTBL_ENTRY)&_ZN5S73C73v43Ev,
  (VTBL_ENTRY)&_ZN5S73C73v44Ev,
  (VTBL_ENTRY)&_ZN5S73C73v45Ev,
  (VTBL_ENTRY)&_ZN5S73C73v46Ev,
  (VTBL_ENTRY)&_ZN5S73C73v47Ev,
  (VTBL_ENTRY)&_ZN5S73C73v48Ev,
  (VTBL_ENTRY)&_ZN5S73C73v49Ev,
  (VTBL_ENTRY)&_ZN5S73C73v50Ev,
  (VTBL_ENTRY)&_ZN5S73C73v51Ev,
  (VTBL_ENTRY)&_ZN5S73C73v52Ev,
  (VTBL_ENTRY)&_ZN5S73C73v53Ev,
  (VTBL_ENTRY)&_ZN5S73C73v54Ev,
  (VTBL_ENTRY)&_ZN5S73C73v55Ev,
  (VTBL_ENTRY)&_ZN5S73C73v56Ev,
  (VTBL_ENTRY)&_ZN5S73C73v57Ev,
  (VTBL_ENTRY)&_ZN5S73C73v58Ev,
  (VTBL_ENTRY)&_ZN5S73C73v59Ev,
  (VTBL_ENTRY)&_ZN5S73C73v60Ev,
  (VTBL_ENTRY)&_ZN5S73C73v61Ev,
  (VTBL_ENTRY)&_ZN5S73C73v62Ev,
  (VTBL_ENTRY)&_ZN5S73C73v63Ev,
  (VTBL_ENTRY)&_ZN5S73C73v64Ev,
  (VTBL_ENTRY)&_ZN5S73C73v65Ev,
  (VTBL_ENTRY)&_ZN5S73C73v66Ev,
  (VTBL_ENTRY)&_ZN5S73C73v67Ev,
  (VTBL_ENTRY)&_ZN5S73C63v68Ev,
  (VTBL_ENTRY)&_ZN5S73C63v69Ev,
  (VTBL_ENTRY)&_ZN5S73C63v70Ev,
  (VTBL_ENTRY)&_ZN5S73C63v71Ev,
  (VTBL_ENTRY)&_ZN5S73C63v72Ev,
  (VTBL_ENTRY)&_ZN5S73C63v73Ev,
  (VTBL_ENTRY)&_ZN5S73C63v74Ev,
  (VTBL_ENTRY)&_ZN5S73C63v75Ev,
  (VTBL_ENTRY)&_ZN5S73C63v76Ev,
  (VTBL_ENTRY)&_ZN5S73C63v77Ev,
  (VTBL_ENTRY)&_ZN5S73C63v78Ev,
  (VTBL_ENTRY)&_ZN5S73C63v79Ev,
  (VTBL_ENTRY)&_ZN5S73C63v80Ev,
  (VTBL_ENTRY)&_ZN5S73C63v81Ev,
  (VTBL_ENTRY)&_ZN5S73C63v82Ev,
  (VTBL_ENTRY)&_ZN5S73C63v83Ev,
  (VTBL_ENTRY)&_ZN5S73C63v84Ev,
  (VTBL_ENTRY)&_ZN5S73C63v85Ev,
  (VTBL_ENTRY)&_ZN5S73C63v86Ev,
  (VTBL_ENTRY)&_ZN5S73C63v87Ev,
  (VTBL_ENTRY)&_ZN5S73C63v88Ev,
  (VTBL_ENTRY)&_ZN5S73C63v89Ev,
  (VTBL_ENTRY)&_ZN5S73C53v90Ev,
  (VTBL_ENTRY)&_ZN5S73C53v91Ev,
  (VTBL_ENTRY)&_ZN5S73C53v92Ev,
  (VTBL_ENTRY)&_ZN5S73C53v93Ev,
  (VTBL_ENTRY)&_ZN5S73C53v94Ev,
  (VTBL_ENTRY)&_ZN5S73C53v95Ev,
  (VTBL_ENTRY)&_ZN5S73C53v96Ev,
  (VTBL_ENTRY)&_ZN5S73C53v97Ev,
  (VTBL_ENTRY)&_ZN5S73C53v98Ev,
  (VTBL_ENTRY)&_ZN5S73C53v99Ev,
  (VTBL_ENTRY)&_ZN5S73C54v100Ev,
  (VTBL_ENTRY)&_ZN5S73C54v101Ev,
  (VTBL_ENTRY)&_ZN5S73C54v102Ev,
  (VTBL_ENTRY)&_ZN5S73C54v103Ev,
  (VTBL_ENTRY)&_ZN5S73C54v104Ev,
  (VTBL_ENTRY)&_ZN5S73C54v105Ev,
  (VTBL_ENTRY)&_ZN5S73C54v106Ev,
  (VTBL_ENTRY)&_ZN5S73C54v107Ev,
  (VTBL_ENTRY)&_ZN5S73C54v108Ev,
  (VTBL_ENTRY)&_ZN5S73C54v109Ev,
  (VTBL_ENTRY)&_ZN5S73C44v110Ev,
  (VTBL_ENTRY)&_ZN5S73C44v111Ev,
  (VTBL_ENTRY)&_ZN5S73C44v112Ev,
  (VTBL_ENTRY)&_ZN5S73C44v113Ev,
  (VTBL_ENTRY)&_ZN5S73C34v114Ev,
  (VTBL_ENTRY)&_ZN5S73C34v115Ev,
  (VTBL_ENTRY)&_ZN5S73C34v116Ev,
  (VTBL_ENTRY)&_ZN5S73C34v117Ev,
  (VTBL_ENTRY)&_ZN5S73C34v118Ev,
  (VTBL_ENTRY)&_ZN5S73C34v119Ev,
  (VTBL_ENTRY)&_ZN5S73C34v120Ev,
  (VTBL_ENTRY)&_ZN5S73C34v121Ev,
  (VTBL_ENTRY)&_ZN5S73C24v122Ev,
  (VTBL_ENTRY)&_ZN5S73C24v123Ev,
};
extern VTBL_ENTRY _ZTI5S73C2[];
extern  VTBL_ENTRY _ZTV5S73C2[];
Class_Descriptor cd_S73C2 = {  "S73C2", // class name
  bases_S73C2, 5,
  &(vtc_S73C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(312,232), // object size
  NSPAIRA(_ZTI5S73C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S73C2),124, //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  S73C1  : S73C2 {
  virtual  ~S73C1(); // _ZN5S73C1D1Ev
  virtual void  v1(); // _ZN5S73C12v1Ev
  virtual void  v2(); // _ZN5S73C12v2Ev
  virtual void  v3(); // _ZN5S73C12v3Ev
  S73C1(); // tgen
};
//SIG(1 S73C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ BC7{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 Fi FL Fp[4] Fi[2] Fp FC8{ m Fi[2]} Fp[2]} vd v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 Fi[2] Fp Fi[2] FC9{ BC10{ BC11{ BC12{ m Fp Fi[2]}}}} FC9 FC13{ m} FC9 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 Fi:1 Fi:1 Fi:1 FC14{ BC15{ BC12}} FC16{ BC17{ BC12}} FC18{ BC19{ BC12}} FC20{ BC21{ BC12}} Fi[3]} vd v110 v111 v112 v113 FC8 Fi:1 FC22{ BC23{ BC12}}} vd v114 v115 v116 v117 v118 v119 v120 v121 Fi Fi:1} vd v122 v123 Fi} vd v1 v2 v3}


 S73C1 ::~S73C1(){ note_dtor("S73C1", this);}
void  S73C1 ::v1(){vfunc_called(this, "_ZN5S73C12v1Ev");}
void  S73C1 ::v2(){vfunc_called(this, "_ZN5S73C12v2Ev");}
void  S73C1 ::v3(){vfunc_called(this, "_ZN5S73C12v3Ev");}
S73C1 ::S73C1(){ note_ctor("S73C1", this);} // tgen

static void Test_S73C1()
{
  extern Class_Descriptor cd_S73C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(40,59)];
    init_test(&cd_S73C1, buf);
    S73C1 *dp, &lv = *(dp=new (buf) S73C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(312,232), "sizeof(S73C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S73C1)");
    check_base_class_offset(lv, (S73C7*)(S73C6*)(S73C5*)(S73C4*)(S73C3*)(S73C2*), 0, "S73C1");
    check_base_class_offset(lv, (S73C6*)(S73C5*)(S73C4*)(S73C3*)(S73C2*), 0, "S73C1");
    check_base_class_offset(lv, (S73C5*)(S73C4*)(S73C3*)(S73C2*), 0, "S73C1");
    check_base_class_offset(lv, (S73C4*)(S73C3*)(S73C2*), 0, "S73C1");
    check_base_class_offset(lv, (S73C3*)(S73C2*), 0, "S73C1");
    check_base_class_offset(lv, (S73C2*), 0, "S73C1");
    test_class_info(&lv, &cd_S73C1);
    dp->~S73C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS73C1(Test_S73C1, "S73C1", ABISELECT(312,232));

#else // __cplusplus

extern void _ZN5S73C1C1Ev();
extern void _ZN5S73C1D1Ev();
Name_Map name_map_S73C1[] = {
  NSPAIR(_ZN5S73C1C1Ev),
  NSPAIR(_ZN5S73C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S73C7;
extern VTBL_ENTRY _ZTI5S73C7[];
extern  VTBL_ENTRY _ZTV5S73C7[];
extern Class_Descriptor cd_S73C6;
extern VTBL_ENTRY _ZTI5S73C6[];
extern  VTBL_ENTRY _ZTV5S73C6[];
extern Class_Descriptor cd_S73C5;
extern VTBL_ENTRY _ZTI5S73C5[];
extern  VTBL_ENTRY _ZTV5S73C5[];
extern Class_Descriptor cd_S73C4;
extern VTBL_ENTRY _ZTI5S73C4[];
extern  VTBL_ENTRY _ZTV5S73C4[];
extern Class_Descriptor cd_S73C3;
extern VTBL_ENTRY _ZTI5S73C3[];
extern  VTBL_ENTRY _ZTV5S73C3[];
extern Class_Descriptor cd_S73C2;
extern VTBL_ENTRY _ZTI5S73C2[];
extern  VTBL_ENTRY _ZTV5S73C2[];
static Base_Class bases_S73C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S73C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S73C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S73C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S73C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S73C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S73C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S73C1[];
extern void _ZN5S73C1D1Ev();
extern void _ZN5S73C1D0Ev();
extern void _ZN5S73C72v4Ev();
extern void _ZN5S73C72v5Ev();
extern void _ZN5S73C72v6Ev();
extern void _ZN5S73C72v7Ev();
extern void _ZN5S73C72v8Ev();
extern void _ZN5S73C72v9Ev();
extern void _ZN5S73C73v10Ev();
extern void _ZN5S73C73v11Ev();
extern void _ZN5S73C73v12Ev();
extern void _ZN5S73C73v13Ev();
extern void _ZN5S73C73v14Ev();
extern void _ZN5S73C73v15Ev();
extern void _ZN5S73C73v16Ev();
extern void _ZN5S73C73v17Ev();
extern void _ZN5S73C73v18Ev();
extern void _ZN5S73C73v19Ev();
extern void _ZN5S73C73v20Ev();
extern void _ZN5S73C73v21Ev();
extern void _ZN5S73C73v22Ev();
extern void _ZN5S73C73v23Ev();
extern void _ZN5S73C73v24Ev();
extern void _ZN5S73C73v25Ev();
extern void _ZN5S73C73v26Ev();
extern void _ZN5S73C73v27Ev();
extern void _ZN5S73C73v28Ev();
extern void _ZN5S73C73v29Ev();
extern void _ZN5S73C73v30Ev();
extern void _ZN5S73C73v31Ev();
extern void _ZN5S73C73v32Ev();
extern void _ZN5S73C73v33Ev();
extern void _ZN5S73C73v34Ev();
extern void _ZN5S73C73v35Ev();
extern void _ZN5S73C73v36Ev();
extern void _ZN5S73C73v37Ev();
extern void _ZN5S73C73v38Ev();
extern void _ZN5S73C73v39Ev();
extern void _ZN5S73C73v40Ev();
extern void _ZN5S73C73v41Ev();
extern void _ZN5S73C73v42Ev();
extern void _ZN5S73C73v43Ev();
extern void _ZN5S73C73v44Ev();
extern void _ZN5S73C73v45Ev();
extern void _ZN5S73C73v46Ev();
extern void _ZN5S73C73v47Ev();
extern void _ZN5S73C73v48Ev();
extern void _ZN5S73C73v49Ev();
extern void _ZN5S73C73v50Ev();
extern void _ZN5S73C73v51Ev();
extern void _ZN5S73C73v52Ev();
extern void _ZN5S73C73v53Ev();
extern void _ZN5S73C73v54Ev();
extern void _ZN5S73C73v55Ev();
extern void _ZN5S73C73v56Ev();
extern void _ZN5S73C73v57Ev();
extern void _ZN5S73C73v58Ev();
extern void _ZN5S73C73v59Ev();
extern void _ZN5S73C73v60Ev();
extern void _ZN5S73C73v61Ev();
extern void _ZN5S73C73v62Ev();
extern void _ZN5S73C73v63Ev();
extern void _ZN5S73C73v64Ev();
extern void _ZN5S73C73v65Ev();
extern void _ZN5S73C73v66Ev();
extern void _ZN5S73C73v67Ev();
extern void _ZN5S73C63v68Ev();
extern void _ZN5S73C63v69Ev();
extern void _ZN5S73C63v70Ev();
extern void _ZN5S73C63v71Ev();
extern void _ZN5S73C63v72Ev();
extern void _ZN5S73C63v73Ev();
extern void _ZN5S73C63v74Ev();
extern void _ZN5S73C63v75Ev();
extern void _ZN5S73C63v76Ev();
extern void _ZN5S73C63v77Ev();
extern void _ZN5S73C63v78Ev();
extern void _ZN5S73C63v79Ev();
extern void _ZN5S73C63v80Ev();
extern void _ZN5S73C63v81Ev();
extern void _ZN5S73C63v82Ev();
extern void _ZN5S73C63v83Ev();
extern void _ZN5S73C63v84Ev();
extern void _ZN5S73C63v85Ev();
extern void _ZN5S73C63v86Ev();
extern void _ZN5S73C63v87Ev();
extern void _ZN5S73C63v88Ev();
extern void _ZN5S73C63v89Ev();
extern void _ZN5S73C53v90Ev();
extern void _ZN5S73C53v91Ev();
extern void _ZN5S73C53v92Ev();
extern void _ZN5S73C53v93Ev();
extern void _ZN5S73C53v94Ev();
extern void _ZN5S73C53v95Ev();
extern void _ZN5S73C53v96Ev();
extern void _ZN5S73C53v97Ev();
extern void _ZN5S73C53v98Ev();
extern void _ZN5S73C53v99Ev();
extern void _ZN5S73C54v100Ev();
extern void _ZN5S73C54v101Ev();
extern void _ZN5S73C54v102Ev();
extern void _ZN5S73C54v103Ev();
extern void _ZN5S73C54v104Ev();
extern void _ZN5S73C54v105Ev();
extern void _ZN5S73C54v106Ev();
extern void _ZN5S73C54v107Ev();
extern void _ZN5S73C54v108Ev();
extern void _ZN5S73C54v109Ev();
extern void _ZN5S73C44v110Ev();
extern void _ZN5S73C44v111Ev();
extern void _ZN5S73C44v112Ev();
extern void _ZN5S73C44v113Ev();
extern void _ZN5S73C34v114Ev();
extern void _ZN5S73C34v115Ev();
extern void _ZN5S73C34v116Ev();
extern void _ZN5S73C34v117Ev();
extern void _ZN5S73C34v118Ev();
extern void _ZN5S73C34v119Ev();
extern void _ZN5S73C34v120Ev();
extern void _ZN5S73C34v121Ev();
extern void _ZN5S73C24v122Ev();
extern void _ZN5S73C24v123Ev();
extern void _ZN5S73C12v1Ev();
extern void _ZN5S73C12v2Ev();
extern void _ZN5S73C12v3Ev();
static  VTBL_ENTRY vtc_S73C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S73C1[0]),
  (VTBL_ENTRY)&_ZN5S73C1D1Ev,
  (VTBL_ENTRY)&_ZN5S73C1D0Ev,
  (VTBL_ENTRY)&_ZN5S73C72v4Ev,
  (VTBL_ENTRY)&_ZN5S73C72v5Ev,
  (VTBL_ENTRY)&_ZN5S73C72v6Ev,
  (VTBL_ENTRY)&_ZN5S73C72v7Ev,
  (VTBL_ENTRY)&_ZN5S73C72v8Ev,
  (VTBL_ENTRY)&_ZN5S73C72v9Ev,
  (VTBL_ENTRY)&_ZN5S73C73v10Ev,
  (VTBL_ENTRY)&_ZN5S73C73v11Ev,
  (VTBL_ENTRY)&_ZN5S73C73v12Ev,
  (VTBL_ENTRY)&_ZN5S73C73v13Ev,
  (VTBL_ENTRY)&_ZN5S73C73v14Ev,
  (VTBL_ENTRY)&_ZN5S73C73v15Ev,
  (VTBL_ENTRY)&_ZN5S73C73v16Ev,
  (VTBL_ENTRY)&_ZN5S73C73v17Ev,
  (VTBL_ENTRY)&_ZN5S73C73v18Ev,
  (VTBL_ENTRY)&_ZN5S73C73v19Ev,
  (VTBL_ENTRY)&_ZN5S73C73v20Ev,
  (VTBL_ENTRY)&_ZN5S73C73v21Ev,
  (VTBL_ENTRY)&_ZN5S73C73v22Ev,
  (VTBL_ENTRY)&_ZN5S73C73v23Ev,
  (VTBL_ENTRY)&_ZN5S73C73v24Ev,
  (VTBL_ENTRY)&_ZN5S73C73v25Ev,
  (VTBL_ENTRY)&_ZN5S73C73v26Ev,
  (VTBL_ENTRY)&_ZN5S73C73v27Ev,
  (VTBL_ENTRY)&_ZN5S73C73v28Ev,
  (VTBL_ENTRY)&_ZN5S73C73v29Ev,
  (VTBL_ENTRY)&_ZN5S73C73v30Ev,
  (VTBL_ENTRY)&_ZN5S73C73v31Ev,
  (VTBL_ENTRY)&_ZN5S73C73v32Ev,
  (VTBL_ENTRY)&_ZN5S73C73v33Ev,
  (VTBL_ENTRY)&_ZN5S73C73v34Ev,
  (VTBL_ENTRY)&_ZN5S73C73v35Ev,
  (VTBL_ENTRY)&_ZN5S73C73v36Ev,
  (VTBL_ENTRY)&_ZN5S73C73v37Ev,
  (VTBL_ENTRY)&_ZN5S73C73v38Ev,
  (VTBL_ENTRY)&_ZN5S73C73v39Ev,
  (VTBL_ENTRY)&_ZN5S73C73v40Ev,
  (VTBL_ENTRY)&_ZN5S73C73v41Ev,
  (VTBL_ENTRY)&_ZN5S73C73v42Ev,
  (VTBL_ENTRY)&_ZN5S73C73v43Ev,
  (VTBL_ENTRY)&_ZN5S73C73v44Ev,
  (VTBL_ENTRY)&_ZN5S73C73v45Ev,
  (VTBL_ENTRY)&_ZN5S73C73v46Ev,
  (VTBL_ENTRY)&_ZN5S73C73v47Ev,
  (VTBL_ENTRY)&_ZN5S73C73v48Ev,
  (VTBL_ENTRY)&_ZN5S73C73v49Ev,
  (VTBL_ENTRY)&_ZN5S73C73v50Ev,
  (VTBL_ENTRY)&_ZN5S73C73v51Ev,
  (VTBL_ENTRY)&_ZN5S73C73v52Ev,
  (VTBL_ENTRY)&_ZN5S73C73v53Ev,
  (VTBL_ENTRY)&_ZN5S73C73v54Ev,
  (VTBL_ENTRY)&_ZN5S73C73v55Ev,
  (VTBL_ENTRY)&_ZN5S73C73v56Ev,
  (VTBL_ENTRY)&_ZN5S73C73v57Ev,
  (VTBL_ENTRY)&_ZN5S73C73v58Ev,
  (VTBL_ENTRY)&_ZN5S73C73v59Ev,
  (VTBL_ENTRY)&_ZN5S73C73v60Ev,
  (VTBL_ENTRY)&_ZN5S73C73v61Ev,
  (VTBL_ENTRY)&_ZN5S73C73v62Ev,
  (VTBL_ENTRY)&_ZN5S73C73v63Ev,
  (VTBL_ENTRY)&_ZN5S73C73v64Ev,
  (VTBL_ENTRY)&_ZN5S73C73v65Ev,
  (VTBL_ENTRY)&_ZN5S73C73v66Ev,
  (VTBL_ENTRY)&_ZN5S73C73v67Ev,
  (VTBL_ENTRY)&_ZN5S73C63v68Ev,
  (VTBL_ENTRY)&_ZN5S73C63v69Ev,
  (VTBL_ENTRY)&_ZN5S73C63v70Ev,
  (VTBL_ENTRY)&_ZN5S73C63v71Ev,
  (VTBL_ENTRY)&_ZN5S73C63v72Ev,
  (VTBL_ENTRY)&_ZN5S73C63v73Ev,
  (VTBL_ENTRY)&_ZN5S73C63v74Ev,
  (VTBL_ENTRY)&_ZN5S73C63v75Ev,
  (VTBL_ENTRY)&_ZN5S73C63v76Ev,
  (VTBL_ENTRY)&_ZN5S73C63v77Ev,
  (VTBL_ENTRY)&_ZN5S73C63v78Ev,
  (VTBL_ENTRY)&_ZN5S73C63v79Ev,
  (VTBL_ENTRY)&_ZN5S73C63v80Ev,
  (VTBL_ENTRY)&_ZN5S73C63v81Ev,
  (VTBL_ENTRY)&_ZN5S73C63v82Ev,
  (VTBL_ENTRY)&_ZN5S73C63v83Ev,
  (VTBL_ENTRY)&_ZN5S73C63v84Ev,
  (VTBL_ENTRY)&_ZN5S73C63v85Ev,
  (VTBL_ENTRY)&_ZN5S73C63v86Ev,
  (VTBL_ENTRY)&_ZN5S73C63v87Ev,
  (VTBL_ENTRY)&_ZN5S73C63v88Ev,
  (VTBL_ENTRY)&_ZN5S73C63v89Ev,
  (VTBL_ENTRY)&_ZN5S73C53v90Ev,
  (VTBL_ENTRY)&_ZN5S73C53v91Ev,
  (VTBL_ENTRY)&_ZN5S73C53v92Ev,
  (VTBL_ENTRY)&_ZN5S73C53v93Ev,
  (VTBL_ENTRY)&_ZN5S73C53v94Ev,
  (VTBL_ENTRY)&_ZN5S73C53v95Ev,
  (VTBL_ENTRY)&_ZN5S73C53v96Ev,
  (VTBL_ENTRY)&_ZN5S73C53v97Ev,
  (VTBL_ENTRY)&_ZN5S73C53v98Ev,
  (VTBL_ENTRY)&_ZN5S73C53v99Ev,
  (VTBL_ENTRY)&_ZN5S73C54v100Ev,
  (VTBL_ENTRY)&_ZN5S73C54v101Ev,
  (VTBL_ENTRY)&_ZN5S73C54v102Ev,
  (VTBL_ENTRY)&_ZN5S73C54v103Ev,
  (VTBL_ENTRY)&_ZN5S73C54v104Ev,
  (VTBL_ENTRY)&_ZN5S73C54v105Ev,
  (VTBL_ENTRY)&_ZN5S73C54v106Ev,
  (VTBL_ENTRY)&_ZN5S73C54v107Ev,
  (VTBL_ENTRY)&_ZN5S73C54v108Ev,
  (VTBL_ENTRY)&_ZN5S73C54v109Ev,
  (VTBL_ENTRY)&_ZN5S73C44v110Ev,
  (VTBL_ENTRY)&_ZN5S73C44v111Ev,
  (VTBL_ENTRY)&_ZN5S73C44v112Ev,
  (VTBL_ENTRY)&_ZN5S73C44v113Ev,
  (VTBL_ENTRY)&_ZN5S73C34v114Ev,
  (VTBL_ENTRY)&_ZN5S73C34v115Ev,
  (VTBL_ENTRY)&_ZN5S73C34v116Ev,
  (VTBL_ENTRY)&_ZN5S73C34v117Ev,
  (VTBL_ENTRY)&_ZN5S73C34v118Ev,
  (VTBL_ENTRY)&_ZN5S73C34v119Ev,
  (VTBL_ENTRY)&_ZN5S73C34v120Ev,
  (VTBL_ENTRY)&_ZN5S73C34v121Ev,
  (VTBL_ENTRY)&_ZN5S73C24v122Ev,
  (VTBL_ENTRY)&_ZN5S73C24v123Ev,
  (VTBL_ENTRY)&_ZN5S73C12v1Ev,
  (VTBL_ENTRY)&_ZN5S73C12v2Ev,
  (VTBL_ENTRY)&_ZN5S73C12v3Ev,
};
extern VTBL_ENTRY _ZTI5S73C1[];
extern  VTBL_ENTRY _ZTV5S73C1[];
Class_Descriptor cd_S73C1 = {  "S73C1", // class name
  bases_S73C1, 6,
  &(vtc_S73C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(312,232), // object size
  NSPAIRA(_ZTI5S73C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S73C1),127, //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  S17460C3_nt  {
  int s17460c3f0[3];
  void  mf17460c3(); // _ZN11S17460C3_nt9mf17460c3Ev
};
//SIG(-1 S17460C3_nt) C1{ m Fi[3]}


void  S17460C3_nt ::mf17460c3(){}

//skip512 S17460C3_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17460C15_nt  {
  int s17460c15f0[4];
  void  mf17460c15(); // _ZN12S17460C15_nt10mf17460c15Ev
};
//SIG(-1 S17460C15_nt) C1{ m Fi[4]}


void  S17460C15_nt ::mf17460c15(){}

//skip512 S17460C15_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17460C14_nt  {
  void *s17460c14f0;
  ::S17460C15_nt s17460c14f1;
  void  mf17460c14(); // _ZN12S17460C14_nt10mf17460c14Ev
};
//SIG(-1 S17460C14_nt) C1{ m Fp FC2{ m Fi[4]}}


void  S17460C14_nt ::mf17460c14(){}

//skip512 S17460C14_nt

#else // __cplusplus

Class_Descriptor cd_S17460C14_nt = {  "S17460C14_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(24,20), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17460C13  : S17460C14_nt {
  int s17460c13f0[2];
};
//SIG(-1 S17460C13) C1{ BC2{ m Fp FC3{ m Fi[4]}} Fi[2]}



static void Test_S17460C13()
{
  extern Class_Descriptor cd_S17460C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,8)];
    init_test(&cd_S17460C13, buf);
    S17460C13 &lv = *(new (buf) S17460C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,28), "sizeof(S17460C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17460C13)");
    check_base_class_offset(lv, (S17460C14_nt*), 0, "S17460C13");
    check_field_offset(lv, s17460c13f0, ABISELECT(24,20), "S17460C13.s17460c13f0");
    test_class_info(&lv, &cd_S17460C13);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS17460C13(Test_S17460C13, "S17460C13", ABISELECT(32,28));

#else // __cplusplus

extern Class_Descriptor cd_S17460C14_nt;
static Base_Class bases_S17460C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S17460C14_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_S17460C13 = {  "S17460C13", // class name
  bases_S17460C13, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(32,28), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17460C1  {
  void *s17460c1f0;
  char s17460c1f1[2];
  ::S3350C13_nt s17460c1f2;
  ::S17460C3_nt s17460c1f3;
  ::S3350C17 s17460c1f4;
  ::S3350C17 s17460c1f5;
  ::S3350C11 s17460c1f6;
  ::S3350C5_nt s17460c1f7;
  ::S287C27 s17460c1f8;
  ::S17460C13 s17460c1f9;
  ::S3350C5_nt s17460c1f10;
  ::S3350C5_nt s17460c1f11;
  ::S3350C5_nt s17460c1f12;
  unsigned int s17460c1f13:1;
  unsigned int s17460c1f14:1;
  unsigned int s17460c1f15:1;
  unsigned int s17460c1f16:1;
  unsigned int s17460c1f17:1;
  unsigned int s17460c1f18:1;
  unsigned int s17460c1f19:1;
  unsigned int s17460c1f20:1;
  unsigned int s17460c1f21:1;
  unsigned int s17460c1f22:1;
  unsigned int s17460c1f23:1;
  unsigned int s17460c1f24:1;
  unsigned int s17460c1f25:1;
  unsigned int s17460c1f26:1;
  unsigned int s17460c1f27:1;
  int s17460c1f28;
  void *s17460c1f29;
  void  mf17460c1(); // _ZN8S17460C19mf17460c1Ev
};
//SIG(1 S17460C1) C1{ m Fp Fc[2] FC2{ m Fi[3]} FC3{ m Fi[3]} FC4{ BC5{ BC6{ m Fp Fi[2]}}} FC4 FC7{ BC8{ BC6}} FC9{ BC10{ BC6}} FC11{ BC12{ BC6}} FC13{ BC14{ m Fp FC15{ m Fi[4]}} Fi[2]} FC9 FC9 FC9 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi Fp}


void  S17460C1 ::mf17460c1(){}

static void Test_S17460C1()
{
  {
    init_simple_test("S17460C1");
    static S17460C1 lv;
    check2(sizeof(lv), ABISELECT(216,168), "sizeof(S17460C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17460C1)");
    check_field_offset(lv, s17460c1f0, 0, "S17460C1.s17460c1f0");
    check_field_offset(lv, s17460c1f1, ABISELECT(8,4), "S17460C1.s17460c1f1");
    check_field_offset(lv, s17460c1f2, ABISELECT(12,8), "S17460C1.s17460c1f2");
    check_field_offset(lv, s17460c1f3, ABISELECT(24,20), "S17460C1.s17460c1f3");
    check_field_offset(lv, s17460c1f4, ABISELECT(40,32), "S17460C1.s17460c1f4");
    check_field_offset(lv, s17460c1f5, ABISELECT(56,44), "S17460C1.s17460c1f5");
    check_field_offset(lv, s17460c1f6, ABISELECT(72,56), "S17460C1.s17460c1f6");
    check_field_offset(lv, s17460c1f7, ABISELECT(88,68), "S17460C1.s17460c1f7");
    check_field_offset(lv, s17460c1f8, ABISELECT(104,80), "S17460C1.s17460c1f8");
    check_field_offset(lv, s17460c1f9, ABISELECT(120,92), "S17460C1.s17460c1f9");
    check_field_offset(lv, s17460c1f10, ABISELECT(152,120), "S17460C1.s17460c1f10");
    check_field_offset(lv, s17460c1f11, ABISELECT(168,132), "S17460C1.s17460c1f11");
    check_field_offset(lv, s17460c1f12, ABISELECT(184,144), "S17460C1.s17460c1f12");
    set_bf_and_test(lv, s17460c1f13, ABISELECT(200,156), 0, 1, 1, "S17460C1");
    set_bf_and_test(lv, s17460c1f14, ABISELECT(200,156), 1, 1, 1, "S17460C1");
    set_bf_and_test(lv, s17460c1f15, ABISELECT(200,156), 2, 1, 1, "S17460C1");
    set_bf_and_test(lv, s17460c1f16, ABISELECT(200,156), 3, 1, 1, "S17460C1");
    set_bf_and_test(lv, s17460c1f17, ABISELECT(200,156), 4, 1, 1, "S17460C1");
    set_bf_and_test(lv, s17460c1f18, ABISELECT(200,156), 5, 1, 1, "S17460C1");
    set_bf_and_test(lv, s17460c1f19, ABISELECT(200,156), 6, 1, 1, "S17460C1");
    set_bf_and_test(lv, s17460c1f20, ABISELECT(200,156), 7, 1, 1, "S17460C1");
    set_bf_and_test(lv, s17460c1f21, ABISELECT(201,157), 0, 1, 1, "S17460C1");
    set_bf_and_test(lv, s17460c1f22, ABISELECT(201,157), 1, 1, 1, "S17460C1");
    set_bf_and_test(lv, s17460c1f23, ABISELECT(201,157), 2, 1, 1, "S17460C1");
    set_bf_and_test(lv, s17460c1f24, ABISELECT(201,157), 3, 1, 1, "S17460C1");
    set_bf_and_test(lv, s17460c1f25, ABISELECT(201,157), 4, 1, 1, "S17460C1");
    set_bf_and_test(lv, s17460c1f26, ABISELECT(201,157), 5, 1, 1, "S17460C1");
    set_bf_and_test(lv, s17460c1f27, ABISELECT(201,157), 6, 1, 1, "S17460C1");
    check_field_offset(lv, s17460c1f28, ABISELECT(204,160), "S17460C1.s17460c1f28");
    check_field_offset(lv, s17460c1f29, ABISELECT(208,164), "S17460C1.s17460c1f29");
  }
}
static Arrange_To_Call_Me vS17460C1(Test_S17460C1, "S17460C1", ABISELECT(216,168));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21811C2_nt  {
  void *s21811c2f0[2];
  void  mf21811c2(); // _ZN11S21811C2_nt9mf21811c2Ev
};
//SIG(-1 S21811C2_nt) C1{ m Fp[2]}


void  S21811C2_nt ::mf21811c2(){}

//skip512 S21811C2_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21811C7_nt  {
  void *s21811c7f0;
  int s21811c7f1[2];
  ::S2121C38 s21811c7f2;
  void  mf21811c7(); // _ZN11S21811C7_nt9mf21811c7Ev
};
//SIG(-1 S21811C7_nt) C1{ m Fp Fi[2] FC2{ m}}


void  S21811C7_nt ::mf21811c7(){}

//skip512 S21811C7_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21811C11  {
  int s21811c11f0;
  __tsi64 s21811c11f1;
};
//SIG(-1 S21811C11) C1{ Fi FL}



static void Test_S21811C11()
{
  {
    init_simple_test("S21811C11");
    S21811C11 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S21811C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21811C11)");
    check_field_offset(lv, s21811c11f0, 0, "S21811C11.s21811c11f0");
    check_field_offset(lv, s21811c11f1, ABISELECT(8,4), "S21811C11.s21811c11f1");
  }
}
static Arrange_To_Call_Me vS21811C11(Test_S21811C11, "S21811C11", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21811C13_nt  {
  void *s21811c13f0;
  void  mf21811c13(); // _ZN12S21811C13_nt10mf21811c13Ev
};
//SIG(-1 S21811C13_nt) C1{ m Fp}


void  S21811C13_nt ::mf21811c13(){}

//skip512 S21811C13_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21811C12  {
  ::S2121C20_nt s21811c12f0;
  ::S21811C13_nt s21811c12f1;
  ::S2121C20_nt s21811c12f2;
  __tsi64 s21811c12f3;
};
//SIG(-1 S21811C12) C1{ FC2{ m Fp Fi FC3{ m}} FC4{ m Fp} FC2 FL}



static void Test_S21811C12()
{
  {
    init_simple_test("S21811C12");
    S21811C12 lv;
    check2(sizeof(lv), ABISELECT(48,36), "sizeof(S21811C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21811C12)");
    check_field_offset(lv, s21811c12f0, 0, "S21811C12.s21811c12f0");
    check_field_offset(lv, s21811c12f1, ABISELECT(16,12), "S21811C12.s21811c12f1");
    check_field_offset(lv, s21811c12f2, ABISELECT(24,16), "S21811C12.s21811c12f2");
    check_field_offset(lv, s21811c12f3, ABISELECT(40,28), "S21811C12.s21811c12f3");
  }
}
static Arrange_To_Call_Me vS21811C12(Test_S21811C12, "S21811C12", ABISELECT(48,36));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21811C16  {
  void *s21811c16f0;
  int s21811c16f1[2];
  ::S2121C28 s21811c16f2;
  void  mf21811c16(); // _ZN9S21811C1610mf21811c16Ev
};
//SIG(-1 S21811C16) C1{ m Fp Fi[2] FC2{ m}}


void  S21811C16 ::mf21811c16(){}

static void Test_S21811C16()
{
  {
    init_simple_test("S21811C16");
    S21811C16 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S21811C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21811C16)");
    check_field_offset(lv, s21811c16f0, 0, "S21811C16.s21811c16f0");
    check_field_offset(lv, s21811c16f1, ABISELECT(8,4), "S21811C16.s21811c16f1");
    check_field_offset(lv, s21811c16f2, ABISELECT(16,12), "S21811C16.s21811c16f2");
  }
}
static Arrange_To_Call_Me vS21811C16(Test_S21811C16, "S21811C16", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21811C1  {
  void *s21811c1f0[2];
  int s21811c1f1[3];
  void *s21811c1f2;
  ::S21811C2_nt s21811c1f3;
  int s21811c1f4;
  ::S2121C37 s21811c1f5;
  ::S2121C29_nt s21811c1f6;
  ::S21811C7_nt s21811c1f7;
  ::S2121C20_nt s21811c1f8;
  ::S21811C11 s21811c1f9;
  int s21811c1f10;
  ::S21811C12 s21811c1f11;
  char s21811c1f12[4];
  int s21811c1f13;
  char s21811c1f14;
  void *s21811c1f15[2];
  ::S21811C7_nt s21811c1f16;
  ::S21811C16 s21811c1f17;
  void  mf21811c1(); // _ZN8S21811C19mf21811c1Ev
  virtual  ~S21811C1(); // _ZN8S21811C1D1Ev
  S21811C1(); // tgen
};
//SIG(1 S21811C1) C1{ vd m Fp[2] Fi[3] Fp FC2{ m Fp[2]} Fi FC3{ m Fp Fi[2] FC4{ m}} FC5{ m Fp Fi[2] FC6{ m}} FC7{ m Fp Fi[2] FC4} FC8{ m Fp Fi FC9{ m}} FC10{ Fi FL} Fi FC11{ FC8 FC12{ m Fp} FC8 FL} Fc[4] Fi Fc Fp[2] FC7 FC13{ m Fp Fi[2] FC6}}


void  S21811C1 ::mf21811c1(){}
 S21811C1 ::~S21811C1(){ note_dtor("S21811C1", this);}
S21811C1 ::S21811C1(){ note_ctor("S21811C1", this);} // tgen

static void Test_S21811C1()
{
  extern Class_Descriptor cd_S21811C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(40,52)];
    init_test(&cd_S21811C1, buf);
    S21811C1 *dp, &lv = *(dp=new (buf) S21811C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(312,204), "sizeof(S21811C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21811C1)");
    check_field_offset(lv, s21811c1f0, ABISELECT(8,4), "S21811C1.s21811c1f0");
    check_field_offset(lv, s21811c1f1, ABISELECT(24,12), "S21811C1.s21811c1f1");
    check_field_offset(lv, s21811c1f2, ABISELECT(40,24), "S21811C1.s21811c1f2");
    check_field_offset(lv, s21811c1f3, ABISELECT(48,28), "S21811C1.s21811c1f3");
    check_field_offset(lv, s21811c1f4, ABISELECT(64,36), "S21811C1.s21811c1f4");
    check_field_offset(lv, s21811c1f5, ABISELECT(72,40), "S21811C1.s21811c1f5");
    check_field_offset(lv, s21811c1f6, ABISELECT(96,56), "S21811C1.s21811c1f6");
    check_field_offset(lv, s21811c1f7, ABISELECT(120,72), "S21811C1.s21811c1f7");
    check_field_offset(lv, s21811c1f8, ABISELECT(144,88), "S21811C1.s21811c1f8");
    check_field_offset(lv, s21811c1f9, ABISELECT(160,100), "S21811C1.s21811c1f9");
    check_field_offset(lv, s21811c1f10, ABISELECT(176,112), "S21811C1.s21811c1f10");
    check_field_offset(lv, s21811c1f11, ABISELECT(184,116), "S21811C1.s21811c1f11");
    check_field_offset(lv, s21811c1f12, ABISELECT(232,152), "S21811C1.s21811c1f12");
    check_field_offset(lv, s21811c1f13, ABISELECT(236,156), "S21811C1.s21811c1f13");
    check_field_offset(lv, s21811c1f14, ABISELECT(240,160), "S21811C1.s21811c1f14");
    check_field_offset(lv, s21811c1f15, ABISELECT(248,164), "S21811C1.s21811c1f15");
    check_field_offset(lv, s21811c1f16, ABISELECT(264,172), "S21811C1.s21811c1f16");
    check_field_offset(lv, s21811c1f17, ABISELECT(288,188), "S21811C1.s21811c1f17");
    test_class_info(&lv, &cd_S21811C1);
    dp->~S21811C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21811C1(Test_S21811C1, "S21811C1", ABISELECT(312,204));

#else // __cplusplus

extern void _ZN8S21811C1C1Ev();
extern void _ZN8S21811C1D1Ev();
Name_Map name_map_S21811C1[] = {
  NSPAIR(_ZN8S21811C1C1Ev),
  NSPAIR(_ZN8S21811C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21811C1[];
extern void _ZN8S21811C1D1Ev();
extern void _ZN8S21811C1D0Ev();
static  VTBL_ENTRY vtc_S21811C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21811C1[0]),
  (VTBL_ENTRY)&_ZN8S21811C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21811C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21811C1[];
extern  VTBL_ENTRY _ZTV8S21811C1[];
Class_Descriptor cd_S21811C1 = {  "S21811C1", // class name
  0,0,//no base classes
  &(vtc_S21811C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(312,204), // object size
  NSPAIRA(_ZTI8S21811C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21811C1),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  S2514C3_nt  {
  long double s2514c3f0;
  void  mf2514c3(); // _ZN10S2514C3_nt8mf2514c3Ev
};
//SIG(-1 S2514C3_nt) C1{ m FD}


void  S2514C3_nt ::mf2514c3(){}

//skip512 S2514C3_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI10S2514C3_nt[];
VTBL_ENTRY *P__ZTI10S2514C3_nt = _ZTI10S2514C3_nt; 
Class_Descriptor cd_S2514C3_nt = {  "S2514C3_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI10S2514C3_nt),ABISELECT(16,8), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2514C4  {
  short  :0;
  short s2514c4f1;
  int s2514c4f2;
  __tsi64 s2514c4f3;
  int s2514c4f4;
  virtual void  v5(); // _ZN7S2514C42v5Ev
  ~S2514C4(); // tgen
  S2514C4(); // tgen
};
//SIG(-1 S2514C4) C1{ v1 Fs:0 Fs Fi FL Fi}


void  S2514C4 ::v5(){vfunc_called(this, "_ZN7S2514C42v5Ev");}
S2514C4 ::~S2514C4(){ note_dtor("S2514C4", this);} // tgen
S2514C4 ::S2514C4(){ note_ctor("S2514C4", this);} // tgen

static void Test_S2514C4()
{
  extern Class_Descriptor cd_S2514C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,7)];
    init_test(&cd_S2514C4, buf);
    S2514C4 *dp, &lv = *(dp=new (buf) S2514C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S2514C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2514C4)");
    check_field_offset(lv, s2514c4f1, ABISELECT(8,4), "S2514C4.s2514c4f1");
    check_field_offset(lv, s2514c4f2, ABISELECT(12,8), "S2514C4.s2514c4f2");
    check_field_offset(lv, s2514c4f3, ABISELECT(16,12), "S2514C4.s2514c4f3");
    check_field_offset(lv, s2514c4f4, ABISELECT(24,20), "S2514C4.s2514c4f4");
    test_class_info(&lv, &cd_S2514C4);
    dp->~S2514C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2514C4(Test_S2514C4, "S2514C4", ABISELECT(32,24));

#else // __cplusplus

extern void _ZN7S2514C4C1Ev();
extern void _ZN7S2514C4D1Ev();
Name_Map name_map_S2514C4[] = {
  NSPAIR(_ZN7S2514C4C1Ev),
  NSPAIR(_ZN7S2514C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2514C4[];
extern void _ZN7S2514C42v5Ev();
static  VTBL_ENTRY vtc_S2514C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2514C4[0]),
  (VTBL_ENTRY)&_ZN7S2514C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S2514C4[];
extern  VTBL_ENTRY _ZTV7S2514C4[];
Class_Descriptor cd_S2514C4 = {  "S2514C4", // class name
  0,0,//no base classes
  &(vtc_S2514C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,24), // object size
  NSPAIRA(_ZTI7S2514C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2514C4),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  S2514C2  : S2514C3_nt , S2514C4 {
  int s2514c2f0;
  ~S2514C2(); // tgen
  S2514C2(); // tgen
};
//SIG(-1 S2514C2) C1{ BC2{ m FD} BC3{ v1 Fs:0 Fs Fi FL Fi} Fi}


S2514C2 ::~S2514C2(){ note_dtor("S2514C2", this);} // tgen
S2514C2 ::S2514C2(){ note_ctor("S2514C2", this);} // tgen

static void Test_S2514C2()
{
  extern Class_Descriptor cd_S2514C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5,11)];
    init_test(&cd_S2514C2, buf);
    S2514C2 *dp, &lv = *(dp=new (buf) S2514C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S2514C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2514C2)");
    check_base_class_offset(lv, (S2514C3_nt*), ABISELECT(32,24), "S2514C2");
    check_base_class_offset(lv, (S2514C4*), 0, "S2514C2");
    check_field_offset(lv, s2514c2f0, ABISELECT(48,36), "S2514C2.s2514c2f0");
    test_class_info(&lv, &cd_S2514C2);
    dp->~S2514C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2514C2(Test_S2514C2, "S2514C2", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN7S2514C2C1Ev();
extern void _ZN7S2514C2D1Ev();
Name_Map name_map_S2514C2[] = {
  NSPAIR(_ZN7S2514C2C1Ev),
  NSPAIR(_ZN7S2514C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2514C3_nt;
extern VTBL_ENTRY _ZTI10S2514C3_nt[];
extern Class_Descriptor cd_S2514C4;
extern VTBL_ENTRY _ZTI7S2514C4[];
extern  VTBL_ENTRY _ZTV7S2514C4[];
static Base_Class bases_S2514C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2514C3_nt,    ABISELECT(32,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, 0},
  {&cd_S2514C4,    0, //bcp->offset
    0, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S2514C2[];
extern void _ZN7S2514C42v5Ev();
static  VTBL_ENTRY vtc_S2514C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2514C2[0]),
  (VTBL_ENTRY)&_ZN7S2514C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S2514C2[];
extern  VTBL_ENTRY _ZTV7S2514C2[];
Class_Descriptor cd_S2514C2 = {  "S2514C2", // class name
  bases_S2514C2, 2,
  &(vtc_S2514C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI7S2514C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2514C2),3, //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  S2514C6  : S2514C2 {
  void *s2514c6f0;
  long double s2514c6f1;
  virtual void  v6(); // _ZN7S2514C62v6Ev
  virtual void  v7(); // _ZN7S2514C62v7Ev
  virtual void  v8(); // _ZN7S2514C62v8Ev
  ~S2514C6(); // tgen
  S2514C6(); // tgen
};
//SIG(-1 S2514C6) C1{ BC2{ BC3{ m FD} BC4{ v4 Fs:0 Fs Fi FL Fi} Fi} v1 v2 v3 Fp FD}


void  S2514C6 ::v6(){vfunc_called(this, "_ZN7S2514C62v6Ev");}
void  S2514C6 ::v7(){vfunc_called(this, "_ZN7S2514C62v7Ev");}
void  S2514C6 ::v8(){vfunc_called(this, "_ZN7S2514C62v8Ev");}
S2514C6 ::~S2514C6(){ note_dtor("S2514C6", this);} // tgen
S2514C6 ::S2514C6(){ note_ctor("S2514C6", this);} // tgen

static void Test_S2514C6()
{
  extern Class_Descriptor cd_S2514C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,15)];
    init_test(&cd_S2514C6, buf);
    S2514C6 *dp, &lv = *(dp=new (buf) S2514C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,56), "sizeof(S2514C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2514C6)");
    check_base_class_offset(lv, (S2514C3_nt*)(S2514C2*), ABISELECT(32,24), "S2514C6");
    check_base_class_offset(lv, (S2514C4*)(S2514C2*), 0, "S2514C6");
    check_base_class_offset(lv, (S2514C2*), 0, "S2514C6");
    check_field_offset(lv, s2514c6f0, ABISELECT(56,40), "S2514C6.s2514c6f0");
    check_field_offset(lv, s2514c6f1, ABISELECT(64,44), "S2514C6.s2514c6f1");
    test_class_info(&lv, &cd_S2514C6);
    dp->~S2514C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2514C6(Test_S2514C6, "S2514C6", ABISELECT(80,56));

#else // __cplusplus

extern void _ZN7S2514C6C1Ev();
extern void _ZN7S2514C6D1Ev();
Name_Map name_map_S2514C6[] = {
  NSPAIR(_ZN7S2514C6C1Ev),
  NSPAIR(_ZN7S2514C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2514C3_nt;
extern VTBL_ENTRY _ZTI10S2514C3_nt[];
extern Class_Descriptor cd_S2514C4;
extern VTBL_ENTRY _ZTI7S2514C4[];
extern  VTBL_ENTRY _ZTV7S2514C4[];
extern Class_Descriptor cd_S2514C2;
extern VTBL_ENTRY _ZTI7S2514C2[];
extern  VTBL_ENTRY _ZTV7S2514C2[];
static Base_Class bases_S2514C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2514C3_nt,    ABISELECT(32,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
    2, //immediately_derived
  0, 0},
  {&cd_S2514C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2514C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2514C6[];
extern void _ZN7S2514C42v5Ev();
extern void _ZN7S2514C62v6Ev();
extern void _ZN7S2514C62v7Ev();
extern void _ZN7S2514C62v8Ev();
static  VTBL_ENTRY vtc_S2514C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2514C6[0]),
  (VTBL_ENTRY)&_ZN7S2514C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v6Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v7Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v8Ev,
};
extern VTBL_ENTRY _ZTI7S2514C6[];
extern  VTBL_ENTRY _ZTV7S2514C6[];
Class_Descriptor cd_S2514C6 = {  "S2514C6", // class name
  bases_S2514C6, 3,
  &(vtc_S2514C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,56), // object size
  NSPAIRA(_ZTI7S2514C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2514C6),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2514C5  : S2514C6 , virtual S2514C4 , virtual S2514C3_nt {
  void *s2514c5f0[8];
  long double s2514c5f1;
  ~S2514C5(); // tgen
  S2514C5(); // tgen
};
//SIG(-1 S2514C5) C1{ BC2{ BC3{ BC4{ m FD} BC5{ v1 Fs:0 Fs Fi FL Fi} Fi} v2 v3 v4 Fp FD} VBC5 VBC4 Fp[8] FD}


S2514C5 ::~S2514C5(){ note_dtor("S2514C5", this);} // tgen
S2514C5 ::S2514C5(){ note_ctor("S2514C5", this);} // tgen

static void Test_S2514C5()
{
  extern Class_Descriptor cd_S2514C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,35)];
    init_test(&cd_S2514C5, buf);
    S2514C5 *dp, &lv = *(dp=new (buf) S2514C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,136), "sizeof(S2514C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2514C5)");
    check_base_class_offset(lv, (S2514C3_nt*)(S2514C2*)(S2514C6*), ABISELECT(32,24), "S2514C5");
    check_base_class_offset(lv, (S2514C4*)(S2514C2*)(S2514C6*), 0, "S2514C5");
    check_base_class_offset(lv, (S2514C2*)(S2514C6*), 0, "S2514C5");
    check_base_class_offset(lv, (S2514C6*), 0, "S2514C5");
    /*is_ambiguous_... S2514C5::S2514C4 */ AMB_check_base_class_offset(lv, (S2514C4*), ABISELECT(160,100), "S2514C5");
    /*is_ambiguous_... S2514C5::S2514C3_nt */ AMB_check_base_class_offset(lv, (S2514C3_nt*), ABISELECT(192,124), "S2514C5");
    check_field_offset(lv, s2514c5f0, ABISELECT(80,56), "S2514C5.s2514c5f0");
    check_field_offset(lv, s2514c5f1, ABISELECT(144,88), "S2514C5.s2514c5f1");
    test_class_info(&lv, &cd_S2514C5);
    dp->~S2514C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2514C5(Test_S2514C5, "S2514C5", ABISELECT(208,136));

#else // __cplusplus

extern void _ZN7S2514C5C1Ev();
extern void _ZN7S2514C5D1Ev();
Name_Map name_map_S2514C5[] = {
  NSPAIR(_ZN7S2514C5C1Ev),
  NSPAIR(_ZN7S2514C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2514C3_nt;
extern VTBL_ENTRY _ZTI10S2514C3_nt[];
extern Class_Descriptor cd_S2514C4;
extern VTBL_ENTRY _ZTI7S2514C4[];
extern  VTBL_ENTRY _ZTV7S2514C4[];
extern Class_Descriptor cd_S2514C2;
extern VTBL_ENTRY _ZTI7S2514C2[];
extern  VTBL_ENTRY _ZTV7S2514C2[];
extern Class_Descriptor cd_S2514C6;
extern VTBL_ENTRY _ZTI7S2514C6[];
extern  VTBL_ENTRY _ZTV7S2514C6[];
extern Class_Descriptor cd_S2514C4;
extern VTBL_ENTRY _ZTI7S2514C4[];
extern  VTBL_ENTRY _ZTV7S2514C4[];
extern Class_Descriptor cd_S2514C3_nt;
extern VTBL_ENTRY _ZTI10S2514C3_nt[];
static Base_Class bases_S2514C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2514C3_nt,    ABISELECT(32,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
    2, //immediately_derived
  0, 0},
  {&cd_S2514C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2514C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2514C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2514C4,    ABISELECT(160,100), //bcp->offset
    8, //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_S2514C3_nt,    ABISELECT(192,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},
  {0}};
extern VTBL_ENTRY _ZTI7S2514C5[];
extern void _ZN7S2514C42v5Ev();
extern void _ZN7S2514C62v6Ev();
extern void _ZN7S2514C62v7Ev();
extern void _ZN7S2514C62v8Ev();
extern void _ZN7S2514C42v5Ev();
static  VTBL_ENTRY vtc_S2514C5[] = {
  ABISELECT(192,124),
  ABISELECT(160,100),
  0,
  (VTBL_ENTRY)&(_ZTI7S2514C5[0]),
  (VTBL_ENTRY)&_ZN7S2514C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v6Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v7Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v8Ev,
  0,
  ABISELECT(-160,-100),
  (VTBL_ENTRY)&(_ZTI7S2514C5[0]),
  (VTBL_ENTRY)&_ZN7S2514C42v5Ev,
};
extern VTBL_ENTRY _ZTV7S2514C5[];
static  VTT_ENTRY vtt_S2514C5[] = {
  {&(_ZTV7S2514C5[4]),  4,12},
  {&(_ZTV7S2514C5[11]),  11,12},
};
extern VTBL_ENTRY _ZTI7S2514C5[];
extern  VTBL_ENTRY _ZTV7S2514C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2514C5[];
Class_Descriptor cd_S2514C5 = {  "S2514C5", // class name
  bases_S2514C5, 6,
  &(vtc_S2514C5[0]), // expected_vtbl_contents
  &(vtt_S2514C5[0]), // expected_vtt_contents
  ABISELECT(208,136), // object size
  NSPAIRA(_ZTI7S2514C5),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S2514C5),12, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2514C5),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  S2514C7  : S2514C2 {
  __tsi64 s2514c7f0;
  ::S2514C3_nt s2514c7f1;
  void *s2514c7f2;
  int s2514c7f3;
  virtual void  v9(); // _ZN7S2514C72v9Ev
  ~S2514C7(); // tgen
  S2514C7(); // tgen
};
//SIG(-1 S2514C7) C1{ BC2{ BC3{ m FD} BC4{ v2 Fs:0 Fs Fi FL Fi} Fi} v1 FL FC3 Fp Fi}


void  S2514C7 ::v9(){vfunc_called(this, "_ZN7S2514C72v9Ev");}
S2514C7 ::~S2514C7(){ note_dtor("S2514C7", this);} // tgen
S2514C7 ::S2514C7(){ note_ctor("S2514C7", this);} // tgen

static void Test_S2514C7()
{
  extern Class_Descriptor cd_S2514C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,18)];
    init_test(&cd_S2514C7, buf);
    S2514C7 *dp, &lv = *(dp=new (buf) S2514C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,68), "sizeof(S2514C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2514C7)");
    check_base_class_offset(lv, (S2514C3_nt*)(S2514C2*), ABISELECT(32,24), "S2514C7");
    check_base_class_offset(lv, (S2514C4*)(S2514C2*), 0, "S2514C7");
    check_base_class_offset(lv, (S2514C2*), 0, "S2514C7");
    check_field_offset(lv, s2514c7f0, ABISELECT(56,40), "S2514C7.s2514c7f0");
    check_field_offset(lv, s2514c7f1, ABISELECT(64,48), "S2514C7.s2514c7f1");
    check_field_offset(lv, s2514c7f2, ABISELECT(80,60), "S2514C7.s2514c7f2");
    check_field_offset(lv, s2514c7f3, ABISELECT(88,64), "S2514C7.s2514c7f3");
    test_class_info(&lv, &cd_S2514C7);
    dp->~S2514C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2514C7(Test_S2514C7, "S2514C7", ABISELECT(96,68));

#else // __cplusplus

extern void _ZN7S2514C7C1Ev();
extern void _ZN7S2514C7D1Ev();
Name_Map name_map_S2514C7[] = {
  NSPAIR(_ZN7S2514C7C1Ev),
  NSPAIR(_ZN7S2514C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2514C3_nt;
extern VTBL_ENTRY _ZTI10S2514C3_nt[];
extern Class_Descriptor cd_S2514C4;
extern VTBL_ENTRY _ZTI7S2514C4[];
extern  VTBL_ENTRY _ZTV7S2514C4[];
extern Class_Descriptor cd_S2514C2;
extern VTBL_ENTRY _ZTI7S2514C2[];
extern  VTBL_ENTRY _ZTV7S2514C2[];
static Base_Class bases_S2514C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2514C3_nt,    ABISELECT(32,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
    2, //immediately_derived
  0, 0},
  {&cd_S2514C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2514C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2514C7[];
extern void _ZN7S2514C42v5Ev();
extern void _ZN7S2514C72v9Ev();
static  VTBL_ENTRY vtc_S2514C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2514C7[0]),
  (VTBL_ENTRY)&_ZN7S2514C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2514C72v9Ev,
};
extern VTBL_ENTRY _ZTI7S2514C7[];
extern  VTBL_ENTRY _ZTV7S2514C7[];
Class_Descriptor cd_S2514C7 = {  "S2514C7", // class name
  bases_S2514C7, 3,
  &(vtc_S2514C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,68), // object size
  NSPAIRA(_ZTI7S2514C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2514C7),4, //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  S2514C9  : S2514C3_nt , S2514C6 , virtual S2514C4 {
  ::S2514C7 s2514c9f0;
  int s2514c9f1;
  ::S2514C2 s2514c9f2;
  virtual void  v10(); // _ZN7S2514C93v10Ev
  virtual void  v11(); // _ZN7S2514C93v11Ev
  ~S2514C9(); // tgen
  S2514C9(); // tgen
};
//SIG(-1 S2514C9) C1{ BC2{ m FD} BC3{ BC4{ BC2 BC5{ v3 Fs:0 Fs Fi FL Fi} Fi} v4 v5 v6 Fp FD} VBC5 v1 v2 FC6{ BC4 v7 FL FC2 Fp Fi} Fi FC4}


void  S2514C9 ::v10(){vfunc_called(this, "_ZN7S2514C93v10Ev");}
void  S2514C9 ::v11(){vfunc_called(this, "_ZN7S2514C93v11Ev");}
S2514C9 ::~S2514C9(){ note_dtor("S2514C9", this);} // tgen
S2514C9 ::S2514C9(){ note_ctor("S2514C9", this);} // tgen

static void Test_S2514C9()
{
  extern Class_Descriptor cd_S2514C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(20,52)];
    init_test(&cd_S2514C9, buf);
    S2514C9 *dp, &lv = *(dp=new (buf) S2514C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,204), "sizeof(S2514C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2514C9)");
    /*is_ambiguous_... S2514C9::S2514C3_nt */ AMB_check_base_class_offset(lv, (S2514C3_nt*), ABISELECT(80,56), "S2514C9");
    check_base_class_offset(lv, (S2514C3_nt*)(S2514C2*)(S2514C6*), ABISELECT(32,24), "S2514C9");
    check_base_class_offset(lv, (S2514C4*)(S2514C2*)(S2514C6*), 0, "S2514C9");
    check_base_class_offset(lv, (S2514C2*)(S2514C6*), 0, "S2514C9");
    check_base_class_offset(lv, (S2514C6*), 0, "S2514C9");
    /*is_ambiguous_... S2514C9::S2514C4 */ AMB_check_base_class_offset(lv, (S2514C4*), ABISELECT(272,180), "S2514C9");
    check_field_offset(lv, s2514c9f0, ABISELECT(96,68), "S2514C9.s2514c9f0");
    check_field_offset(lv, s2514c9f1, ABISELECT(192,136), "S2514C9.s2514c9f1");
    check_field_offset(lv, s2514c9f2, ABISELECT(208,140), "S2514C9.s2514c9f2");
    test_class_info(&lv, &cd_S2514C9);
    dp->~S2514C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2514C9(Test_S2514C9, "S2514C9", ABISELECT(304,204));

#else // __cplusplus

extern void _ZN7S2514C9C1Ev();
extern void _ZN7S2514C9D1Ev();
Name_Map name_map_S2514C9[] = {
  NSPAIR(_ZN7S2514C9C1Ev),
  NSPAIR(_ZN7S2514C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2514C3_nt;
extern VTBL_ENTRY _ZTI10S2514C3_nt[];
extern Class_Descriptor cd_S2514C3_nt;
extern VTBL_ENTRY _ZTI10S2514C3_nt[];
extern Class_Descriptor cd_S2514C4;
extern VTBL_ENTRY _ZTI7S2514C4[];
extern  VTBL_ENTRY _ZTV7S2514C4[];
extern Class_Descriptor cd_S2514C2;
extern VTBL_ENTRY _ZTI7S2514C2[];
extern  VTBL_ENTRY _ZTV7S2514C2[];
extern Class_Descriptor cd_S2514C6;
extern VTBL_ENTRY _ZTI7S2514C6[];
extern  VTBL_ENTRY _ZTV7S2514C6[];
extern Class_Descriptor cd_S2514C4;
extern VTBL_ENTRY _ZTI7S2514C4[];
extern  VTBL_ENTRY _ZTV7S2514C4[];
static Base_Class bases_S2514C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2514C3_nt,    ABISELECT(80,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
    -1, //immediately_derived
  1, 0},
  {&cd_S2514C3_nt,    ABISELECT(32,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
    3, //immediately_derived
  0, 0},
  {&cd_S2514C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2514C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2514C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2514C4,    ABISELECT(272,180), //bcp->offset
    9, //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 _ZTI7S2514C9[];
extern void _ZN7S2514C42v5Ev();
extern void _ZN7S2514C62v6Ev();
extern void _ZN7S2514C62v7Ev();
extern void _ZN7S2514C62v8Ev();
extern void _ZN7S2514C93v10Ev();
extern void _ZN7S2514C93v11Ev();
extern void _ZN7S2514C42v5Ev();
static  VTBL_ENTRY vtc_S2514C9[] = {
  ABISELECT(272,180),
  0,
  (VTBL_ENTRY)&(_ZTI7S2514C9[0]),
  (VTBL_ENTRY)&_ZN7S2514C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v6Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v7Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v8Ev,
  (VTBL_ENTRY)&_ZN7S2514C93v10Ev,
  (VTBL_ENTRY)&_ZN7S2514C93v11Ev,
  0,
  ABISELECT(-272,-180),
  (VTBL_ENTRY)&(_ZTI7S2514C9[0]),
  (VTBL_ENTRY)&_ZN7S2514C42v5Ev,
};
extern VTBL_ENTRY _ZTV7S2514C9[];
static  VTT_ENTRY vtt_S2514C9[] = {
  {&(_ZTV7S2514C9[3]),  3,13},
  {&(_ZTV7S2514C9[12]),  12,13},
};
extern VTBL_ENTRY _ZTI7S2514C9[];
extern  VTBL_ENTRY _ZTV7S2514C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2514C9[];
Class_Descriptor cd_S2514C9 = {  "S2514C9", // class name
  bases_S2514C9, 6,
  &(vtc_S2514C9[0]), // expected_vtbl_contents
  &(vtt_S2514C9[0]), // expected_vtt_contents
  ABISELECT(304,204), // object size
  NSPAIRA(_ZTI7S2514C9),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S2514C9),13, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2514C9),2, //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

union  S2514C10  {
  int s2514c10f0[4];
  char s2514c10f1;
  void *s2514c10f2[3];
  void  mf2514c10(); // _ZN8S2514C109mf2514c10Ev
};
//SIG(1 S2514C10) U1{ m Fi[4] Fc Fp[3]}

#endif // __cplusplus
#ifdef __cplusplus

struct  S2514C8  : S2514C2 , virtual S2514C4 , virtual S2514C9 , virtual S2514C3_nt , virtual S2514C5 {
  ::S2514C10 s2514c8f0;
  ~S2514C8(); // tgen
  S2514C8(); // tgen
};
//SIG(-1 S2514C8) C1{ BC2{ BC3{ m FD} BC4{ v1 Fs:0 Fs Fi FL Fi} Fi} VBC4 VBC5{ BC3 BC6{ BC2 v2 v3 v4 Fp FD} VBC4 v5 v6 FC7{ BC2 v7 FL FC3 Fp Fi} Fi FC2} VBC3 VBC8{ BC6 VBC4 VBC3 Fp[8] FD} FU9{ m Fi[4] Fc Fp[3]}}


S2514C8 ::~S2514C8(){ note_dtor("S2514C8", this);} // tgen
S2514C8 ::S2514C8(){ note_ctor("S2514C8", this);} // tgen

static void Test_S2514C8()
{
  extern Class_Descriptor cd_S2514C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(36,94)];
    init_test(&cd_S2514C8, buf);
    S2514C8 *dp, &lv = *(dp=new (buf) S2514C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(560,372), "sizeof(S2514C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2514C8)");
    /*is_ambiguous_... S2514C8::S2514C2 */ AMB_check_base_class_offset(lv, (S2514C3_nt*)(S2514C2*), ABISELECT(32,24), "S2514C8");
    /*is_ambiguous_... S2514C8::S2514C2 */ AMB_check_base_class_offset(lv, (S2514C4*)(S2514C2*), 0, "S2514C8");
    /*is_ambiguous_... S2514C8::S2514C2 */ AMB_check_base_class_offset(lv, (S2514C2*), 0, "S2514C8");
    /*is_ambiguous_... S2514C8::S2514C4 */ AMB_check_base_class_offset(lv, (S2514C4*), ABISELECT(80,56), "S2514C8");
    /*is_ambiguous_... S2514C9::S2514C4 */ AMB_check_base_class_offset(lv, (S2514C4*)(S2514C9*), ABISELECT(80,56), "S2514C8");
    /*is_ambiguous_... S2514C5::S2514C4 */ AMB_check_base_class_offset(lv, (S2514C4*)(S2514C5*), ABISELECT(80,56), "S2514C8");
    /*is_ambiguous_... S2514C9::S2514C3_nt */ AMB_check_base_class_offset(lv, (S2514C3_nt*)(S2514C9*), ABISELECT(192,136), "S2514C8");
    check_base_class_offset(lv, (S2514C3_nt*)(S2514C2*)(S2514C6*)(S2514C9*), ABISELECT(144,104), "S2514C8");
    check_base_class_offset(lv, (S2514C4*)(S2514C2*)(S2514C6*)(S2514C9*), ABISELECT(112,80), "S2514C8");
    check_base_class_offset(lv, (S2514C2*)(S2514C6*)(S2514C9*), ABISELECT(112,80), "S2514C8");
    check_base_class_offset(lv, (S2514C6*)(S2514C9*), ABISELECT(112,80), "S2514C8");
    check_base_class_offset(lv, (S2514C9*), ABISELECT(112,80), "S2514C8");
    /*is_ambiguous_... S2514C8::S2514C3_nt */ AMB_check_base_class_offset(lv, (S2514C3_nt*), ABISELECT(384,260), "S2514C8");
    /*is_ambiguous_... S2514C5::S2514C3_nt */ AMB_check_base_class_offset(lv, (S2514C3_nt*)(S2514C5*), ABISELECT(384,260), "S2514C8");
    check_base_class_offset(lv, (S2514C3_nt*)(S2514C2*)(S2514C6*)(S2514C5*), ABISELECT(432,296), "S2514C8");
    check_base_class_offset(lv, (S2514C4*)(S2514C2*)(S2514C6*)(S2514C5*), ABISELECT(400,272), "S2514C8");
    check_base_class_offset(lv, (S2514C2*)(S2514C6*)(S2514C5*), ABISELECT(400,272), "S2514C8");
    check_base_class_offset(lv, (S2514C6*)(S2514C5*), ABISELECT(400,272), "S2514C8");
    check_base_class_offset(lv, (S2514C5*), ABISELECT(400,272), "S2514C8");
    check_field_offset(lv, s2514c8f0, ABISELECT(56,40), "S2514C8.s2514c8f0");
    test_class_info(&lv, &cd_S2514C8);
    dp->~S2514C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2514C8(Test_S2514C8, "S2514C8", ABISELECT(560,372));

#else // __cplusplus

extern void _ZN7S2514C8C1Ev();
extern void _ZN7S2514C8D1Ev();
Name_Map name_map_S2514C8[] = {
  NSPAIR(_ZN7S2514C8C1Ev),
  NSPAIR(_ZN7S2514C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2514C3_nt;
extern VTBL_ENTRY _ZTI10S2514C3_nt[];
extern Class_Descriptor cd_S2514C4;
extern VTBL_ENTRY _ZTI7S2514C4[];
extern  VTBL_ENTRY _ZTV7S2514C4[];
extern Class_Descriptor cd_S2514C2;
extern VTBL_ENTRY _ZTI7S2514C2[];
extern  VTBL_ENTRY _ZTV7S2514C2[];
extern Class_Descriptor cd_S2514C4;
extern VTBL_ENTRY _ZTI7S2514C4[];
extern  VTBL_ENTRY _ZTV7S2514C4[];
extern Class_Descriptor cd_S2514C3_nt;
extern VTBL_ENTRY _ZTI10S2514C3_nt[];
extern Class_Descriptor cd_S2514C3_nt;
extern VTBL_ENTRY _ZTI10S2514C3_nt[];
extern Class_Descriptor cd_S2514C4;
extern VTBL_ENTRY _ZTI7S2514C4[];
extern  VTBL_ENTRY _ZTV7S2514C4[];
extern Class_Descriptor cd_S2514C2;
extern VTBL_ENTRY _ZTI7S2514C2[];
extern  VTBL_ENTRY _ZTV7S2514C2[];
extern Class_Descriptor cd_S2514C6;
extern VTBL_ENTRY _ZTI7S2514C6[];
extern  VTBL_ENTRY _ZTV7S2514C6[];
extern Class_Descriptor cd_S2514C9;
extern VTBL_ENTRY _ZTI7S2514C9[];
extern  VTBL_ENTRY _ZTV7S2514C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2514C9[];
extern Class_Descriptor cd_S2514C3_nt;
extern VTBL_ENTRY _ZTI10S2514C3_nt[];
extern Class_Descriptor cd_S2514C3_nt;
extern VTBL_ENTRY _ZTI10S2514C3_nt[];
extern Class_Descriptor cd_S2514C4;
extern VTBL_ENTRY _ZTI7S2514C4[];
extern  VTBL_ENTRY _ZTV7S2514C4[];
extern Class_Descriptor cd_S2514C2;
extern VTBL_ENTRY _ZTI7S2514C2[];
extern  VTBL_ENTRY _ZTV7S2514C2[];
extern Class_Descriptor cd_S2514C6;
extern VTBL_ENTRY _ZTI7S2514C6[];
extern  VTBL_ENTRY _ZTV7S2514C6[];
extern Class_Descriptor cd_S2514C5;
extern VTBL_ENTRY _ZTI7S2514C5[];
extern  VTBL_ENTRY _ZTV7S2514C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2514C5[];
static Base_Class bases_S2514C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2514C3_nt,    ABISELECT(32,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
    2, //immediately_derived
  0, 0},
  {&cd_S2514C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2514C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2514C4,    ABISELECT(80,56), //bcp->offset
    7, //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_S2514C3_nt,    ABISELECT(192,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2514C3_nt,    ABISELECT(144,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
    7, //immediately_derived
  0, 0},
  {&cd_S2514C4,    ABISELECT(112,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
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S2514C2,    ABISELECT(112,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
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2514C6,    ABISELECT(112,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
    4, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S2514C9,    ABISELECT(112,80), //bcp->offset
    11, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2514C3_nt,    ABISELECT(384,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
    -1, //immediately_derived
  1, 1},
  {&cd_S2514C3_nt,    ABISELECT(432,296), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2514C4,    ABISELECT(400,272), //bcp->offset
    -1, //bcp->virtual_function_table_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
    13, //immediately_derived
  0, 0},
  {&cd_S2514C2,    ABISELECT(400,272), //bcp->offset
    -1, //bcp->virtual_function_table_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
    14, //immediately_derived
  0, 0},
  {&cd_S2514C6,    ABISELECT(400,272), //bcp->offset
    -1, //bcp->virtual_function_table_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
    15, //immediately_derived
  0, 0},
  {&cd_S2514C5,    ABISELECT(400,272), //bcp->offset
    26, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    4, //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 _ZTI7S2514C8[];
extern void _ZN7S2514C42v5Ev();
extern void _ZN7S2514C42v5Ev();
extern void _ZN7S2514C42v5Ev();
extern void _ZN7S2514C62v6Ev();
extern void _ZN7S2514C62v7Ev();
extern void _ZN7S2514C62v8Ev();
extern void _ZN7S2514C93v10Ev();
extern void _ZN7S2514C93v11Ev();
extern void _ZN7S2514C42v5Ev();
extern void _ZN7S2514C62v6Ev();
extern void _ZN7S2514C62v7Ev();
extern void _ZN7S2514C62v8Ev();
static  VTBL_ENTRY vtc_S2514C8[] = {
  ABISELECT(400,272),
  ABISELECT(384,260),
  ABISELECT(112,80),
  ABISELECT(80,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S2514C8[0]),
  (VTBL_ENTRY)&_ZN7S2514C42v5Ev,
  0,
  ABISELECT(-80,-56),
  (VTBL_ENTRY)&(_ZTI7S2514C8[0]),
  (VTBL_ENTRY)&_ZN7S2514C42v5Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-24),
  ABISELECT(-112,-80),
  (VTBL_ENTRY)&(_ZTI7S2514C8[0]),
  (VTBL_ENTRY)&_ZN7S2514C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v6Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v7Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v8Ev,
  (VTBL_ENTRY)&_ZN7S2514C93v10Ev,
  (VTBL_ENTRY)&_ZN7S2514C93v11Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  ABISELECT(-320,-216),
  ABISELECT(-400,-272),
  (VTBL_ENTRY)&(_ZTI7S2514C8[0]),
  (VTBL_ENTRY)&_ZN7S2514C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v6Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v7Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v8Ev,
};
extern VTBL_ENTRY _ZTV7S2514C8[];
extern void _ZN7S2514C42v5Ev();
extern void _ZN7S2514C62v6Ev();
extern void _ZN7S2514C62v7Ev();
extern void _ZN7S2514C62v8Ev();
extern void _ZN7S2514C93v10Ev();
extern void _ZN7S2514C93v11Ev();
static  VTBL_ENTRY _tg__ZTV7S2514C9__7S2514C8[] = {
  ABISELECT(-32,-24),
  0,
  (VTBL_ENTRY)&(_ZTI7S2514C9[0]),
  (VTBL_ENTRY)&_ZN7S2514C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v6Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v7Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v8Ev,
  (VTBL_ENTRY)&_ZN7S2514C93v10Ev,
  (VTBL_ENTRY)&_ZN7S2514C93v11Ev,
};
extern void _ZN7S2514C42v5Ev();
static  VTBL_ENTRY _tg__ZTV7S2514C4__A1__7S2514C9__7S2514C8[] = {
  0,
  ABISELECT(32,24),
  (VTBL_ENTRY)&(_ZTI7S2514C9[0]),
  (VTBL_ENTRY)&_ZN7S2514C42v5Ev,
};
extern void _ZN7S2514C42v5Ev();
extern void _ZN7S2514C62v6Ev();
extern void _ZN7S2514C62v7Ev();
extern void _ZN7S2514C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S2514C5__7S2514C8[] = {
  ABISELECT(-16,-12),
  ABISELECT(-320,-216),
  0,
  (VTBL_ENTRY)&(_ZTI7S2514C5[0]),
  (VTBL_ENTRY)&_ZN7S2514C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v6Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v7Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v8Ev,
};
extern void _ZN7S2514C42v5Ev();
static  VTBL_ENTRY _tg__ZTV7S2514C4__A1__7S2514C5__7S2514C8[] = {
  0,
  ABISELECT(320,216),
  (VTBL_ENTRY)&(_ZTI7S2514C5[0]),
  (VTBL_ENTRY)&_ZN7S2514C42v5Ev,
};
static  VTT_ENTRY vtt_S2514C8[] = {
  {&(_ZTV7S2514C8[6]),  6,38},
  {&(_ZTV7S2514C8[10]),  10,38},
  {&(_ZTV7S2514C8[20]),  20,38},
  {&(_ZTV7S2514C8[34]),  34,38},
  {&(_tg__ZTV7S2514C9__7S2514C8[3]),  3,9},
  {&(_tg__ZTV7S2514C4__A1__7S2514C9__7S2514C8[3]),  3,4},
  {&(_tg__ZTV7S2514C5__7S2514C8[4]),  4,8},
  {&(_tg__ZTV7S2514C4__A1__7S2514C5__7S2514C8[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S2514C8[];
extern  VTBL_ENTRY _ZTV7S2514C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2514C8[];
Class_Descriptor cd_S2514C8 = {  "S2514C8", // class name
  bases_S2514C8, 16,
  &(vtc_S2514C8[0]), // expected_vtbl_contents
  &(vtt_S2514C8[0]), // expected_vtt_contents
  ABISELECT(560,372), // object size
  NSPAIRA(_ZTI7S2514C8),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S2514C8),38, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2514C8),8, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2514C1  : S2514C2 , virtual S2514C4 , S2514C5 , S2514C7 , S2514C8 {
  __tsi64 s2514c1f0;
  __tsi64 s2514c1f1[2];
  int s2514c1f2;
  virtual  ~S2514C1(); // _ZN7S2514C1D2Ev
  virtual void  v1(); // _ZN7S2514C12v1Ev
  virtual void  v2(); // _ZN7S2514C12v2Ev
  virtual void  v3(); // _ZN7S2514C12v3Ev
  virtual void  v4(); // _ZN7S2514C12v4Ev
  S2514C1(); // tgen
};
//SIG(1 S2514C1) C1{ BC2{ BC3{ m FD} BC4{ v5 Fs:0 Fs Fi FL Fi} Fi} VBC4 BC5{ BC6{ BC2 v6 v7 v8 Fp FD} VBC4 VBC3 Fp[8] FD} BC7{ BC2 v9 FL FC3 Fp Fi} BC8{ BC2 VBC4 VBC9{ BC3 BC6 VBC4 v10 v11 FC7 Fi FC2} VBC3 VBC5 FU10{ m Fi[4] Fc Fp[3]}} vd v1 v2 v3 v4 FL FL[2] Fi}


 S2514C1 ::~S2514C1(){ note_dtor("S2514C1", this);}
void  S2514C1 ::v1(){vfunc_called(this, "_ZN7S2514C12v1Ev");}
void  S2514C1 ::v2(){vfunc_called(this, "_ZN7S2514C12v2Ev");}
void  S2514C1 ::v3(){vfunc_called(this, "_ZN7S2514C12v3Ev");}
void  S2514C1 ::v4(){vfunc_called(this, "_ZN7S2514C12v4Ev");}
S2514C1 ::S2514C1(){ note_ctor("S2514C1", this);} // tgen

static void Test_S2514C1()
{
  extern Class_Descriptor cd_S2514C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(58,153)];
    init_test(&cd_S2514C1, buf);
    S2514C1 *dp, &lv = *(dp=new (buf) S2514C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(912,608), "sizeof(S2514C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2514C1)");
    /*is_ambiguous_... S2514C1::S2514C2 */ AMB_check_base_class_offset(lv, (S2514C3_nt*)(S2514C2*), ABISELECT(32,24), "S2514C1");
    /*is_ambiguous_... S2514C1::S2514C2 */ AMB_check_base_class_offset(lv, (S2514C4*)(S2514C2*), 0, "S2514C1");
    /*is_ambiguous_... S2514C1::S2514C2 */ AMB_check_base_class_offset(lv, (S2514C2*), 0, "S2514C1");
    /*is_ambiguous_... S2514C1::S2514C4 */ AMB_check_base_class_offset(lv, (S2514C4*), ABISELECT(432,292), "S2514C1");
    /*is_ambiguous_... S2514C1::S2514C5 */ AMB_check_base_class_offset(lv, (S2514C4*)(S2514C5*), ABISELECT(432,292), "S2514C1");
    /*is_ambiguous_... S2514C8::S2514C4 */ AMB_check_base_class_offset(lv, (S2514C4*)(S2514C8*), ABISELECT(432,292), "S2514C1");
    /*is_ambiguous_... S2514C9::S2514C4 */ AMB_check_base_class_offset(lv, (S2514C4*)(S2514C9*), ABISELECT(432,292), "S2514C1");
    /*is_ambiguous_... S2514C1::S2514C5 */ AMB_check_base_class_offset(lv, (S2514C4*)(S2514C5*), ABISELECT(432,292), "S2514C1");
    /*is_ambiguous_... S2514C1::S2514C5 */ AMB_check_base_class_offset(lv, (S2514C3_nt*)(S2514C2*)(S2514C6*)(S2514C5*), ABISELECT(96,64), "S2514C1");
    /*is_ambiguous_... S2514C1::S2514C5 */ AMB_check_base_class_offset(lv, (S2514C4*)(S2514C2*)(S2514C6*)(S2514C5*), ABISELECT(64,40), "S2514C1");
    /*is_ambiguous_... S2514C1::S2514C5 */ AMB_check_base_class_offset(lv, (S2514C2*)(S2514C6*)(S2514C5*), ABISELECT(64,40), "S2514C1");
    /*is_ambiguous_... S2514C1::S2514C5 */ AMB_check_base_class_offset(lv, (S2514C6*)(S2514C5*), ABISELECT(64,40), "S2514C1");
    /*is_ambiguous_... S2514C1::S2514C5 */ AMB_check_base_class_offset(lv, (S2514C3_nt*)(S2514C5*), ABISELECT(464,316), "S2514C1");
    /*is_ambiguous_... S2514C8::S2514C3_nt */ AMB_check_base_class_offset(lv, (S2514C3_nt*)(S2514C8*), ABISELECT(464,316), "S2514C1");
    /*is_ambiguous_... S2514C1::S2514C5 */ AMB_check_base_class_offset(lv, (S2514C3_nt*)(S2514C5*), ABISELECT(464,316), "S2514C1");
    /*is_ambiguous_... S2514C1::S2514C5 */ AMB_check_base_class_offset(lv, (S2514C5*), ABISELECT(64,40), "S2514C1");
    check_base_class_offset(lv, (S2514C3_nt*)(S2514C2*)(S2514C7*), ABISELECT(256,164), "S2514C1");
    check_base_class_offset(lv, (S2514C4*)(S2514C2*)(S2514C7*), ABISELECT(224,140), "S2514C1");
    check_base_class_offset(lv, (S2514C2*)(S2514C7*), ABISELECT(224,140), "S2514C1");
    check_base_class_offset(lv, (S2514C7*), ABISELECT(224,140), "S2514C1");
    /*is_ambiguous_... S2514C8::S2514C2 */ AMB_check_base_class_offset(lv, (S2514C3_nt*)(S2514C2*)(S2514C8*), ABISELECT(352,232), "S2514C1");
    /*is_ambiguous_... S2514C8::S2514C2 */ AMB_check_base_class_offset(lv, (S2514C4*)(S2514C2*)(S2514C8*), ABISELECT(320,208), "S2514C1");
    /*is_ambiguous_... S2514C8::S2514C2 */ AMB_check_base_class_offset(lv, (S2514C2*)(S2514C8*), ABISELECT(320,208), "S2514C1");
    /*is_ambiguous_... S2514C9::S2514C3_nt */ AMB_check_base_class_offset(lv, (S2514C3_nt*)(S2514C9*), ABISELECT(560,384), "S2514C1");
    check_base_class_offset(lv, (S2514C3_nt*)(S2514C2*)(S2514C6*)(S2514C9*), ABISELECT(512,352), "S2514C1");
    check_base_class_offset(lv, (S2514C4*)(S2514C2*)(S2514C6*)(S2514C9*), ABISELECT(480,328), "S2514C1");
    check_base_class_offset(lv, (S2514C2*)(S2514C6*)(S2514C9*), ABISELECT(480,328), "S2514C1");
    check_base_class_offset(lv, (S2514C6*)(S2514C9*), ABISELECT(480,328), "S2514C1");
    check_base_class_offset(lv, (S2514C9*)(S2514C8*), ABISELECT(480,328), "S2514C1");
    /*is_ambiguous_... S2514C1::S2514C5 */ AMB_check_base_class_offset(lv, (S2514C3_nt*)(S2514C2*)(S2514C6*)(S2514C5*), ABISELECT(784,532), "S2514C1");
    /*is_ambiguous_... S2514C1::S2514C5 */ AMB_check_base_class_offset(lv, (S2514C4*)(S2514C2*)(S2514C6*)(S2514C5*), ABISELECT(752,508), "S2514C1");
    /*is_ambiguous_... S2514C1::S2514C5 */ AMB_check_base_class_offset(lv, (S2514C2*)(S2514C6*)(S2514C5*), ABISELECT(752,508), "S2514C1");
    /*is_ambiguous_... S2514C1::S2514C5 */ AMB_check_base_class_offset(lv, (S2514C6*)(S2514C5*), ABISELECT(752,508), "S2514C1");
    check_base_class_offset(lv, (S2514C5*)(S2514C8*), ABISELECT(752,508), "S2514C1");
    check_base_class_offset(lv, (S2514C8*), ABISELECT(320,208), "S2514C1");
    check_field_offset(lv, s2514c1f0, ABISELECT(400,264), "S2514C1.s2514c1f0");
    check_field_offset(lv, s2514c1f1, ABISELECT(408,272), "S2514C1.s2514c1f1");
    check_field_offset(lv, s2514c1f2, ABISELECT(424,288), "S2514C1.s2514c1f2");
    test_class_info(&lv, &cd_S2514C1);
    dp->~S2514C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2514C1(Test_S2514C1, "S2514C1", ABISELECT(912,608));

#else // __cplusplus

extern void _ZN7S2514C1C1Ev();
extern void _ZN7S2514C1D2Ev();
Name_Map name_map_S2514C1[] = {
  NSPAIR(_ZN7S2514C1C1Ev),
  NSPAIR(_ZN7S2514C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2514C3_nt;
extern VTBL_ENTRY _ZTI10S2514C3_nt[];
extern Class_Descriptor cd_S2514C4;
extern VTBL_ENTRY _ZTI7S2514C4[];
extern  VTBL_ENTRY _ZTV7S2514C4[];
extern Class_Descriptor cd_S2514C2;
extern VTBL_ENTRY _ZTI7S2514C2[];
extern  VTBL_ENTRY _ZTV7S2514C2[];
extern Class_Descriptor cd_S2514C4;
extern VTBL_ENTRY _ZTI7S2514C4[];
extern  VTBL_ENTRY _ZTV7S2514C4[];
extern Class_Descriptor cd_S2514C3_nt;
extern VTBL_ENTRY _ZTI10S2514C3_nt[];
extern Class_Descriptor cd_S2514C4;
extern VTBL_ENTRY _ZTI7S2514C4[];
extern  VTBL_ENTRY _ZTV7S2514C4[];
extern Class_Descriptor cd_S2514C2;
extern VTBL_ENTRY _ZTI7S2514C2[];
extern  VTBL_ENTRY _ZTV7S2514C2[];
extern Class_Descriptor cd_S2514C6;
extern VTBL_ENTRY _ZTI7S2514C6[];
extern  VTBL_ENTRY _ZTV7S2514C6[];
extern Class_Descriptor cd_S2514C3_nt;
extern VTBL_ENTRY _ZTI10S2514C3_nt[];
extern Class_Descriptor cd_S2514C5;
extern VTBL_ENTRY _ZTI7S2514C5[];
extern  VTBL_ENTRY _ZTV7S2514C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2514C5[];
extern Class_Descriptor cd_S2514C3_nt;
extern VTBL_ENTRY _ZTI10S2514C3_nt[];
extern Class_Descriptor cd_S2514C4;
extern VTBL_ENTRY _ZTI7S2514C4[];
extern  VTBL_ENTRY _ZTV7S2514C4[];
extern Class_Descriptor cd_S2514C2;
extern VTBL_ENTRY _ZTI7S2514C2[];
extern  VTBL_ENTRY _ZTV7S2514C2[];
extern Class_Descriptor cd_S2514C7;
extern VTBL_ENTRY _ZTI7S2514C7[];
extern  VTBL_ENTRY _ZTV7S2514C7[];
extern Class_Descriptor cd_S2514C3_nt;
extern VTBL_ENTRY _ZTI10S2514C3_nt[];
extern Class_Descriptor cd_S2514C4;
extern VTBL_ENTRY _ZTI7S2514C4[];
extern  VTBL_ENTRY _ZTV7S2514C4[];
extern Class_Descriptor cd_S2514C2;
extern VTBL_ENTRY _ZTI7S2514C2[];
extern  VTBL_ENTRY _ZTV7S2514C2[];
extern Class_Descriptor cd_S2514C3_nt;
extern VTBL_ENTRY _ZTI10S2514C3_nt[];
extern Class_Descriptor cd_S2514C3_nt;
extern VTBL_ENTRY _ZTI10S2514C3_nt[];
extern Class_Descriptor cd_S2514C4;
extern VTBL_ENTRY _ZTI7S2514C4[];
extern  VTBL_ENTRY _ZTV7S2514C4[];
extern Class_Descriptor cd_S2514C2;
extern VTBL_ENTRY _ZTI7S2514C2[];
extern  VTBL_ENTRY _ZTV7S2514C2[];
extern Class_Descriptor cd_S2514C6;
extern VTBL_ENTRY _ZTI7S2514C6[];
extern  VTBL_ENTRY _ZTV7S2514C6[];
extern Class_Descriptor cd_S2514C9;
extern VTBL_ENTRY _ZTI7S2514C9[];
extern  VTBL_ENTRY _ZTV7S2514C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2514C9[];
extern Class_Descriptor cd_S2514C3_nt;
extern VTBL_ENTRY _ZTI10S2514C3_nt[];
extern Class_Descriptor cd_S2514C4;
extern VTBL_ENTRY _ZTI7S2514C4[];
extern  VTBL_ENTRY _ZTV7S2514C4[];
extern Class_Descriptor cd_S2514C2;
extern VTBL_ENTRY _ZTI7S2514C2[];
extern  VTBL_ENTRY _ZTV7S2514C2[];
extern Class_Descriptor cd_S2514C6;
extern VTBL_ENTRY _ZTI7S2514C6[];
extern  VTBL_ENTRY _ZTV7S2514C6[];
extern Class_Descriptor cd_S2514C5;
extern VTBL_ENTRY _ZTI7S2514C5[];
extern  VTBL_ENTRY _ZTV7S2514C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2514C5[];
extern Class_Descriptor cd_S2514C8;
extern VTBL_ENTRY _ZTI7S2514C8[];
extern  VTBL_ENTRY _ZTV7S2514C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2514C8[];
static Base_Class bases_S2514C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2514C3_nt,    ABISELECT(32,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
    2, //immediately_derived
  0, 0},
  {&cd_S2514C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2514C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2514C4,    ABISELECT(432,292), //bcp->offset
    32, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S2514C3_nt,    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
    6, //immediately_derived
  0, 0},
  {&cd_S2514C4,    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
    12, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2514C2,    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
    13, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S2514C6,    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
    14, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S2514C3_nt,    ABISELECT(464,316), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2514C5,    ABISELECT(64,40), //bcp->offset
    13, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2514C3_nt,    ABISELECT(256,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
    12, //immediately_derived
  0, 0},
  {&cd_S2514C4,    ABISELECT(224,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2514C2,    ABISELECT(224,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S2514C7,    ABISELECT(224,140), //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
    18, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2514C3_nt,    ABISELECT(352,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
    16, //immediately_derived
  0, 0},
  {&cd_S2514C4,    ABISELECT(320,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
    19, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S2514C2,    ABISELECT(320,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
    20, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S2514C3_nt,    ABISELECT(560,384), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2514C3_nt,    ABISELECT(512,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
    20, //immediately_derived
  0, 0},
  {&cd_S2514C4,    ABISELECT(480,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
    2, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S2514C2,    ABISELECT(480,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
    3, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S2514C6,    ABISELECT(480,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
    4, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S2514C9,    ABISELECT(480,328), //bcp->offset
    36, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    28, //immediately_derived
  0, 1},
  {&cd_S2514C3_nt,    ABISELECT(784,532), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2514C4,    ABISELECT(752,508), //bcp->offset
    -1, //bcp->virtual_function_table_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
    25, //immediately_derived
  0, 0},
  {&cd_S2514C2,    ABISELECT(752,508), //bcp->offset
    -1, //bcp->virtual_function_table_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
    26, //immediately_derived
  0, 0},
  {&cd_S2514C6,    ABISELECT(752,508), //bcp->offset
    -1, //bcp->virtual_function_table_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
    27, //immediately_derived
  0, 0},
  {&cd_S2514C5,    ABISELECT(752,508), //bcp->offset
    51, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    28, //immediately_derived
  0, 1},
  {&cd_S2514C8,    ABISELECT(320,208), //bcp->offset
    25, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2514C1[];
extern void _ZN7S2514C42v5Ev();
extern void _ZN7S2514C1D1Ev();
extern void _ZN7S2514C1D0Ev();
extern void _ZN7S2514C12v1Ev();
extern void _ZN7S2514C12v2Ev();
extern void _ZN7S2514C12v3Ev();
extern void _ZN7S2514C12v4Ev();
extern void _ZN7S2514C42v5Ev();
extern void _ZN7S2514C62v6Ev();
extern void _ZN7S2514C62v7Ev();
extern void _ZN7S2514C62v8Ev();
extern void _ZN7S2514C42v5Ev();
extern void _ZN7S2514C72v9Ev();
extern void _ZN7S2514C42v5Ev();
extern void _ZN7S2514C42v5Ev();
extern void _ZN7S2514C42v5Ev();
extern void _ZN7S2514C62v6Ev();
extern void _ZN7S2514C62v7Ev();
extern void _ZN7S2514C62v8Ev();
extern void _ZN7S2514C93v10Ev();
extern void _ZN7S2514C93v11Ev();
extern void _ZN7S2514C42v5Ev();
extern void _ZN7S2514C62v6Ev();
extern void _ZN7S2514C62v7Ev();
extern void _ZN7S2514C62v8Ev();
static  VTBL_ENTRY vtc_S2514C1[] = {
  ABISELECT(752,508),
  ABISELECT(480,328),
  ABISELECT(464,316),
  ABISELECT(432,292),
  0,
  (VTBL_ENTRY)&(_ZTI7S2514C1[0]),
  (VTBL_ENTRY)&_ZN7S2514C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2514C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2514C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2514C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2514C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2514C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2514C12v4Ev,
  ABISELECT(400,276),
  ABISELECT(368,252),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI7S2514C1[0]),
  (VTBL_ENTRY)&_ZN7S2514C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v6Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v7Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v8Ev,
  ABISELECT(-224,-140),
  (VTBL_ENTRY)&(_ZTI7S2514C1[0]),
  (VTBL_ENTRY)&_ZN7S2514C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2514C72v9Ev,
  ABISELECT(432,300),
  ABISELECT(144,108),
  ABISELECT(160,120),
  ABISELECT(112,84),
  ABISELECT(-320,-208),
  (VTBL_ENTRY)&(_ZTI7S2514C1[0]),
  (VTBL_ENTRY)&_ZN7S2514C42v5Ev,
  0,
  ABISELECT(-432,-292),
  (VTBL_ENTRY)&(_ZTI7S2514C1[0]),
  (VTBL_ENTRY)&_ZN7S2514C42v5Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-36),
  ABISELECT(-480,-328),
  (VTBL_ENTRY)&(_ZTI7S2514C1[0]),
  (VTBL_ENTRY)&_ZN7S2514C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v6Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v7Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v8Ev,
  (VTBL_ENTRY)&_ZN7S2514C93v10Ev,
  (VTBL_ENTRY)&_ZN7S2514C93v11Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-288,-192),
  ABISELECT(-320,-216),
  ABISELECT(-752,-508),
  (VTBL_ENTRY)&(_ZTI7S2514C1[0]),
  (VTBL_ENTRY)&_ZN7S2514C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v6Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v7Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v8Ev,
};
extern VTBL_ENTRY _ZTV7S2514C1[];
extern void _ZN7S2514C42v5Ev();
extern void _ZN7S2514C62v6Ev();
extern void _ZN7S2514C62v7Ev();
extern void _ZN7S2514C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S2514C5__A__7S2514C1[] = {
  ABISELECT(400,276),
  ABISELECT(368,252),
  0,
  (VTBL_ENTRY)&(_ZTI7S2514C5[0]),
  (VTBL_ENTRY)&_ZN7S2514C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v6Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v7Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v8Ev,
};
extern void _ZN7S2514C42v5Ev();
static  VTBL_ENTRY _tg__ZTV7S2514C4__A1__7S2514C5__A__7S2514C1[] = {
  0,
  ABISELECT(-368,-252),
  (VTBL_ENTRY)&(_ZTI7S2514C5[0]),
  (VTBL_ENTRY)&_ZN7S2514C42v5Ev,
};
extern void _ZN7S2514C42v5Ev();
static  VTBL_ENTRY _tg__ZTV7S2514C8__7S2514C1[] = {
  ABISELECT(432,300),
  ABISELECT(144,108),
  ABISELECT(160,120),
  ABISELECT(112,84),
  0,
  (VTBL_ENTRY)&(_ZTI7S2514C8[0]),
  (VTBL_ENTRY)&_ZN7S2514C42v5Ev,
};
extern void _ZN7S2514C42v5Ev();
static  VTBL_ENTRY _tg__ZTV7S2514C4__A1__7S2514C8__7S2514C1[] = {
  0,
  ABISELECT(-112,-84),
  (VTBL_ENTRY)&(_ZTI7S2514C8[0]),
  (VTBL_ENTRY)&_ZN7S2514C42v5Ev,
};
extern void _ZN7S2514C42v5Ev();
extern void _ZN7S2514C62v6Ev();
extern void _ZN7S2514C62v7Ev();
extern void _ZN7S2514C62v8Ev();
extern void _ZN7S2514C93v10Ev();
extern void _ZN7S2514C93v11Ev();
static  VTBL_ENTRY _tg__ZTV7S2514C9__7S2514C8__7S2514C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-36),
  ABISELECT(-160,-120),
  (VTBL_ENTRY)&(_ZTI7S2514C8[0]),
  (VTBL_ENTRY)&_ZN7S2514C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v6Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v7Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v8Ev,
  (VTBL_ENTRY)&_ZN7S2514C93v10Ev,
  (VTBL_ENTRY)&_ZN7S2514C93v11Ev,
};
extern void _ZN7S2514C42v5Ev();
extern void _ZN7S2514C62v6Ev();
extern void _ZN7S2514C62v7Ev();
extern void _ZN7S2514C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S2514C5__7S2514C8__7S2514C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-288,-192),
  ABISELECT(-320,-216),
  ABISELECT(-432,-300),
  (VTBL_ENTRY)&(_ZTI7S2514C8[0]),
  (VTBL_ENTRY)&_ZN7S2514C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v6Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v7Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v8Ev,
};
extern void _ZN7S2514C42v5Ev();
extern void _ZN7S2514C62v6Ev();
extern void _ZN7S2514C62v7Ev();
extern void _ZN7S2514C62v8Ev();
extern void _ZN7S2514C93v10Ev();
extern void _ZN7S2514C93v11Ev();
static  VTBL_ENTRY _tg__ZTV7S2514C9__7S2514C1[] = {
  ABISELECT(-48,-36),
  0,
  (VTBL_ENTRY)&(_ZTI7S2514C9[0]),
  (VTBL_ENTRY)&_ZN7S2514C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v6Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v7Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v8Ev,
  (VTBL_ENTRY)&_ZN7S2514C93v10Ev,
  (VTBL_ENTRY)&_ZN7S2514C93v11Ev,
};
extern void _ZN7S2514C42v5Ev();
static  VTBL_ENTRY _tg__ZTV7S2514C4__A1__7S2514C9__7S2514C1[] = {
  0,
  ABISELECT(48,36),
  (VTBL_ENTRY)&(_ZTI7S2514C9[0]),
  (VTBL_ENTRY)&_ZN7S2514C42v5Ev,
};
extern void _ZN7S2514C42v5Ev();
extern void _ZN7S2514C62v6Ev();
extern void _ZN7S2514C62v7Ev();
extern void _ZN7S2514C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S2514C5__A1__7S2514C1[] = {
  ABISELECT(-288,-192),
  ABISELECT(-320,-216),
  0,
  (VTBL_ENTRY)&(_ZTI7S2514C5[0]),
  (VTBL_ENTRY)&_ZN7S2514C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v6Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v7Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v8Ev,
};
extern void _ZN7S2514C42v5Ev();
static  VTBL_ENTRY _tg__ZTV7S2514C4__A1__7S2514C5__A1__7S2514C1[] = {
  0,
  ABISELECT(320,216),
  (VTBL_ENTRY)&(_ZTI7S2514C5[0]),
  (VTBL_ENTRY)&_ZN7S2514C42v5Ev,
};
static  VTT_ENTRY vtt_S2514C1[] = {
  {&(_ZTV7S2514C1[6]),  6,63},
  {&(_tg__ZTV7S2514C5__A__7S2514C1[4]),  4,8},
  {&(_tg__ZTV7S2514C4__A1__7S2514C5__A__7S2514C1[3]),  3,4},
  {&(_tg__ZTV7S2514C8__7S2514C1[6]),  6,7},
  {&(_tg__ZTV7S2514C4__A1__7S2514C8__7S2514C1[3]),  3,4},
  {&(_tg__ZTV7S2514C9__7S2514C8__7S2514C1[9]),  9,15},
  {&(_tg__ZTV7S2514C5__7S2514C8__7S2514C1[8]),  8,12},
  {&(_ZTV7S2514C1[35]),  35,63},
  {&(_ZTV7S2514C1[17]),  17,63},
  {&(_ZTV7S2514C1[31]),  31,63},
  {&(_ZTV7S2514C1[45]),  45,63},
  {&(_ZTV7S2514C1[59]),  59,63},
  {&(_tg__ZTV7S2514C9__7S2514C1[3]),  3,9},
  {&(_tg__ZTV7S2514C4__A1__7S2514C9__7S2514C1[3]),  3,4},
  {&(_tg__ZTV7S2514C5__A1__7S2514C1[4]),  4,8},
  {&(_tg__ZTV7S2514C4__A1__7S2514C5__A1__7S2514C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S2514C1[];
extern  VTBL_ENTRY _ZTV7S2514C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2514C1[];
Class_Descriptor cd_S2514C1 = {  "S2514C1", // class name
  bases_S2514C1, 29,
  &(vtc_S2514C1[0]), // expected_vtbl_contents
  &(vtt_S2514C1[0]), // expected_vtt_contents
  ABISELECT(912,608), // object size
  NSPAIRA(_ZTI7S2514C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S2514C1),63, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2514C1),16, //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  S15319C5_nt  {
};
//SIG(-1 S15319C5_nt) C1{}



//skip512 S15319C5_nt

#else // __cplusplus

Class_Descriptor cd_S15319C5_nt = {  "S15319C5_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  S15319C4_nt  : S15319C5_nt {
};
//SIG(-1 S15319C4_nt) C1{ BC2{}}



//skip512 S15319C4_nt

#else // __cplusplus

extern Class_Descriptor cd_S15319C5_nt;
static Base_Class bases_S15319C4_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S15319C5_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_S15319C4_nt = {  "S15319C4_nt", // class name
  bases_S15319C4_nt, 1,
  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  S15319C7  {
};
//SIG(-1 S15319C7) C1{}



static void Test_S15319C7()
{
  {
    init_simple_test("S15319C7");
    S15319C7 lv;
    check2(sizeof(lv), 1, "sizeof(S15319C7)");
    check2(__alignof__(lv), 1, "__alignof__(S15319C7)");
  }
}
static Arrange_To_Call_Me vS15319C7(Test_S15319C7, "S15319C7", 1);

#else // __cplusplus

Class_Descriptor cd_S15319C7 = {  "S15319C7", // 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  S15319C6  : S15319C7 {
};
//SIG(-1 S15319C6) C1{ BC2{}}



static void Test_S15319C6()
{
  extern Class_Descriptor cd_S15319C6;
  void *lvp;
  {
    char buf[1];
    init_test(&cd_S15319C6, buf);
    S15319C6 &lv = *(new (buf) S15319C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), 1, "sizeof(S15319C6)");
    check2(__alignof__(lv), 1, "__alignof__(S15319C6)");
    check_base_class_offset(lv, (S15319C7*), 0, "S15319C6");
    test_class_info(&lv, &cd_S15319C6);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS15319C6(Test_S15319C6, "S15319C6", 1);

#else // __cplusplus

extern Class_Descriptor cd_S15319C7;
static Base_Class bases_S15319C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S15319C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S15319C6 = {  "S15319C6", // class name
  bases_S15319C6, 1,
  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  S15319C3_nt  : S15319C4_nt {
  ::S15319C6 s15319c3f0;
};
//SIG(-1 S15319C3_nt) C1{ BC2{ BC3{}} FC4{ BC5{}}}



//skip512 S15319C3_nt

#else // __cplusplus

extern Class_Descriptor cd_S15319C5_nt;
extern Class_Descriptor cd_S15319C4_nt;
static Base_Class bases_S15319C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S15319C5_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_S15319C4_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_S15319C3_nt = {  "S15319C3_nt", // class name
  bases_S15319C3_nt, 2,
  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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

union  S15319C8_nt  {
  char s15319c8f0[16];
  void *s15319c8f1;
};
//SIG(1 S15319C8_nt) U1{ Fc[16] Fp}

#endif // __cplusplus
#ifdef __cplusplus

struct  S15319C2_nt  : S15319C3_nt {
  ::S15319C8_nt s15319c2f0;
  int s15319c2f1;
  int s15319c2f2;
};
//SIG(-1 S15319C2_nt) C1{ BC2{ BC3{ BC4{}} FC5{ BC6{}}} FU7{ Fc[16] Fp} Fi Fi}



//skip512 S15319C2_nt

#else // __cplusplus

extern Class_Descriptor cd_S15319C5_nt;
extern Class_Descriptor cd_S15319C4_nt;
extern Class_Descriptor cd_S15319C3_nt;
static Base_Class bases_S15319C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S15319C5_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_S15319C4_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_S15319C3_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  S15319C9_nt  {
  int s15319c9f0;
  int s15319c9f1;
};
//SIG(-1 S15319C9_nt) C1{ Fi[2]}



//skip512 S15319C9_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15319C10_nt  {
  char s15319c10f0;
  char s15319c10f1;
  char s15319c10f2;
  char s15319c10f3;
  char s15319c10f4;
  char s15319c10f5;
  char s15319c10f6;
  char s15319c10f7;
  char s15319c10f8;
  int s15319c10f9;
  char s15319c10f10;
  char s15319c10f11;
  char s15319c10f12;
  char s15319c10f13;
  void  mf15319c10(); // _ZN12S15319C10_nt10mf15319c10Ev
};
//SIG(-1 S15319C10_nt) C1{ m Fc[9] Fi Fc[4]}


void  S15319C10_nt ::mf15319c10(){}

//skip512 S15319C10_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15319C1  {
  ::S15319C2_nt s15319c1f0;
  int s15319c1f1;
  ::S15319C9_nt s15319c1f2;
  char s15319c1f3;
  char s15319c1f4;
  ::S15319C9_nt s15319c1f5;
  char s15319c1f6;
  char s15319c1f7;
  char s15319c1f8;
  char s15319c1f9;
  char s15319c1f10;
  char s15319c1f11;
  char s15319c1f12;
  char s15319c1f13;
  char s15319c1f14;
  char s15319c1f15;
  int s15319c1f16;
  int s15319c1f17;
  int s15319c1f18;
  void *s15319c1f19;
  ::S15319C10_nt s15319c1f20;
  int s15319c1f21;
  void *s15319c1f22[32];
  int s15319c1f23;
  void *s15319c1f24[32];
  int s15319c1f25;
  void *s15319c1f26[8];
  int s15319c1f27;
  void *s15319c1f28[8];
  int s15319c1f29;
  void *s15319c1f30;
  int s15319c1f31;
  int s15319c1f32;
  int s15319c1f33;
  char s15319c1f34;
  void  mf15319c1(); // _ZN8S15319C19mf15319c1Ev
};
//SIG(1 S15319C1) C1{ m FC2{ BC3{ BC4{ BC5{}} FC6{ BC7{}}} FU8{ Fc[16] Fp} Fi Fi} Fi FC9{ Fi Fi} Fc Fc FC9 Fc Fc Fc Fc Fc Fc Fc Fc Fc Fc Fi Fi Fi Fp FC10{ m Fc Fc Fc Fc Fc Fc Fc Fc Fc Fi Fc Fc Fc Fc} Fi Fp[32] Fi Fp[32] Fi Fp[8] Fi Fp[8] Fi Fp Fi Fi Fi Fc}


void  S15319C1 ::mf15319c1(){}

static void Test_S15319C1()
{
  {
    init_simple_test("S15319C1");
    S15319C1 lv;
    check2(sizeof(lv), ABISELECT(808,460), "sizeof(S15319C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15319C1)");
    check_field_offset(lv, s15319c1f0, 0, "S15319C1.s15319c1f0");
    check_field_offset(lv, s15319c1f1, ABISELECT(32,28), "S15319C1.s15319c1f1");
    check_field_offset(lv, s15319c1f2, ABISELECT(36,32), "S15319C1.s15319c1f2");
    check_field_offset(lv, s15319c1f3, ABISELECT(44,40), "S15319C1.s15319c1f3");
    check_field_offset(lv, s15319c1f4, ABISELECT(45,41), "S15319C1.s15319c1f4");
    check_field_offset(lv, s15319c1f5, ABISELECT(48,44), "S15319C1.s15319c1f5");
    check_field_offset(lv, s15319c1f6, ABISELECT(56,52), "S15319C1.s15319c1f6");
    check_field_offset(lv, s15319c1f7, ABISELECT(57,53), "S15319C1.s15319c1f7");
    check_field_offset(lv, s15319c1f8, ABISELECT(58,54), "S15319C1.s15319c1f8");
    check_field_offset(lv, s15319c1f9, ABISELECT(59,55), "S15319C1.s15319c1f9");
    check_field_offset(lv, s15319c1f10, ABISELECT(60,56), "S15319C1.s15319c1f10");
    check_field_offset(lv, s15319c1f11, ABISELECT(61,57), "S15319C1.s15319c1f11");
    check_field_offset(lv, s15319c1f12, ABISELECT(62,58), "S15319C1.s15319c1f12");
    check_field_offset(lv, s15319c1f13, ABISELECT(63,59), "S15319C1.s15319c1f13");
    check_field_offset(lv, s15319c1f14, ABISELECT(64,60), "S15319C1.s15319c1f14");
    check_field_offset(lv, s15319c1f15, ABISELECT(65,61), "S15319C1.s15319c1f15");
    check_field_offset(lv, s15319c1f16, ABISELECT(68,64), "S15319C1.s15319c1f16");
    check_field_offset(lv, s15319c1f17, ABISELECT(72,68), "S15319C1.s15319c1f17");
    check_field_offset(lv, s15319c1f18, ABISELECT(76,72), "S15319C1.s15319c1f18");
    check_field_offset(lv, s15319c1f19, ABISELECT(80,76), "S15319C1.s15319c1f19");
    check_field_offset(lv, s15319c1f20, ABISELECT(88,80), "S15319C1.s15319c1f20");
    check_field_offset(lv, s15319c1f21, ABISELECT(108,100), "S15319C1.s15319c1f21");
    check_field_offset(lv, s15319c1f22, ABISELECT(112,104), "S15319C1.s15319c1f22");
    check_field_offset(lv, s15319c1f23, ABISELECT(368,232), "S15319C1.s15319c1f23");
    check_field_offset(lv, s15319c1f24, ABISELECT(376,236), "S15319C1.s15319c1f24");
    check_field_offset(lv, s15319c1f25, ABISELECT(632,364), "S15319C1.s15319c1f25");
    check_field_offset(lv, s15319c1f26, ABISELECT(640,368), "S15319C1.s15319c1f26");
    check_field_offset(lv, s15319c1f27, ABISELECT(704,400), "S15319C1.s15319c1f27");
    check_field_offset(lv, s15319c1f28, ABISELECT(712,404), "S15319C1.s15319c1f28");
    check_field_offset(lv, s15319c1f29, ABISELECT(776,436), "S15319C1.s15319c1f29");
    check_field_offset(lv, s15319c1f30, ABISELECT(784,440), "S15319C1.s15319c1f30");
    check_field_offset(lv, s15319c1f31, ABISELECT(792,444), "S15319C1.s15319c1f31");
    check_field_offset(lv, s15319c1f32, ABISELECT(796,448), "S15319C1.s15319c1f32");
    check_field_offset(lv, s15319c1f33, ABISELECT(800,452), "S15319C1.s15319c1f33");
    check_field_offset(lv, s15319c1f34, ABISELECT(804,456), "S15319C1.s15319c1f34");
  }
}
static Arrange_To_Call_Me vS15319C1(Test_S15319C1, "S15319C1", ABISELECT(808,460));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6282C8_nt  {
  virtual void  v1(); // _ZN10S6282C8_nt2v1Ev
  ~S6282C8_nt(); // tgen
  S6282C8_nt(); // tgen
};
//SIG(-1 S6282C8_nt) C1{ v1}


void  S6282C8_nt ::v1(){vfunc_called(this, "_ZN10S6282C8_nt2v1Ev");}
S6282C8_nt ::~S6282C8_nt(){ note_dtor("S6282C8_nt", this);} // tgen
S6282C8_nt ::S6282C8_nt(){ note_ctor("S6282C8_nt", this);} // tgen

//skip512 S6282C8_nt

#else // __cplusplus

extern void _ZN10S6282C8_ntC1Ev();
extern void _ZN10S6282C8_ntD1Ev();
Name_Map name_map_S6282C8_nt[] = {
  NSPAIR(_ZN10S6282C8_ntC1Ev),
  NSPAIR(_ZN10S6282C8_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY vtc_S6282C8_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S6282C8_nt[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
VTBL_ENTRY *P__ZTI10S6282C8_nt = _ZTI10S6282C8_nt; 
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
Class_Descriptor cd_S6282C8_nt = {  "S6282C8_nt", // class name
  0,0,//no base classes
  &(vtc_S6282C8_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S6282C8_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S6282C8_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  S6282C7  : virtual S2121C28 , S6282C8_nt , virtual S2121C38 {
  ~S6282C7(); // tgen
  S6282C7(); // tgen
};
//SIG(-1 S6282C7) C1{ VBC2{ m} BC3{ v1} VBC4{ m}}


S6282C7 ::~S6282C7(){ note_dtor("S6282C7", this);} // tgen
S6282C7 ::S6282C7(){ note_ctor("S6282C7", this);} // tgen

static void Test_S6282C7()
{
  extern Class_Descriptor cd_S6282C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S6282C7, buf);
    S6282C7 *dp, &lv = *(dp=new (buf) S6282C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S6282C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6282C7)");
    check_base_class_offset(lv, (S2121C28*), 0, "S6282C7");
    check_base_class_offset(lv, (S6282C8_nt*), 0, "S6282C7");
    check_base_class_offset(lv, (S2121C38*), 0, "S6282C7");
    test_class_info(&lv, &cd_S6282C7);
    dp->~S6282C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6282C7(Test_S6282C7, "S6282C7", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S6282C7C1Ev();
extern void _ZN7S6282C7D1Ev();
Name_Map name_map_S6282C7[] = {
  NSPAIR(_ZN7S6282C7C1Ev),
  NSPAIR(_ZN7S6282C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
static Base_Class bases_S6282C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S6282C8_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_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S6282C7[];
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY vtc_S6282C7[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C7[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern VTBL_ENTRY _ZTV7S6282C7[];
static  VTT_ENTRY vtt_S6282C7[] = {
  {&(_ZTV7S6282C7[4]),  4,5},
};
extern VTBL_ENTRY _ZTI7S6282C7[];
extern  VTBL_ENTRY _ZTV7S6282C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C7[];
Class_Descriptor cd_S6282C7 = {  "S6282C7", // class name
  bases_S6282C7, 3,
  &(vtc_S6282C7[0]), // expected_vtbl_contents
  &(vtt_S6282C7[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S6282C7),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S6282C7),5, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6282C7),1, //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  S6282C6  : S6282C7 , S6282C8_nt {
  ~S6282C6(); // tgen
  S6282C6(); // tgen
};
//SIG(-1 S6282C6) C1{ BC2{ VBC3{ m} BC4{ v1} VBC5{ m}} BC4}


S6282C6 ::~S6282C6(){ note_dtor("S6282C6", this);} // tgen
S6282C6 ::S6282C6(){ note_ctor("S6282C6", this);} // tgen

static void Test_S6282C6()
{
  extern Class_Descriptor cd_S6282C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S6282C6, buf);
    S6282C6 *dp, &lv = *(dp=new (buf) S6282C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S6282C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6282C6)");
    check_base_class_offset(lv, (S2121C28*)(S6282C7*), 0, "S6282C6");
    check_base_class_offset(lv, (S6282C8_nt*)(S6282C7*), 0, "S6282C6");
    check_base_class_offset(lv, (S2121C38*)(S6282C7*), 0, "S6282C6");
    check_base_class_offset(lv, (S6282C7*), 0, "S6282C6");
    /*is_ambiguous_... S6282C6::S6282C8_nt */ AMB_check_base_class_offset(lv, (S6282C8_nt*), ABISELECT(8,4), "S6282C6");
    test_class_info(&lv, &cd_S6282C6);
    dp->~S6282C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6282C6(Test_S6282C6, "S6282C6", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S6282C6C1Ev();
extern void _ZN7S6282C6D1Ev();
Name_Map name_map_S6282C6[] = {
  NSPAIR(_ZN7S6282C6C1Ev),
  NSPAIR(_ZN7S6282C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S6282C7;
extern VTBL_ENTRY _ZTI7S6282C7[];
extern  VTBL_ENTRY _ZTV7S6282C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C7[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
static Base_Class bases_S6282C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6282C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6282C7,    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_S6282C8_nt,    ABISELECT(8,4), //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
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6282C6[];
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY vtc_S6282C6[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C6[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S6282C6[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern VTBL_ENTRY _ZTV7S6282C6[];
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C7__7S6282C6[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C7[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
static  VTT_ENTRY vtt_S6282C6[] = {
  {&(_ZTV7S6282C6[4]),  4,8},
  {&(_tg__ZTV7S6282C7__7S6282C6[4]),  4,5},
};
extern VTBL_ENTRY _ZTI7S6282C6[];
extern  VTBL_ENTRY _ZTV7S6282C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C6[];
Class_Descriptor cd_S6282C6 = {  "S6282C6", // class name
  bases_S6282C6, 5,
  &(vtc_S6282C6[0]), // expected_vtbl_contents
  &(vtt_S6282C6[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S6282C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S6282C6),8, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6282C6),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  S6282C9  : S2121C28 , S6282C7 {
  virtual void  v2(); // _ZN7S6282C92v2Ev
  ~S6282C9(); // tgen
  S6282C9(); // tgen
};
//SIG(-1 S6282C9) C1{ BC2{ m} BC3{ VBC2 BC4{ v2} VBC5{ m}} v1}


void  S6282C9 ::v2(){vfunc_called(this, "_ZN7S6282C92v2Ev");}
S6282C9 ::~S6282C9(){ note_dtor("S6282C9", this);} // tgen
S6282C9 ::S6282C9(){ note_ctor("S6282C9", this);} // tgen

static void Test_S6282C9()
{
  extern Class_Descriptor cd_S6282C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S6282C9, buf);
    S6282C9 *dp, &lv = *(dp=new (buf) S6282C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S6282C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6282C9)");
    /*is_ambiguous_... S6282C9::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*), 0, "S6282C9");
    check_base_class_offset(lv, (S2121C28*)(S6282C7*), ABISELECT(8,4), "S6282C9");
    check_base_class_offset(lv, (S6282C8_nt*)(S6282C7*), 0, "S6282C9");
    check_base_class_offset(lv, (S2121C38*)(S6282C7*), 0, "S6282C9");
    check_base_class_offset(lv, (S6282C7*), 0, "S6282C9");
    test_class_info(&lv, &cd_S6282C9);
    dp->~S6282C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6282C9(Test_S6282C9, "S6282C9", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S6282C9C1Ev();
extern void _ZN7S6282C9D1Ev();
Name_Map name_map_S6282C9[] = {
  NSPAIR(_ZN7S6282C9C1Ev),
  NSPAIR(_ZN7S6282C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S6282C7;
extern VTBL_ENTRY _ZTI7S6282C7[];
extern  VTBL_ENTRY _ZTV7S6282C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C7[];
static Base_Class bases_S6282C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2121C28,    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, 1},
  {&cd_S6282C8_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
    4, //immediately_derived
  0, 0},
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6282C7,    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 _ZTI7S6282C9[];
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY vtc_S6282C9[] = {
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C9[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern VTBL_ENTRY _ZTV7S6282C9[];
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C7__7S6282C9[] = {
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C7[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
static  VTT_ENTRY vtt_S6282C9[] = {
  {&(_ZTV7S6282C9[4]),  4,6},
  {&(_tg__ZTV7S6282C7__7S6282C9[4]),  4,5},
};
extern VTBL_ENTRY _ZTI7S6282C9[];
extern  VTBL_ENTRY _ZTV7S6282C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C9[];
Class_Descriptor cd_S6282C9 = {  "S6282C9", // class name
  bases_S6282C9, 5,
  &(vtc_S6282C9[0]), // expected_vtbl_contents
  &(vtt_S6282C9[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S6282C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S6282C9),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6282C9),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  S6282C10  : S6282C8_nt , S2121C38 , virtual S2121C28 {
  ~S6282C10(); // tgen
  S6282C10(); // tgen
};
//SIG(-1 S6282C10) C1{ BC2{ v1} BC3{ m} VBC4{ m}}


S6282C10 ::~S6282C10(){ note_dtor("S6282C10", this);} // tgen
S6282C10 ::S6282C10(){ note_ctor("S6282C10", this);} // tgen

static void Test_S6282C10()
{
  extern Class_Descriptor cd_S6282C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S6282C10, buf);
    S6282C10 *dp, &lv = *(dp=new (buf) S6282C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S6282C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6282C10)");
    check_base_class_offset(lv, (S6282C8_nt*), 0, "S6282C10");
    check_base_class_offset(lv, (S2121C38*), 0, "S6282C10");
    check_base_class_offset(lv, (S2121C28*), 0, "S6282C10");
    test_class_info(&lv, &cd_S6282C10);
    dp->~S6282C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6282C10(Test_S6282C10, "S6282C10", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S6282C10C1Ev();
extern void _ZN8S6282C10D1Ev();
Name_Map name_map_S6282C10[] = {
  NSPAIR(_ZN8S6282C10C1Ev),
  NSPAIR(_ZN8S6282C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
static Base_Class bases_S6282C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6282C8_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_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S6282C10[];
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY vtc_S6282C10[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S6282C10[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern VTBL_ENTRY _ZTV8S6282C10[];
static  VTT_ENTRY vtt_S6282C10[] = {
  {&(_ZTV8S6282C10[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S6282C10[];
extern  VTBL_ENTRY _ZTV8S6282C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6282C10[];
Class_Descriptor cd_S6282C10 = {  "S6282C10", // class name
  bases_S6282C10, 3,
  &(vtc_S6282C10[0]), // expected_vtbl_contents
  &(vtt_S6282C10[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S6282C10),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S6282C10),4, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6282C10),1, //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  S6282C4  : virtual S2121C28 , virtual S6282C6 , virtual S6282C9 , virtual S6282C10 , S6282C8_nt {
  ~S6282C4(); // tgen
  S6282C4(); // tgen
};
//SIG(-1 S6282C4) C1{ VBC2{ m} VBC3{ BC4{ VBC2 BC5{ v1} VBC6{ m}} BC5} VBC7{ BC2 BC4 v2} VBC8{ BC5 BC6 VBC2} BC5}


S6282C4 ::~S6282C4(){ note_dtor("S6282C4", this);} // tgen
S6282C4 ::S6282C4(){ note_ctor("S6282C4", this);} // tgen

static void Test_S6282C4()
{
  extern Class_Descriptor cd_S6282C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S6282C4, buf);
    S6282C4 *dp, &lv = *(dp=new (buf) S6282C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S6282C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6282C4)");
    /*is_ambiguous_... S6282C4::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*), 0, "S6282C4");
    check_base_class_offset(lv, (S2121C28*)(S6282C7*)(S6282C6*), 0, "S6282C4");
    check_base_class_offset(lv, (S2121C28*)(S6282C7*)(S6282C9*), 0, "S6282C4");
    check_base_class_offset(lv, (S2121C28*)(S6282C10*), 0, "S6282C4");
    check_base_class_offset(lv, (S6282C8_nt*)(S6282C7*)(S6282C6*), ABISELECT(8,4), "S6282C4");
    check_base_class_offset(lv, (S2121C38*)(S6282C7*)(S6282C6*), 0, "S6282C4");
    check_base_class_offset(lv, (S2121C38*)(S6282C7*)(S6282C9*), 0, "S6282C4");
    check_base_class_offset(lv, (S6282C7*)(S6282C6*), ABISELECT(8,4), "S6282C4");
    /*is_ambiguous_... S6282C6::S6282C8_nt */ AMB_check_base_class_offset(lv, (S6282C8_nt*)(S6282C6*), ABISELECT(16,8), "S6282C4");
    check_base_class_offset(lv, (S6282C6*), ABISELECT(8,4), "S6282C4");
    /*is_ambiguous_... S6282C9::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*)(S6282C9*), ABISELECT(24,12), "S6282C4");
    check_base_class_offset(lv, (S6282C8_nt*)(S6282C7*)(S6282C9*), ABISELECT(24,12), "S6282C4");
    check_base_class_offset(lv, (S6282C7*)(S6282C9*), ABISELECT(24,12), "S6282C4");
    check_base_class_offset(lv, (S6282C9*), ABISELECT(24,12), "S6282C4");
    check_base_class_offset(lv, (S6282C8_nt*)(S6282C10*), ABISELECT(32,16), "S6282C4");
    check_base_class_offset(lv, (S2121C38*)(S6282C10*), ABISELECT(32,16), "S6282C4");
    check_base_class_offset(lv, (S6282C10*), ABISELECT(32,16), "S6282C4");
    /*is_ambiguous_... S6282C4::S6282C8_nt */ AMB_check_base_class_offset(lv, (S6282C8_nt*), 0, "S6282C4");
    test_class_info(&lv, &cd_S6282C4);
    dp->~S6282C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6282C4(Test_S6282C4, "S6282C4", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S6282C4C1Ev();
extern void _ZN7S6282C4D1Ev();
Name_Map name_map_S6282C4[] = {
  NSPAIR(_ZN7S6282C4C1Ev),
  NSPAIR(_ZN7S6282C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S6282C7;
extern VTBL_ENTRY _ZTI7S6282C7[];
extern  VTBL_ENTRY _ZTV7S6282C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C7[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S6282C6;
extern VTBL_ENTRY _ZTI7S6282C6[];
extern  VTBL_ENTRY _ZTV7S6282C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S6282C7;
extern VTBL_ENTRY _ZTI7S6282C7[];
extern  VTBL_ENTRY _ZTV7S6282C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C7[];
extern Class_Descriptor cd_S6282C9;
extern VTBL_ENTRY _ZTI7S6282C9[];
extern  VTBL_ENTRY _ZTV7S6282C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C9[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S6282C10;
extern VTBL_ENTRY _ZTI8S6282C10[];
extern  VTBL_ENTRY _ZTV8S6282C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6282C10[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
static Base_Class bases_S6282C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S6282C8_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6282C7,    ABISELECT(8,4), //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
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S6282C8_nt,    ABISELECT(16,8), //bcp->offset
    14, //bcp->virtual_function_table_offset
    2, //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
    5, //immediately_derived
  0, 0},
  {&cd_S6282C6,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2121C28,    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
    9, //immediately_derived
  0, 0},
  {&cd_S6282C8_nt,    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
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S6282C7,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S6282C9,    ABISELECT(24,12), //bcp->offset
    17, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6282C8_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
    8, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2121C38,    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
    12, //immediately_derived
  0, 0},
  {&cd_S6282C10,    ABISELECT(32,16), //bcp->offset
    25, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6282C8_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
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6282C4[];
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY vtc_S6282C4[] = {
  ABISELECT(32,16),
  ABISELECT(24,12),
  0,
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern VTBL_ENTRY _ZTV7S6282C4[];
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C6__7S6282C4[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C6[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C77S6282C6__7S6282C4[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C7[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C9__7S6282C4[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C9[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C77S6282C9__A1__7S6282C4[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C7[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C10__7S6282C4[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S6282C10[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
static  VTT_ENTRY vtt_S6282C4[] = {
  {&(_ZTV7S6282C4[7]),  7,30},
  {&(_ZTV7S6282C4[13]),  13,30},
  {&(_ZTV7S6282C4[16]),  16,30},
  {&(_ZTV7S6282C4[23]),  23,30},
  {&(_ZTV7S6282C4[29]),  29,30},
  {&(_tg__ZTV7S6282C6__7S6282C4[4]),  4,5},
  {&(_tg__ZTV7S6282C77S6282C6__7S6282C4[4]),  4,5},
  {&(_tg__ZTV7S6282C9__7S6282C4[4]),  4,6},
  {&(_tg__ZTV7S6282C77S6282C9__A1__7S6282C4[4]),  4,5},
  {&(_tg__ZTV8S6282C10__7S6282C4[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S6282C4[];
extern  VTBL_ENTRY _ZTV7S6282C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C4[];
Class_Descriptor cd_S6282C4 = {  "S6282C4", // class name
  bases_S6282C4, 14,
  &(vtc_S6282C4[0]), // expected_vtbl_contents
  &(vtt_S6282C4[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S6282C4),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S6282C4),30, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6282C4),10, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6282C11  : virtual S2121C28 , virtual S6282C9 , S6282C8_nt {
  int s6282c11f0;
  void *s6282c11f1;
  ~S6282C11(); // tgen
  S6282C11(); // tgen
};
//SIG(-1 S6282C11) C1{ VBC2{ m} VBC3{ BC2 BC4{ VBC2 BC5{ v1} VBC6{ m}} v2} BC5 Fi Fp}


S6282C11 ::~S6282C11(){ note_dtor("S6282C11", this);} // tgen
S6282C11 ::S6282C11(){ note_ctor("S6282C11", this);} // tgen

static void Test_S6282C11()
{
  extern Class_Descriptor cd_S6282C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S6282C11, buf);
    S6282C11 *dp, &lv = *(dp=new (buf) S6282C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S6282C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6282C11)");
    /*is_ambiguous_... S6282C11::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*), 0, "S6282C11");
    check_base_class_offset(lv, (S2121C28*)(S6282C7*)(S6282C9*), 0, "S6282C11");
    /*is_ambiguous_... S6282C9::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*)(S6282C9*), ABISELECT(24,12), "S6282C11");
    check_base_class_offset(lv, (S6282C8_nt*)(S6282C7*)(S6282C9*), ABISELECT(24,12), "S6282C11");
    check_base_class_offset(lv, (S2121C38*)(S6282C7*)(S6282C9*), 0, "S6282C11");
    check_base_class_offset(lv, (S6282C7*)(S6282C9*), ABISELECT(24,12), "S6282C11");
    check_base_class_offset(lv, (S6282C9*), ABISELECT(24,12), "S6282C11");
    /*is_ambiguous_... S6282C11::S6282C8_nt */ AMB_check_base_class_offset(lv, (S6282C8_nt*), 0, "S6282C11");
    check_field_offset(lv, s6282c11f0, ABISELECT(8,4), "S6282C11.s6282c11f0");
    check_field_offset(lv, s6282c11f1, ABISELECT(16,8), "S6282C11.s6282c11f1");
    test_class_info(&lv, &cd_S6282C11);
    dp->~S6282C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6282C11(Test_S6282C11, "S6282C11", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S6282C11C1Ev();
extern void _ZN8S6282C11D1Ev();
Name_Map name_map_S6282C11[] = {
  NSPAIR(_ZN8S6282C11C1Ev),
  NSPAIR(_ZN8S6282C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S6282C7;
extern VTBL_ENTRY _ZTI7S6282C7[];
extern  VTBL_ENTRY _ZTV7S6282C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C7[];
extern Class_Descriptor cd_S6282C9;
extern VTBL_ENTRY _ZTI7S6282C9[];
extern  VTBL_ENTRY _ZTV7S6282C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C9[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
static Base_Class bases_S6282C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2121C28,    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
    5, //immediately_derived
  0, 0},
  {&cd_S6282C8_nt,    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_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6282C7,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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
    5, //immediately_derived
  0, 0},
  {&cd_S6282C9,    ABISELECT(24,12), //bcp->offset
    6, //bcp->virtual_function_table_offset
    6, //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},
  {&cd_S6282C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S6282C11[];
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY vtc_S6282C11[] = {
  0,
  ABISELECT(24,12),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S6282C11[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S6282C11[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern VTBL_ENTRY _ZTV8S6282C11[];
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C9__8S6282C11[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C9[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C77S6282C9__8S6282C11[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C7[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
static  VTT_ENTRY vtt_S6282C11[] = {
  {&(_ZTV8S6282C11[5]),  5,14},
  {&(_ZTV8S6282C11[12]),  12,14},
  {&(_tg__ZTV7S6282C9__8S6282C11[4]),  4,6},
  {&(_tg__ZTV7S6282C77S6282C9__8S6282C11[4]),  4,5},
};
extern VTBL_ENTRY _ZTI8S6282C11[];
extern  VTBL_ENTRY _ZTV8S6282C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6282C11[];
Class_Descriptor cd_S6282C11 = {  "S6282C11", // class name
  bases_S6282C11, 7,
  &(vtc_S6282C11[0]), // expected_vtbl_contents
  &(vtt_S6282C11[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S6282C11),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S6282C11),14, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6282C11),4, //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  S6282C3  : virtual S6282C4 , virtual S6282C11 {
  int s6282c3f0:32;
  ~S6282C3(); // tgen
  S6282C3(); // tgen
};
//SIG(-1 S6282C3) C1{ VBC2{ VBC3{ m} VBC4{ BC5{ VBC3 BC6{ v1} VBC7{ m}} BC6} VBC8{ BC3 BC5 v2} VBC9{ BC6 BC7 VBC3} BC6} VBC10{ VBC3 VBC8 BC6 Fi Fp} Fi:32}


S6282C3 ::~S6282C3(){ note_dtor("S6282C3", this);} // tgen
S6282C3 ::S6282C3(){ note_ctor("S6282C3", this);} // tgen

static void Test_S6282C3()
{
  extern Class_Descriptor cd_S6282C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S6282C3, buf);
    S6282C3 *dp, &lv = *(dp=new (buf) S6282C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S6282C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6282C3)");
    /*is_ambiguous_... S6282C4::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*)(S6282C4*), 0, "S6282C3");
    check_base_class_offset(lv, (S2121C28*)(S6282C7*)(S6282C6*), 0, "S6282C3");
    check_base_class_offset(lv, (S2121C28*)(S6282C7*)(S6282C9*), 0, "S6282C3");
    check_base_class_offset(lv, (S2121C28*)(S6282C10*), 0, "S6282C3");
    /*is_ambiguous_... S6282C11::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*)(S6282C11*), 0, "S6282C3");
    check_base_class_offset(lv, (S6282C8_nt*)(S6282C7*)(S6282C6*), ABISELECT(16,8), "S6282C3");
    check_base_class_offset(lv, (S2121C38*)(S6282C7*)(S6282C6*), 0, "S6282C3");
    check_base_class_offset(lv, (S2121C38*)(S6282C7*)(S6282C9*), 0, "S6282C3");
    check_base_class_offset(lv, (S6282C7*)(S6282C6*), ABISELECT(16,8), "S6282C3");
    /*is_ambiguous_... S6282C6::S6282C8_nt */ AMB_check_base_class_offset(lv, (S6282C8_nt*)(S6282C6*), ABISELECT(24,12), "S6282C3");
    check_base_class_offset(lv, (S6282C6*)(S6282C4*), ABISELECT(16,8), "S6282C3");
    /*is_ambiguous_... S6282C9::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*)(S6282C9*), ABISELECT(32,16), "S6282C3");
    check_base_class_offset(lv, (S6282C8_nt*)(S6282C7*)(S6282C9*), ABISELECT(32,16), "S6282C3");
    check_base_class_offset(lv, (S6282C7*)(S6282C9*), ABISELECT(32,16), "S6282C3");
    check_base_class_offset(lv, (S6282C9*)(S6282C4*), ABISELECT(32,16), "S6282C3");
    check_base_class_offset(lv, (S6282C9*)(S6282C11*), ABISELECT(32,16), "S6282C3");
    check_base_class_offset(lv, (S6282C8_nt*)(S6282C10*), ABISELECT(40,20), "S6282C3");
    check_base_class_offset(lv, (S2121C38*)(S6282C10*), ABISELECT(40,20), "S6282C3");
    check_base_class_offset(lv, (S6282C10*)(S6282C4*), ABISELECT(40,20), "S6282C3");
    /*is_ambiguous_... S6282C4::S6282C8_nt */ AMB_check_base_class_offset(lv, (S6282C8_nt*)(S6282C4*), 0, "S6282C3");
    check_base_class_offset(lv, (S6282C4*), 0, "S6282C3");
    /*is_ambiguous_... S6282C11::S6282C8_nt */ AMB_check_base_class_offset(lv, (S6282C8_nt*)(S6282C11*), ABISELECT(48,24), "S6282C3");
    check_base_class_offset(lv, (S6282C11*), ABISELECT(48,24), "S6282C3");
    set_bf_and_test(lv, s6282c3f0, ABISELECT(8,4), 0, 32, 1, "S6282C3");
    set_bf_and_test(lv, s6282c3f0, ABISELECT(8,4), 0, 32, hide_sll(1LL<<31), "S6282C3");
    test_class_info(&lv, &cd_S6282C3);
    dp->~S6282C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6282C3(Test_S6282C3, "S6282C3", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN7S6282C3C1Ev();
extern void _ZN7S6282C3D1Ev();
Name_Map name_map_S6282C3[] = {
  NSPAIR(_ZN7S6282C3C1Ev),
  NSPAIR(_ZN7S6282C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S6282C7;
extern VTBL_ENTRY _ZTI7S6282C7[];
extern  VTBL_ENTRY _ZTV7S6282C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C7[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S6282C6;
extern VTBL_ENTRY _ZTI7S6282C6[];
extern  VTBL_ENTRY _ZTV7S6282C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S6282C7;
extern VTBL_ENTRY _ZTI7S6282C7[];
extern  VTBL_ENTRY _ZTV7S6282C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C7[];
extern Class_Descriptor cd_S6282C9;
extern VTBL_ENTRY _ZTI7S6282C9[];
extern  VTBL_ENTRY _ZTV7S6282C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C9[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S6282C10;
extern VTBL_ENTRY _ZTI8S6282C10[];
extern  VTBL_ENTRY _ZTV8S6282C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6282C10[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S6282C4;
extern VTBL_ENTRY _ZTI7S6282C4[];
extern  VTBL_ENTRY _ZTV7S6282C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C4[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S6282C11;
extern VTBL_ENTRY _ZTI8S6282C11[];
extern  VTBL_ENTRY _ZTV8S6282C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6282C11[];
static Base_Class bases_S6282C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6282C8_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
    3, //immediately_derived
  0, 0},
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6282C7,    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
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S6282C8_nt,    ABISELECT(24,12), //bcp->offset
    17, //bcp->virtual_function_table_offset
    2, //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
    5, //immediately_derived
  0, 0},
  {&cd_S6282C6,    ABISELECT(16,8), //bcp->offset
    11, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S2121C28,    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
    9, //immediately_derived
  0, 0},
  {&cd_S6282C8_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
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S6282C7,    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
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S6282C9,    ABISELECT(32,16), //bcp->offset
    20, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S6282C8_nt,    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
    8, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2121C38,    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
    12, //immediately_derived
  0, 0},
  {&cd_S6282C10,    ABISELECT(40,20), //bcp->offset
    28, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S6282C8_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
    10, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S6282C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6282C8_nt,    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
    12, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S6282C11,    ABISELECT(48,24), //bcp->offset
    33, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6282C3[];
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY vtc_S6282C3[] = {
  ABISELECT(48,24),
  0,
  0,
  ABISELECT(40,20),
  ABISELECT(32,16),
  0,
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C3[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S6282C3[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S6282C3[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  0,
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S6282C3[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
  0,
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S6282C3[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  0,
  ABISELECT(-48,-24),
  ABISELECT(-16,-8),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S6282C3[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern VTBL_ENTRY _ZTV7S6282C3[];
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C4__7S6282C3[] = {
  ABISELECT(40,20),
  ABISELECT(32,16),
  0,
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C6__7S6282C4__7S6282C3[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV10S6282C8_nt7S6282C6__A1__7S6282C4__7S6282C3[] = {
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C9__7S6282C4__7S6282C3[] = {
  0,
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C10__7S6282C4__7S6282C3[] = {
  0,
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C6__7S6282C3[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C6[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C77S6282C6__7S6282C3[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C7[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C9__7S6282C3[] = {
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C9[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C77S6282C9__A1__7S6282C3[] = {
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C7[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C10__7S6282C3[] = {
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S6282C10[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C11__7S6282C3[] = {
  ABISELECT(-48,-24),
  ABISELECT(-16,-8),
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S6282C11[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C9__8S6282C11__7S6282C3[] = {
  0,
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S6282C11[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
static  VTT_ENTRY vtt_S6282C3[] = {
  {&(_ZTV7S6282C3[10]),  10,40},
  {&(_ZTV7S6282C3[10]),  10,40},
  {&(_ZTV7S6282C3[16]),  16,40},
  {&(_ZTV7S6282C3[19]),  19,40},
  {&(_ZTV7S6282C3[26]),  26,40},
  {&(_ZTV7S6282C3[32]),  32,40},
  {&(_ZTV7S6282C3[39]),  39,40},
  {&(_tg__ZTV7S6282C4__7S6282C3[7]),  7,8},
  {&(_tg__ZTV7S6282C6__7S6282C4__7S6282C3[5]),  5,6},
  {&(_tg__ZTV10S6282C8_nt7S6282C6__A1__7S6282C4__7S6282C3[2]),  2,3},
  {&(_tg__ZTV7S6282C9__7S6282C4__7S6282C3[6]),  6,8},
  {&(_tg__ZTV8S6282C10__7S6282C4__7S6282C3[4]),  4,5},
  {&(_tg__ZTV7S6282C6__7S6282C3[4]),  4,5},
  {&(_tg__ZTV7S6282C77S6282C6__7S6282C3[4]),  4,5},
  {&(_tg__ZTV7S6282C9__7S6282C3[4]),  4,6},
  {&(_tg__ZTV7S6282C77S6282C9__A1__7S6282C3[4]),  4,5},
  {&(_tg__ZTV8S6282C10__7S6282C3[3]),  3,4},
  {&(_tg__ZTV8S6282C11__7S6282C3[5]),  5,6},
  {&(_tg__ZTV7S6282C9__8S6282C11__7S6282C3[6]),  6,8},
};
extern VTBL_ENTRY _ZTI7S6282C3[];
extern  VTBL_ENTRY _ZTV7S6282C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C3[];
Class_Descriptor cd_S6282C3 = {  "S6282C3", // class name
  bases_S6282C3, 17,
  &(vtc_S6282C3[0]), // expected_vtbl_contents
  &(vtt_S6282C3[0]), // expected_vtt_contents
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI7S6282C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S6282C3),40, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6282C3),19, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6282C14_nt  {
  int s6282c14f0;
  void  mf6282c14(); // _ZN11S6282C14_nt9mf6282c14Ev
  virtual  ~S6282C14_nt(); // _ZN11S6282C14_ntD1Ev
  S6282C14_nt(); // tgen
};
//SIG(-1 S6282C14_nt) C1{ vd m Fi}


void  S6282C14_nt ::mf6282c14(){}
 S6282C14_nt ::~S6282C14_nt(){ note_dtor("S6282C14_nt", this);}
S6282C14_nt ::S6282C14_nt(){ note_ctor("S6282C14_nt", this);} // tgen

//skip512 S6282C14_nt

#else // __cplusplus

extern void _ZN11S6282C14_ntC1Ev();
extern void _ZN11S6282C14_ntD1Ev();
Name_Map name_map_S6282C14_nt[] = {
  NSPAIR(_ZN11S6282C14_ntC1Ev),
  NSPAIR(_ZN11S6282C14_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
extern void _ZN11S6282C14_ntD1Ev();
extern void _ZN11S6282C14_ntD0Ev();
static  VTBL_ENTRY vtc_S6282C14_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S6282C14_nt[0]),
  (VTBL_ENTRY)&_ZN11S6282C14_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S6282C14_ntD0Ev,
};
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
VTBL_ENTRY *P__ZTI11S6282C14_nt = _ZTI11S6282C14_nt; 
extern  VTBL_ENTRY _ZTV11S6282C14_nt[];
Class_Descriptor cd_S6282C14_nt = {  "S6282C14_nt", // class name
  0,0,//no base classes
  &(vtc_S6282C14_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI11S6282C14_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S6282C14_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  S6282C16  : virtual S6282C9 {
  int s6282c16f0;
  ~S6282C16(); // tgen
  S6282C16(); // tgen
};
//SIG(-1 S6282C16) C1{ VBC2{ BC3{ m} BC4{ VBC3 BC5{ v1} VBC6{ m}} v2} Fi}


S6282C16 ::~S6282C16(){ note_dtor("S6282C16", this);} // tgen
S6282C16 ::S6282C16(){ note_ctor("S6282C16", this);} // tgen

static void Test_S6282C16()
{
  extern Class_Descriptor cd_S6282C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S6282C16, buf);
    S6282C16 *dp, &lv = *(dp=new (buf) S6282C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S6282C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6282C16)");
    /*is_ambiguous_... S6282C9::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*)(S6282C9*), 0, "S6282C16");
    check_base_class_offset(lv, (S2121C28*)(S6282C7*)(S6282C9*), ABISELECT(12,8), "S6282C16");
    check_base_class_offset(lv, (S6282C8_nt*)(S6282C7*)(S6282C9*), 0, "S6282C16");
    check_base_class_offset(lv, (S2121C38*)(S6282C7*)(S6282C9*), 0, "S6282C16");
    check_base_class_offset(lv, (S6282C7*)(S6282C9*), 0, "S6282C16");
    check_base_class_offset(lv, (S6282C9*), 0, "S6282C16");
    check_field_offset(lv, s6282c16f0, ABISELECT(8,4), "S6282C16.s6282c16f0");
    test_class_info(&lv, &cd_S6282C16);
    dp->~S6282C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6282C16(Test_S6282C16, "S6282C16", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S6282C16C1Ev();
extern void _ZN8S6282C16D1Ev();
Name_Map name_map_S6282C16[] = {
  NSPAIR(_ZN8S6282C16C1Ev),
  NSPAIR(_ZN8S6282C16D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S6282C7;
extern VTBL_ENTRY _ZTI7S6282C7[];
extern  VTBL_ENTRY _ZTV7S6282C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C7[];
extern Class_Descriptor cd_S6282C9;
extern VTBL_ENTRY _ZTI7S6282C9[];
extern  VTBL_ENTRY _ZTV7S6282C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C9[];
static Base_Class bases_S6282C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2121C28,    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
    4, //immediately_derived
  0, 1},
  {&cd_S6282C8_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
    4, //immediately_derived
  0, 0},
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6282C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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
    5, //immediately_derived
  0, 0},
  {&cd_S6282C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //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 _ZTI8S6282C16[];
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY vtc_S6282C16[] = {
  0,
  0,
  0,
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S6282C16[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern VTBL_ENTRY _ZTV8S6282C16[];
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C9__8S6282C16[] = {
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C9[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C77S6282C9__8S6282C16[] = {
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C7[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
static  VTT_ENTRY vtt_S6282C16[] = {
  {&(_ZTV8S6282C16[7]),  7,9},
  {&(_ZTV8S6282C16[7]),  7,9},
  {&(_tg__ZTV7S6282C9__8S6282C16[4]),  4,6},
  {&(_tg__ZTV7S6282C77S6282C9__8S6282C16[4]),  4,5},
};
extern VTBL_ENTRY _ZTI8S6282C16[];
extern  VTBL_ENTRY _ZTV8S6282C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6282C16[];
Class_Descriptor cd_S6282C16 = {  "S6282C16", // class name
  bases_S6282C16, 6,
  &(vtc_S6282C16[0]), // expected_vtbl_contents
  &(vtt_S6282C16[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S6282C16),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S6282C16),9, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6282C16),4, //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  S6282C15  : S6282C16 , virtual S6282C8_nt {
  __tsu64 s6282c15f0:1;
  ~S6282C15(); // tgen
  S6282C15(); // tgen
};
//SIG(-1 S6282C15) C1{ BC2{ VBC3{ BC4{ m} BC5{ VBC4 BC6{ v1} VBC7{ m}} v2} Fi} VBC6 FL:1}


S6282C15 ::~S6282C15(){ note_dtor("S6282C15", this);} // tgen
S6282C15 ::S6282C15(){ note_ctor("S6282C15", this);} // tgen

static void Test_S6282C15()
{
  extern Class_Descriptor cd_S6282C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S6282C15, buf);
    S6282C15 *dp, &lv = *(dp=new (buf) S6282C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S6282C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6282C15)");
    /*is_ambiguous_... S6282C9::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*)(S6282C9*), 0, "S6282C15");
    check_base_class_offset(lv, (S2121C28*)(S6282C7*)(S6282C9*), ABISELECT(13,9), "S6282C15");
    check_base_class_offset(lv, (S6282C8_nt*)(S6282C7*)(S6282C9*), 0, "S6282C15");
    check_base_class_offset(lv, (S2121C38*)(S6282C7*)(S6282C9*), 0, "S6282C15");
    check_base_class_offset(lv, (S6282C7*)(S6282C9*), 0, "S6282C15");
    check_base_class_offset(lv, (S6282C9*)(S6282C16*), 0, "S6282C15");
    check_base_class_offset(lv, (S6282C16*), 0, "S6282C15");
    /*is_ambiguous_... S6282C15::S6282C8_nt */ AMB_check_base_class_offset(lv, (S6282C8_nt*), ABISELECT(16,12), "S6282C15");
    set_bf_and_test(lv, s6282c15f0, ABISELECT(12,8), 0, 1, 1, "S6282C15");
    test_class_info(&lv, &cd_S6282C15);
    dp->~S6282C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6282C15(Test_S6282C15, "S6282C15", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S6282C15C1Ev();
extern void _ZN8S6282C15D1Ev();
Name_Map name_map_S6282C15[] = {
  NSPAIR(_ZN8S6282C15C1Ev),
  NSPAIR(_ZN8S6282C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S6282C7;
extern VTBL_ENTRY _ZTI7S6282C7[];
extern  VTBL_ENTRY _ZTV7S6282C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C7[];
extern Class_Descriptor cd_S6282C9;
extern VTBL_ENTRY _ZTI7S6282C9[];
extern  VTBL_ENTRY _ZTV7S6282C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C9[];
extern Class_Descriptor cd_S6282C16;
extern VTBL_ENTRY _ZTI8S6282C16[];
extern  VTBL_ENTRY _ZTV8S6282C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6282C16[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
static Base_Class bases_S6282C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2121C28,    ABISELECT(13,9), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6282C8_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
    4, //immediately_derived
  0, 0},
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6282C7,    0, //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
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S6282C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S6282C16,    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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6282C8_nt,    ABISELECT(16,12), //bcp->offset
    10, //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
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S6282C15[];
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY vtc_S6282C15[] = {
  ABISELECT(16,12),
  0,
  0,
  0,
  0,
  ABISELECT(13,9),
  0,
  (VTBL_ENTRY)&(_ZTI8S6282C15[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S6282C15[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern VTBL_ENTRY _ZTV8S6282C15[];
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C16__8S6282C15[] = {
  0,
  0,
  0,
  0,
  ABISELECT(13,9),
  0,
  (VTBL_ENTRY)&(_ZTI8S6282C16[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C9__8S6282C15[] = {
  0,
  ABISELECT(13,9),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C9[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C77S6282C9__8S6282C15[] = {
  0,
  ABISELECT(13,9),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C7[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
static  VTT_ENTRY vtt_S6282C15[] = {
  {&(_ZTV8S6282C15[8]),  8,14},
  {&(_tg__ZTV8S6282C16__8S6282C15[7]),  7,9},
  {&(_tg__ZTV8S6282C16__8S6282C15[7]),  7,9},
  {&(_ZTV8S6282C15[8]),  8,14},
  {&(_ZTV8S6282C15[13]),  13,14},
  {&(_tg__ZTV7S6282C9__8S6282C15[4]),  4,6},
  {&(_tg__ZTV7S6282C77S6282C9__8S6282C15[4]),  4,5},
};
extern VTBL_ENTRY _ZTI8S6282C15[];
extern  VTBL_ENTRY _ZTV8S6282C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6282C15[];
Class_Descriptor cd_S6282C15 = {  "S6282C15", // class name
  bases_S6282C15, 8,
  &(vtc_S6282C15[0]), // expected_vtbl_contents
  &(vtt_S6282C15[0]), // expected_vtt_contents
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S6282C15),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S6282C15),14, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6282C15),7, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6282C13  : S6282C14_nt , virtual S6282C3 , virtual S6282C15 , S6282C7 {
  ~S6282C13(); // tgen
  S6282C13(); // tgen
};
//SIG(-1 S6282C13) C1{ BC2{ vd m Fi} VBC3{ VBC4{ VBC5{ m} VBC6{ BC7{ VBC5 BC8{ v1} VBC9{ m}} BC8} VBC10{ BC5 BC7 v2} VBC11{ BC8 BC9 VBC5} BC8} VBC12{ VBC5 VBC10 BC8 Fi Fp} Fi:32} VBC13{ BC14{ VBC10 Fi} VBC8 FL:1} BC7}


S6282C13 ::~S6282C13(){ note_dtor("S6282C13", this);} // tgen
S6282C13 ::S6282C13(){ note_ctor("S6282C13", this);} // tgen

static void Test_S6282C13()
{
  extern Class_Descriptor cd_S6282C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,16)];
    init_test(&cd_S6282C13, buf);
    S6282C13 *dp, &lv = *(dp=new (buf) S6282C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,60), "sizeof(S6282C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6282C13)");
    check_base_class_offset(lv, (S6282C14_nt*), 0, "S6282C13");
    /*is_ambiguous_... S6282C4::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*)(S6282C4*), 0, "S6282C13");
    check_base_class_offset(lv, (S2121C28*)(S6282C7*)(S6282C6*), 0, "S6282C13");
    check_base_class_offset(lv, (S2121C28*)(S6282C7*)(S6282C9*), 0, "S6282C13");
    check_base_class_offset(lv, (S2121C28*)(S6282C10*), 0, "S6282C13");
    /*is_ambiguous_... S6282C11::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*)(S6282C11*), 0, "S6282C13");
    /*is_ambiguous_... S6282C13::S6282C7 */ AMB_check_base_class_offset(lv, (S2121C28*)(S6282C7*), 0, "S6282C13");
    check_base_class_offset(lv, (S6282C8_nt*)(S6282C7*)(S6282C6*), ABISELECT(40,20), "S6282C13");
    check_base_class_offset(lv, (S2121C38*)(S6282C7*)(S6282C6*), 0, "S6282C13");
    check_base_class_offset(lv, (S2121C38*)(S6282C7*)(S6282C9*), 0, "S6282C13");
    /*is_ambiguous_... S6282C13::S6282C7 */ AMB_check_base_class_offset(lv, (S2121C38*)(S6282C7*), 0, "S6282C13");
    check_base_class_offset(lv, (S6282C7*)(S6282C6*), ABISELECT(40,20), "S6282C13");
    /*is_ambiguous_... S6282C6::S6282C8_nt */ AMB_check_base_class_offset(lv, (S6282C8_nt*)(S6282C6*), ABISELECT(48,24), "S6282C13");
    check_base_class_offset(lv, (S6282C6*)(S6282C4*), ABISELECT(40,20), "S6282C13");
    /*is_ambiguous_... S6282C9::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*)(S6282C9*), ABISELECT(88,44), "S6282C13");
    check_base_class_offset(lv, (S6282C8_nt*)(S6282C7*)(S6282C9*), ABISELECT(88,44), "S6282C13");
    check_base_class_offset(lv, (S6282C7*)(S6282C9*), ABISELECT(88,44), "S6282C13");
    check_base_class_offset(lv, (S6282C9*)(S6282C4*), ABISELECT(88,44), "S6282C13");
    check_base_class_offset(lv, (S6282C9*)(S6282C11*), ABISELECT(88,44), "S6282C13");
    check_base_class_offset(lv, (S6282C9*)(S6282C16*)(S6282C15*), ABISELECT(88,44), "S6282C13");
    check_base_class_offset(lv, (S6282C8_nt*)(S6282C10*), ABISELECT(56,28), "S6282C13");
    check_base_class_offset(lv, (S2121C38*)(S6282C10*), ABISELECT(56,28), "S6282C13");
    check_base_class_offset(lv, (S6282C10*)(S6282C4*), ABISELECT(56,28), "S6282C13");
    /*is_ambiguous_... S6282C4::S6282C8_nt */ AMB_check_base_class_offset(lv, (S6282C8_nt*)(S6282C4*), ABISELECT(24,12), "S6282C13");
    check_base_class_offset(lv, (S6282C4*)(S6282C3*), ABISELECT(24,12), "S6282C13");
    /*is_ambiguous_... S6282C11::S6282C8_nt */ AMB_check_base_class_offset(lv, (S6282C8_nt*)(S6282C11*), ABISELECT(64,32), "S6282C13");
    check_base_class_offset(lv, (S6282C11*)(S6282C3*), ABISELECT(64,32), "S6282C13");
    check_base_class_offset(lv, (S6282C3*), ABISELECT(24,12), "S6282C13");
    check_base_class_offset(lv, (S6282C16*)(S6282C15*), ABISELECT(88,44), "S6282C13");
    /*is_ambiguous_... S6282C15::S6282C8_nt */ AMB_check_base_class_offset(lv, (S6282C8_nt*)(S6282C15*), ABISELECT(104,56), "S6282C13");
    check_base_class_offset(lv, (S6282C15*), ABISELECT(88,44), "S6282C13");
    /*is_ambiguous_... S6282C13::S6282C7 */ AMB_check_base_class_offset(lv, (S6282C8_nt*)(S6282C7*), ABISELECT(16,8), "S6282C13");
    /*is_ambiguous_... S6282C13::S6282C7 */ AMB_check_base_class_offset(lv, (S6282C7*), ABISELECT(16,8), "S6282C13");
    test_class_info(&lv, &cd_S6282C13);
    dp->~S6282C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6282C13(Test_S6282C13, "S6282C13", ABISELECT(112,60));

#else // __cplusplus

extern void _ZN8S6282C13C1Ev();
extern void _ZN8S6282C13D1Ev();
Name_Map name_map_S6282C13[] = {
  NSPAIR(_ZN8S6282C13C1Ev),
  NSPAIR(_ZN8S6282C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6282C14_nt;
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
extern  VTBL_ENTRY _ZTV11S6282C14_nt[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S6282C7;
extern VTBL_ENTRY _ZTI7S6282C7[];
extern  VTBL_ENTRY _ZTV7S6282C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C7[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S6282C6;
extern VTBL_ENTRY _ZTI7S6282C6[];
extern  VTBL_ENTRY _ZTV7S6282C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S6282C7;
extern VTBL_ENTRY _ZTI7S6282C7[];
extern  VTBL_ENTRY _ZTV7S6282C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C7[];
extern Class_Descriptor cd_S6282C9;
extern VTBL_ENTRY _ZTI7S6282C9[];
extern  VTBL_ENTRY _ZTV7S6282C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C9[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S6282C10;
extern VTBL_ENTRY _ZTI8S6282C10[];
extern  VTBL_ENTRY _ZTV8S6282C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6282C10[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S6282C4;
extern VTBL_ENTRY _ZTI7S6282C4[];
extern  VTBL_ENTRY _ZTV7S6282C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C4[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S6282C11;
extern VTBL_ENTRY _ZTI8S6282C11[];
extern  VTBL_ENTRY _ZTV8S6282C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6282C11[];
extern Class_Descriptor cd_S6282C3;
extern VTBL_ENTRY _ZTI7S6282C3[];
extern  VTBL_ENTRY _ZTV7S6282C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C3[];
extern Class_Descriptor cd_S6282C16;
extern VTBL_ENTRY _ZTI8S6282C16[];
extern  VTBL_ENTRY _ZTV8S6282C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6282C16[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S6282C15;
extern VTBL_ENTRY _ZTI8S6282C15[];
extern  VTBL_ENTRY _ZTV8S6282C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6282C15[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S6282C7;
extern VTBL_ENTRY _ZTI7S6282C7[];
extern  VTBL_ENTRY _ZTV7S6282C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C7[];
static Base_Class bases_S6282C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6282C14_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
    18, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6282C8_nt,    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
    4, //immediately_derived
  0, 0},
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6282C7,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6282C8_nt,    ABISELECT(48,24), //bcp->offset
    36, //bcp->virtual_function_table_offset
    2, //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
    6, //immediately_derived
  0, 0},
  {&cd_S6282C6,    ABISELECT(40,20), //bcp->offset
    30, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S2121C28,    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
    10, //immediately_derived
  0, 0},
  {&cd_S6282C8_nt,    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
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S6282C7,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S6282C9,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S6282C8_nt,    ABISELECT(56,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
    8, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S2121C38,    ABISELECT(56,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
    13, //immediately_derived
  0, 0},
  {&cd_S6282C10,    ABISELECT(56,28), //bcp->offset
    39, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S6282C8_nt,    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
    10, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6282C4,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S6282C8_nt,    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
    12, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S6282C11,    ABISELECT(64,32), //bcp->offset
    44, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S6282C3,    ABISELECT(24,12), //bcp->offset
    19, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6282C16,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S6282C8_nt,    ABISELECT(104,56), //bcp->offset
    61, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S6282C15,    ABISELECT(88,44), //bcp->offset
    51, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6282C8_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
    19, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S6282C7,    ABISELECT(16,8), //bcp->offset
    14, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S6282C13[];
extern void _ZN8S6282C13D1Ev();
extern void _ZN8S6282C13D0Ev();
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY vtc_S6282C13[] = {
  ABISELECT(104,56),
  ABISELECT(88,44),
  ABISELECT(64,32),
  ABISELECT(56,28),
  ABISELECT(88,44),
  0,
  ABISELECT(40,20),
  0,
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S6282C13[0]),
  (VTBL_ENTRY)&_ZN8S6282C13D1Ev,
  (VTBL_ENTRY)&_ZN8S6282C13D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S6282C13[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  ABISELECT(40,20),
  0,
  0,
  ABISELECT(32,16),
  ABISELECT(64,32),
  ABISELECT(-24,-12),
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S6282C13[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  0,
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S6282C13[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S6282C13[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  0,
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S6282C13[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  0,
  ABISELECT(-64,-32),
  ABISELECT(24,12),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S6282C13[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  ABISELECT(16,12),
  0,
  0,
  0,
  ABISELECT(-88,-44),
  ABISELECT(-88,-44),
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI8S6282C13[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
  0,
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI8S6282C13[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern VTBL_ENTRY _ZTV8S6282C13[];
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C7__A2__8S6282C13[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C7[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C3__8S6282C13[] = {
  ABISELECT(40,20),
  0,
  0,
  ABISELECT(32,16),
  ABISELECT(64,32),
  ABISELECT(-24,-12),
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C3[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C6__7S6282C3__8S6282C13[] = {
  0,
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S6282C3[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV10S6282C8_nt7S6282C6__A1__7S6282C3__8S6282C13[] = {
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S6282C3[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C9__7S6282C3__8S6282C13[] = {
  0,
  0,
  ABISELECT(-88,-44),
  ABISELECT(-88,-44),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S6282C3[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C10__7S6282C3__8S6282C13[] = {
  0,
  ABISELECT(-56,-28),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S6282C3[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C11__7S6282C3__8S6282C13[] = {
  0,
  ABISELECT(-64,-32),
  ABISELECT(24,12),
  ABISELECT(-64,-32),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S6282C3[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C4__8S6282C13[] = {
  ABISELECT(32,16),
  ABISELECT(64,32),
  ABISELECT(-24,-12),
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C6__7S6282C4__8S6282C13[] = {
  0,
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV10S6282C8_nt7S6282C6__A1__7S6282C4__8S6282C13[] = {
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C9__7S6282C4__8S6282C13[] = {
  0,
  0,
  ABISELECT(-88,-44),
  ABISELECT(-88,-44),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C10__7S6282C4__8S6282C13[] = {
  0,
  ABISELECT(-56,-28),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C6__8S6282C13[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C6[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C77S6282C6__8S6282C13[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C7[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C9__8S6282C13[] = {
  ABISELECT(-88,-44),
  ABISELECT(-88,-44),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C9[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C77S6282C9__A1__8S6282C13[] = {
  ABISELECT(-88,-44),
  ABISELECT(-88,-44),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C7[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C10__8S6282C13[] = {
  ABISELECT(-56,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S6282C10[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C11__8S6282C13[] = {
  ABISELECT(-64,-32),
  ABISELECT(24,12),
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S6282C11[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C9__8S6282C11__8S6282C13[] = {
  0,
  0,
  ABISELECT(-88,-44),
  ABISELECT(-88,-44),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S6282C11[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C15__8S6282C13[] = {
  ABISELECT(16,12),
  0,
  0,
  0,
  ABISELECT(-88,-44),
  ABISELECT(-88,-44),
  0,
  (VTBL_ENTRY)&(_ZTI8S6282C15[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C168S6282C15__8S6282C13[] = {
  0,
  0,
  0,
  ABISELECT(-88,-44),
  ABISELECT(-88,-44),
  0,
  (VTBL_ENTRY)&(_ZTI8S6282C16[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV10S6282C8_nt__A1__8S6282C15__8S6282C13[] = {
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S6282C15[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
static  VTT_ENTRY vtt_S6282C13[] = {
  {&(_ZTV8S6282C13[12]),  12,65},
  {&(_tg__ZTV7S6282C7__A2__8S6282C13[4]),  4,5},
  {&(_ZTV8S6282C13[29]),  29,65},
  {&(_ZTV8S6282C13[29]),  29,65},
  {&(_ZTV8S6282C13[35]),  35,65},
  {&(_ZTV8S6282C13[38]),  38,65},
  {&(_ZTV8S6282C13[59]),  59,65},
  {&(_ZTV8S6282C13[43]),  43,65},
  {&(_ZTV8S6282C13[50]),  50,65},
  {&(_ZTV8S6282C13[59]),  59,65},
  {&(_ZTV8S6282C13[64]),  64,65},
  {&(_ZTV8S6282C13[18]),  18,65},
  {&(_tg__ZTV7S6282C3__8S6282C13[10]),  10,11},
  {&(_tg__ZTV7S6282C3__8S6282C13[10]),  10,11},
  {&(_tg__ZTV7S6282C6__7S6282C3__8S6282C13[5]),  5,6},
  {&(_tg__ZTV10S6282C8_nt7S6282C6__A1__7S6282C3__8S6282C13[2]),  2,3},
  {&(_tg__ZTV7S6282C9__7S6282C3__8S6282C13[6]),  6,8},
  {&(_tg__ZTV8S6282C10__7S6282C3__8S6282C13[4]),  4,5},
  {&(_tg__ZTV8S6282C11__7S6282C3__8S6282C13[6]),  6,7},
  {&(_tg__ZTV7S6282C4__8S6282C13[7]),  7,8},
  {&(_tg__ZTV7S6282C6__7S6282C4__8S6282C13[5]),  5,6},
  {&(_tg__ZTV10S6282C8_nt7S6282C6__A1__7S6282C4__8S6282C13[2]),  2,3},
  {&(_tg__ZTV7S6282C9__7S6282C4__8S6282C13[6]),  6,8},
  {&(_tg__ZTV8S6282C10__7S6282C4__8S6282C13[4]),  4,5},
  {&(_tg__ZTV7S6282C6__8S6282C13[4]),  4,5},
  {&(_tg__ZTV7S6282C77S6282C6__8S6282C13[4]),  4,5},
  {&(_tg__ZTV7S6282C9__8S6282C13[4]),  4,6},
  {&(_tg__ZTV7S6282C77S6282C9__A1__8S6282C13[4]),  4,5},
  {&(_tg__ZTV8S6282C10__8S6282C13[3]),  3,4},
  {&(_tg__ZTV8S6282C11__8S6282C13[5]),  5,6},
  {&(_tg__ZTV7S6282C9__8S6282C11__8S6282C13[6]),  6,8},
  {&(_tg__ZTV8S6282C15__8S6282C13[8]),  8,10},
  {&(_tg__ZTV8S6282C168S6282C15__8S6282C13[7]),  7,9},
  {&(_tg__ZTV8S6282C168S6282C15__8S6282C13[7]),  7,9},
  {&(_tg__ZTV8S6282C15__8S6282C13[8]),  8,10},
  {&(_tg__ZTV10S6282C8_nt__A1__8S6282C15__8S6282C13[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S6282C13[];
extern  VTBL_ENTRY _ZTV8S6282C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6282C13[];
Class_Descriptor cd_S6282C13 = {  "S6282C13", // class name
  bases_S6282C13, 24,
  &(vtc_S6282C13[0]), // expected_vtbl_contents
  &(vtt_S6282C13[0]), // expected_vtt_contents
  ABISELECT(112,60), // object size
  NSPAIRA(_ZTI8S6282C13),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S6282C13),65, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6282C13),36, //virtual table table var
  20, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6282C17_nt  : virtual S2121C28 {
  ~S6282C17_nt(); // tgen
  S6282C17_nt(); // tgen
};
//SIG(-1 S6282C17_nt) C1{ VBC2{ m}}


S6282C17_nt ::~S6282C17_nt(){ note_dtor("S6282C17_nt", this);} // tgen
S6282C17_nt ::S6282C17_nt(){ note_ctor("S6282C17_nt", this);} // tgen

//skip512 S6282C17_nt

#else // __cplusplus

extern void _ZN11S6282C17_ntC1Ev();
extern void _ZN11S6282C17_ntD1Ev();
Name_Map name_map_S6282C17_nt[] = {
  NSPAIR(_ZN11S6282C17_ntC1Ev),
  NSPAIR(_ZN11S6282C17_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
static Base_Class bases_S6282C17_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI11S6282C17_nt[];
static  VTBL_ENTRY vtc_S6282C17_nt[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S6282C17_nt[0]),
};
extern VTBL_ENTRY _ZTV11S6282C17_nt[];
static  VTT_ENTRY vtt_S6282C17_nt[] = {
  {&(_ZTV11S6282C17_nt[3]),  3,3},
};
extern VTBL_ENTRY _ZTI11S6282C17_nt[];
VTBL_ENTRY *P__ZTI11S6282C17_nt = _ZTI11S6282C17_nt; 
extern  VTBL_ENTRY _ZTV11S6282C17_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S6282C17_nt[];
Class_Descriptor cd_S6282C17_nt = {  "S6282C17_nt", // class name
  bases_S6282C17_nt, 1,
  &(vtc_S6282C17_nt[0]), // expected_vtbl_contents
  &(vtt_S6282C17_nt[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S6282C17_nt),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV11S6282C17_nt),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT11S6282C17_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  S6282C12  : S6282C13 , S6282C17_nt , S6282C4 {
  virtual  ~S6282C12(); // _ZN8S6282C12D2Ev
  S6282C12(); // tgen
};
//SIG(-1 S6282C12) C1{ BC2{ BC3{ vd m Fi} VBC4{ VBC5{ VBC6{ m} VBC7{ BC8{ VBC6 BC9{ v1} VBC10{ m}} BC9} VBC11{ BC6 BC8 v2} VBC12{ BC9 BC10 VBC6} BC9} VBC13{ VBC6 VBC11 BC9 Fi Fp} Fi:32} VBC14{ BC15{ VBC11 Fi} VBC9 FL:1} BC8} BC16{ VBC6} BC5 vd}


 S6282C12 ::~S6282C12(){ note_dtor("S6282C12", this);}
S6282C12 ::S6282C12(){ note_ctor("S6282C12", this);} // tgen

static void Test_S6282C12()
{
  extern Class_Descriptor cd_S6282C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,18)];
    init_test(&cd_S6282C12, buf);
    S6282C12 *dp, &lv = *(dp=new (buf) S6282C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,68), "sizeof(S6282C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6282C12)");
    check_base_class_offset(lv, (S6282C14_nt*)(S6282C13*), 0, "S6282C12");
    /*is_ambiguous_... S6282C12::S6282C4 */ AMB_check_base_class_offset(lv, (S2121C28*)(S6282C4*), 0, "S6282C12");
    check_base_class_offset(lv, (S2121C28*)(S6282C7*)(S6282C6*), 0, "S6282C12");
    check_base_class_offset(lv, (S2121C28*)(S6282C7*)(S6282C9*), 0, "S6282C12");
    check_base_class_offset(lv, (S2121C28*)(S6282C10*), 0, "S6282C12");
    /*is_ambiguous_... S6282C11::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*)(S6282C11*), 0, "S6282C12");
    /*is_ambiguous_... S6282C13::S6282C7 */ AMB_check_base_class_offset(lv, (S2121C28*)(S6282C7*)(S6282C13*), 0, "S6282C12");
    check_base_class_offset(lv, (S2121C28*)(S6282C17_nt*), 0, "S6282C12");
    /*is_ambiguous_... S6282C12::S6282C4 */ AMB_check_base_class_offset(lv, (S2121C28*)(S6282C4*), 0, "S6282C12");
    check_base_class_offset(lv, (S6282C8_nt*)(S6282C7*)(S6282C6*), ABISELECT(56,28), "S6282C12");
    check_base_class_offset(lv, (S2121C38*)(S6282C7*)(S6282C6*), 0, "S6282C12");
    check_base_class_offset(lv, (S2121C38*)(S6282C7*)(S6282C9*), 0, "S6282C12");
    /*is_ambiguous_... S6282C13::S6282C7 */ AMB_check_base_class_offset(lv, (S2121C38*)(S6282C7*)(S6282C13*), 0, "S6282C12");
    check_base_class_offset(lv, (S6282C7*)(S6282C6*), ABISELECT(56,28), "S6282C12");
    /*is_ambiguous_... S6282C6::S6282C8_nt */ AMB_check_base_class_offset(lv, (S6282C8_nt*)(S6282C6*), ABISELECT(64,32), "S6282C12");
    /*is_ambiguous_... S6282C12::S6282C4 */ AMB_check_base_class_offset(lv, (S6282C6*)(S6282C4*), ABISELECT(56,28), "S6282C12");
    /*is_ambiguous_... S6282C12::S6282C4 */ AMB_check_base_class_offset(lv, (S6282C6*)(S6282C4*), ABISELECT(56,28), "S6282C12");
    /*is_ambiguous_... S6282C9::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*)(S6282C9*), ABISELECT(104,52), "S6282C12");
    check_base_class_offset(lv, (S6282C8_nt*)(S6282C7*)(S6282C9*), ABISELECT(104,52), "S6282C12");
    check_base_class_offset(lv, (S6282C7*)(S6282C9*), ABISELECT(104,52), "S6282C12");
    /*is_ambiguous_... S6282C12::S6282C4 */ AMB_check_base_class_offset(lv, (S6282C9*)(S6282C4*), ABISELECT(104,52), "S6282C12");
    check_base_class_offset(lv, (S6282C9*)(S6282C11*), ABISELECT(104,52), "S6282C12");
    check_base_class_offset(lv, (S6282C9*)(S6282C16*)(S6282C15*), ABISELECT(104,52), "S6282C12");
    /*is_ambiguous_... S6282C12::S6282C4 */ AMB_check_base_class_offset(lv, (S6282C9*)(S6282C4*), ABISELECT(104,52), "S6282C12");
    check_base_class_offset(lv, (S6282C8_nt*)(S6282C10*), ABISELECT(72,36), "S6282C12");
    check_base_class_offset(lv, (S2121C38*)(S6282C10*), ABISELECT(72,36), "S6282C12");
    /*is_ambiguous_... S6282C12::S6282C4 */ AMB_check_base_class_offset(lv, (S6282C10*)(S6282C4*), ABISELECT(72,36), "S6282C12");
    /*is_ambiguous_... S6282C12::S6282C4 */ AMB_check_base_class_offset(lv, (S6282C10*)(S6282C4*), ABISELECT(72,36), "S6282C12");
    /*is_ambiguous_... S6282C12::S6282C4 */ AMB_check_base_class_offset(lv, (S6282C8_nt*)(S6282C4*), ABISELECT(40,20), "S6282C12");
    check_base_class_offset(lv, (S6282C4*)(S6282C3*), ABISELECT(40,20), "S6282C12");
    /*is_ambiguous_... S6282C11::S6282C8_nt */ AMB_check_base_class_offset(lv, (S6282C8_nt*)(S6282C11*), ABISELECT(80,40), "S6282C12");
    check_base_class_offset(lv, (S6282C11*)(S6282C3*), ABISELECT(80,40), "S6282C12");
    check_base_class_offset(lv, (S6282C3*)(S6282C13*), ABISELECT(40,20), "S6282C12");
    check_base_class_offset(lv, (S6282C16*)(S6282C15*), ABISELECT(104,52), "S6282C12");
    /*is_ambiguous_... S6282C15::S6282C8_nt */ AMB_check_base_class_offset(lv, (S6282C8_nt*)(S6282C15*), ABISELECT(120,64), "S6282C12");
    check_base_class_offset(lv, (S6282C15*)(S6282C13*), ABISELECT(104,52), "S6282C12");
    /*is_ambiguous_... S6282C13::S6282C7 */ AMB_check_base_class_offset(lv, (S6282C8_nt*)(S6282C7*)(S6282C13*), ABISELECT(16,8), "S6282C12");
    /*is_ambiguous_... S6282C13::S6282C7 */ AMB_check_base_class_offset(lv, (S6282C7*)(S6282C13*), ABISELECT(16,8), "S6282C12");
    check_base_class_offset(lv, (S6282C13*), 0, "S6282C12");
    check_base_class_offset(lv, (S6282C17_nt*), ABISELECT(24,12), "S6282C12");
    /*is_ambiguous_... S6282C12::S6282C4 */ AMB_check_base_class_offset(lv, (S6282C8_nt*)(S6282C4*), ABISELECT(32,16), "S6282C12");
    /*is_ambiguous_... S6282C12::S6282C4 */ AMB_check_base_class_offset(lv, (S6282C4*), ABISELECT(32,16), "S6282C12");
    test_class_info(&lv, &cd_S6282C12);
    dp->~S6282C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6282C12(Test_S6282C12, "S6282C12", ABISELECT(128,68));

#else // __cplusplus

extern void _ZN8S6282C12C1Ev();
extern void _ZN8S6282C12D2Ev();
Name_Map name_map_S6282C12[] = {
  NSPAIR(_ZN8S6282C12C1Ev),
  NSPAIR(_ZN8S6282C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6282C14_nt;
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
extern  VTBL_ENTRY _ZTV11S6282C14_nt[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S6282C7;
extern VTBL_ENTRY _ZTI7S6282C7[];
extern  VTBL_ENTRY _ZTV7S6282C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C7[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S6282C6;
extern VTBL_ENTRY _ZTI7S6282C6[];
extern  VTBL_ENTRY _ZTV7S6282C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S6282C7;
extern VTBL_ENTRY _ZTI7S6282C7[];
extern  VTBL_ENTRY _ZTV7S6282C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C7[];
extern Class_Descriptor cd_S6282C9;
extern VTBL_ENTRY _ZTI7S6282C9[];
extern  VTBL_ENTRY _ZTV7S6282C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C9[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S6282C10;
extern VTBL_ENTRY _ZTI8S6282C10[];
extern  VTBL_ENTRY _ZTV8S6282C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6282C10[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S6282C4;
extern VTBL_ENTRY _ZTI7S6282C4[];
extern  VTBL_ENTRY _ZTV7S6282C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C4[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S6282C11;
extern VTBL_ENTRY _ZTI8S6282C11[];
extern  VTBL_ENTRY _ZTV8S6282C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6282C11[];
extern Class_Descriptor cd_S6282C3;
extern VTBL_ENTRY _ZTI7S6282C3[];
extern  VTBL_ENTRY _ZTV7S6282C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C3[];
extern Class_Descriptor cd_S6282C16;
extern VTBL_ENTRY _ZTI8S6282C16[];
extern  VTBL_ENTRY _ZTV8S6282C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6282C16[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S6282C15;
extern VTBL_ENTRY _ZTI8S6282C15[];
extern  VTBL_ENTRY _ZTV8S6282C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6282C15[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S6282C7;
extern VTBL_ENTRY _ZTI7S6282C7[];
extern  VTBL_ENTRY _ZTV7S6282C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C7[];
extern Class_Descriptor cd_S6282C13;
extern VTBL_ENTRY _ZTI8S6282C13[];
extern  VTBL_ENTRY _ZTV8S6282C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6282C13[];
extern Class_Descriptor cd_S6282C17_nt;
extern VTBL_ENTRY _ZTI11S6282C17_nt[];
extern  VTBL_ENTRY _ZTV11S6282C17_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S6282C17_nt[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S6282C4;
extern VTBL_ENTRY _ZTI7S6282C4[];
extern  VTBL_ENTRY _ZTV7S6282C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C4[];
static Base_Class bases_S6282C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6282C14_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
    18, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6282C8_nt,    ABISELECT(56,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
    4, //immediately_derived
  0, 0},
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6282C7,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6282C8_nt,    ABISELECT(64,32), //bcp->offset
    47, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6282C6,    ABISELECT(56,28), //bcp->offset
    41, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S2121C28,    ABISELECT(104,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
    10, //immediately_derived
  0, 0},
  {&cd_S6282C8_nt,    ABISELECT(104,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
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S6282C7,    ABISELECT(104,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S6282C9,    ABISELECT(104,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S6282C8_nt,    ABISELECT(72,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
    8, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S2121C38,    ABISELECT(72,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
    13, //immediately_derived
  0, 0},
  {&cd_S6282C10,    ABISELECT(72,36), //bcp->offset
    50, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S6282C8_nt,    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
    10, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6282C4,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S6282C8_nt,    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
    12, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S6282C11,    ABISELECT(80,40), //bcp->offset
    55, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    49, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S6282C3,    ABISELECT(40,20), //bcp->offset
    30, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S6282C16,    ABISELECT(104,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    52, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S6282C8_nt,    ABISELECT(120,64), //bcp->offset
    72, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S6282C15,    ABISELECT(104,52), //bcp->offset
    62, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    51, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S6282C8_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
    19, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S6282C7,    ABISELECT(16,8), //bcp->offset
    14, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S6282C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6282C17_nt,    ABISELECT(24,12), //bcp->offset
    19, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6282C8_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
    23, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S6282C4,    ABISELECT(32,16), //bcp->offset
    22, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S6282C12[];
extern void _ZN8S6282C12D1Ev();
extern void _ZN8S6282C12D0Ev();
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY vtc_S6282C12[] = {
  ABISELECT(120,64),
  ABISELECT(104,52),
  ABISELECT(80,40),
  ABISELECT(72,36),
  ABISELECT(104,52),
  0,
  ABISELECT(56,28),
  0,
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S6282C12[0]),
  (VTBL_ENTRY)&_ZN8S6282C12D1Ev,
  (VTBL_ENTRY)&_ZN8S6282C12D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S6282C12[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S6282C12[0]),
  ABISELECT(40,20),
  ABISELECT(72,36),
  ABISELECT(-32,-16),
  ABISELECT(24,12),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S6282C12[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  ABISELECT(40,20),
  0,
  0,
  ABISELECT(32,16),
  ABISELECT(64,32),
  ABISELECT(-40,-20),
  ABISELECT(16,8),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S6282C12[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  0,
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S6282C12[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S6282C12[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  0,
  ABISELECT(-72,-36),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S6282C12[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  0,
  ABISELECT(-80,-40),
  ABISELECT(24,12),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S6282C12[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  ABISELECT(16,12),
  0,
  0,
  0,
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI8S6282C12[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
  0,
  ABISELECT(-120,-64),
  (VTBL_ENTRY)&(_ZTI8S6282C12[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern VTBL_ENTRY _ZTV8S6282C12[];
extern void _ZN8S6282C13D1Ev();
extern void _ZN8S6282C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C13__8S6282C12[] = {
  ABISELECT(120,64),
  ABISELECT(104,52),
  ABISELECT(80,40),
  ABISELECT(72,36),
  ABISELECT(104,52),
  0,
  ABISELECT(56,28),
  0,
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S6282C13[0]),
  (VTBL_ENTRY)&_ZN8S6282C13D1Ev,
  (VTBL_ENTRY)&_ZN8S6282C13D0Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C78S6282C13__A2__8S6282C12[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C7[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C3__8S6282C13__8S6282C12[] = {
  ABISELECT(40,20),
  0,
  0,
  ABISELECT(32,16),
  ABISELECT(64,32),
  ABISELECT(-40,-20),
  ABISELECT(16,8),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S6282C13[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C6__8S6282C13__8S6282C12[] = {
  0,
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S6282C13[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV10S6282C8_nt7S6282C6__A1__8S6282C13__8S6282C12[] = {
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S6282C13[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C15__8S6282C13__8S6282C12[] = {
  ABISELECT(16,12),
  0,
  0,
  0,
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI8S6282C13[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C10__8S6282C13__8S6282C12[] = {
  0,
  ABISELECT(-72,-36),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S6282C13[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C11__8S6282C13__8S6282C12[] = {
  0,
  ABISELECT(-80,-40),
  ABISELECT(24,12),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S6282C13[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV10S6282C8_nt__A6__8S6282C13__8S6282C12[] = {
  0,
  ABISELECT(-120,-64),
  (VTBL_ENTRY)&(_ZTI8S6282C13[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C7__A2__8S6282C13__8S6282C12[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S6282C13[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
static  VTBL_ENTRY _tg__ZTV11S6282C17_nt__8S6282C12[] = {
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI11S6282C17_nt[0]),
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C4__A__8S6282C12[] = {
  ABISELECT(40,20),
  ABISELECT(72,36),
  ABISELECT(-32,-16),
  ABISELECT(24,12),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C6__7S6282C4__A__8S6282C12[] = {
  0,
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV10S6282C8_nt7S6282C6__A1__7S6282C4__A__8S6282C12[] = {
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C9__7S6282C4__A__8S6282C12[] = {
  0,
  0,
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C10__7S6282C4__A__8S6282C12[] = {
  0,
  ABISELECT(-72,-36),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C3__8S6282C12[] = {
  ABISELECT(40,20),
  0,
  0,
  ABISELECT(32,16),
  ABISELECT(64,32),
  ABISELECT(-40,-20),
  ABISELECT(16,8),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C3[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C6__7S6282C3__8S6282C12[] = {
  0,
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S6282C3[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV10S6282C8_nt7S6282C6__A1__7S6282C3__8S6282C12[] = {
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S6282C3[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C9__7S6282C3__8S6282C12[] = {
  0,
  0,
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S6282C3[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C10__7S6282C3__8S6282C12[] = {
  0,
  ABISELECT(-72,-36),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S6282C3[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C11__7S6282C3__8S6282C12[] = {
  0,
  ABISELECT(-80,-40),
  ABISELECT(24,12),
  ABISELECT(-80,-40),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S6282C3[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C4__8S6282C12[] = {
  ABISELECT(32,16),
  ABISELECT(64,32),
  ABISELECT(-40,-20),
  ABISELECT(16,8),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C6__7S6282C4__8S6282C12[] = {
  0,
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV10S6282C8_nt7S6282C6__A1__7S6282C4__8S6282C12[] = {
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C9__7S6282C4__8S6282C12[] = {
  0,
  0,
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C10__7S6282C4__8S6282C12[] = {
  0,
  ABISELECT(-72,-36),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C6__8S6282C12[] = {
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C6[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C77S6282C6__8S6282C12[] = {
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C7[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C9__8S6282C12[] = {
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C9[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C77S6282C9__A1__8S6282C12[] = {
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C7[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C10__8S6282C12[] = {
  ABISELECT(-72,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S6282C10[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C11__8S6282C12[] = {
  ABISELECT(-80,-40),
  ABISELECT(24,12),
  ABISELECT(-80,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S6282C11[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C9__8S6282C11__8S6282C12[] = {
  0,
  0,
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S6282C11[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C15__8S6282C12[] = {
  ABISELECT(16,12),
  0,
  0,
  0,
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  0,
  (VTBL_ENTRY)&(_ZTI8S6282C15[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C168S6282C15__8S6282C12[] = {
  0,
  0,
  0,
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  0,
  (VTBL_ENTRY)&(_ZTI8S6282C16[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV10S6282C8_nt__A1__8S6282C15__8S6282C12[] = {
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S6282C15[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
static  VTT_ENTRY vtt_S6282C12[] = {
  {&(_ZTV8S6282C12[12]),  12,76},
  {&(_tg__ZTV8S6282C13__8S6282C12[12]),  12,14},
  {&(_tg__ZTV7S6282C78S6282C13__A2__8S6282C12[4]),  4,5},
  {&(_tg__ZTV7S6282C3__8S6282C13__8S6282C12[10]),  10,11},
  {&(_tg__ZTV7S6282C3__8S6282C13__8S6282C12[10]),  10,11},
  {&(_tg__ZTV7S6282C6__8S6282C13__8S6282C12[5]),  5,6},
  {&(_tg__ZTV10S6282C8_nt7S6282C6__A1__8S6282C13__8S6282C12[2]),  2,3},
  {&(_tg__ZTV8S6282C15__8S6282C13__8S6282C12[8]),  8,10},
  {&(_tg__ZTV8S6282C10__8S6282C13__8S6282C12[4]),  4,5},
  {&(_tg__ZTV8S6282C11__8S6282C13__8S6282C12[6]),  6,7},
  {&(_tg__ZTV8S6282C15__8S6282C13__8S6282C12[8]),  8,10},
  {&(_tg__ZTV10S6282C8_nt__A6__8S6282C13__8S6282C12[3]),  3,4},
  {&(_tg__ZTV7S6282C7__A2__8S6282C13__8S6282C12[4]),  4,5},
  {&(_tg__ZTV11S6282C17_nt__8S6282C12[3]),  3,3},
  {&(_tg__ZTV7S6282C4__A__8S6282C12[7]),  7,8},
  {&(_tg__ZTV7S6282C6__7S6282C4__A__8S6282C12[5]),  5,6},
  {&(_tg__ZTV10S6282C8_nt7S6282C6__A1__7S6282C4__A__8S6282C12[2]),  2,3},
  {&(_tg__ZTV7S6282C9__7S6282C4__A__8S6282C12[6]),  6,8},
  {&(_tg__ZTV8S6282C10__7S6282C4__A__8S6282C12[4]),  4,5},
  {&(_ZTV8S6282C12[40]),  40,76},
  {&(_ZTV8S6282C12[40]),  40,76},
  {&(_ZTV8S6282C12[46]),  46,76},
  {&(_ZTV8S6282C12[49]),  49,76},
  {&(_ZTV8S6282C12[70]),  70,76},
  {&(_ZTV8S6282C12[54]),  54,76},
  {&(_ZTV8S6282C12[61]),  61,76},
  {&(_ZTV8S6282C12[70]),  70,76},
  {&(_ZTV8S6282C12[75]),  75,76},
  {&(_ZTV8S6282C12[18]),  18,76},
  {&(_ZTV8S6282C12[22]),  22,76},
  {&(_ZTV8S6282C12[29]),  29,76},
  {&(_tg__ZTV7S6282C3__8S6282C12[10]),  10,11},
  {&(_tg__ZTV7S6282C3__8S6282C12[10]),  10,11},
  {&(_tg__ZTV7S6282C6__7S6282C3__8S6282C12[5]),  5,6},
  {&(_tg__ZTV10S6282C8_nt7S6282C6__A1__7S6282C3__8S6282C12[2]),  2,3},
  {&(_tg__ZTV7S6282C9__7S6282C3__8S6282C12[6]),  6,8},
  {&(_tg__ZTV8S6282C10__7S6282C3__8S6282C12[4]),  4,5},
  {&(_tg__ZTV8S6282C11__7S6282C3__8S6282C12[6]),  6,7},
  {&(_tg__ZTV7S6282C4__8S6282C12[7]),  7,8},
  {&(_tg__ZTV7S6282C6__7S6282C4__8S6282C12[5]),  5,6},
  {&(_tg__ZTV10S6282C8_nt7S6282C6__A1__7S6282C4__8S6282C12[2]),  2,3},
  {&(_tg__ZTV7S6282C9__7S6282C4__8S6282C12[6]),  6,8},
  {&(_tg__ZTV8S6282C10__7S6282C4__8S6282C12[4]),  4,5},
  {&(_tg__ZTV7S6282C6__8S6282C12[4]),  4,5},
  {&(_tg__ZTV7S6282C77S6282C6__8S6282C12[4]),  4,5},
  {&(_tg__ZTV7S6282C9__8S6282C12[4]),  4,6},
  {&(_tg__ZTV7S6282C77S6282C9__A1__8S6282C12[4]),  4,5},
  {&(_tg__ZTV8S6282C10__8S6282C12[3]),  3,4},
  {&(_tg__ZTV8S6282C11__8S6282C12[5]),  5,6},
  {&(_tg__ZTV7S6282C9__8S6282C11__8S6282C12[6]),  6,8},
  {&(_tg__ZTV8S6282C15__8S6282C12[8]),  8,10},
  {&(_tg__ZTV8S6282C168S6282C15__8S6282C12[7]),  7,9},
  {&(_tg__ZTV8S6282C168S6282C15__8S6282C12[7]),  7,9},
  {&(_tg__ZTV8S6282C15__8S6282C12[8]),  8,10},
  {&(_tg__ZTV10S6282C8_nt__A1__8S6282C15__8S6282C12[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S6282C12[];
extern  VTBL_ENTRY _ZTV8S6282C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6282C12[];
Class_Descriptor cd_S6282C12 = {  "S6282C12", // class name
  bases_S6282C12, 28,
  &(vtc_S6282C12[0]), // expected_vtbl_contents
  &(vtt_S6282C12[0]), // expected_vtt_contents
  ABISELECT(128,68), // object size
  NSPAIRA(_ZTI8S6282C12),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S6282C12),76, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6282C12),55, //virtual table table var
  24, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6282C1  : S2121C38 , virtual S6282C3 , virtual S6282C12 , S6282C16 {
  void *s6282c1f0;
  virtual  ~S6282C1(); // _ZN7S6282C1D2Ev
  S6282C1(); // tgen
};
//SIG(1 S6282C1) C1{ BC2{ m} VBC3{ VBC4{ VBC5{ m} VBC6{ BC7{ VBC5 BC8{ v1} VBC2} BC8} VBC9{ BC5 BC7 v2} VBC10{ BC8 BC2 VBC5} BC8} VBC11{ VBC5 VBC9 BC8 Fi Fp} Fi:32} VBC12{ BC13{ BC14{ vd m Fi} VBC3 VBC15{ BC16{ VBC9 Fi} VBC8 FL:1} BC7} BC17{ VBC5} BC4 vd} BC16 vd Fp}


 S6282C1 ::~S6282C1(){ note_dtor("S6282C1", this);}
S6282C1 ::S6282C1(){ note_ctor("S6282C1", this);} // tgen

static void Test_S6282C1()
{
  extern Class_Descriptor cd_S6282C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,22)];
    init_test(&cd_S6282C1, buf);
    S6282C1 *dp, &lv = *(dp=new (buf) S6282C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,84), "sizeof(S6282C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6282C1)");
    /*is_ambiguous_... S6282C1::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*), 0, "S6282C1");
    /*is_ambiguous_... S6282C1::S6282C4 */ AMB_check_base_class_offset(lv, (S2121C28*)(S6282C4*), 0, "S6282C1");
    check_base_class_offset(lv, (S2121C28*)(S6282C7*)(S6282C6*), 0, "S6282C1");
    check_base_class_offset(lv, (S2121C28*)(S6282C7*)(S6282C9*), 0, "S6282C1");
    check_base_class_offset(lv, (S2121C28*)(S6282C10*), 0, "S6282C1");
    /*is_ambiguous_... S6282C11::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*)(S6282C11*), 0, "S6282C1");
    /*is_ambiguous_... S6282C13::S6282C7 */ AMB_check_base_class_offset(lv, (S2121C28*)(S6282C7*)(S6282C13*)(S6282C12*), 0, "S6282C1");
    check_base_class_offset(lv, (S2121C28*)(S6282C17_nt*)(S6282C12*), 0, "S6282C1");
    /*is_ambiguous_... S6282C12::S6282C4 */ AMB_check_base_class_offset(lv, (S2121C28*)(S6282C4*)(S6282C12*), 0, "S6282C1");
    check_base_class_offset(lv, (S6282C8_nt*)(S6282C7*)(S6282C6*), ABISELECT(40,20), "S6282C1");
    check_base_class_offset(lv, (S2121C38*)(S6282C7*)(S6282C6*), ABISELECT(56,28), "S6282C1");
    check_base_class_offset(lv, (S2121C38*)(S6282C7*)(S6282C9*), ABISELECT(56,28), "S6282C1");
    /*is_ambiguous_... S6282C13::S6282C7 */ AMB_check_base_class_offset(lv, (S2121C38*)(S6282C7*)(S6282C13*)(S6282C12*), ABISELECT(56,28), "S6282C1");
    check_base_class_offset(lv, (S6282C7*)(S6282C6*), ABISELECT(40,20), "S6282C1");
    /*is_ambiguous_... S6282C6::S6282C8_nt */ AMB_check_base_class_offset(lv, (S6282C8_nt*)(S6282C6*), ABISELECT(48,24), "S6282C1");
    /*is_ambiguous_... S6282C1::S6282C4 */ AMB_check_base_class_offset(lv, (S6282C6*)(S6282C4*), ABISELECT(40,20), "S6282C1");
    /*is_ambiguous_... S6282C12::S6282C4 */ AMB_check_base_class_offset(lv, (S6282C6*)(S6282C4*)(S6282C12*), ABISELECT(40,20), "S6282C1");
    /*is_ambiguous_... S6282C9::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*)(S6282C9*), ABISELECT(136,68), "S6282C1");
    check_base_class_offset(lv, (S6282C8_nt*)(S6282C7*)(S6282C9*), ABISELECT(136,68), "S6282C1");
    check_base_class_offset(lv, (S6282C7*)(S6282C9*), ABISELECT(136,68), "S6282C1");
    /*is_ambiguous_... S6282C1::S6282C4 */ AMB_check_base_class_offset(lv, (S6282C9*)(S6282C4*), ABISELECT(136,68), "S6282C1");
    check_base_class_offset(lv, (S6282C9*)(S6282C11*), ABISELECT(136,68), "S6282C1");
    check_base_class_offset(lv, (S6282C9*)(S6282C16*)(S6282C15*), ABISELECT(136,68), "S6282C1");
    /*is_ambiguous_... S6282C12::S6282C4 */ AMB_check_base_class_offset(lv, (S6282C9*)(S6282C4*)(S6282C12*), ABISELECT(136,68), "S6282C1");
    /*is_ambiguous_... S6282C1::S6282C16 */ AMB_check_base_class_offset(lv, (S6282C9*)(S6282C16*), ABISELECT(136,68), "S6282C1");
    check_base_class_offset(lv, (S6282C8_nt*)(S6282C10*), ABISELECT(64,32), "S6282C1");
    check_base_class_offset(lv, (S2121C38*)(S6282C10*), ABISELECT(64,32), "S6282C1");
    /*is_ambiguous_... S6282C1::S6282C4 */ AMB_check_base_class_offset(lv, (S6282C10*)(S6282C4*), ABISELECT(64,32), "S6282C1");
    /*is_ambiguous_... S6282C12::S6282C4 */ AMB_check_base_class_offset(lv, (S6282C10*)(S6282C4*)(S6282C12*), ABISELECT(64,32), "S6282C1");
    /*is_ambiguous_... S6282C1::S6282C4 */ AMB_check_base_class_offset(lv, (S6282C8_nt*)(S6282C4*), ABISELECT(24,12), "S6282C1");
    check_base_class_offset(lv, (S6282C4*)(S6282C3*), ABISELECT(24,12), "S6282C1");
    /*is_ambiguous_... S6282C11::S6282C8_nt */ AMB_check_base_class_offset(lv, (S6282C8_nt*)(S6282C11*), ABISELECT(72,36), "S6282C1");
    check_base_class_offset(lv, (S6282C11*)(S6282C3*), ABISELECT(72,36), "S6282C1");
    check_base_class_offset(lv, (S6282C3*), ABISELECT(24,12), "S6282C1");
    check_base_class_offset(lv, (S6282C3*)(S6282C13*)(S6282C12*), ABISELECT(24,12), "S6282C1");
    check_base_class_offset(lv, (S6282C14_nt*)(S6282C13*)(S6282C12*), ABISELECT(96,48), "S6282C1");
    check_base_class_offset(lv, (S6282C16*)(S6282C15*), ABISELECT(136,68), "S6282C1");
    /*is_ambiguous_... S6282C15::S6282C8_nt */ AMB_check_base_class_offset(lv, (S6282C8_nt*)(S6282C15*), ABISELECT(152,80), "S6282C1");
    check_base_class_offset(lv, (S6282C15*)(S6282C13*)(S6282C12*), ABISELECT(136,68), "S6282C1");
    /*is_ambiguous_... S6282C13::S6282C7 */ AMB_check_base_class_offset(lv, (S6282C8_nt*)(S6282C7*)(S6282C13*)(S6282C12*), ABISELECT(112,56), "S6282C1");
    /*is_ambiguous_... S6282C13::S6282C7 */ AMB_check_base_class_offset(lv, (S6282C7*)(S6282C13*)(S6282C12*), ABISELECT(112,56), "S6282C1");
    check_base_class_offset(lv, (S6282C13*)(S6282C12*), ABISELECT(96,48), "S6282C1");
    check_base_class_offset(lv, (S6282C17_nt*)(S6282C12*), ABISELECT(120,60), "S6282C1");
    /*is_ambiguous_... S6282C12::S6282C4 */ AMB_check_base_class_offset(lv, (S6282C8_nt*)(S6282C4*)(S6282C12*), ABISELECT(128,64), "S6282C1");
    /*is_ambiguous_... S6282C12::S6282C4 */ AMB_check_base_class_offset(lv, (S6282C4*)(S6282C12*), ABISELECT(128,64), "S6282C1");
    check_base_class_offset(lv, (S6282C12*), ABISELECT(96,48), "S6282C1");
    /*is_ambiguous_... S6282C1::S6282C16 */ AMB_check_base_class_offset(lv, (S6282C16*), 0, "S6282C1");
    check_field_offset(lv, s6282c1f0, ABISELECT(16,8), "S6282C1.s6282c1f0");
    test_class_info(&lv, &cd_S6282C1);
    dp->~S6282C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6282C1(Test_S6282C1, "S6282C1", ABISELECT(160,84));

#else // __cplusplus

extern void _ZN7S6282C1C1Ev();
extern void _ZN7S6282C1D2Ev();
Name_Map name_map_S6282C1[] = {
  NSPAIR(_ZN7S6282C1C1Ev),
  NSPAIR(_ZN7S6282C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S6282C7;
extern VTBL_ENTRY _ZTI7S6282C7[];
extern  VTBL_ENTRY _ZTV7S6282C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C7[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S6282C6;
extern VTBL_ENTRY _ZTI7S6282C6[];
extern  VTBL_ENTRY _ZTV7S6282C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S6282C7;
extern VTBL_ENTRY _ZTI7S6282C7[];
extern  VTBL_ENTRY _ZTV7S6282C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C7[];
extern Class_Descriptor cd_S6282C9;
extern VTBL_ENTRY _ZTI7S6282C9[];
extern  VTBL_ENTRY _ZTV7S6282C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C9[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S6282C10;
extern VTBL_ENTRY _ZTI8S6282C10[];
extern  VTBL_ENTRY _ZTV8S6282C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6282C10[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S6282C4;
extern VTBL_ENTRY _ZTI7S6282C4[];
extern  VTBL_ENTRY _ZTV7S6282C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C4[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S6282C11;
extern VTBL_ENTRY _ZTI8S6282C11[];
extern  VTBL_ENTRY _ZTV8S6282C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6282C11[];
extern Class_Descriptor cd_S6282C3;
extern VTBL_ENTRY _ZTI7S6282C3[];
extern  VTBL_ENTRY _ZTV7S6282C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C3[];
extern Class_Descriptor cd_S6282C14_nt;
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
extern  VTBL_ENTRY _ZTV11S6282C14_nt[];
extern Class_Descriptor cd_S6282C16;
extern VTBL_ENTRY _ZTI8S6282C16[];
extern  VTBL_ENTRY _ZTV8S6282C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6282C16[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S6282C15;
extern VTBL_ENTRY _ZTI8S6282C15[];
extern  VTBL_ENTRY _ZTV8S6282C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6282C15[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S6282C7;
extern VTBL_ENTRY _ZTI7S6282C7[];
extern  VTBL_ENTRY _ZTV7S6282C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C7[];
extern Class_Descriptor cd_S6282C13;
extern VTBL_ENTRY _ZTI8S6282C13[];
extern  VTBL_ENTRY _ZTV8S6282C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6282C13[];
extern Class_Descriptor cd_S6282C17_nt;
extern VTBL_ENTRY _ZTI11S6282C17_nt[];
extern  VTBL_ENTRY _ZTV11S6282C17_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S6282C17_nt[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S6282C4;
extern VTBL_ENTRY _ZTI7S6282C4[];
extern  VTBL_ENTRY _ZTV7S6282C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C4[];
extern Class_Descriptor cd_S6282C12;
extern VTBL_ENTRY _ZTI8S6282C12[];
extern  VTBL_ENTRY _ZTV8S6282C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6282C12[];
extern Class_Descriptor cd_S6282C16;
extern VTBL_ENTRY _ZTI8S6282C16[];
extern  VTBL_ENTRY _ZTV8S6282C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6282C16[];
static Base_Class bases_S6282C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6282C8_nt,    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
    4, //immediately_derived
  0, 0},
  {&cd_S2121C38,    ABISELECT(56,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
    4, //immediately_derived
  0, 1},
  {&cd_S6282C7,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6282C8_nt,    ABISELECT(48,24), //bcp->offset
    36, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6282C6,    ABISELECT(40,20), //bcp->offset
    30, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S2121C28,    ABISELECT(136,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
    10, //immediately_derived
  0, 0},
  {&cd_S6282C8_nt,    ABISELECT(136,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
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S6282C7,    ABISELECT(136,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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
    10, //immediately_derived
  0, 0},
  {&cd_S6282C9,    ABISELECT(136,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S6282C8_nt,    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
    8, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S2121C38,    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
    13, //immediately_derived
  0, 0},
  {&cd_S6282C10,    ABISELECT(64,32), //bcp->offset
    39, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S6282C8_nt,    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
    10, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6282C4,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S6282C8_nt,    ABISELECT(72,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
    12, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S6282C11,    ABISELECT(72,36), //bcp->offset
    44, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S6282C3,    ABISELECT(24,12), //bcp->offset
    19, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6282C14_nt,    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
    18, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S6282C16,    ABISELECT(136,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    68, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S6282C8_nt,    ABISELECT(152,80), //bcp->offset
    93, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S6282C15,    ABISELECT(136,68), //bcp->offset
    83, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    67, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S6282C8_nt,    ABISELECT(112,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
    19, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S6282C7,    ABISELECT(112,56), //bcp->offset
    67, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S6282C13,    ABISELECT(96,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S6282C17_nt,    ABISELECT(120,60), //bcp->offset
    72, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    49, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S6282C8_nt,    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
    23, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S6282C4,    ABISELECT(128,64), //bcp->offset
    75, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S6282C12,    ABISELECT(96,48), //bcp->offset
    51, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6282C16,    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
    26, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6282C1[];
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
extern void _ZN7S6282C1D1Ev();
extern void _ZN7S6282C1D0Ev();
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN10S6282C8_nt2v1Ev();
extern void ABISELECT(_ZTv0_n104_N7S6282C1D1Ev,_ZTv0_n52_N7S6282C1D1Ev)();
extern void ABISELECT(_ZThn96_N7S6282C1D1Ev,_ZThn48_N7S6282C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N7S6282C1D0Ev,_ZTv0_n52_N7S6282C1D0Ev)();
extern void ABISELECT(_ZThn96_N7S6282C1D0Ev,_ZThn48_N7S6282C1D0Ev)() __attribute__((weak));
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY vtc_S6282C1[] = {
  ABISELECT(152,80),
  ABISELECT(136,68),
  ABISELECT(96,48),
  ABISELECT(72,36),
  ABISELECT(64,32),
  ABISELECT(40,20),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(136,68),
  ABISELECT(136,68),
  ABISELECT(136,68),
  ABISELECT(56,28),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C1[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
  (VTBL_ENTRY)&_ZN7S6282C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6282C1D0Ev,
  ABISELECT(48,24),
  0,
  0,
  ABISELECT(40,20),
  ABISELECT(112,56),
  ABISELECT(32,16),
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S6282C1[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  0,
  ABISELECT(16,8),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S6282C1[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S6282C1[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  0,
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S6282C1[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(64,32),
  ABISELECT(-72,-36),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI7S6282C1[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  ABISELECT(16,8),
  ABISELECT(-96,-48),
  ABISELECT(56,32),
  ABISELECT(40,20),
  ABISELECT(-24,-12),
  ABISELECT(-32,-16),
  ABISELECT(40,20),
  ABISELECT(-40,-20),
  ABISELECT(-56,-28),
  ABISELECT(-96,-48),
  ABISELECT(-72,-36),
  ABISELECT(-72,-36),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI7S6282C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S6282C1D1Ev,_ZTv0_n52_N7S6282C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S6282C1D0Ev,_ZTv0_n52_N7S6282C1D0Ev),
  ABISELECT(-56,-28),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI7S6282C1[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI7S6282C1[0]),
  ABISELECT(-64,-32),
  ABISELECT(8,4),
  ABISELECT(-72,-36),
  ABISELECT(-88,-44),
  ABISELECT(-128,-64),
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI7S6282C1[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  ABISELECT(16,12),
  0,
  0,
  0,
  ABISELECT(-80,-40),
  ABISELECT(-136,-68),
  ABISELECT(-136,-68),
  (VTBL_ENTRY)&(_ZTI7S6282C1[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
  0,
  ABISELECT(-152,-80),
  (VTBL_ENTRY)&(_ZTI7S6282C1[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern VTBL_ENTRY _ZTV7S6282C1[];
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C16__A1__7S6282C1[] = {
  ABISELECT(136,68),
  ABISELECT(136,68),
  ABISELECT(136,68),
  ABISELECT(56,28),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S6282C16[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C9__8S6282C16__A1__7S6282C1[] = {
  0,
  0,
  ABISELECT(-80,-40),
  ABISELECT(-136,-68),
  ABISELECT(-136,-68),
  (VTBL_ENTRY)&(_ZTI8S6282C16[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C3__7S6282C1[] = {
  ABISELECT(48,24),
  0,
  0,
  ABISELECT(40,20),
  ABISELECT(112,56),
  ABISELECT(32,16),
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C3[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C6__7S6282C3__7S6282C1[] = {
  0,
  ABISELECT(16,8),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S6282C3[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV10S6282C8_nt7S6282C6__A1__7S6282C3__7S6282C1[] = {
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S6282C3[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C9__7S6282C3__7S6282C1[] = {
  0,
  0,
  ABISELECT(-80,-40),
  ABISELECT(-136,-68),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI7S6282C3[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C10__7S6282C3__7S6282C1[] = {
  0,
  ABISELECT(-64,-32),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S6282C3[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C11__7S6282C3__7S6282C1[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(64,32),
  ABISELECT(-72,-36),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S6282C3[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C4__7S6282C1[] = {
  ABISELECT(40,20),
  ABISELECT(112,56),
  ABISELECT(32,16),
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C6__7S6282C4__7S6282C1[] = {
  0,
  ABISELECT(16,8),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV10S6282C8_nt7S6282C6__A1__7S6282C4__7S6282C1[] = {
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C9__7S6282C4__7S6282C1[] = {
  0,
  0,
  ABISELECT(-80,-40),
  ABISELECT(-136,-68),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C10__7S6282C4__7S6282C1[] = {
  0,
  ABISELECT(-64,-32),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C6__7S6282C1[] = {
  ABISELECT(16,8),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C6[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C77S6282C6__7S6282C1[] = {
  ABISELECT(16,8),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C7[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C9__7S6282C1[] = {
  ABISELECT(-80,-40),
  ABISELECT(-136,-68),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C9[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C77S6282C9__A1__7S6282C1[] = {
  ABISELECT(-80,-40),
  ABISELECT(-136,-68),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C7[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C10__7S6282C1[] = {
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S6282C10[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C11__7S6282C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(64,32),
  ABISELECT(-72,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S6282C11[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C9__8S6282C11__7S6282C1[] = {
  0,
  0,
  ABISELECT(-80,-40),
  ABISELECT(-136,-68),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S6282C11[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern void _ZN8S6282C12D1Ev();
extern void _ZN8S6282C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C12__7S6282C1[] = {
  ABISELECT(56,32),
  ABISELECT(40,20),
  ABISELECT(-24,-12),
  ABISELECT(-32,-16),
  ABISELECT(40,20),
  ABISELECT(-40,-20),
  ABISELECT(-56,-28),
  ABISELECT(-96,-48),
  ABISELECT(-72,-36),
  ABISELECT(-72,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S6282C12[0]),
  (VTBL_ENTRY)&_ZN8S6282C12D1Ev,
  (VTBL_ENTRY)&_ZN8S6282C12D0Ev,
};
extern void _ZN8S6282C13D1Ev();
extern void _ZN8S6282C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C138S6282C12__7S6282C1[] = {
  ABISELECT(56,32),
  ABISELECT(40,20),
  ABISELECT(-24,-12),
  ABISELECT(-32,-16),
  ABISELECT(40,20),
  ABISELECT(-40,-20),
  ABISELECT(-56,-28),
  ABISELECT(-96,-48),
  ABISELECT(-72,-36),
  ABISELECT(-72,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S6282C13[0]),
  (VTBL_ENTRY)&_ZN8S6282C13D1Ev,
  (VTBL_ENTRY)&_ZN8S6282C13D0Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C78S6282C138S6282C12__A2__7S6282C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(-112,-56),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C7[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C3__8S6282C138S6282C12__7S6282C1[] = {
  ABISELECT(48,24),
  0,
  0,
  ABISELECT(40,20),
  ABISELECT(112,56),
  ABISELECT(32,16),
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  ABISELECT(72,36),
  (VTBL_ENTRY)&(_ZTI8S6282C13[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C6__8S6282C138S6282C12__7S6282C1[] = {
  0,
  ABISELECT(16,8),
  ABISELECT(-40,-20),
  ABISELECT(56,28),
  (VTBL_ENTRY)&(_ZTI8S6282C13[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV10S6282C8_nt7S6282C6__A1__8S6282C138S6282C12__7S6282C1[] = {
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI8S6282C13[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C15__8S6282C138S6282C12__7S6282C1[] = {
  ABISELECT(16,12),
  0,
  0,
  0,
  ABISELECT(-80,-40),
  ABISELECT(-136,-68),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S6282C13[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C10__8S6282C138S6282C12__7S6282C1[] = {
  0,
  ABISELECT(-64,-32),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S6282C13[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C11__8S6282C138S6282C12__7S6282C1[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(64,32),
  ABISELECT(-72,-36),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI8S6282C13[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV10S6282C8_nt__A6__8S6282C138S6282C12__7S6282C1[] = {
  0,
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S6282C13[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C7__A2__8S6282C138S6282C12__7S6282C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(-112,-56),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S6282C13[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
static  VTBL_ENTRY _tg__ZTV11S6282C17_nt8S6282C12__7S6282C1[] = {
  ABISELECT(-120,-60),
  0,
  (VTBL_ENTRY)&(_ZTI11S6282C17_nt[0]),
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C48S6282C12__A1__7S6282C1[] = {
  ABISELECT(-64,-32),
  ABISELECT(8,4),
  ABISELECT(-72,-36),
  ABISELECT(-88,-44),
  ABISELECT(-128,-64),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C6__7S6282C48S6282C12__A1__7S6282C1[] = {
  0,
  ABISELECT(16,8),
  ABISELECT(-40,-20),
  ABISELECT(88,44),
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV10S6282C8_nt7S6282C6__A1__7S6282C48S6282C12__A1__7S6282C1[] = {
  ABISELECT(80,40),
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C9__7S6282C48S6282C12__A1__7S6282C1[] = {
  0,
  0,
  ABISELECT(-80,-40),
  ABISELECT(-136,-68),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C10__7S6282C48S6282C12__A1__7S6282C1[] = {
  0,
  ABISELECT(-64,-32),
  ABISELECT(64,32),
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C3__8S6282C12__7S6282C1[] = {
  ABISELECT(48,24),
  0,
  0,
  ABISELECT(40,20),
  ABISELECT(112,56),
  ABISELECT(32,16),
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  ABISELECT(72,36),
  (VTBL_ENTRY)&(_ZTI8S6282C12[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C6__8S6282C12__7S6282C1[] = {
  0,
  ABISELECT(16,8),
  ABISELECT(-40,-20),
  ABISELECT(56,28),
  (VTBL_ENTRY)&(_ZTI8S6282C12[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV10S6282C8_nt7S6282C6__A1__8S6282C12__7S6282C1[] = {
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI8S6282C12[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C15__8S6282C12__7S6282C1[] = {
  ABISELECT(16,12),
  0,
  0,
  0,
  ABISELECT(-80,-40),
  ABISELECT(-136,-68),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S6282C12[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C10__8S6282C12__7S6282C1[] = {
  0,
  ABISELECT(-64,-32),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S6282C12[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C11__8S6282C12__7S6282C1[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(64,32),
  ABISELECT(-72,-36),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI8S6282C12[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV10S6282C8_nt__A6__8S6282C12__7S6282C1[] = {
  0,
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S6282C12[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C78S6282C13__A2__8S6282C12__7S6282C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(-112,-56),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S6282C12[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
static  VTBL_ENTRY _tg__ZTV11S6282C17_nt__8S6282C12__7S6282C1[] = {
  ABISELECT(-120,-60),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S6282C12[0]),
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C4__A__8S6282C12__7S6282C1[] = {
  ABISELECT(-64,-32),
  ABISELECT(8,4),
  ABISELECT(-72,-36),
  ABISELECT(-88,-44),
  ABISELECT(-128,-64),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S6282C12[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C15__7S6282C1[] = {
  ABISELECT(16,12),
  0,
  0,
  0,
  ABISELECT(-80,-40),
  ABISELECT(-136,-68),
  0,
  (VTBL_ENTRY)&(_ZTI8S6282C15[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C168S6282C15__7S6282C1[] = {
  0,
  0,
  0,
  ABISELECT(-80,-40),
  ABISELECT(-136,-68),
  0,
  (VTBL_ENTRY)&(_ZTI8S6282C16[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV10S6282C8_nt__A1__8S6282C15__7S6282C1[] = {
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S6282C15[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
static  VTT_ENTRY vtt_S6282C1[] = {
  {&(_ZTV7S6282C1[15]),  15,97},
  {&(_tg__ZTV8S6282C16__A1__7S6282C1[7]),  7,9},
  {&(_tg__ZTV7S6282C9__8S6282C16__A1__7S6282C1[6]),  6,8},
  {&(_ZTV7S6282C1[29]),  29,97},
  {&(_ZTV7S6282C1[29]),  29,97},
  {&(_ZTV7S6282C1[35]),  35,97},
  {&(_ZTV7S6282C1[38]),  38,97},
  {&(_ZTV7S6282C1[91]),  91,97},
  {&(_ZTV7S6282C1[43]),  43,97},
  {&(_ZTV7S6282C1[50]),  50,97},
  {&(_ZTV7S6282C1[65]),  65,97},
  {&(_ZTV7S6282C1[91]),  91,97},
  {&(_ZTV7S6282C1[96]),  96,97},
  {&(_ZTV7S6282C1[71]),  71,97},
  {&(_ZTV7S6282C1[75]),  75,97},
  {&(_ZTV7S6282C1[82]),  82,97},
  {&(_tg__ZTV7S6282C3__7S6282C1[10]),  10,11},
  {&(_tg__ZTV7S6282C3__7S6282C1[10]),  10,11},
  {&(_tg__ZTV7S6282C6__7S6282C3__7S6282C1[5]),  5,6},
  {&(_tg__ZTV10S6282C8_nt7S6282C6__A1__7S6282C3__7S6282C1[2]),  2,3},
  {&(_tg__ZTV7S6282C9__7S6282C3__7S6282C1[6]),  6,8},
  {&(_tg__ZTV8S6282C10__7S6282C3__7S6282C1[4]),  4,5},
  {&(_tg__ZTV8S6282C11__7S6282C3__7S6282C1[6]),  6,7},
  {&(_tg__ZTV7S6282C4__7S6282C1[7]),  7,8},
  {&(_tg__ZTV7S6282C6__7S6282C4__7S6282C1[5]),  5,6},
  {&(_tg__ZTV10S6282C8_nt7S6282C6__A1__7S6282C4__7S6282C1[2]),  2,3},
  {&(_tg__ZTV7S6282C9__7S6282C4__7S6282C1[6]),  6,8},
  {&(_tg__ZTV8S6282C10__7S6282C4__7S6282C1[4]),  4,5},
  {&(_tg__ZTV7S6282C6__7S6282C1[4]),  4,5},
  {&(_tg__ZTV7S6282C77S6282C6__7S6282C1[4]),  4,5},
  {&(_tg__ZTV7S6282C9__7S6282C1[4]),  4,6},
  {&(_tg__ZTV7S6282C77S6282C9__A1__7S6282C1[4]),  4,5},
  {&(_tg__ZTV8S6282C10__7S6282C1[3]),  3,4},
  {&(_tg__ZTV8S6282C11__7S6282C1[5]),  5,6},
  {&(_tg__ZTV7S6282C9__8S6282C11__7S6282C1[6]),  6,8},
  {&(_tg__ZTV8S6282C12__7S6282C1[12]),  12,14},
  {&(_tg__ZTV8S6282C138S6282C12__7S6282C1[12]),  12,14},
  {&(_tg__ZTV7S6282C78S6282C138S6282C12__A2__7S6282C1[4]),  4,5},
  {&(_tg__ZTV7S6282C3__8S6282C138S6282C12__7S6282C1[10]),  10,11},
  {&(_tg__ZTV7S6282C3__8S6282C138S6282C12__7S6282C1[10]),  10,11},
  {&(_tg__ZTV7S6282C6__8S6282C138S6282C12__7S6282C1[5]),  5,6},
  {&(_tg__ZTV10S6282C8_nt7S6282C6__A1__8S6282C138S6282C12__7S6282C1[2]),  2,3},
  {&(_tg__ZTV8S6282C15__8S6282C138S6282C12__7S6282C1[8]),  8,10},
  {&(_tg__ZTV8S6282C10__8S6282C138S6282C12__7S6282C1[4]),  4,5},
  {&(_tg__ZTV8S6282C11__8S6282C138S6282C12__7S6282C1[6]),  6,7},
  {&(_tg__ZTV8S6282C15__8S6282C138S6282C12__7S6282C1[8]),  8,10},
  {&(_tg__ZTV10S6282C8_nt__A6__8S6282C138S6282C12__7S6282C1[3]),  3,4},
  {&(_tg__ZTV7S6282C7__A2__8S6282C138S6282C12__7S6282C1[4]),  4,5},
  {&(_tg__ZTV11S6282C17_nt8S6282C12__7S6282C1[3]),  3,3},
  {&(_tg__ZTV7S6282C48S6282C12__A1__7S6282C1[7]),  7,8},
  {&(_tg__ZTV7S6282C6__7S6282C48S6282C12__A1__7S6282C1[5]),  5,6},
  {&(_tg__ZTV10S6282C8_nt7S6282C6__A1__7S6282C48S6282C12__A1__7S6282C1[2]),  2,3},
  {&(_tg__ZTV7S6282C9__7S6282C48S6282C12__A1__7S6282C1[6]),  6,8},
  {&(_tg__ZTV8S6282C10__7S6282C48S6282C12__A1__7S6282C1[4]),  4,5},
  {&(_tg__ZTV7S6282C3__8S6282C12__7S6282C1[10]),  10,11},
  {&(_tg__ZTV7S6282C3__8S6282C12__7S6282C1[10]),  10,11},
  {&(_tg__ZTV7S6282C6__8S6282C12__7S6282C1[5]),  5,6},
  {&(_tg__ZTV10S6282C8_nt7S6282C6__A1__8S6282C12__7S6282C1[2]),  2,3},
  {&(_tg__ZTV8S6282C15__8S6282C12__7S6282C1[8]),  8,10},
  {&(_tg__ZTV8S6282C10__8S6282C12__7S6282C1[4]),  4,5},
  {&(_tg__ZTV8S6282C11__8S6282C12__7S6282C1[6]),  6,7},
  {&(_tg__ZTV8S6282C15__8S6282C12__7S6282C1[8]),  8,10},
  {&(_tg__ZTV10S6282C8_nt__A6__8S6282C12__7S6282C1[3]),  3,4},
  {&(_tg__ZTV7S6282C78S6282C13__A2__8S6282C12__7S6282C1[4]),  4,5},
  {&(_tg__ZTV11S6282C17_nt__8S6282C12__7S6282C1[3]),  3,3},
  {&(_tg__ZTV7S6282C4__A__8S6282C12__7S6282C1[7]),  7,8},
  {&(_tg__ZTV8S6282C15__7S6282C1[8]),  8,10},
  {&(_tg__ZTV8S6282C168S6282C15__7S6282C1[7]),  7,9},
  {&(_tg__ZTV8S6282C168S6282C15__7S6282C1[7]),  7,9},
  {&(_tg__ZTV8S6282C15__7S6282C1[8]),  8,10},
  {&(_tg__ZTV10S6282C8_nt__A1__8S6282C15__7S6282C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S6282C1[];
extern  VTBL_ENTRY _ZTV7S6282C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C1[];
static VTBL_ENTRY alt_thunk_names1[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S6282C1D0Ev,_ZTv0_n52_N7S6282C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S6282C1D0Ev,_ZThn48_N7S6282C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S6282C1D1Ev,_ZTv0_n52_N7S6282C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S6282C1D1Ev,_ZThn48_N7S6282C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6282C1 = {  "S6282C1", // class name
  bases_S6282C1, 31,
  &(vtc_S6282C1[0]), // expected_vtbl_contents
  &(vtt_S6282C1[0]), // expected_vtt_contents
  ABISELECT(160,84), // object size
  NSPAIRA(_ZTI7S6282C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S6282C1),97, //virtual function table var
  15, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6282C1),71, //virtual table table var
  26, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names1,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2185C4_nt  {
  ::S2121C20_nt s2185c4f0;
  int s2185c4f1[2];
  char s2185c4f2;
  virtual  ~S2185C4_nt(); // _ZN10S2185C4_ntD1Ev
  virtual void  v3(); // _ZN10S2185C4_nt2v3Ev
  virtual void  v4(); // _ZN10S2185C4_nt2v4Ev
  virtual void  v5(); // _ZN10S2185C4_nt2v5Ev
  S2185C4_nt(); // tgen
};
//SIG(-1 S2185C4_nt) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2185C4_nt ::~S2185C4_nt(){ note_dtor("S2185C4_nt", this);}
void  S2185C4_nt ::v3(){vfunc_called(this, "_ZN10S2185C4_nt2v3Ev");}
void  S2185C4_nt ::v4(){vfunc_called(this, "_ZN10S2185C4_nt2v4Ev");}
void  S2185C4_nt ::v5(){vfunc_called(this, "_ZN10S2185C4_nt2v5Ev");}
S2185C4_nt ::S2185C4_nt(){ note_ctor("S2185C4_nt", this);} // tgen

//skip512 S2185C4_nt

#else // __cplusplus

extern void _ZN10S2185C4_ntC1Ev();
extern void _ZN10S2185C4_ntD1Ev();
Name_Map name_map_S2185C4_nt[] = {
  NSPAIR(_ZN10S2185C4_ntC1Ev),
  NSPAIR(_ZN10S2185C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S2185C4_nt[];
extern void _ZN10S2185C4_ntD1Ev();
extern void _ZN10S2185C4_ntD0Ev();
extern void _ZN10S2185C4_nt2v3Ev();
extern void _ZN10S2185C4_nt2v4Ev();
extern void _ZN10S2185C4_nt2v5Ev();
static  VTBL_ENTRY vtc_S2185C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2185C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S2185C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2185C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2185C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S2185C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S2185C4_nt2v5Ev,
};
extern VTBL_ENTRY _ZTI10S2185C4_nt[];
VTBL_ENTRY *P__ZTI10S2185C4_nt = _ZTI10S2185C4_nt; 
extern  VTBL_ENTRY _ZTV10S2185C4_nt[];
Class_Descriptor cd_S2185C4_nt = {  "S2185C4_nt", // class name
  0,0,//no base classes
  &(vtc_S2185C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI10S2185C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S2185C4_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  S2185C8_nt  {
  int s2185c8f0;
  void *s2185c8f1[7];
  short s2185c8f2;
  char s2185c8f3[10];
};
//SIG(-1 S2185C8_nt) C1{ Fi Fp[7] Fs Fc[10]}



//skip512 S2185C8_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2185C10_nt  {
  void *s2185c10f0;
  int s2185c10f1;
  ::S2121C38 s2185c10f2;
  void  mf2185c10(); // _ZN11S2185C10_nt9mf2185c10Ev
};
//SIG(-1 S2185C10_nt) C1{ m Fp Fi FC2{ m}}


void  S2185C10_nt ::mf2185c10(){}

//skip512 S2185C10_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2185C9_nt  {
  ::S2121C20_nt s2185c9f0;
  ::S2185C10_nt s2185c9f1;
  void  mf2185c9(); // _ZN10S2185C9_nt8mf2185c9Ev
};
//SIG(-1 S2185C9_nt) C1{ m FC2{ m Fp Fi FC3{ m}} FC4{ m Fp Fi FC5{ m}}}


void  S2185C9_nt ::mf2185c9(){}

//skip512 S2185C9_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2185C7_nt  {
  ::S2185C8_nt s2185c7f0;
  void *s2185c7f1;
  char s2185c7f2[2];
  ::S2185C9_nt s2185c7f3;
  void  mf2185c7(); // _ZN10S2185C7_nt8mf2185c7Ev
  virtual  ~S2185C7_nt(); // _ZN10S2185C7_ntD1Ev
  S2185C7_nt(); // tgen
};
//SIG(-1 S2185C7_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  S2185C7_nt ::mf2185c7(){}
 S2185C7_nt ::~S2185C7_nt(){ note_dtor("S2185C7_nt", this);}
S2185C7_nt ::S2185C7_nt(){ note_ctor("S2185C7_nt", this);} // tgen

//skip512 S2185C7_nt

#else // __cplusplus

extern void _ZN10S2185C7_ntC1Ev();
extern void _ZN10S2185C7_ntD1Ev();
Name_Map name_map_S2185C7_nt[] = {
  NSPAIR(_ZN10S2185C7_ntC1Ev),
  NSPAIR(_ZN10S2185C7_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S2185C7_nt[];
extern void _ZN10S2185C7_ntD1Ev();
extern void _ZN10S2185C7_ntD0Ev();
static  VTBL_ENTRY vtc_S2185C7_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2185C7_nt[0]),
  (VTBL_ENTRY)&_ZN10S2185C7_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2185C7_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S2185C7_nt[];
VTBL_ENTRY *P__ZTI10S2185C7_nt = _ZTI10S2185C7_nt; 
extern  VTBL_ENTRY _ZTV10S2185C7_nt[];
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2185C3  : S2185C4_nt {
  void *s2185c3f0;
  ::S2185C7_nt s2185c3f1;
  int s2185c3f2[2];
  void *s2185c3f3;
  int s2185c3f4;
  ::S21811C2_nt s2185c3f5;
  int s2185c3f6;
  virtual  ~S2185C3(); // _ZN7S2185C3D1Ev
  virtual void  v6(); // _ZN7S2185C32v6Ev
  virtual void  v7(); // _ZN7S2185C32v7Ev
  virtual void  v8(); // _ZN7S2185C32v8Ev
  virtual void  v9(); // _ZN7S2185C32v9Ev
  S2185C3(); // tgen
};
//SIG(-1 S2185C3) C1{ BC2{ vd v5 v6 v7 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 v3 v4 Fp FC5{ vd m FC6{ Fi Fp[7] Fs Fc[10]} Fp Fc[2] FC7{ m FC3 FC8{ m Fp Fi FC9{ m}}}} Fi[2] Fp Fi FC10{ m Fp[2]} Fi}


 S2185C3 ::~S2185C3(){ note_dtor("S2185C3", this);}
void  S2185C3 ::v6(){vfunc_called(this, "_ZN7S2185C32v6Ev");}
void  S2185C3 ::v7(){vfunc_called(this, "_ZN7S2185C32v7Ev");}
void  S2185C3 ::v8(){vfunc_called(this, "_ZN7S2185C32v8Ev");}
void  S2185C3 ::v9(){vfunc_called(this, "_ZN7S2185C32v9Ev");}
S2185C3 ::S2185C3(){ note_ctor("S2185C3", this);} // tgen

static void Test_S2185C3()
{
  extern Class_Descriptor cd_S2185C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,36)];
    init_test(&cd_S2185C3, buf);
    S2185C3 *dp, &lv = *(dp=new (buf) S2185C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,140), "sizeof(S2185C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2185C3)");
    check_base_class_offset(lv, (S2185C4_nt*), 0, "S2185C3");
    check_field_offset(lv, s2185c3f0, ABISELECT(40,28), "S2185C3.s2185c3f0");
    check_field_offset(lv, s2185c3f1, ABISELECT(48,32), "S2185C3.s2185c3f1");
    check_field_offset(lv, s2185c3f2, ABISELECT(184,112), "S2185C3.s2185c3f2");
    check_field_offset(lv, s2185c3f3, ABISELECT(192,120), "S2185C3.s2185c3f3");
    check_field_offset(lv, s2185c3f4, ABISELECT(200,124), "S2185C3.s2185c3f4");
    check_field_offset(lv, s2185c3f5, ABISELECT(208,128), "S2185C3.s2185c3f5");
    check_field_offset(lv, s2185c3f6, ABISELECT(224,136), "S2185C3.s2185c3f6");
    test_class_info(&lv, &cd_S2185C3);
    dp->~S2185C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2185C3(Test_S2185C3, "S2185C3", ABISELECT(232,140));

#else // __cplusplus

extern void _ZN7S2185C3C1Ev();
extern void _ZN7S2185C3D1Ev();
Name_Map name_map_S2185C3[] = {
  NSPAIR(_ZN7S2185C3C1Ev),
  NSPAIR(_ZN7S2185C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2185C4_nt;
extern VTBL_ENTRY _ZTI10S2185C4_nt[];
extern  VTBL_ENTRY _ZTV10S2185C4_nt[];
static Base_Class bases_S2185C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2185C4_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 _ZTI7S2185C3[];
extern void _ZN7S2185C3D1Ev();
extern void _ZN7S2185C3D0Ev();
extern void _ZN10S2185C4_nt2v3Ev();
extern void _ZN10S2185C4_nt2v4Ev();
extern void _ZN10S2185C4_nt2v5Ev();
extern void _ZN7S2185C32v6Ev();
extern void _ZN7S2185C32v7Ev();
extern void _ZN7S2185C32v8Ev();
extern void _ZN7S2185C32v9Ev();
static  VTBL_ENTRY vtc_S2185C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2185C3[0]),
  (VTBL_ENTRY)&_ZN7S2185C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2185C3D0Ev,
  (VTBL_ENTRY)&_ZN10S2185C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S2185C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S2185C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN7S2185C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2185C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2185C32v8Ev,
  (VTBL_ENTRY)&_ZN7S2185C32v9Ev,
};
extern VTBL_ENTRY _ZTI7S2185C3[];
extern  VTBL_ENTRY _ZTV7S2185C3[];
Class_Descriptor cd_S2185C3 = {  "S2185C3", // class name
  bases_S2185C3, 1,
  &(vtc_S2185C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,140), // object size
  NSPAIRA(_ZTI7S2185C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2185C3),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2185C2  : S2185C3 {
  void *s2185c2f0;
  virtual  ~S2185C2(); // _ZN7S2185C2D1Ev
  virtual void  v10(); // _ZN7S2185C23v10Ev
  virtual void  v11(); // _ZN7S2185C23v11Ev
  virtual void  v12(); // _ZN7S2185C23v12Ev
  S2185C2(); // tgen
};
//SIG(-1 S2185C2) C1{ BC2{ BC3{ vd v4 v5 v6 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} vd v7 v8 v9 v10 Fp FC6{ vd m FC7{ Fi Fp[7] Fs Fc[10]} Fp Fc[2] FC8{ m FC4 FC9{ m Fp Fi FC10{ m}}}} Fi[2] Fp Fi FC11{ m Fp[2]} Fi} vd v1 v2 v3 Fp}


 S2185C2 ::~S2185C2(){ note_dtor("S2185C2", this);}
void  S2185C2 ::v10(){vfunc_called(this, "_ZN7S2185C23v10Ev");}
void  S2185C2 ::v11(){vfunc_called(this, "_ZN7S2185C23v11Ev");}
void  S2185C2 ::v12(){vfunc_called(this, "_ZN7S2185C23v12Ev");}
S2185C2 ::S2185C2(){ note_ctor("S2185C2", this);} // tgen

static void Test_S2185C2()
{
  extern Class_Descriptor cd_S2185C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(31,37)];
    init_test(&cd_S2185C2, buf);
    S2185C2 *dp, &lv = *(dp=new (buf) S2185C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,144), "sizeof(S2185C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2185C2)");
    check_base_class_offset(lv, (S2185C4_nt*)(S2185C3*), 0, "S2185C2");
    check_base_class_offset(lv, (S2185C3*), 0, "S2185C2");
    check_field_offset(lv, s2185c2f0, ABISELECT(232,140), "S2185C2.s2185c2f0");
    test_class_info(&lv, &cd_S2185C2);
    dp->~S2185C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2185C2(Test_S2185C2, "S2185C2", ABISELECT(240,144));

#else // __cplusplus

extern void _ZN7S2185C2C1Ev();
extern void _ZN7S2185C2D1Ev();
Name_Map name_map_S2185C2[] = {
  NSPAIR(_ZN7S2185C2C1Ev),
  NSPAIR(_ZN7S2185C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2185C4_nt;
extern VTBL_ENTRY _ZTI10S2185C4_nt[];
extern  VTBL_ENTRY _ZTV10S2185C4_nt[];
extern Class_Descriptor cd_S2185C3;
extern VTBL_ENTRY _ZTI7S2185C3[];
extern  VTBL_ENTRY _ZTV7S2185C3[];
static Base_Class bases_S2185C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2185C4_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_S2185C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2185C2[];
extern void _ZN7S2185C2D1Ev();
extern void _ZN7S2185C2D0Ev();
extern void _ZN10S2185C4_nt2v3Ev();
extern void _ZN10S2185C4_nt2v4Ev();
extern void _ZN10S2185C4_nt2v5Ev();
extern void _ZN7S2185C32v6Ev();
extern void _ZN7S2185C32v7Ev();
extern void _ZN7S2185C32v8Ev();
extern void _ZN7S2185C32v9Ev();
extern void _ZN7S2185C23v10Ev();
extern void _ZN7S2185C23v11Ev();
extern void _ZN7S2185C23v12Ev();
static  VTBL_ENTRY vtc_S2185C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2185C2[0]),
  (VTBL_ENTRY)&_ZN7S2185C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2185C2D0Ev,
  (VTBL_ENTRY)&_ZN10S2185C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S2185C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S2185C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN7S2185C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2185C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2185C32v8Ev,
  (VTBL_ENTRY)&_ZN7S2185C32v9Ev,
  (VTBL_ENTRY)&_ZN7S2185C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2185C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2185C23v12Ev,
};
extern VTBL_ENTRY _ZTI7S2185C2[];
extern  VTBL_ENTRY _ZTV7S2185C2[];
Class_Descriptor cd_S2185C2 = {  "S2185C2", // class name
  bases_S2185C2, 2,
  &(vtc_S2185C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(240,144), // object size
  NSPAIRA(_ZTI7S2185C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2185C2),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  S2185C1  : S2185C2 {
  ::S2121C20_nt s2185c1f0;
  ::S2121C20_nt s2185c1f1;
  void *s2185c1f2;
  virtual  ~S2185C1(); // _ZN7S2185C1D1Ev
  virtual void  v1(); // _ZN7S2185C12v1Ev
  virtual void  v2(); // _ZN7S2185C12v2Ev
  S2185C1(); // tgen
};
//SIG(1 S2185C1) C1{ BC2{ BC3{ BC4{ vd v3 v4 v5 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} vd v6 v7 v8 v9 Fp FC7{ vd m FC8{ Fi Fp[7] Fs Fc[10]} Fp Fc[2] FC9{ m FC5 FC10{ m Fp Fi FC11{ m}}}} Fi[2] Fp Fi FC12{ m Fp[2]} Fi} vd v10 v11 v12 Fp} vd v1 v2 FC5 FC5 Fp}


 S2185C1 ::~S2185C1(){ note_dtor("S2185C1", this);}
void  S2185C1 ::v1(){vfunc_called(this, "_ZN7S2185C12v1Ev");}
void  S2185C1 ::v2(){vfunc_called(this, "_ZN7S2185C12v2Ev");}
S2185C1 ::S2185C1(){ note_ctor("S2185C1", this);} // tgen

static void Test_S2185C1()
{
  extern Class_Descriptor cd_S2185C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(36,44)];
    init_test(&cd_S2185C1, buf);
    S2185C1 *dp, &lv = *(dp=new (buf) S2185C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(280,172), "sizeof(S2185C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2185C1)");
    check_base_class_offset(lv, (S2185C4_nt*)(S2185C3*)(S2185C2*), 0, "S2185C1");
    check_base_class_offset(lv, (S2185C3*)(S2185C2*), 0, "S2185C1");
    check_base_class_offset(lv, (S2185C2*), 0, "S2185C1");
    check_field_offset(lv, s2185c1f0, ABISELECT(240,144), "S2185C1.s2185c1f0");
    check_field_offset(lv, s2185c1f1, ABISELECT(256,156), "S2185C1.s2185c1f1");
    check_field_offset(lv, s2185c1f2, ABISELECT(272,168), "S2185C1.s2185c1f2");
    test_class_info(&lv, &cd_S2185C1);
    dp->~S2185C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2185C1(Test_S2185C1, "S2185C1", ABISELECT(280,172));

#else // __cplusplus

extern void _ZN7S2185C1C1Ev();
extern void _ZN7S2185C1D1Ev();
Name_Map name_map_S2185C1[] = {
  NSPAIR(_ZN7S2185C1C1Ev),
  NSPAIR(_ZN7S2185C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2185C4_nt;
extern VTBL_ENTRY _ZTI10S2185C4_nt[];
extern  VTBL_ENTRY _ZTV10S2185C4_nt[];
extern Class_Descriptor cd_S2185C3;
extern VTBL_ENTRY _ZTI7S2185C3[];
extern  VTBL_ENTRY _ZTV7S2185C3[];
extern Class_Descriptor cd_S2185C2;
extern VTBL_ENTRY _ZTI7S2185C2[];
extern  VTBL_ENTRY _ZTV7S2185C2[];
static Base_Class bases_S2185C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2185C4_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_S2185C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2185C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2185C1[];
extern void _ZN7S2185C1D1Ev();
extern void _ZN7S2185C1D0Ev();
extern void _ZN10S2185C4_nt2v3Ev();
extern void _ZN10S2185C4_nt2v4Ev();
extern void _ZN10S2185C4_nt2v5Ev();
extern void _ZN7S2185C32v6Ev();
extern void _ZN7S2185C32v7Ev();
extern void _ZN7S2185C32v8Ev();
extern void _ZN7S2185C32v9Ev();
extern void _ZN7S2185C23v10Ev();
extern void _ZN7S2185C23v11Ev();
extern void _ZN7S2185C23v12Ev();
extern void _ZN7S2185C12v1Ev();
extern void _ZN7S2185C12v2Ev();
static  VTBL_ENTRY vtc_S2185C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2185C1[0]),
  (VTBL_ENTRY)&_ZN7S2185C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2185C1D0Ev,
  (VTBL_ENTRY)&_ZN10S2185C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S2185C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S2185C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN7S2185C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2185C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2185C32v8Ev,
  (VTBL_ENTRY)&_ZN7S2185C32v9Ev,
  (VTBL_ENTRY)&_ZN7S2185C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2185C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2185C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2185C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2185C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S2185C1[];
extern  VTBL_ENTRY _ZTV7S2185C1[];
Class_Descriptor cd_S2185C1 = {  "S2185C1", // class name
  bases_S2185C1, 3,
  &(vtc_S2185C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(280,172), // object size
  NSPAIRA(_ZTI7S2185C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2185C1),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  S4840C3  {
  ::S2185C10_nt s4840c3f0;
  int s4840c3f1[2];
  char s4840c3f2;
  virtual  ~S4840C3(); // _ZN7S4840C3D1Ev
  virtual void  v3(); // _ZN7S4840C32v3Ev
  virtual void  v4(); // _ZN7S4840C32v4Ev
  virtual void  v5(); // _ZN7S4840C32v5Ev
  S4840C3(); // tgen
};
//SIG(-1 S4840C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4840C3 ::~S4840C3(){ note_dtor("S4840C3", this);}
void  S4840C3 ::v3(){vfunc_called(this, "_ZN7S4840C32v3Ev");}
void  S4840C3 ::v4(){vfunc_called(this, "_ZN7S4840C32v4Ev");}
void  S4840C3 ::v5(){vfunc_called(this, "_ZN7S4840C32v5Ev");}
S4840C3 ::S4840C3(){ note_ctor("S4840C3", this);} // tgen

static void Test_S4840C3()
{
  extern Class_Descriptor cd_S4840C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4840C3, buf);
    S4840C3 *dp, &lv = *(dp=new (buf) S4840C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4840C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4840C3)");
    check_field_offset(lv, s4840c3f0, ABISELECT(8,4), "S4840C3.s4840c3f0");
    check_field_offset(lv, s4840c3f1, ABISELECT(24,16), "S4840C3.s4840c3f1");
    check_field_offset(lv, s4840c3f2, ABISELECT(32,24), "S4840C3.s4840c3f2");
    test_class_info(&lv, &cd_S4840C3);
    dp->~S4840C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4840C3(Test_S4840C3, "S4840C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4840C3C1Ev();
extern void _ZN7S4840C3D1Ev();
Name_Map name_map_S4840C3[] = {
  NSPAIR(_ZN7S4840C3C1Ev),
  NSPAIR(_ZN7S4840C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4840C3[];
extern void _ZN7S4840C3D1Ev();
extern void _ZN7S4840C3D0Ev();
extern void _ZN7S4840C32v3Ev();
extern void _ZN7S4840C32v4Ev();
extern void _ZN7S4840C32v5Ev();
static  VTBL_ENTRY vtc_S4840C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4840C3[0]),
  (VTBL_ENTRY)&_ZN7S4840C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4840C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4840C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4840C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4840C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4840C3[];
extern  VTBL_ENTRY _ZTV7S4840C3[];
Class_Descriptor cd_S4840C3 = {  "S4840C3", // class name
  0,0,//no base classes
  &(vtc_S4840C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4840C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4840C3),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  S4840C2  : S4840C3 {
  void *s4840c2f0;
  ::S2185C7_nt s4840c2f1;
  int s4840c2f2[2];
  void *s4840c2f3;
  int s4840c2f4;
  ::S21811C2_nt s4840c2f5;
  int s4840c2f6;
  virtual  ~S4840C2(); // _ZN7S4840C2D1Ev
  virtual void  v6(); // _ZN7S4840C22v6Ev
  virtual void  v7(); // _ZN7S4840C22v7Ev
  virtual void  v8(); // _ZN7S4840C22v8Ev
  virtual void  v9(); // _ZN7S4840C22v9Ev
  S4840C2(); // tgen
};
//SIG(-1 S4840C2) C1{ BC2{ vd v5 v6 v7 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 v3 v4 Fp FC5{ vd m FC6{ Fi Fp[7] Fs Fc[10]} Fp Fc[2] FC7{ m FC8{ m Fp Fi FC9{ m}} FC3}} Fi[2] Fp Fi FC10{ m Fp[2]} Fi}


 S4840C2 ::~S4840C2(){ note_dtor("S4840C2", this);}
void  S4840C2 ::v6(){vfunc_called(this, "_ZN7S4840C22v6Ev");}
void  S4840C2 ::v7(){vfunc_called(this, "_ZN7S4840C22v7Ev");}
void  S4840C2 ::v8(){vfunc_called(this, "_ZN7S4840C22v8Ev");}
void  S4840C2 ::v9(){vfunc_called(this, "_ZN7S4840C22v9Ev");}
S4840C2 ::S4840C2(){ note_ctor("S4840C2", this);} // tgen

static void Test_S4840C2()
{
  extern Class_Descriptor cd_S4840C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,36)];
    init_test(&cd_S4840C2, buf);
    S4840C2 *dp, &lv = *(dp=new (buf) S4840C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,140), "sizeof(S4840C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4840C2)");
    check_base_class_offset(lv, (S4840C3*), 0, "S4840C2");
    check_field_offset(lv, s4840c2f0, ABISELECT(40,28), "S4840C2.s4840c2f0");
    check_field_offset(lv, s4840c2f1, ABISELECT(48,32), "S4840C2.s4840c2f1");
    check_field_offset(lv, s4840c2f2, ABISELECT(184,112), "S4840C2.s4840c2f2");
    check_field_offset(lv, s4840c2f3, ABISELECT(192,120), "S4840C2.s4840c2f3");
    check_field_offset(lv, s4840c2f4, ABISELECT(200,124), "S4840C2.s4840c2f4");
    check_field_offset(lv, s4840c2f5, ABISELECT(208,128), "S4840C2.s4840c2f5");
    check_field_offset(lv, s4840c2f6, ABISELECT(224,136), "S4840C2.s4840c2f6");
    test_class_info(&lv, &cd_S4840C2);
    dp->~S4840C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4840C2(Test_S4840C2, "S4840C2", ABISELECT(232,140));

#else // __cplusplus

extern void _ZN7S4840C2C1Ev();
extern void _ZN7S4840C2D1Ev();
Name_Map name_map_S4840C2[] = {
  NSPAIR(_ZN7S4840C2C1Ev),
  NSPAIR(_ZN7S4840C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4840C3;
extern VTBL_ENTRY _ZTI7S4840C3[];
extern  VTBL_ENTRY _ZTV7S4840C3[];
static Base_Class bases_S4840C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4840C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S4840C2[];
extern void _ZN7S4840C2D1Ev();
extern void _ZN7S4840C2D0Ev();
extern void _ZN7S4840C32v3Ev();
extern void _ZN7S4840C32v4Ev();
extern void _ZN7S4840C32v5Ev();
extern void _ZN7S4840C22v6Ev();
extern void _ZN7S4840C22v7Ev();
extern void _ZN7S4840C22v8Ev();
extern void _ZN7S4840C22v9Ev();
static  VTBL_ENTRY vtc_S4840C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4840C2[0]),
  (VTBL_ENTRY)&_ZN7S4840C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4840C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4840C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4840C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4840C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4840C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4840C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4840C22v8Ev,
  (VTBL_ENTRY)&_ZN7S4840C22v9Ev,
};
extern VTBL_ENTRY _ZTI7S4840C2[];
extern  VTBL_ENTRY _ZTV7S4840C2[];
Class_Descriptor cd_S4840C2 = {  "S4840C2", // class name
  bases_S4840C2, 1,
  &(vtc_S4840C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,140), // object size
  NSPAIRA(_ZTI7S4840C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4840C2),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4840C1  : S4840C2 {
  void *s4840c1f0;
  ::S3350C4_nt s4840c1f1;
  void *s4840c1f2[2];
  ::S21811C13_nt s4840c1f3;
  virtual  ~S4840C1(); // _ZN7S4840C1D1Ev
  virtual void  v1(); // _ZN7S4840C12v1Ev
  virtual void  v2(); // _ZN7S4840C12v2Ev
  S4840C1(); // tgen
};
//SIG(1 S4840C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} vd v6 v7 v8 v9 Fp FC6{ vd m FC7{ Fi Fp[7] Fs Fc[10]} Fp Fc[2] FC8{ m FC9{ m Fp Fi FC10{ m}} FC4}} Fi[2] Fp Fi FC11{ m Fp[2]} Fi} vd v1 v2 Fp FC12{ m Fi[2]} Fp[2] FC13{ m Fp}}


 S4840C1 ::~S4840C1(){ note_dtor("S4840C1", this);}
void  S4840C1 ::v1(){vfunc_called(this, "_ZN7S4840C12v1Ev");}
void  S4840C1 ::v2(){vfunc_called(this, "_ZN7S4840C12v2Ev");}
S4840C1 ::S4840C1(){ note_ctor("S4840C1", this);} // tgen

static void Test_S4840C1()
{
  extern Class_Descriptor cd_S4840C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,42)];
    init_test(&cd_S4840C1, buf);
    S4840C1 *dp, &lv = *(dp=new (buf) S4840C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,164), "sizeof(S4840C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4840C1)");
    check_base_class_offset(lv, (S4840C3*)(S4840C2*), 0, "S4840C1");
    check_base_class_offset(lv, (S4840C2*), 0, "S4840C1");
    check_field_offset(lv, s4840c1f0, ABISELECT(232,140), "S4840C1.s4840c1f0");
    check_field_offset(lv, s4840c1f1, ABISELECT(240,144), "S4840C1.s4840c1f1");
    check_field_offset(lv, s4840c1f2, ABISELECT(248,152), "S4840C1.s4840c1f2");
    check_field_offset(lv, s4840c1f3, ABISELECT(264,160), "S4840C1.s4840c1f3");
    test_class_info(&lv, &cd_S4840C1);
    dp->~S4840C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4840C1(Test_S4840C1, "S4840C1", ABISELECT(272,164));

#else // __cplusplus

extern void _ZN7S4840C1C1Ev();
extern void _ZN7S4840C1D1Ev();
Name_Map name_map_S4840C1[] = {
  NSPAIR(_ZN7S4840C1C1Ev),
  NSPAIR(_ZN7S4840C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4840C3;
extern VTBL_ENTRY _ZTI7S4840C3[];
extern  VTBL_ENTRY _ZTV7S4840C3[];
extern Class_Descriptor cd_S4840C2;
extern VTBL_ENTRY _ZTI7S4840C2[];
extern  VTBL_ENTRY _ZTV7S4840C2[];
static Base_Class bases_S4840C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4840C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4840C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4840C1[];
extern void _ZN7S4840C1D1Ev();
extern void _ZN7S4840C1D0Ev();
extern void _ZN7S4840C32v3Ev();
extern void _ZN7S4840C32v4Ev();
extern void _ZN7S4840C32v5Ev();
extern void _ZN7S4840C22v6Ev();
extern void _ZN7S4840C22v7Ev();
extern void _ZN7S4840C22v8Ev();
extern void _ZN7S4840C22v9Ev();
extern void _ZN7S4840C12v1Ev();
extern void _ZN7S4840C12v2Ev();
static  VTBL_ENTRY vtc_S4840C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4840C1[0]),
  (VTBL_ENTRY)&_ZN7S4840C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4840C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4840C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4840C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4840C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4840C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4840C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4840C22v8Ev,
  (VTBL_ENTRY)&_ZN7S4840C22v9Ev,
  (VTBL_ENTRY)&_ZN7S4840C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4840C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4840C1[];
extern  VTBL_ENTRY _ZTV7S4840C1[];
Class_Descriptor cd_S4840C1 = {  "S4840C1", // class name
  bases_S4840C1, 2,
  &(vtc_S4840C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,164), // object size
  NSPAIRA(_ZTI7S4840C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4840C1),13, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2186C4  {
  ::S2185C10_nt s2186c4f0;
  int s2186c4f1[2];
  char s2186c4f2;
  virtual  ~S2186C4(); // _ZN7S2186C4D1Ev
  virtual void  v3(); // _ZN7S2186C42v3Ev
  virtual void  v4(); // _ZN7S2186C42v4Ev
  virtual void  v5(); // _ZN7S2186C42v5Ev
  S2186C4(); // tgen
};
//SIG(-1 S2186C4) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2186C4 ::~S2186C4(){ note_dtor("S2186C4", this);}
void  S2186C4 ::v3(){vfunc_called(this, "_ZN7S2186C42v3Ev");}
void  S2186C4 ::v4(){vfunc_called(this, "_ZN7S2186C42v4Ev");}
void  S2186C4 ::v5(){vfunc_called(this, "_ZN7S2186C42v5Ev");}
S2186C4 ::S2186C4(){ note_ctor("S2186C4", this);} // tgen

static void Test_S2186C4()
{
  extern Class_Descriptor cd_S2186C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2186C4, buf);
    S2186C4 *dp, &lv = *(dp=new (buf) S2186C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2186C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2186C4)");
    check_field_offset(lv, s2186c4f0, ABISELECT(8,4), "S2186C4.s2186c4f0");
    check_field_offset(lv, s2186c4f1, ABISELECT(24,16), "S2186C4.s2186c4f1");
    check_field_offset(lv, s2186c4f2, ABISELECT(32,24), "S2186C4.s2186c4f2");
    test_class_info(&lv, &cd_S2186C4);
    dp->~S2186C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2186C4(Test_S2186C4, "S2186C4", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2186C4C1Ev();
extern void _ZN7S2186C4D1Ev();
Name_Map name_map_S2186C4[] = {
  NSPAIR(_ZN7S2186C4C1Ev),
  NSPAIR(_ZN7S2186C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2186C4[];
extern void _ZN7S2186C4D1Ev();
extern void _ZN7S2186C4D0Ev();
extern void _ZN7S2186C42v3Ev();
extern void _ZN7S2186C42v4Ev();
extern void _ZN7S2186C42v5Ev();
static  VTBL_ENTRY vtc_S2186C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2186C4[0]),
  (VTBL_ENTRY)&_ZN7S2186C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2186C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2186C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2186C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2186C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S2186C4[];
extern  VTBL_ENTRY _ZTV7S2186C4[];
Class_Descriptor cd_S2186C4 = {  "S2186C4", // class name
  0,0,//no base classes
  &(vtc_S2186C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2186C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2186C4),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  S2186C3  : S2186C4 {
  void *s2186c3f0;
  ::S2185C7_nt s2186c3f1;
  int s2186c3f2[2];
  void *s2186c3f3;
  int s2186c3f4;
  ::S21811C2_nt s2186c3f5;
  int s2186c3f6;
  virtual  ~S2186C3(); // _ZN7S2186C3D1Ev
  virtual void  v6(); // _ZN7S2186C32v6Ev
  virtual void  v7(); // _ZN7S2186C32v7Ev
  virtual void  v8(); // _ZN7S2186C32v8Ev
  virtual void  v9(); // _ZN7S2186C32v9Ev
  S2186C3(); // tgen
};
//SIG(-1 S2186C3) C1{ BC2{ vd v5 v6 v7 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 v3 v4 Fp FC5{ vd m FC6{ Fi Fp[7] Fs Fc[10]} Fp Fc[2] FC7{ m FC8{ m Fp Fi FC9{ m}} FC3}} Fi[2] Fp Fi FC10{ m Fp[2]} Fi}


 S2186C3 ::~S2186C3(){ note_dtor("S2186C3", this);}
void  S2186C3 ::v6(){vfunc_called(this, "_ZN7S2186C32v6Ev");}
void  S2186C3 ::v7(){vfunc_called(this, "_ZN7S2186C32v7Ev");}
void  S2186C3 ::v8(){vfunc_called(this, "_ZN7S2186C32v8Ev");}
void  S2186C3 ::v9(){vfunc_called(this, "_ZN7S2186C32v9Ev");}
S2186C3 ::S2186C3(){ note_ctor("S2186C3", this);} // tgen

static void Test_S2186C3()
{
  extern Class_Descriptor cd_S2186C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,36)];
    init_test(&cd_S2186C3, buf);
    S2186C3 *dp, &lv = *(dp=new (buf) S2186C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,140), "sizeof(S2186C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2186C3)");
    check_base_class_offset(lv, (S2186C4*), 0, "S2186C3");
    check_field_offset(lv, s2186c3f0, ABISELECT(40,28), "S2186C3.s2186c3f0");
    check_field_offset(lv, s2186c3f1, ABISELECT(48,32), "S2186C3.s2186c3f1");
    check_field_offset(lv, s2186c3f2, ABISELECT(184,112), "S2186C3.s2186c3f2");
    check_field_offset(lv, s2186c3f3, ABISELECT(192,120), "S2186C3.s2186c3f3");
    check_field_offset(lv, s2186c3f4, ABISELECT(200,124), "S2186C3.s2186c3f4");
    check_field_offset(lv, s2186c3f5, ABISELECT(208,128), "S2186C3.s2186c3f5");
    check_field_offset(lv, s2186c3f6, ABISELECT(224,136), "S2186C3.s2186c3f6");
    test_class_info(&lv, &cd_S2186C3);
    dp->~S2186C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2186C3(Test_S2186C3, "S2186C3", ABISELECT(232,140));

#else // __cplusplus

extern void _ZN7S2186C3C1Ev();
extern void _ZN7S2186C3D1Ev();
Name_Map name_map_S2186C3[] = {
  NSPAIR(_ZN7S2186C3C1Ev),
  NSPAIR(_ZN7S2186C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2186C4;
extern VTBL_ENTRY _ZTI7S2186C4[];
extern  VTBL_ENTRY _ZTV7S2186C4[];
static Base_Class bases_S2186C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2186C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S2186C3[];
extern void _ZN7S2186C3D1Ev();
extern void _ZN7S2186C3D0Ev();
extern void _ZN7S2186C42v3Ev();
extern void _ZN7S2186C42v4Ev();
extern void _ZN7S2186C42v5Ev();
extern void _ZN7S2186C32v6Ev();
extern void _ZN7S2186C32v7Ev();
extern void _ZN7S2186C32v8Ev();
extern void _ZN7S2186C32v9Ev();
static  VTBL_ENTRY vtc_S2186C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2186C3[0]),
  (VTBL_ENTRY)&_ZN7S2186C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2186C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2186C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2186C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2186C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2186C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2186C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2186C32v8Ev,
  (VTBL_ENTRY)&_ZN7S2186C32v9Ev,
};
extern VTBL_ENTRY _ZTI7S2186C3[];
extern  VTBL_ENTRY _ZTV7S2186C3[];
Class_Descriptor cd_S2186C3 = {  "S2186C3", // class name
  bases_S2186C3, 1,
  &(vtc_S2186C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,140), // object size
  NSPAIRA(_ZTI7S2186C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2186C3),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2186C2  : S2186C3 {
  void *s2186c2f0;
  virtual  ~S2186C2(); // _ZN7S2186C2D1Ev
  virtual void  v10(); // _ZN7S2186C23v10Ev
  virtual void  v11(); // _ZN7S2186C23v11Ev
  virtual void  v12(); // _ZN7S2186C23v12Ev
  S2186C2(); // tgen
};
//SIG(-1 S2186C2) C1{ BC2{ BC3{ vd v4 v5 v6 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} vd v7 v8 v9 v10 Fp FC6{ vd m FC7{ Fi Fp[7] Fs Fc[10]} Fp Fc[2] FC8{ m FC9{ m Fp Fi FC10{ m}} FC4}} Fi[2] Fp Fi FC11{ m Fp[2]} Fi} vd v1 v2 v3 Fp}


 S2186C2 ::~S2186C2(){ note_dtor("S2186C2", this);}
void  S2186C2 ::v10(){vfunc_called(this, "_ZN7S2186C23v10Ev");}
void  S2186C2 ::v11(){vfunc_called(this, "_ZN7S2186C23v11Ev");}
void  S2186C2 ::v12(){vfunc_called(this, "_ZN7S2186C23v12Ev");}
S2186C2 ::S2186C2(){ note_ctor("S2186C2", this);} // tgen

static void Test_S2186C2()
{
  extern Class_Descriptor cd_S2186C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(31,37)];
    init_test(&cd_S2186C2, buf);
    S2186C2 *dp, &lv = *(dp=new (buf) S2186C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,144), "sizeof(S2186C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2186C2)");
    check_base_class_offset(lv, (S2186C4*)(S2186C3*), 0, "S2186C2");
    check_base_class_offset(lv, (S2186C3*), 0, "S2186C2");
    check_field_offset(lv, s2186c2f0, ABISELECT(232,140), "S2186C2.s2186c2f0");
    test_class_info(&lv, &cd_S2186C2);
    dp->~S2186C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2186C2(Test_S2186C2, "S2186C2", ABISELECT(240,144));

#else // __cplusplus

extern void _ZN7S2186C2C1Ev();
extern void _ZN7S2186C2D1Ev();
Name_Map name_map_S2186C2[] = {
  NSPAIR(_ZN7S2186C2C1Ev),
  NSPAIR(_ZN7S2186C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2186C4;
extern VTBL_ENTRY _ZTI7S2186C4[];
extern  VTBL_ENTRY _ZTV7S2186C4[];
extern Class_Descriptor cd_S2186C3;
extern VTBL_ENTRY _ZTI7S2186C3[];
extern  VTBL_ENTRY _ZTV7S2186C3[];
static Base_Class bases_S2186C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2186C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2186C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2186C2[];
extern void _ZN7S2186C2D1Ev();
extern void _ZN7S2186C2D0Ev();
extern void _ZN7S2186C42v3Ev();
extern void _ZN7S2186C42v4Ev();
extern void _ZN7S2186C42v5Ev();
extern void _ZN7S2186C32v6Ev();
extern void _ZN7S2186C32v7Ev();
extern void _ZN7S2186C32v8Ev();
extern void _ZN7S2186C32v9Ev();
extern void _ZN7S2186C23v10Ev();
extern void _ZN7S2186C23v11Ev();
extern void _ZN7S2186C23v12Ev();
static  VTBL_ENTRY vtc_S2186C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2186C2[0]),
  (VTBL_ENTRY)&_ZN7S2186C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2186C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2186C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2186C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2186C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2186C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2186C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2186C32v8Ev,
  (VTBL_ENTRY)&_ZN7S2186C32v9Ev,
  (VTBL_ENTRY)&_ZN7S2186C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2186C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2186C23v12Ev,
};
extern VTBL_ENTRY _ZTI7S2186C2[];
extern  VTBL_ENTRY _ZTV7S2186C2[];
Class_Descriptor cd_S2186C2 = {  "S2186C2", // class name
  bases_S2186C2, 2,
  &(vtc_S2186C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(240,144), // object size
  NSPAIRA(_ZTI7S2186C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2186C2),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  S2186C1  : S2186C2 {
  void *s2186c1f0;
  virtual  ~S2186C1(); // _ZN7S2186C1D1Ev
  virtual void  v1(); // _ZN7S2186C12v1Ev
  virtual void  v2(); // _ZN7S2186C12v2Ev
  S2186C1(); // tgen
};
//SIG(1 S2186C1) C1{ BC2{ BC3{ BC4{ vd v3 v4 v5 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} vd v6 v7 v8 v9 Fp FC7{ vd m FC8{ Fi Fp[7] Fs Fc[10]} Fp Fc[2] FC9{ m FC10{ m Fp Fi FC11{ m}} FC5}} Fi[2] Fp Fi FC12{ m Fp[2]} Fi} vd v10 v11 v12 Fp} vd v1 v2 Fp}


 S2186C1 ::~S2186C1(){ note_dtor("S2186C1", this);}
void  S2186C1 ::v1(){vfunc_called(this, "_ZN7S2186C12v1Ev");}
void  S2186C1 ::v2(){vfunc_called(this, "_ZN7S2186C12v2Ev");}
S2186C1 ::S2186C1(){ note_ctor("S2186C1", this);} // tgen

static void Test_S2186C1()
{
  extern Class_Descriptor cd_S2186C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(32,38)];
    init_test(&cd_S2186C1, buf);
    S2186C1 *dp, &lv = *(dp=new (buf) S2186C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(248,148), "sizeof(S2186C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2186C1)");
    check_base_class_offset(lv, (S2186C4*)(S2186C3*)(S2186C2*), 0, "S2186C1");
    check_base_class_offset(lv, (S2186C3*)(S2186C2*), 0, "S2186C1");
    check_base_class_offset(lv, (S2186C2*), 0, "S2186C1");
    check_field_offset(lv, s2186c1f0, ABISELECT(240,144), "S2186C1.s2186c1f0");
    test_class_info(&lv, &cd_S2186C1);
    dp->~S2186C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2186C1(Test_S2186C1, "S2186C1", ABISELECT(248,148));

#else // __cplusplus

extern void _ZN7S2186C1C1Ev();
extern void _ZN7S2186C1D1Ev();
Name_Map name_map_S2186C1[] = {
  NSPAIR(_ZN7S2186C1C1Ev),
  NSPAIR(_ZN7S2186C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2186C4;
extern VTBL_ENTRY _ZTI7S2186C4[];
extern  VTBL_ENTRY _ZTV7S2186C4[];
extern Class_Descriptor cd_S2186C3;
extern VTBL_ENTRY _ZTI7S2186C3[];
extern  VTBL_ENTRY _ZTV7S2186C3[];
extern Class_Descriptor cd_S2186C2;
extern VTBL_ENTRY _ZTI7S2186C2[];
extern  VTBL_ENTRY _ZTV7S2186C2[];
static Base_Class bases_S2186C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2186C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2186C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2186C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2186C1[];
extern void _ZN7S2186C1D1Ev();
extern void _ZN7S2186C1D0Ev();
extern void _ZN7S2186C42v3Ev();
extern void _ZN7S2186C42v4Ev();
extern void _ZN7S2186C42v5Ev();
extern void _ZN7S2186C32v6Ev();
extern void _ZN7S2186C32v7Ev();
extern void _ZN7S2186C32v8Ev();
extern void _ZN7S2186C32v9Ev();
extern void _ZN7S2186C23v10Ev();
extern void _ZN7S2186C23v11Ev();
extern void _ZN7S2186C23v12Ev();
extern void _ZN7S2186C12v1Ev();
extern void _ZN7S2186C12v2Ev();
static  VTBL_ENTRY vtc_S2186C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2186C1[0]),
  (VTBL_ENTRY)&_ZN7S2186C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2186C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2186C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2186C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2186C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2186C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2186C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2186C32v8Ev,
  (VTBL_ENTRY)&_ZN7S2186C32v9Ev,
  (VTBL_ENTRY)&_ZN7S2186C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2186C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2186C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2186C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2186C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S2186C1[];
extern  VTBL_ENTRY _ZTV7S2186C1[];
Class_Descriptor cd_S2186C1 = {  "S2186C1", // class name
  bases_S2186C1, 3,
  &(vtc_S2186C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(248,148), // object size
  NSPAIRA(_ZTI7S2186C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2186C1),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  S20683C3  {
  void *s20683c3f0[7];
  void  mf20683c3(); // _ZN8S20683C39mf20683c3Ev
};
//SIG(-1 S20683C3) C1{ m Fp[7]}


void  S20683C3 ::mf20683c3(){}

static void Test_S20683C3()
{
  {
    init_simple_test("S20683C3");
    S20683C3 lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S20683C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20683C3)");
    check_field_offset(lv, s20683c3f0, 0, "S20683C3.s20683c3f0");
  }
}
static Arrange_To_Call_Me vS20683C3(Test_S20683C3, "S20683C3", ABISELECT(56,28));

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S20683C3[];
VTBL_ENTRY *P__ZTI8S20683C3 = _ZTI8S20683C3; 
Class_Descriptor cd_S20683C3 = {  "S20683C3", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI8S20683C3),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

union  S20683C5_nt  {
  void *s20683c5f0;
  void  mf20683c5(); // _ZN11S20683C5_nt9mf20683c5Ev
};
//SIG(1 S20683C5_nt) U1{ m Fp}

#endif // __cplusplus
#ifdef __cplusplus

struct  S20683C4  : virtual S20683C3 {
  ::S20683C5_nt s20683c4f0;
  long double s20683c4f1;
  virtual  ~S20683C4(); // _ZN8S20683C4D2Ev
  S20683C4(); // tgen
};
//SIG(-1 S20683C4) C1{ VBC2{ m Fp[7]} vd FU3{ m Fp} FD}


 S20683C4 ::~S20683C4(){ note_dtor("S20683C4", this);}
S20683C4 ::S20683C4(){ note_ctor("S20683C4", this);} // tgen

static void Test_S20683C4()
{
  extern Class_Descriptor cd_S20683C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,13)];
    init_test(&cd_S20683C4, buf);
    S20683C4 *dp, &lv = *(dp=new (buf) S20683C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,48), "sizeof(S20683C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20683C4)");
    check_base_class_offset(lv, (S20683C3*), ABISELECT(32,20), "S20683C4");
    check_field_offset(lv, s20683c4f0, ABISELECT(8,4), "S20683C4.s20683c4f0");
    check_field_offset(lv, s20683c4f1, ABISELECT(16,8), "S20683C4.s20683c4f1");
    test_class_info(&lv, &cd_S20683C4);
    dp->~S20683C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20683C4(Test_S20683C4, "S20683C4", ABISELECT(96,48));

#else // __cplusplus

extern void _ZN8S20683C4C1Ev();
extern void _ZN8S20683C4D2Ev();
Name_Map name_map_S20683C4[] = {
  NSPAIR(_ZN8S20683C4C1Ev),
  NSPAIR(_ZN8S20683C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20683C3;
extern VTBL_ENTRY _ZTI8S20683C3[];
static Base_Class bases_S20683C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20683C3,    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
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20683C4[];
extern void _ZN8S20683C4D1Ev();
extern void _ZN8S20683C4D0Ev();
static  VTBL_ENTRY vtc_S20683C4[] = {
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C4[0]),
  (VTBL_ENTRY)&_ZN8S20683C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C4D0Ev,
};
extern VTBL_ENTRY _ZTV8S20683C4[];
static  VTT_ENTRY vtt_S20683C4[] = {
  {&(_ZTV8S20683C4[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S20683C4[];
extern  VTBL_ENTRY _ZTV8S20683C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C4[];
Class_Descriptor cd_S20683C4 = {  "S20683C4", // class name
  bases_S20683C4, 1,
  &(vtc_S20683C4[0]), // expected_vtbl_contents
  &(vtt_S20683C4[0]), // expected_vtt_contents
  ABISELECT(96,48), // object size
  NSPAIRA(_ZTI8S20683C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20683C4),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20683C4),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  S20683C2  : virtual S20683C3 , S20683C4 {
  void *s20683c2f0;
  virtual  ~S20683C2(); // _ZN8S20683C2D2Ev
  S20683C2(); // tgen
};
//SIG(-1 S20683C2) C1{ VBC2{ m Fp[7]} BC3{ VBC2 vd FU4{ m Fp} FD} vd Fp}


 S20683C2 ::~S20683C2(){ note_dtor("S20683C2", this);}
S20683C2 ::S20683C2(){ note_ctor("S20683C2", this);} // tgen

static void Test_S20683C2()
{
  extern Class_Descriptor cd_S20683C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,14)];
    init_test(&cd_S20683C2, buf);
    S20683C2 *dp, &lv = *(dp=new (buf) S20683C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,52), "sizeof(S20683C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20683C2)");
    check_base_class_offset(lv, (S20683C3*), ABISELECT(40,24), "S20683C2");
    check_base_class_offset(lv, (S20683C3*)(S20683C4*), ABISELECT(40,24), "S20683C2");
    check_base_class_offset(lv, (S20683C4*), 0, "S20683C2");
    check_field_offset(lv, s20683c2f0, ABISELECT(32,20), "S20683C2.s20683c2f0");
    test_class_info(&lv, &cd_S20683C2);
    dp->~S20683C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20683C2(Test_S20683C2, "S20683C2", ABISELECT(96,52));

#else // __cplusplus

extern void _ZN8S20683C2C1Ev();
extern void _ZN8S20683C2D2Ev();
Name_Map name_map_S20683C2[] = {
  NSPAIR(_ZN8S20683C2C1Ev),
  NSPAIR(_ZN8S20683C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20683C3;
extern VTBL_ENTRY _ZTI8S20683C3[];
extern Class_Descriptor cd_S20683C4;
extern VTBL_ENTRY _ZTI8S20683C4[];
extern  VTBL_ENTRY _ZTV8S20683C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C4[];
static Base_Class bases_S20683C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20683C3,    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
    -1, //immediately_derived
  1, 1},
  {&cd_S20683C4,    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 _ZTI8S20683C2[];
extern void _ZN8S20683C2D1Ev();
extern void _ZN8S20683C2D0Ev();
static  VTBL_ENTRY vtc_S20683C2[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C2[0]),
  (VTBL_ENTRY)&_ZN8S20683C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C2D0Ev,
};
extern VTBL_ENTRY _ZTV8S20683C2[];
extern void _ZN8S20683C4D1Ev();
extern void _ZN8S20683C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C4__8S20683C2[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C4[0]),
  (VTBL_ENTRY)&_ZN8S20683C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C4D0Ev,
};
static  VTT_ENTRY vtt_S20683C2[] = {
  {&(_ZTV8S20683C2[3]),  3,5},
  {&(_tg__ZTV8S20683C4__8S20683C2[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S20683C2[];
extern  VTBL_ENTRY _ZTV8S20683C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C2[];
Class_Descriptor cd_S20683C2 = {  "S20683C2", // class name
  bases_S20683C2, 2,
  &(vtc_S20683C2[0]), // expected_vtbl_contents
  &(vtt_S20683C2[0]), // expected_vtt_contents
  ABISELECT(96,52), // object size
  NSPAIRA(_ZTI8S20683C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20683C2),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20683C2),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  S20683C9  : S20683C2 , S20683C3 , virtual S20683C4 {
  __tsi64 s20683c9f0:7;
  void *s20683c9f1;
  virtual  ~S20683C9(); // _ZN8S20683C9D2Ev
  S20683C9(); // tgen
};
//SIG(-1 S20683C9) C1{ BC2{ VBC3{ m Fp[7]} BC4{ VBC3 vd FU5{ m Fp} FD} vd Fp} BC3 VBC4 vd FL:7 Fp}


 S20683C9 ::~S20683C9(){ note_dtor("S20683C9", this);}
S20683C9 ::S20683C9(){ note_ctor("S20683C9", this);} // tgen

static void Test_S20683C9()
{
  extern Class_Descriptor cd_S20683C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,28)];
    init_test(&cd_S20683C9, buf);
    S20683C9 *dp, &lv = *(dp=new (buf) S20683C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,108), "sizeof(S20683C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20683C9)");
    check_base_class_offset(lv, (S20683C3*)(S20683C2*), ABISELECT(112,60), "S20683C9");
    check_base_class_offset(lv, (S20683C3*)(S20683C4*)(S20683C2*), ABISELECT(112,60), "S20683C9");
    /*is_ambiguous_... S20683C9::S20683C4 */ AMB_check_base_class_offset(lv, (S20683C3*)(S20683C4*), ABISELECT(112,60), "S20683C9");
    check_base_class_offset(lv, (S20683C4*)(S20683C2*), 0, "S20683C9");
    check_base_class_offset(lv, (S20683C2*), 0, "S20683C9");
    /*is_ambiguous_... S20683C9::S20683C3 */ AMB_check_base_class_offset(lv, (S20683C3*), ABISELECT(40,24), "S20683C9");
    /*is_ambiguous_... S20683C9::S20683C4 */ AMB_check_base_class_offset(lv, (S20683C4*), ABISELECT(176,88), "S20683C9");
    set_bf_and_test(lv, s20683c9f0, ABISELECT(96,52), 0, 7, 1, "S20683C9");
    set_bf_and_test(lv, s20683c9f0, ABISELECT(96,52), 0, 7, hide_sll(1LL<<6), "S20683C9");
    check_field_offset(lv, s20683c9f1, ABISELECT(104,56), "S20683C9.s20683c9f1");
    test_class_info(&lv, &cd_S20683C9);
    dp->~S20683C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20683C9(Test_S20683C9, "S20683C9", ABISELECT(208,108));

#else // __cplusplus

extern void _ZN8S20683C9C1Ev();
extern void _ZN8S20683C9D2Ev();
Name_Map name_map_S20683C9[] = {
  NSPAIR(_ZN8S20683C9C1Ev),
  NSPAIR(_ZN8S20683C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20683C3;
extern VTBL_ENTRY _ZTI8S20683C3[];
extern Class_Descriptor cd_S20683C4;
extern VTBL_ENTRY _ZTI8S20683C4[];
extern  VTBL_ENTRY _ZTV8S20683C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C4[];
extern Class_Descriptor cd_S20683C2;
extern VTBL_ENTRY _ZTI8S20683C2[];
extern  VTBL_ENTRY _ZTV8S20683C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C2[];
extern Class_Descriptor cd_S20683C3;
extern VTBL_ENTRY _ZTI8S20683C3[];
extern Class_Descriptor cd_S20683C4;
extern VTBL_ENTRY _ZTI8S20683C4[];
extern  VTBL_ENTRY _ZTV8S20683C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C4[];
static Base_Class bases_S20683C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20683C3,    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
    1, //immediately_derived
  0, 1},
  {&cd_S20683C4,    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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20683C2,    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},
  {&cd_S20683C3,    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
    -1, //immediately_derived
  1, 0},
  {&cd_S20683C4,    ABISELECT(176,88), //bcp->offset
    6, //bcp->virtual_function_table_offset
    4, //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},
  {0}};
extern VTBL_ENTRY _ZTI8S20683C9[];
extern void _ZN8S20683C9D1Ev();
extern void _ZN8S20683C9D0Ev();
extern void ABISELECT(_ZTv0_n32_N8S20683C9D1Ev,_ZTv0_n16_N8S20683C9D1Ev)();
extern void ABISELECT(_ZThn176_N8S20683C9D1Ev,_ZThn88_N8S20683C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20683C9D0Ev,_ZTv0_n16_N8S20683C9D0Ev)();
extern void ABISELECT(_ZThn176_N8S20683C9D0Ev,_ZThn88_N8S20683C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20683C9[] = {
  ABISELECT(176,88),
  ABISELECT(112,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C9[0]),
  (VTBL_ENTRY)&_ZN8S20683C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C9D0Ev,
  ABISELECT(-176,-88),
  ABISELECT(-64,-28),
  ABISELECT(-176,-88),
  (VTBL_ENTRY)&(_ZTI8S20683C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20683C9D1Ev,_ZTv0_n16_N8S20683C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20683C9D0Ev,_ZTv0_n16_N8S20683C9D0Ev),
};
extern VTBL_ENTRY _ZTV8S20683C9[];
extern void _ZN8S20683C2D1Ev();
extern void _ZN8S20683C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C2__8S20683C9[] = {
  ABISELECT(112,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C2[0]),
  (VTBL_ENTRY)&_ZN8S20683C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C2D0Ev,
};
extern void _ZN8S20683C4D1Ev();
extern void _ZN8S20683C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C48S20683C2__8S20683C9[] = {
  ABISELECT(112,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C4[0]),
  (VTBL_ENTRY)&_ZN8S20683C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C4D0Ev,
};
extern void _ZN8S20683C4D1Ev();
extern void _ZN8S20683C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C4__A1__8S20683C9[] = {
  ABISELECT(-64,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C4[0]),
  (VTBL_ENTRY)&_ZN8S20683C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C4D0Ev,
};
static  VTT_ENTRY vtt_S20683C9[] = {
  {&(_ZTV8S20683C9[4]),  4,12},
  {&(_tg__ZTV8S20683C2__8S20683C9[3]),  3,5},
  {&(_tg__ZTV8S20683C48S20683C2__8S20683C9[3]),  3,5},
  {&(_ZTV8S20683C9[10]),  10,12},
  {&(_tg__ZTV8S20683C4__A1__8S20683C9[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S20683C9[];
extern  VTBL_ENTRY _ZTV8S20683C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C9[];
static VTBL_ENTRY alt_thunk_names2[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20683C9D0Ev,_ZTv0_n16_N8S20683C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S20683C9D0Ev,_ZThn88_N8S20683C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20683C9D1Ev,_ZTv0_n16_N8S20683C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S20683C9D1Ev,_ZThn88_N8S20683C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20683C9 = {  "S20683C9", // class name
  bases_S20683C9, 5,
  &(vtc_S20683C9[0]), // expected_vtbl_contents
  &(vtt_S20683C9[0]), // expected_vtt_contents
  ABISELECT(208,108), // object size
  NSPAIRA(_ZTI8S20683C9),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20683C9),12, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20683C9),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names2,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20683C10  : virtual S20683C9 {
  virtual  ~S20683C10(); // _ZN9S20683C10D2Ev
  S20683C10(); // tgen
};
//SIG(-1 S20683C10) C1{ VBC2{ BC3{ VBC4{ m Fp[7]} BC5{ VBC4 vd FU6{ m Fp} FD} vd Fp} BC4 VBC5 vd FL:7 Fp} vd}


 S20683C10 ::~S20683C10(){ note_dtor("S20683C10", this);}
S20683C10 ::S20683C10(){ note_ctor("S20683C10", this);} // tgen

static void Test_S20683C10()
{
  extern Class_Descriptor cd_S20683C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(15,29)];
    init_test(&cd_S20683C10, buf);
    S20683C10 *dp, &lv = *(dp=new (buf) S20683C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,112), "sizeof(S20683C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20683C10)");
    check_base_class_offset(lv, (S20683C3*)(S20683C2*)(S20683C9*), ABISELECT(128,64), "S20683C10");
    check_base_class_offset(lv, (S20683C3*)(S20683C4*)(S20683C2*)(S20683C9*), ABISELECT(128,64), "S20683C10");
    /*is_ambiguous_... S20683C10::S20683C4 */ AMB_check_base_class_offset(lv, (S20683C3*)(S20683C4*), ABISELECT(128,64), "S20683C10");
    check_base_class_offset(lv, (S20683C4*)(S20683C2*)(S20683C9*), ABISELECT(16,4), "S20683C10");
    check_base_class_offset(lv, (S20683C2*)(S20683C9*), ABISELECT(16,4), "S20683C10");
    /*is_ambiguous_... S20683C9::S20683C3 */ AMB_check_base_class_offset(lv, (S20683C3*)(S20683C9*), ABISELECT(56,28), "S20683C10");
    /*is_ambiguous_... S20683C9::S20683C4 */ AMB_check_base_class_offset(lv, (S20683C4*)(S20683C9*), ABISELECT(192,92), "S20683C10");
    check_base_class_offset(lv, (S20683C9*), ABISELECT(16,4), "S20683C10");
    test_class_info(&lv, &cd_S20683C10);
    dp->~S20683C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20683C10(Test_S20683C10, "S20683C10", ABISELECT(224,112));

#else // __cplusplus

extern void _ZN9S20683C10C1Ev();
extern void _ZN9S20683C10D2Ev();
Name_Map name_map_S20683C10[] = {
  NSPAIR(_ZN9S20683C10C1Ev),
  NSPAIR(_ZN9S20683C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20683C3;
extern VTBL_ENTRY _ZTI8S20683C3[];
extern Class_Descriptor cd_S20683C4;
extern VTBL_ENTRY _ZTI8S20683C4[];
extern  VTBL_ENTRY _ZTV8S20683C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C4[];
extern Class_Descriptor cd_S20683C2;
extern VTBL_ENTRY _ZTI8S20683C2[];
extern  VTBL_ENTRY _ZTV8S20683C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C2[];
extern Class_Descriptor cd_S20683C3;
extern VTBL_ENTRY _ZTI8S20683C3[];
extern Class_Descriptor cd_S20683C4;
extern VTBL_ENTRY _ZTI8S20683C4[];
extern  VTBL_ENTRY _ZTV8S20683C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C4[];
extern Class_Descriptor cd_S20683C9;
extern VTBL_ENTRY _ZTI8S20683C9[];
extern  VTBL_ENTRY _ZTV8S20683C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C9[];
static Base_Class bases_S20683C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20683C3,    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, 1},
  {&cd_S20683C4,    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
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20683C2,    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
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20683C3,    ABISELECT(56,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
    5, //immediately_derived
  0, 0},
  {&cd_S20683C4,    ABISELECT(192,92), //bcp->offset
    14, //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
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20683C9,    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
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20683C10[];
extern void _ZN9S20683C10D1Ev();
extern void _ZN9S20683C10D0Ev();
extern void ABISELECT(_ZTv0_n40_N9S20683C10D1Ev,_ZTv0_n20_N9S20683C10D1Ev)();
extern void ABISELECT(_ZThn16_N9S20683C10D1Ev,_ZThn4_N9S20683C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20683C10D0Ev,_ZTv0_n20_N9S20683C10D0Ev)();
extern void ABISELECT(_ZThn16_N9S20683C10D0Ev,_ZThn4_N9S20683C10D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20683C10D1Ev,_ZTv0_n16_N9S20683C10D1Ev)();
extern void ABISELECT(_ZThn192_N9S20683C10D1Ev,_ZThn92_N9S20683C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20683C10D0Ev,_ZTv0_n16_N9S20683C10D0Ev)();
extern void ABISELECT(_ZThn192_N9S20683C10D0Ev,_ZThn92_N9S20683C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20683C10[] = {
  ABISELECT(192,92),
  ABISELECT(128,64),
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20683C10[0]),
  (VTBL_ENTRY)&_ZN9S20683C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20683C10D0Ev,
  ABISELECT(-16,-4),
  ABISELECT(176,88),
  ABISELECT(112,60),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI9S20683C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20683C10D1Ev,_ZTv0_n20_N9S20683C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20683C10D0Ev,_ZTv0_n20_N9S20683C10D0Ev),
  ABISELECT(-192,-92),
  ABISELECT(-64,-28),
  ABISELECT(-192,-92),
  (VTBL_ENTRY)&(_ZTI9S20683C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20683C10D1Ev,_ZTv0_n16_N9S20683C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20683C10D0Ev,_ZTv0_n16_N9S20683C10D0Ev),
};
extern VTBL_ENTRY _ZTV9S20683C10[];
extern void _ZN8S20683C9D1Ev();
extern void _ZN8S20683C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C9__9S20683C10[] = {
  ABISELECT(176,88),
  ABISELECT(112,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C9[0]),
  (VTBL_ENTRY)&_ZN8S20683C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C9D0Ev,
};
extern void _ZN8S20683C2D1Ev();
extern void _ZN8S20683C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C28S20683C9__9S20683C10[] = {
  ABISELECT(112,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C2[0]),
  (VTBL_ENTRY)&_ZN8S20683C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C2D0Ev,
};
extern void _ZN8S20683C4D1Ev();
extern void _ZN8S20683C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C48S20683C28S20683C9__9S20683C10[] = {
  ABISELECT(112,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C4[0]),
  (VTBL_ENTRY)&_ZN8S20683C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C4D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S20683C9D1Ev,_ZTv0_n16_N8S20683C9D1Ev)();
extern void ABISELECT(_ZThn176_N8S20683C9D1Ev,_ZThn88_N8S20683C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20683C9D0Ev,_ZTv0_n16_N8S20683C9D0Ev)();
extern void ABISELECT(_ZThn176_N8S20683C9D0Ev,_ZThn88_N8S20683C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20683C4__A1__8S20683C9__9S20683C10[] = {
  ABISELECT(-176,-88),
  ABISELECT(-64,-28),
  ABISELECT(-176,-88),
  (VTBL_ENTRY)&(_ZTI8S20683C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20683C9D1Ev,_ZTv0_n16_N8S20683C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20683C9D0Ev,_ZTv0_n16_N8S20683C9D0Ev),
};
extern void _ZN8S20683C4D1Ev();
extern void _ZN8S20683C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C4__A1__9S20683C10[] = {
  ABISELECT(-64,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C4[0]),
  (VTBL_ENTRY)&_ZN8S20683C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C4D0Ev,
};
static  VTT_ENTRY vtt_S20683C10[] = {
  {&(_ZTV9S20683C10[5]),  5,20},
  {&(_ZTV9S20683C10[12]),  12,20},
  {&(_ZTV9S20683C10[18]),  18,20},
  {&(_tg__ZTV8S20683C9__9S20683C10[4]),  4,6},
  {&(_tg__ZTV8S20683C28S20683C9__9S20683C10[3]),  3,5},
  {&(_tg__ZTV8S20683C48S20683C28S20683C9__9S20683C10[3]),  3,5},
  {&(_tg__ZTV8S20683C4__A1__8S20683C9__9S20683C10[4]),  4,6},
  {&(_tg__ZTV8S20683C4__A1__9S20683C10[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S20683C10[];
extern  VTBL_ENTRY _ZTV9S20683C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20683C10[];
static VTBL_ENTRY alt_thunk_names3[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20683C9D0Ev,_ZTv0_n16_N8S20683C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S20683C9D0Ev,_ZThn88_N8S20683C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20683C9D1Ev,_ZTv0_n16_N8S20683C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S20683C9D1Ev,_ZThn88_N8S20683C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20683C10D0Ev,_ZTv0_n16_N9S20683C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N9S20683C10D0Ev,_ZThn92_N9S20683C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20683C10D1Ev,_ZTv0_n16_N9S20683C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N9S20683C10D1Ev,_ZThn92_N9S20683C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20683C10D0Ev,_ZTv0_n20_N9S20683C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20683C10D0Ev,_ZThn4_N9S20683C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20683C10D1Ev,_ZTv0_n20_N9S20683C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20683C10D1Ev,_ZThn4_N9S20683C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20683C10 = {  "S20683C10", // class name
  bases_S20683C10, 6,
  &(vtc_S20683C10[0]), // expected_vtbl_contents
  &(vtt_S20683C10[0]), // expected_vtt_contents
  ABISELECT(224,112), // object size
  NSPAIRA(_ZTI9S20683C10),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S20683C10),20, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20683C10),8, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names3,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20683C8  : virtual S20683C9 , virtual S20683C10 , S20683C3 {
  virtual  ~S20683C8(); // _ZN8S20683C8D2Ev
  S20683C8(); // tgen
};
//SIG(-1 S20683C8) C1{ VBC2{ BC3{ VBC4{ m Fp[7]} BC5{ VBC4 vd FU6{ m Fp} FD} vd Fp} BC4 VBC5 vd FL:7 Fp} VBC7{ VBC2 vd} BC4 vd}


 S20683C8 ::~S20683C8(){ note_dtor("S20683C8", this);}
S20683C8 ::S20683C8(){ note_ctor("S20683C8", this);} // tgen

static void Test_S20683C8()
{
  extern Class_Descriptor cd_S20683C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(18,36)];
    init_test(&cd_S20683C8, buf);
    S20683C8 *dp, &lv = *(dp=new (buf) S20683C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,140), "sizeof(S20683C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20683C8)");
    check_base_class_offset(lv, (S20683C3*)(S20683C2*)(S20683C9*), ABISELECT(176,92), "S20683C8");
    check_base_class_offset(lv, (S20683C3*)(S20683C4*)(S20683C2*)(S20683C9*), ABISELECT(176,92), "S20683C8");
    /*is_ambiguous_... S20683C8::S20683C4 */ AMB_check_base_class_offset(lv, (S20683C3*)(S20683C4*), ABISELECT(176,92), "S20683C8");
    check_base_class_offset(lv, (S20683C4*)(S20683C2*)(S20683C9*), ABISELECT(64,32), "S20683C8");
    check_base_class_offset(lv, (S20683C2*)(S20683C9*), ABISELECT(64,32), "S20683C8");
    /*is_ambiguous_... S20683C9::S20683C3 */ AMB_check_base_class_offset(lv, (S20683C3*)(S20683C9*), ABISELECT(104,56), "S20683C8");
    /*is_ambiguous_... S20683C9::S20683C4 */ AMB_check_base_class_offset(lv, (S20683C4*)(S20683C9*), ABISELECT(240,120), "S20683C8");
    check_base_class_offset(lv, (S20683C9*), ABISELECT(64,32), "S20683C8");
    check_base_class_offset(lv, (S20683C9*)(S20683C10*), ABISELECT(64,32), "S20683C8");
    check_base_class_offset(lv, (S20683C10*), 0, "S20683C8");
    /*is_ambiguous_... S20683C8::S20683C3 */ AMB_check_base_class_offset(lv, (S20683C3*), ABISELECT(8,4), "S20683C8");
    test_class_info(&lv, &cd_S20683C8);
    dp->~S20683C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20683C8(Test_S20683C8, "S20683C8", ABISELECT(272,140));

#else // __cplusplus

extern void _ZN8S20683C8C1Ev();
extern void _ZN8S20683C8D2Ev();
Name_Map name_map_S20683C8[] = {
  NSPAIR(_ZN8S20683C8C1Ev),
  NSPAIR(_ZN8S20683C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20683C3;
extern VTBL_ENTRY _ZTI8S20683C3[];
extern Class_Descriptor cd_S20683C4;
extern VTBL_ENTRY _ZTI8S20683C4[];
extern  VTBL_ENTRY _ZTV8S20683C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C4[];
extern Class_Descriptor cd_S20683C2;
extern VTBL_ENTRY _ZTI8S20683C2[];
extern  VTBL_ENTRY _ZTV8S20683C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C2[];
extern Class_Descriptor cd_S20683C3;
extern VTBL_ENTRY _ZTI8S20683C3[];
extern Class_Descriptor cd_S20683C4;
extern VTBL_ENTRY _ZTI8S20683C4[];
extern  VTBL_ENTRY _ZTV8S20683C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C4[];
extern Class_Descriptor cd_S20683C9;
extern VTBL_ENTRY _ZTI8S20683C9[];
extern  VTBL_ENTRY _ZTV8S20683C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C9[];
extern Class_Descriptor cd_S20683C10;
extern VTBL_ENTRY _ZTI9S20683C10[];
extern  VTBL_ENTRY _ZTV9S20683C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20683C10[];
extern Class_Descriptor cd_S20683C3;
extern VTBL_ENTRY _ZTI8S20683C3[];
static Base_Class bases_S20683C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20683C3,    ABISELECT(176,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
    1, //immediately_derived
  0, 1},
  {&cd_S20683C4,    ABISELECT(64,32), //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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20683C2,    ABISELECT(64,32), //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
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20683C3,    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
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20683C4,    ABISELECT(240,120), //bcp->offset
    16, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20683C9,    ABISELECT(64,32), //bcp->offset
    9, //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
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20683C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20683C3,    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 _ZTI8S20683C8[];
extern void _ZN8S20683C8D1Ev();
extern void _ZN8S20683C8D0Ev();
extern void ABISELECT(_ZTv0_n40_N8S20683C8D1Ev,_ZTv0_n20_N8S20683C8D1Ev)();
extern void ABISELECT(_ZThn64_N8S20683C8D1Ev,_ZThn32_N8S20683C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20683C8D0Ev,_ZTv0_n20_N8S20683C8D0Ev)();
extern void ABISELECT(_ZThn64_N8S20683C8D0Ev,_ZThn32_N8S20683C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20683C8D1Ev,_ZTv0_n16_N8S20683C8D1Ev)();
extern void ABISELECT(_ZThn240_N8S20683C8D1Ev,_ZThn120_N8S20683C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20683C8D0Ev,_ZTv0_n16_N8S20683C8D0Ev)();
extern void ABISELECT(_ZThn240_N8S20683C8D0Ev,_ZThn120_N8S20683C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20683C8[] = {
  0,
  0,
  ABISELECT(240,120),
  ABISELECT(176,92),
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C8[0]),
  (VTBL_ENTRY)&_ZN8S20683C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C8D0Ev,
  ABISELECT(-64,-32),
  ABISELECT(176,88),
  ABISELECT(112,60),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S20683C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20683C8D1Ev,_ZTv0_n20_N8S20683C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20683C8D0Ev,_ZTv0_n20_N8S20683C8D0Ev),
  ABISELECT(-240,-120),
  ABISELECT(-64,-28),
  ABISELECT(-240,-120),
  (VTBL_ENTRY)&(_ZTI8S20683C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20683C8D1Ev,_ZTv0_n16_N8S20683C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20683C8D0Ev,_ZTv0_n16_N8S20683C8D0Ev),
};
extern VTBL_ENTRY _ZTV8S20683C8[];
extern void _ZN8S20683C9D1Ev();
extern void _ZN8S20683C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C9__8S20683C8[] = {
  ABISELECT(176,88),
  ABISELECT(112,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C9[0]),
  (VTBL_ENTRY)&_ZN8S20683C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C9D0Ev,
};
extern void _ZN8S20683C2D1Ev();
extern void _ZN8S20683C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C28S20683C9__8S20683C8[] = {
  ABISELECT(112,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C2[0]),
  (VTBL_ENTRY)&_ZN8S20683C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C2D0Ev,
};
extern void _ZN8S20683C4D1Ev();
extern void _ZN8S20683C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C48S20683C28S20683C9__8S20683C8[] = {
  ABISELECT(112,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C4[0]),
  (VTBL_ENTRY)&_ZN8S20683C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C4D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S20683C9D1Ev,_ZTv0_n16_N8S20683C9D1Ev)();
extern void ABISELECT(_ZThn176_N8S20683C9D1Ev,_ZThn88_N8S20683C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20683C9D0Ev,_ZTv0_n16_N8S20683C9D0Ev)();
extern void ABISELECT(_ZThn176_N8S20683C9D0Ev,_ZThn88_N8S20683C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20683C4__A1__8S20683C9__8S20683C8[] = {
  ABISELECT(-176,-88),
  ABISELECT(-64,-28),
  ABISELECT(-176,-88),
  (VTBL_ENTRY)&(_ZTI8S20683C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20683C9D1Ev,_ZTv0_n16_N8S20683C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20683C9D0Ev,_ZTv0_n16_N8S20683C9D0Ev),
};
extern void _ZN8S20683C4D1Ev();
extern void _ZN8S20683C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C4__A1__8S20683C8[] = {
  ABISELECT(-64,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C4[0]),
  (VTBL_ENTRY)&_ZN8S20683C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C4D0Ev,
};
extern void _ZN9S20683C10D1Ev();
extern void _ZN9S20683C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20683C10__8S20683C8[] = {
  ABISELECT(240,120),
  ABISELECT(176,92),
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI9S20683C10[0]),
  (VTBL_ENTRY)&_ZN9S20683C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20683C10D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S20683C10D1Ev,_ZTv0_n20_N9S20683C10D1Ev)();
extern void ABISELECT(_ZThn64_N9S20683C10D1Ev,_ZThn32_N9S20683C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20683C10D0Ev,_ZTv0_n20_N9S20683C10D0Ev)();
extern void ABISELECT(_ZThn64_N9S20683C10D0Ev,_ZThn32_N9S20683C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20683C9__9S20683C10__8S20683C8[] = {
  ABISELECT(-64,-32),
  ABISELECT(176,88),
  ABISELECT(112,60),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI9S20683C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20683C10D1Ev,_ZTv0_n20_N9S20683C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20683C10D0Ev,_ZTv0_n20_N9S20683C10D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20683C10D1Ev,_ZTv0_n16_N9S20683C10D1Ev)();
extern void ABISELECT(_ZThn240_N9S20683C10D1Ev,_ZThn120_N9S20683C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20683C10D0Ev,_ZTv0_n16_N9S20683C10D0Ev)();
extern void ABISELECT(_ZThn240_N9S20683C10D0Ev,_ZThn120_N9S20683C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20683C4__A1__9S20683C10__8S20683C8[] = {
  ABISELECT(-240,-120),
  ABISELECT(-64,-28),
  ABISELECT(-240,-120),
  (VTBL_ENTRY)&(_ZTI9S20683C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20683C10D1Ev,_ZTv0_n16_N9S20683C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20683C10D0Ev,_ZTv0_n16_N9S20683C10D0Ev),
};
static  VTT_ENTRY vtt_S20683C8[] = {
  {&(_ZTV8S20683C8[7]),  7,22},
  {&(_ZTV8S20683C8[14]),  14,22},
  {&(_ZTV8S20683C8[20]),  20,22},
  {&(_ZTV8S20683C8[7]),  7,22},
  {&(_tg__ZTV8S20683C9__8S20683C8[4]),  4,6},
  {&(_tg__ZTV8S20683C28S20683C9__8S20683C8[3]),  3,5},
  {&(_tg__ZTV8S20683C48S20683C28S20683C9__8S20683C8[3]),  3,5},
  {&(_tg__ZTV8S20683C4__A1__8S20683C9__8S20683C8[4]),  4,6},
  {&(_tg__ZTV8S20683C4__A1__8S20683C8[3]),  3,5},
  {&(_tg__ZTV9S20683C10__8S20683C8[5]),  5,7},
  {&(_tg__ZTV8S20683C9__9S20683C10__8S20683C8[5]),  5,7},
  {&(_tg__ZTV8S20683C4__A1__9S20683C10__8S20683C8[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S20683C8[];
extern  VTBL_ENTRY _ZTV8S20683C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C8[];
static VTBL_ENTRY alt_thunk_names4[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20683C10D0Ev,_ZTv0_n16_N9S20683C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S20683C10D0Ev,_ZThn120_N9S20683C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20683C10D1Ev,_ZTv0_n16_N9S20683C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S20683C10D1Ev,_ZThn120_N9S20683C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20683C10D0Ev,_ZTv0_n20_N9S20683C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S20683C10D0Ev,_ZThn32_N9S20683C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20683C10D1Ev,_ZTv0_n20_N9S20683C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S20683C10D1Ev,_ZThn32_N9S20683C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20683C9D0Ev,_ZTv0_n16_N8S20683C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S20683C9D0Ev,_ZThn88_N8S20683C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20683C9D1Ev,_ZTv0_n16_N8S20683C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S20683C9D1Ev,_ZThn88_N8S20683C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20683C8D0Ev,_ZTv0_n16_N8S20683C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S20683C8D0Ev,_ZThn120_N8S20683C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20683C8D1Ev,_ZTv0_n16_N8S20683C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S20683C8D1Ev,_ZThn120_N8S20683C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20683C8D0Ev,_ZTv0_n20_N8S20683C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20683C8D0Ev,_ZThn32_N8S20683C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20683C8D1Ev,_ZTv0_n20_N8S20683C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20683C8D1Ev,_ZThn32_N8S20683C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20683C8 = {  "S20683C8", // class name
  bases_S20683C8, 8,
  &(vtc_S20683C8[0]), // expected_vtbl_contents
  &(vtt_S20683C8[0]), // expected_vtt_contents
  ABISELECT(272,140), // object size
  NSPAIRA(_ZTI8S20683C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20683C8),22, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20683C8),12, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names4,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20683C11  : virtual S20683C3 {
  ~S20683C11(); // tgen
  S20683C11(); // tgen
};
//SIG(-1 S20683C11) C1{ VBC2{ m Fp[7]}}


S20683C11 ::~S20683C11(){ note_dtor("S20683C11", this);} // tgen
S20683C11 ::S20683C11(){ note_ctor("S20683C11", this);} // tgen

static void Test_S20683C11()
{
  extern Class_Descriptor cd_S20683C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S20683C11, buf);
    S20683C11 *dp, &lv = *(dp=new (buf) S20683C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S20683C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20683C11)");
    check_base_class_offset(lv, (S20683C3*), ABISELECT(8,4), "S20683C11");
    test_class_info(&lv, &cd_S20683C11);
    dp->~S20683C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20683C11(Test_S20683C11, "S20683C11", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN9S20683C11C1Ev();
extern void _ZN9S20683C11D1Ev();
Name_Map name_map_S20683C11[] = {
  NSPAIR(_ZN9S20683C11C1Ev),
  NSPAIR(_ZN9S20683C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20683C3;
extern VTBL_ENTRY _ZTI8S20683C3[];
static Base_Class bases_S20683C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20683C3,    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, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20683C11[];
static  VTBL_ENTRY vtc_S20683C11[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20683C11[0]),
};
extern VTBL_ENTRY _ZTV9S20683C11[];
static  VTT_ENTRY vtt_S20683C11[] = {
  {&(_ZTV9S20683C11[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20683C11[];
extern  VTBL_ENTRY _ZTV9S20683C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20683C11[];
Class_Descriptor cd_S20683C11 = {  "S20683C11", // class name
  bases_S20683C11, 1,
  &(vtc_S20683C11[0]), // expected_vtbl_contents
  &(vtt_S20683C11[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI9S20683C11),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S20683C11),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20683C11),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  S20683C13  : virtual S20683C4 , S20683C3 , virtual S20683C11 , virtual S20683C9 , S20683C10 {
  ::S20683C5_nt s20683c13f0;
  ~S20683C13(); // tgen
  S20683C13(); // tgen
};
//SIG(-1 S20683C13) C1{ VBC2{ VBC3{ m Fp[7]} vd FU4{ m Fp} FD} BC3 VBC5{ VBC3} VBC6{ BC7{ VBC3 BC2 vd Fp} BC3 VBC2 vd FL:7 Fp} BC8{ VBC6 vd} FU4}


S20683C13 ::~S20683C13(){ note_dtor("S20683C13", this);} // tgen
S20683C13 ::S20683C13(){ note_ctor("S20683C13", this);} // tgen

static void Test_S20683C13()
{
  extern Class_Descriptor cd_S20683C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(19,38)];
    init_test(&cd_S20683C13, buf);
    S20683C13 *dp, &lv = *(dp=new (buf) S20683C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,148), "sizeof(S20683C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20683C13)");
    /*is_ambiguous_... S20683C13::S20683C4 */ AMB_check_base_class_offset(lv, (S20683C3*)(S20683C4*), ABISELECT(112,56), "S20683C13");
    check_base_class_offset(lv, (S20683C3*)(S20683C11*), ABISELECT(112,56), "S20683C13");
    check_base_class_offset(lv, (S20683C3*)(S20683C2*)(S20683C9*), ABISELECT(112,56), "S20683C13");
    check_base_class_offset(lv, (S20683C3*)(S20683C4*)(S20683C2*)(S20683C9*), ABISELECT(112,56), "S20683C13");
    /*is_ambiguous_... S20683C13::S20683C4 */ AMB_check_base_class_offset(lv, (S20683C4*), ABISELECT(80,36), "S20683C13");
    /*is_ambiguous_... S20683C9::S20683C4 */ AMB_check_base_class_offset(lv, (S20683C4*)(S20683C9*), ABISELECT(80,36), "S20683C13");
    /*is_ambiguous_... S20683C13::S20683C3 */ AMB_check_base_class_offset(lv, (S20683C3*), ABISELECT(8,4), "S20683C13");
    check_base_class_offset(lv, (S20683C11*), ABISELECT(168,84), "S20683C13");
    check_base_class_offset(lv, (S20683C4*)(S20683C2*)(S20683C9*), ABISELECT(176,88), "S20683C13");
    check_base_class_offset(lv, (S20683C2*)(S20683C9*), ABISELECT(176,88), "S20683C13");
    /*is_ambiguous_... S20683C9::S20683C3 */ AMB_check_base_class_offset(lv, (S20683C3*)(S20683C9*), ABISELECT(216,112), "S20683C13");
    check_base_class_offset(lv, (S20683C9*), ABISELECT(176,88), "S20683C13");
    check_base_class_offset(lv, (S20683C9*)(S20683C10*), ABISELECT(176,88), "S20683C13");
    check_base_class_offset(lv, (S20683C10*), 0, "S20683C13");
    check_field_offset(lv, s20683c13f0, ABISELECT(64,32), "S20683C13.s20683c13f0");
    test_class_info(&lv, &cd_S20683C13);
    dp->~S20683C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20683C13(Test_S20683C13, "S20683C13", ABISELECT(288,148));

#else // __cplusplus

extern void _ZN9S20683C13C1Ev();
extern void _ZN9S20683C13D1Ev();
Name_Map name_map_S20683C13[] = {
  NSPAIR(_ZN9S20683C13C1Ev),
  NSPAIR(_ZN9S20683C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20683C3;
extern VTBL_ENTRY _ZTI8S20683C3[];
extern Class_Descriptor cd_S20683C4;
extern VTBL_ENTRY _ZTI8S20683C4[];
extern  VTBL_ENTRY _ZTV8S20683C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C4[];
extern Class_Descriptor cd_S20683C3;
extern VTBL_ENTRY _ZTI8S20683C3[];
extern Class_Descriptor cd_S20683C11;
extern VTBL_ENTRY _ZTI9S20683C11[];
extern  VTBL_ENTRY _ZTV9S20683C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20683C11[];
extern Class_Descriptor cd_S20683C4;
extern VTBL_ENTRY _ZTI8S20683C4[];
extern  VTBL_ENTRY _ZTV8S20683C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C4[];
extern Class_Descriptor cd_S20683C2;
extern VTBL_ENTRY _ZTI8S20683C2[];
extern  VTBL_ENTRY _ZTV8S20683C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C2[];
extern Class_Descriptor cd_S20683C3;
extern VTBL_ENTRY _ZTI8S20683C3[];
extern Class_Descriptor cd_S20683C9;
extern VTBL_ENTRY _ZTI8S20683C9[];
extern  VTBL_ENTRY _ZTV8S20683C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C9[];
extern Class_Descriptor cd_S20683C10;
extern VTBL_ENTRY _ZTI9S20683C10[];
extern  VTBL_ENTRY _ZTV9S20683C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20683C10[];
static Base_Class bases_S20683C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20683C3,    ABISELECT(112,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
    1, //immediately_derived
  0, 1},
  {&cd_S20683C4,    ABISELECT(80,36), //bcp->offset
    8, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20683C3,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20683C11,    ABISELECT(168,84), //bcp->offset
    14, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20683C4,    ABISELECT(176,88), //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
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20683C2,    ABISELECT(176,88), //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
    7, //immediately_derived
  0, 0},
  {&cd_S20683C3,    ABISELECT(216,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
    7, //immediately_derived
  0, 0},
  {&cd_S20683C9,    ABISELECT(176,88), //bcp->offset
    17, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20683C10,    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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20683C13[];
extern void _ZN9S20683C13D1Ev();
extern void _ZN9S20683C13D0Ev();
extern void ABISELECT(_ZTv0_n32_N9S20683C13D1Ev,_ZTv0_n16_N9S20683C13D1Ev)();
extern void ABISELECT(_ZThn80_N9S20683C13D1Ev,_ZThn36_N9S20683C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20683C13D0Ev,_ZTv0_n16_N9S20683C13D0Ev)();
extern void ABISELECT(_ZThn80_N9S20683C13D0Ev,_ZThn36_N9S20683C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20683C13D1Ev,_ZTv0_n20_N9S20683C13D1Ev)();
extern void ABISELECT(_ZThn176_N9S20683C13D1Ev,_ZThn88_N9S20683C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20683C13D0Ev,_ZTv0_n20_N9S20683C13D0Ev)();
extern void ABISELECT(_ZThn176_N9S20683C13D0Ev,_ZThn88_N9S20683C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20683C13[] = {
  ABISELECT(168,84),
  ABISELECT(80,36),
  ABISELECT(112,56),
  ABISELECT(176,88),
  0,
  (VTBL_ENTRY)&(_ZTI9S20683C13[0]),
  (VTBL_ENTRY)&_ZN9S20683C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20683C13D0Ev,
  ABISELECT(-80,-36),
  ABISELECT(32,20),
  ABISELECT(-80,-36),
  (VTBL_ENTRY)&(_ZTI9S20683C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20683C13D1Ev,_ZTv0_n16_N9S20683C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20683C13D0Ev,_ZTv0_n16_N9S20683C13D0Ev),
  ABISELECT(-56,-28),
  ABISELECT(-168,-84),
  (VTBL_ENTRY)&(_ZTI9S20683C13[0]),
  ABISELECT(-176,-88),
  ABISELECT(-96,-52),
  ABISELECT(-64,-32),
  ABISELECT(-176,-88),
  (VTBL_ENTRY)&(_ZTI9S20683C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20683C13D1Ev,_ZTv0_n20_N9S20683C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20683C13D0Ev,_ZTv0_n20_N9S20683C13D0Ev),
};
extern VTBL_ENTRY _ZTV9S20683C13[];
extern void _ZN9S20683C10D1Ev();
extern void _ZN9S20683C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20683C10__9S20683C13[] = {
  ABISELECT(80,36),
  ABISELECT(112,56),
  ABISELECT(176,88),
  0,
  (VTBL_ENTRY)&(_ZTI9S20683C10[0]),
  (VTBL_ENTRY)&_ZN9S20683C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20683C10D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S20683C10D1Ev,_ZTv0_n20_N9S20683C10D1Ev)();
extern void ABISELECT(_ZThn176_N9S20683C10D1Ev,_ZThn88_N9S20683C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20683C10D0Ev,_ZTv0_n20_N9S20683C10D0Ev)();
extern void ABISELECT(_ZThn176_N9S20683C10D0Ev,_ZThn88_N9S20683C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20683C9__9S20683C10__9S20683C13[] = {
  ABISELECT(-176,-88),
  ABISELECT(-96,-52),
  ABISELECT(-64,-32),
  ABISELECT(-176,-88),
  (VTBL_ENTRY)&(_ZTI9S20683C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20683C10D1Ev,_ZTv0_n20_N9S20683C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20683C10D0Ev,_ZTv0_n20_N9S20683C10D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20683C10D1Ev,_ZTv0_n16_N9S20683C10D1Ev)();
extern void ABISELECT(_ZThn80_N9S20683C10D1Ev,_ZThn36_N9S20683C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20683C10D0Ev,_ZTv0_n16_N9S20683C10D0Ev)();
extern void ABISELECT(_ZThn80_N9S20683C10D0Ev,_ZThn36_N9S20683C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20683C4__A1__9S20683C10__9S20683C13[] = {
  ABISELECT(-80,-36),
  ABISELECT(32,20),
  ABISELECT(-80,-36),
  (VTBL_ENTRY)&(_ZTI9S20683C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20683C10D1Ev,_ZTv0_n16_N9S20683C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20683C10D0Ev,_ZTv0_n16_N9S20683C10D0Ev),
};
extern void _ZN8S20683C4D1Ev();
extern void _ZN8S20683C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C4__9S20683C13[] = {
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C4[0]),
  (VTBL_ENTRY)&_ZN8S20683C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20683C11__9S20683C13[] = {
  ABISELECT(-56,-28),
  0,
  (VTBL_ENTRY)&(_ZTI9S20683C11[0]),
};
extern void _ZN8S20683C9D1Ev();
extern void _ZN8S20683C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C9__9S20683C13[] = {
  ABISELECT(-96,-52),
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C9[0]),
  (VTBL_ENTRY)&_ZN8S20683C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C9D0Ev,
};
extern void _ZN8S20683C2D1Ev();
extern void _ZN8S20683C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C28S20683C9__9S20683C13[] = {
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C2[0]),
  (VTBL_ENTRY)&_ZN8S20683C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C2D0Ev,
};
extern void _ZN8S20683C4D1Ev();
extern void _ZN8S20683C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C48S20683C28S20683C9__A1__9S20683C13[] = {
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C4[0]),
  (VTBL_ENTRY)&_ZN8S20683C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C4D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S20683C9D1Ev,_ZTv0_n16_N8S20683C9D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S20683C9D0Ev,_ZTv0_n16_N8S20683C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20683C4__A1__8S20683C9__9S20683C13[] = {
  ABISELECT(96,52),
  ABISELECT(32,20),
  ABISELECT(96,52),
  (VTBL_ENTRY)&(_ZTI8S20683C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20683C9D1Ev,_ZTv0_n16_N8S20683C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20683C9D0Ev,_ZTv0_n16_N8S20683C9D0Ev),
};
static  VTT_ENTRY vtt_S20683C13[] = {
  {&(_ZTV9S20683C13[6]),  6,24},
  {&(_tg__ZTV9S20683C10__9S20683C13[5]),  5,7},
  {&(_tg__ZTV8S20683C9__9S20683C10__9S20683C13[5]),  5,7},
  {&(_tg__ZTV8S20683C4__A1__9S20683C10__9S20683C13[4]),  4,6},
  {&(_ZTV9S20683C13[12]),  12,24},
  {&(_ZTV9S20683C13[17]),  17,24},
  {&(_ZTV9S20683C13[22]),  22,24},
  {&(_tg__ZTV8S20683C4__9S20683C13[3]),  3,5},
  {&(_tg__ZTV9S20683C11__9S20683C13[3]),  3,3},
  {&(_tg__ZTV8S20683C9__9S20683C13[4]),  4,6},
  {&(_tg__ZTV8S20683C28S20683C9__9S20683C13[3]),  3,5},
  {&(_tg__ZTV8S20683C48S20683C28S20683C9__A1__9S20683C13[3]),  3,5},
  {&(_tg__ZTV8S20683C4__A1__8S20683C9__9S20683C13[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S20683C13[];
extern  VTBL_ENTRY _ZTV9S20683C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20683C13[];
static VTBL_ENTRY alt_thunk_names5[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20683C10D0Ev,_ZTv0_n16_N9S20683C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S20683C10D0Ev,_ZThn36_N9S20683C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20683C10D1Ev,_ZTv0_n16_N9S20683C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S20683C10D1Ev,_ZThn36_N9S20683C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20683C10D0Ev,_ZTv0_n20_N9S20683C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S20683C10D0Ev,_ZThn88_N9S20683C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20683C10D1Ev,_ZTv0_n20_N9S20683C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S20683C10D1Ev,_ZThn88_N9S20683C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20683C13D0Ev,_ZTv0_n20_N9S20683C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S20683C13D0Ev,_ZThn88_N9S20683C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20683C13D1Ev,_ZTv0_n20_N9S20683C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S20683C13D1Ev,_ZThn88_N9S20683C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20683C13D0Ev,_ZTv0_n16_N9S20683C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S20683C13D0Ev,_ZThn36_N9S20683C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20683C13D1Ev,_ZTv0_n16_N9S20683C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S20683C13D1Ev,_ZThn36_N9S20683C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20683C13 = {  "S20683C13", // class name
  bases_S20683C13, 9,
  &(vtc_S20683C13[0]), // expected_vtbl_contents
  &(vtt_S20683C13[0]), // expected_vtt_contents
  ABISELECT(288,148), // object size
  NSPAIRA(_ZTI9S20683C13),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S20683C13),24, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20683C13),13, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names5,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20683C12  : virtual S20683C11 , virtual S20683C9 , S20683C13 {
  ::S20683C5_nt s20683c12f0;
  ~S20683C12(); // tgen
  S20683C12(); // tgen
};
//SIG(-1 S20683C12) C1{ VBC2{ VBC3{ m Fp[7]}} VBC4{ BC5{ VBC3 BC6{ VBC3 vd FU7{ m Fp} FD} vd Fp} BC3 VBC6 vd FL:7 Fp} BC8{ VBC6 BC3 VBC2 VBC4 BC9{ VBC4 vd} FU7} FU7}


S20683C12 ::~S20683C12(){ note_dtor("S20683C12", this);} // tgen
S20683C12 ::S20683C12(){ note_ctor("S20683C12", this);} // tgen

static void Test_S20683C12()
{
  extern Class_Descriptor cd_S20683C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(19,39)];
    init_test(&cd_S20683C12, buf);
    S20683C12 *dp, &lv = *(dp=new (buf) S20683C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,152), "sizeof(S20683C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20683C12)");
    check_base_class_offset(lv, (S20683C3*)(S20683C11*), ABISELECT(88,44), "S20683C12");
    check_base_class_offset(lv, (S20683C3*)(S20683C2*)(S20683C9*), ABISELECT(88,44), "S20683C12");
    check_base_class_offset(lv, (S20683C3*)(S20683C4*)(S20683C2*)(S20683C9*), ABISELECT(88,44), "S20683C12");
    /*is_ambiguous_... S20683C12::S20683C4 */ AMB_check_base_class_offset(lv, (S20683C3*)(S20683C4*), ABISELECT(88,44), "S20683C12");
    check_base_class_offset(lv, (S20683C11*), ABISELECT(80,40), "S20683C12");
    check_base_class_offset(lv, (S20683C11*)(S20683C13*), ABISELECT(80,40), "S20683C12");
    check_base_class_offset(lv, (S20683C4*)(S20683C2*)(S20683C9*), ABISELECT(144,72), "S20683C12");
    check_base_class_offset(lv, (S20683C2*)(S20683C9*), ABISELECT(144,72), "S20683C12");
    /*is_ambiguous_... S20683C9::S20683C3 */ AMB_check_base_class_offset(lv, (S20683C3*)(S20683C9*), ABISELECT(184,96), "S20683C12");
    /*is_ambiguous_... S20683C9::S20683C4 */ AMB_check_base_class_offset(lv, (S20683C4*)(S20683C9*), ABISELECT(256,132), "S20683C12");
    /*is_ambiguous_... S20683C13::S20683C4 */ AMB_check_base_class_offset(lv, (S20683C4*)(S20683C13*), ABISELECT(256,132), "S20683C12");
    check_base_class_offset(lv, (S20683C9*), ABISELECT(144,72), "S20683C12");
    check_base_class_offset(lv, (S20683C9*)(S20683C13*), ABISELECT(144,72), "S20683C12");
    check_base_class_offset(lv, (S20683C9*)(S20683C10*)(S20683C13*), ABISELECT(144,72), "S20683C12");
    /*is_ambiguous_... S20683C13::S20683C3 */ AMB_check_base_class_offset(lv, (S20683C3*)(S20683C13*), ABISELECT(8,4), "S20683C12");
    check_base_class_offset(lv, (S20683C10*)(S20683C13*), 0, "S20683C12");
    check_base_class_offset(lv, (S20683C13*), 0, "S20683C12");
    check_field_offset(lv, s20683c12f0, ABISELECT(72,36), "S20683C12.s20683c12f0");
    test_class_info(&lv, &cd_S20683C12);
    dp->~S20683C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20683C12(Test_S20683C12, "S20683C12", ABISELECT(288,152));

#else // __cplusplus

extern void _ZN9S20683C12C1Ev();
extern void _ZN9S20683C12D1Ev();
Name_Map name_map_S20683C12[] = {
  NSPAIR(_ZN9S20683C12C1Ev),
  NSPAIR(_ZN9S20683C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20683C3;
extern VTBL_ENTRY _ZTI8S20683C3[];
extern Class_Descriptor cd_S20683C11;
extern VTBL_ENTRY _ZTI9S20683C11[];
extern  VTBL_ENTRY _ZTV9S20683C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20683C11[];
extern Class_Descriptor cd_S20683C4;
extern VTBL_ENTRY _ZTI8S20683C4[];
extern  VTBL_ENTRY _ZTV8S20683C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C4[];
extern Class_Descriptor cd_S20683C2;
extern VTBL_ENTRY _ZTI8S20683C2[];
extern  VTBL_ENTRY _ZTV8S20683C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C2[];
extern Class_Descriptor cd_S20683C3;
extern VTBL_ENTRY _ZTI8S20683C3[];
extern Class_Descriptor cd_S20683C4;
extern VTBL_ENTRY _ZTI8S20683C4[];
extern  VTBL_ENTRY _ZTV8S20683C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C4[];
extern Class_Descriptor cd_S20683C9;
extern VTBL_ENTRY _ZTI8S20683C9[];
extern  VTBL_ENTRY _ZTV8S20683C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C9[];
extern Class_Descriptor cd_S20683C3;
extern VTBL_ENTRY _ZTI8S20683C3[];
extern Class_Descriptor cd_S20683C10;
extern VTBL_ENTRY _ZTI9S20683C10[];
extern  VTBL_ENTRY _ZTV9S20683C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20683C10[];
extern Class_Descriptor cd_S20683C13;
extern VTBL_ENTRY _ZTI9S20683C13[];
extern  VTBL_ENTRY _ZTV9S20683C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20683C13[];
static Base_Class bases_S20683C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20683C3,    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
  0, 1},
  {&cd_S20683C11,    ABISELECT(80,40), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20683C4,    ABISELECT(144,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
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20683C2,    ABISELECT(144,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20683C3,    ABISELECT(184,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
    6, //immediately_derived
  0, 0},
  {&cd_S20683C4,    ABISELECT(256,132), //bcp->offset
    18, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20683C9,    ABISELECT(144,72), //bcp->offset
    11, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20683C3,    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
    9, //immediately_derived
  0, 0},
  {&cd_S20683C10,    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
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20683C13,    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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20683C12[];
extern void _ZN9S20683C12D1Ev();
extern void _ZN9S20683C12D0Ev();
extern void ABISELECT(_ZTv0_n40_N9S20683C12D1Ev,_ZTv0_n20_N9S20683C12D1Ev)();
extern void ABISELECT(_ZThn144_N9S20683C12D1Ev,_ZThn72_N9S20683C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20683C12D0Ev,_ZTv0_n20_N9S20683C12D0Ev)();
extern void ABISELECT(_ZThn144_N9S20683C12D0Ev,_ZThn72_N9S20683C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20683C12D1Ev,_ZTv0_n16_N9S20683C12D1Ev)();
extern void ABISELECT(_ZThn256_N9S20683C12D1Ev,_ZThn132_N9S20683C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20683C12D0Ev,_ZTv0_n16_N9S20683C12D0Ev)();
extern void ABISELECT(_ZThn256_N9S20683C12D0Ev,_ZThn132_N9S20683C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20683C12[] = {
  ABISELECT(80,40),
  ABISELECT(256,132),
  ABISELECT(88,44),
  ABISELECT(144,72),
  0,
  (VTBL_ENTRY)&(_ZTI9S20683C12[0]),
  (VTBL_ENTRY)&_ZN9S20683C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20683C12D0Ev,
  ABISELECT(8,4),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI9S20683C12[0]),
  ABISELECT(-144,-72),
  ABISELECT(112,60),
  ABISELECT(-56,-28),
  ABISELECT(-144,-72),
  (VTBL_ENTRY)&(_ZTI9S20683C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20683C12D1Ev,_ZTv0_n20_N9S20683C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20683C12D0Ev,_ZTv0_n20_N9S20683C12D0Ev),
  ABISELECT(-256,-132),
  ABISELECT(-168,-88),
  ABISELECT(-256,-132),
  (VTBL_ENTRY)&(_ZTI9S20683C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20683C12D1Ev,_ZTv0_n16_N9S20683C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20683C12D0Ev,_ZTv0_n16_N9S20683C12D0Ev),
};
extern VTBL_ENTRY _ZTV9S20683C12[];
extern void _ZN9S20683C13D1Ev();
extern void _ZN9S20683C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20683C13__9S20683C12[] = {
  ABISELECT(80,40),
  ABISELECT(256,132),
  ABISELECT(88,44),
  ABISELECT(144,72),
  0,
  (VTBL_ENTRY)&(_ZTI9S20683C13[0]),
  (VTBL_ENTRY)&_ZN9S20683C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20683C13D0Ev,
};
extern void _ZN9S20683C10D1Ev();
extern void _ZN9S20683C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20683C109S20683C13__9S20683C12[] = {
  ABISELECT(256,132),
  ABISELECT(88,44),
  ABISELECT(144,72),
  0,
  (VTBL_ENTRY)&(_ZTI9S20683C10[0]),
  (VTBL_ENTRY)&_ZN9S20683C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20683C10D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S20683C10D1Ev,_ZTv0_n20_N9S20683C10D1Ev)();
extern void ABISELECT(_ZThn144_N9S20683C10D1Ev,_ZThn72_N9S20683C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20683C10D0Ev,_ZTv0_n20_N9S20683C10D0Ev)();
extern void ABISELECT(_ZThn144_N9S20683C10D0Ev,_ZThn72_N9S20683C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20683C9__9S20683C109S20683C13__9S20683C12[] = {
  ABISELECT(-144,-72),
  ABISELECT(112,60),
  ABISELECT(-56,-28),
  ABISELECT(-144,-72),
  (VTBL_ENTRY)&(_ZTI9S20683C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20683C10D1Ev,_ZTv0_n20_N9S20683C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20683C10D0Ev,_ZTv0_n20_N9S20683C10D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20683C10D1Ev,_ZTv0_n16_N9S20683C10D1Ev)();
extern void ABISELECT(_ZThn256_N9S20683C10D1Ev,_ZThn132_N9S20683C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20683C10D0Ev,_ZTv0_n16_N9S20683C10D0Ev)();
extern void ABISELECT(_ZThn256_N9S20683C10D0Ev,_ZThn132_N9S20683C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20683C4__A1__9S20683C109S20683C13__9S20683C12[] = {
  ABISELECT(-256,-132),
  ABISELECT(-168,-88),
  ABISELECT(-256,-132),
  (VTBL_ENTRY)&(_ZTI9S20683C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20683C10D1Ev,_ZTv0_n16_N9S20683C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20683C10D0Ev,_ZTv0_n16_N9S20683C10D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20683C13D1Ev,_ZTv0_n16_N9S20683C13D1Ev)();
extern void ABISELECT(_ZThn256_N9S20683C13D1Ev,_ZThn132_N9S20683C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20683C13D0Ev,_ZTv0_n16_N9S20683C13D0Ev)();
extern void ABISELECT(_ZThn256_N9S20683C13D0Ev,_ZThn132_N9S20683C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20683C4__9S20683C13__9S20683C12[] = {
  ABISELECT(-256,-132),
  ABISELECT(-168,-88),
  ABISELECT(-256,-132),
  (VTBL_ENTRY)&(_ZTI9S20683C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20683C13D1Ev,_ZTv0_n16_N9S20683C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20683C13D0Ev,_ZTv0_n16_N9S20683C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S20683C11__9S20683C13__9S20683C12[] = {
  ABISELECT(8,4),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI9S20683C13[0]),
};
extern void ABISELECT(_ZTv0_n40_N9S20683C13D1Ev,_ZTv0_n20_N9S20683C13D1Ev)();
extern void ABISELECT(_ZThn144_N9S20683C13D1Ev,_ZThn72_N9S20683C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20683C13D0Ev,_ZTv0_n20_N9S20683C13D0Ev)();
extern void ABISELECT(_ZThn144_N9S20683C13D0Ev,_ZThn72_N9S20683C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20683C9__9S20683C13__9S20683C12[] = {
  ABISELECT(-144,-72),
  ABISELECT(112,60),
  ABISELECT(-56,-28),
  ABISELECT(-144,-72),
  (VTBL_ENTRY)&(_ZTI9S20683C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20683C13D1Ev,_ZTv0_n20_N9S20683C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20683C13D0Ev,_ZTv0_n20_N9S20683C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S20683C11__9S20683C12[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20683C11[0]),
};
extern void _ZN8S20683C9D1Ev();
extern void _ZN8S20683C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C9__9S20683C12[] = {
  ABISELECT(112,60),
  ABISELECT(-56,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C9[0]),
  (VTBL_ENTRY)&_ZN8S20683C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C9D0Ev,
};
extern void _ZN8S20683C2D1Ev();
extern void _ZN8S20683C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C28S20683C9__9S20683C12[] = {
  ABISELECT(-56,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C2[0]),
  (VTBL_ENTRY)&_ZN8S20683C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C2D0Ev,
};
extern void _ZN8S20683C4D1Ev();
extern void _ZN8S20683C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C48S20683C28S20683C9__9S20683C12[] = {
  ABISELECT(-56,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C4[0]),
  (VTBL_ENTRY)&_ZN8S20683C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C4D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S20683C9D1Ev,_ZTv0_n16_N8S20683C9D1Ev)();
extern void ABISELECT(_ZThn112_N8S20683C9D1Ev,_ZThn60_N8S20683C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20683C9D0Ev,_ZTv0_n16_N8S20683C9D0Ev)();
extern void ABISELECT(_ZThn112_N8S20683C9D0Ev,_ZThn60_N8S20683C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20683C4__A1__8S20683C9__9S20683C12[] = {
  ABISELECT(-112,-60),
  ABISELECT(-168,-88),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI8S20683C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20683C9D1Ev,_ZTv0_n16_N8S20683C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20683C9D0Ev,_ZTv0_n16_N8S20683C9D0Ev),
};
extern void _ZN8S20683C4D1Ev();
extern void _ZN8S20683C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C4__A1__9S20683C12[] = {
  ABISELECT(-168,-88),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C4[0]),
  (VTBL_ENTRY)&_ZN8S20683C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C4D0Ev,
};
static  VTT_ENTRY vtt_S20683C12[] = {
  {&(_ZTV9S20683C12[6]),  6,24},
  {&(_tg__ZTV9S20683C13__9S20683C12[6]),  6,8},
  {&(_tg__ZTV9S20683C109S20683C13__9S20683C12[5]),  5,7},
  {&(_tg__ZTV8S20683C9__9S20683C109S20683C13__9S20683C12[5]),  5,7},
  {&(_tg__ZTV8S20683C4__A1__9S20683C109S20683C13__9S20683C12[4]),  4,6},
  {&(_tg__ZTV8S20683C4__9S20683C13__9S20683C12[4]),  4,6},
  {&(_tg__ZTV9S20683C11__9S20683C13__9S20683C12[3]),  3,3},
  {&(_tg__ZTV8S20683C9__9S20683C13__9S20683C12[5]),  5,7},
  {&(_ZTV9S20683C12[11]),  11,24},
  {&(_ZTV9S20683C12[16]),  16,24},
  {&(_ZTV9S20683C12[22]),  22,24},
  {&(_tg__ZTV9S20683C11__9S20683C12[3]),  3,3},
  {&(_tg__ZTV8S20683C9__9S20683C12[4]),  4,6},
  {&(_tg__ZTV8S20683C28S20683C9__9S20683C12[3]),  3,5},
  {&(_tg__ZTV8S20683C48S20683C28S20683C9__9S20683C12[3]),  3,5},
  {&(_tg__ZTV8S20683C4__A1__8S20683C9__9S20683C12[4]),  4,6},
  {&(_tg__ZTV8S20683C4__A1__9S20683C12[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S20683C12[];
extern  VTBL_ENTRY _ZTV9S20683C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20683C12[];
static VTBL_ENTRY alt_thunk_names6[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20683C9D0Ev,_ZTv0_n16_N8S20683C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20683C9D0Ev,_ZThn60_N8S20683C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20683C9D1Ev,_ZTv0_n16_N8S20683C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20683C9D1Ev,_ZThn60_N8S20683C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20683C13D0Ev,_ZTv0_n20_N9S20683C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S20683C13D0Ev,_ZThn72_N9S20683C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20683C13D1Ev,_ZTv0_n20_N9S20683C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S20683C13D1Ev,_ZThn72_N9S20683C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20683C13D0Ev,_ZTv0_n16_N9S20683C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N9S20683C13D0Ev,_ZThn132_N9S20683C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20683C13D1Ev,_ZTv0_n16_N9S20683C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N9S20683C13D1Ev,_ZThn132_N9S20683C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20683C10D0Ev,_ZTv0_n16_N9S20683C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N9S20683C10D0Ev,_ZThn132_N9S20683C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20683C10D1Ev,_ZTv0_n16_N9S20683C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N9S20683C10D1Ev,_ZThn132_N9S20683C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20683C10D0Ev,_ZTv0_n20_N9S20683C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S20683C10D0Ev,_ZThn72_N9S20683C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20683C10D1Ev,_ZTv0_n20_N9S20683C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S20683C10D1Ev,_ZThn72_N9S20683C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20683C12D0Ev,_ZTv0_n16_N9S20683C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N9S20683C12D0Ev,_ZThn132_N9S20683C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20683C12D1Ev,_ZTv0_n16_N9S20683C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N9S20683C12D1Ev,_ZThn132_N9S20683C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20683C12D0Ev,_ZTv0_n20_N9S20683C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S20683C12D0Ev,_ZThn72_N9S20683C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20683C12D1Ev,_ZTv0_n20_N9S20683C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S20683C12D1Ev,_ZThn72_N9S20683C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20683C12 = {  "S20683C12", // class name
  bases_S20683C12, 10,
  &(vtc_S20683C12[0]), // expected_vtbl_contents
  &(vtt_S20683C12[0]), // expected_vtt_contents
  ABISELECT(288,152), // object size
  NSPAIRA(_ZTI9S20683C12),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20683C12),24, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20683C12),17, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names6,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20683C7  : virtual S20683C8 , S20683C4 , virtual S20683C11 , virtual S20683C12 , S20683C9 {
  void *s20683c7f0;
  virtual  ~S20683C7(); // _ZN8S20683C7D2Ev
  S20683C7(); // tgen
};
//SIG(-1 S20683C7) C1{ VBC2{ VBC3{ BC4{ VBC5{ m Fp[7]} BC6{ VBC5 vd FU7{ m Fp} FD} vd Fp} BC5 VBC6 vd FL:7 Fp} VBC8{ VBC3 vd} BC5 vd} BC6 VBC9{ VBC5} VBC10{ VBC9 VBC3 BC11{ VBC6 BC5 VBC9 VBC3 BC8 FU7} FU7} BC3 vd Fp}


 S20683C7 ::~S20683C7(){ note_dtor("S20683C7", this);}
S20683C7 ::S20683C7(){ note_ctor("S20683C7", this);} // tgen

static void Test_S20683C7()
{
  extern Class_Descriptor cd_S20683C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(34,68)];
    init_test(&cd_S20683C7, buf);
    S20683C7 *dp, &lv = *(dp=new (buf) S20683C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(528,268), "sizeof(S20683C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20683C7)");
    /*is_ambiguous_... S20683C7::S20683C9 */ AMB_check_base_class_offset(lv, (S20683C3*)(S20683C2*)(S20683C9*), ABISELECT(336,176), "S20683C7");
    /*is_ambiguous_... S20683C7::S20683C9 */ AMB_check_base_class_offset(lv, (S20683C3*)(S20683C4*)(S20683C2*)(S20683C9*), ABISELECT(336,176), "S20683C7");
    /*is_ambiguous_... S20683C7::S20683C4 */ AMB_check_base_class_offset(lv, (S20683C3*)(S20683C4*), ABISELECT(336,176), "S20683C7");
    /*is_ambiguous_... S20683C7::S20683C4 */ AMB_check_base_class_offset(lv, (S20683C3*)(S20683C4*), ABISELECT(336,176), "S20683C7");
    check_base_class_offset(lv, (S20683C3*)(S20683C11*), ABISELECT(336,176), "S20683C7");
    /*is_ambiguous_... S20683C7::S20683C9 */ AMB_check_base_class_offset(lv, (S20683C3*)(S20683C2*)(S20683C9*), ABISELECT(336,176), "S20683C7");
    /*is_ambiguous_... S20683C7::S20683C9 */ AMB_check_base_class_offset(lv, (S20683C3*)(S20683C4*)(S20683C2*)(S20683C9*), ABISELECT(336,176), "S20683C7");
    /*is_ambiguous_... S20683C7::S20683C9 */ AMB_check_base_class_offset(lv, (S20683C4*)(S20683C2*)(S20683C9*), ABISELECT(224,116), "S20683C7");
    /*is_ambiguous_... S20683C7::S20683C9 */ AMB_check_base_class_offset(lv, (S20683C2*)(S20683C9*), ABISELECT(224,116), "S20683C7");
    /*is_ambiguous_... S20683C7::S20683C9 */ AMB_check_base_class_offset(lv, (S20683C3*)(S20683C9*), ABISELECT(264,140), "S20683C7");
    /*is_ambiguous_... S20683C7::S20683C9 */ AMB_check_base_class_offset(lv, (S20683C4*)(S20683C9*), ABISELECT(400,204), "S20683C7");
    /*is_ambiguous_... S20683C13::S20683C4 */ AMB_check_base_class_offset(lv, (S20683C4*)(S20683C13*)(S20683C12*), ABISELECT(400,204), "S20683C7");
    /*is_ambiguous_... S20683C7::S20683C9 */ AMB_check_base_class_offset(lv, (S20683C4*)(S20683C9*), ABISELECT(400,204), "S20683C7");
    check_base_class_offset(lv, (S20683C9*)(S20683C8*), ABISELECT(224,116), "S20683C7");
    /*is_ambiguous_... S20683C7::S20683C10 */ AMB_check_base_class_offset(lv, (S20683C9*)(S20683C10*), ABISELECT(224,116), "S20683C7");
    check_base_class_offset(lv, (S20683C9*)(S20683C12*), ABISELECT(224,116), "S20683C7");
    check_base_class_offset(lv, (S20683C9*)(S20683C13*)(S20683C12*), ABISELECT(224,116), "S20683C7");
    check_base_class_offset(lv, (S20683C9*)(S20683C10*)(S20683C13*)(S20683C12*), ABISELECT(224,116), "S20683C7");
    check_base_class_offset(lv, (S20683C10*)(S20683C8*), ABISELECT(152,84), "S20683C7");
    /*is_ambiguous_... S20683C8::S20683C3 */ AMB_check_base_class_offset(lv, (S20683C3*)(S20683C8*), ABISELECT(160,88), "S20683C7");
    check_base_class_offset(lv, (S20683C8*), ABISELECT(152,84), "S20683C7");
    /*is_ambiguous_... S20683C7::S20683C4 */ AMB_check_base_class_offset(lv, (S20683C4*), 0, "S20683C7");
    check_base_class_offset(lv, (S20683C11*), ABISELECT(432,224), "S20683C7");
    check_base_class_offset(lv, (S20683C11*)(S20683C12*), ABISELECT(432,224), "S20683C7");
    check_base_class_offset(lv, (S20683C11*)(S20683C13*)(S20683C12*), ABISELECT(432,224), "S20683C7");
    /*is_ambiguous_... S20683C13::S20683C3 */ AMB_check_base_class_offset(lv, (S20683C3*)(S20683C13*)(S20683C12*), ABISELECT(448,232), "S20683C7");
    check_base_class_offset(lv, (S20683C10*)(S20683C13*)(S20683C12*), ABISELECT(440,228), "S20683C7");
    check_base_class_offset(lv, (S20683C13*)(S20683C12*), ABISELECT(440,228), "S20683C7");
    check_base_class_offset(lv, (S20683C12*), ABISELECT(440,228), "S20683C7");
    /*is_ambiguous_... S20683C7::S20683C9 */ AMB_check_base_class_offset(lv, (S20683C4*)(S20683C2*)(S20683C9*), ABISELECT(32,20), "S20683C7");
    /*is_ambiguous_... S20683C7::S20683C9 */ AMB_check_base_class_offset(lv, (S20683C2*)(S20683C9*), ABISELECT(32,20), "S20683C7");
    /*is_ambiguous_... S20683C7::S20683C9 */ AMB_check_base_class_offset(lv, (S20683C3*)(S20683C9*), ABISELECT(72,44), "S20683C7");
    /*is_ambiguous_... S20683C7::S20683C9 */ AMB_check_base_class_offset(lv, (S20683C9*), ABISELECT(32,20), "S20683C7");
    check_field_offset(lv, s20683c7f0, ABISELECT(144,80), "S20683C7.s20683c7f0");
    test_class_info(&lv, &cd_S20683C7);
    dp->~S20683C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20683C7(Test_S20683C7, "S20683C7", ABISELECT(528,268));

#else // __cplusplus

extern void _ZN8S20683C7C1Ev();
extern void _ZN8S20683C7D2Ev();
Name_Map name_map_S20683C7[] = {
  NSPAIR(_ZN8S20683C7C1Ev),
  NSPAIR(_ZN8S20683C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20683C3;
extern VTBL_ENTRY _ZTI8S20683C3[];
extern Class_Descriptor cd_S20683C4;
extern VTBL_ENTRY _ZTI8S20683C4[];
extern  VTBL_ENTRY _ZTV8S20683C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C4[];
extern Class_Descriptor cd_S20683C2;
extern VTBL_ENTRY _ZTI8S20683C2[];
extern  VTBL_ENTRY _ZTV8S20683C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C2[];
extern Class_Descriptor cd_S20683C3;
extern VTBL_ENTRY _ZTI8S20683C3[];
extern Class_Descriptor cd_S20683C4;
extern VTBL_ENTRY _ZTI8S20683C4[];
extern  VTBL_ENTRY _ZTV8S20683C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C4[];
extern Class_Descriptor cd_S20683C9;
extern VTBL_ENTRY _ZTI8S20683C9[];
extern  VTBL_ENTRY _ZTV8S20683C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C9[];
extern Class_Descriptor cd_S20683C10;
extern VTBL_ENTRY _ZTI9S20683C10[];
extern  VTBL_ENTRY _ZTV9S20683C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20683C10[];
extern Class_Descriptor cd_S20683C3;
extern VTBL_ENTRY _ZTI8S20683C3[];
extern Class_Descriptor cd_S20683C8;
extern VTBL_ENTRY _ZTI8S20683C8[];
extern  VTBL_ENTRY _ZTV8S20683C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C8[];
extern Class_Descriptor cd_S20683C4;
extern VTBL_ENTRY _ZTI8S20683C4[];
extern  VTBL_ENTRY _ZTV8S20683C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C4[];
extern Class_Descriptor cd_S20683C11;
extern VTBL_ENTRY _ZTI9S20683C11[];
extern  VTBL_ENTRY _ZTV9S20683C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20683C11[];
extern Class_Descriptor cd_S20683C3;
extern VTBL_ENTRY _ZTI8S20683C3[];
extern Class_Descriptor cd_S20683C10;
extern VTBL_ENTRY _ZTI9S20683C10[];
extern  VTBL_ENTRY _ZTV9S20683C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20683C10[];
extern Class_Descriptor cd_S20683C13;
extern VTBL_ENTRY _ZTI9S20683C13[];
extern  VTBL_ENTRY _ZTV9S20683C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20683C13[];
extern Class_Descriptor cd_S20683C12;
extern VTBL_ENTRY _ZTI9S20683C12[];
extern  VTBL_ENTRY _ZTV9S20683C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20683C12[];
extern Class_Descriptor cd_S20683C4;
extern VTBL_ENTRY _ZTI8S20683C4[];
extern  VTBL_ENTRY _ZTV8S20683C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C4[];
extern Class_Descriptor cd_S20683C2;
extern VTBL_ENTRY _ZTI8S20683C2[];
extern  VTBL_ENTRY _ZTV8S20683C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C2[];
extern Class_Descriptor cd_S20683C3;
extern VTBL_ENTRY _ZTI8S20683C3[];
extern Class_Descriptor cd_S20683C9;
extern VTBL_ENTRY _ZTI8S20683C9[];
extern  VTBL_ENTRY _ZTV8S20683C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C9[];
static Base_Class bases_S20683C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20683C3,    ABISELECT(336,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
    1, //immediately_derived
  0, 1},
  {&cd_S20683C4,    ABISELECT(224,116), //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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20683C2,    ABISELECT(224,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20683C3,    ABISELECT(264,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20683C4,    ABISELECT(400,204), //bcp->offset
    33, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20683C9,    ABISELECT(224,116), //bcp->offset
    26, //bcp->virtual_function_table_offset
    5, //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
    6, //immediately_derived
  0, 1},
  {&cd_S20683C10,    ABISELECT(152,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20683C3,    ABISELECT(160,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
    8, //immediately_derived
  0, 0},
  {&cd_S20683C8,    ABISELECT(152,84), //bcp->offset
    17, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20683C4,    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
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20683C11,    ABISELECT(432,224), //bcp->offset
    39, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20683C3,    ABISELECT(448,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
    13, //immediately_derived
  0, 0},
  {&cd_S20683C10,    ABISELECT(440,228), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20683C13,    ABISELECT(440,228), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20683C12,    ABISELECT(440,228), //bcp->offset
    42, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20683C4,    ABISELECT(32,20), //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
    12, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20683C2,    ABISELECT(32,20), //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
    13, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S20683C3,    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
    18, //immediately_derived
  0, 0},
  {&cd_S20683C9,    ABISELECT(32,20), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20683C7[];
extern void _ZN8S20683C7D1Ev();
extern void _ZN8S20683C7D0Ev();
extern void ABISELECT(_ZThn32_N8S20683C7D1Ev,_ZThn20_N8S20683C7D1Ev)();
extern void ABISELECT(_ZThn32_N8S20683C7D0Ev,_ZThn20_N8S20683C7D0Ev)();
extern void ABISELECT(_ZTv0_n48_N8S20683C7D1Ev,_ZTv0_n24_N8S20683C7D1Ev)();
extern void ABISELECT(_ZThn152_N8S20683C7D1Ev,_ZThn84_N8S20683C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20683C7D0Ev,_ZTv0_n24_N8S20683C7D0Ev)();
extern void ABISELECT(_ZThn152_N8S20683C7D0Ev,_ZThn84_N8S20683C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20683C7D1Ev,_ZTv0_n20_N8S20683C7D1Ev)();
extern void ABISELECT(_ZThn224_N8S20683C7D1Ev,_ZThn116_N8S20683C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20683C7D0Ev,_ZTv0_n20_N8S20683C7D0Ev)();
extern void ABISELECT(_ZThn224_N8S20683C7D0Ev,_ZThn116_N8S20683C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20683C7D1Ev,_ZTv0_n16_N8S20683C7D1Ev)();
extern void ABISELECT(_ZThn400_N8S20683C7D1Ev,_ZThn204_N8S20683C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20683C7D0Ev,_ZTv0_n16_N8S20683C7D0Ev)();
extern void ABISELECT(_ZThn400_N8S20683C7D0Ev,_ZThn204_N8S20683C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20683C7D1Ev,_ZTv0_n28_N8S20683C7D1Ev)();
extern void ABISELECT(_ZThn440_N8S20683C7D1Ev,_ZThn228_N8S20683C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20683C7D0Ev,_ZTv0_n28_N8S20683C7D0Ev)();
extern void ABISELECT(_ZThn440_N8S20683C7D0Ev,_ZThn228_N8S20683C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20683C7[] = {
  ABISELECT(440,228),
  ABISELECT(432,224),
  ABISELECT(152,84),
  ABISELECT(400,204),
  ABISELECT(224,116),
  ABISELECT(152,84),
  ABISELECT(336,176),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C7[0]),
  (VTBL_ENTRY)&_ZN8S20683C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C7D0Ev,
  ABISELECT(368,184),
  ABISELECT(304,156),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20683C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S20683C7D1Ev,_ZThn20_N8S20683C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S20683C7D0Ev,_ZThn20_N8S20683C7D0Ev),
  0,
  ABISELECT(-152,-84),
  ABISELECT(248,120),
  ABISELECT(184,92),
  ABISELECT(72,32),
  ABISELECT(-152,-84),
  (VTBL_ENTRY)&(_ZTI8S20683C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20683C7D1Ev,_ZTv0_n24_N8S20683C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20683C7D0Ev,_ZTv0_n24_N8S20683C7D0Ev),
  ABISELECT(-224,-116),
  ABISELECT(176,88),
  ABISELECT(112,60),
  ABISELECT(-224,-116),
  (VTBL_ENTRY)&(_ZTI8S20683C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20683C7D1Ev,_ZTv0_n20_N8S20683C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20683C7D0Ev,_ZTv0_n20_N8S20683C7D0Ev),
  ABISELECT(-400,-204),
  ABISELECT(-64,-28),
  ABISELECT(-400,-204),
  (VTBL_ENTRY)&(_ZTI8S20683C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20683C7D1Ev,_ZTv0_n16_N8S20683C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20683C7D0Ev,_ZTv0_n16_N8S20683C7D0Ev),
  ABISELECT(-96,-48),
  ABISELECT(-432,-224),
  (VTBL_ENTRY)&(_ZTI8S20683C7[0]),
  ABISELECT(-440,-228),
  ABISELECT(-8,-4),
  ABISELECT(-40,-24),
  ABISELECT(-104,-52),
  ABISELECT(-216,-112),
  ABISELECT(-440,-228),
  (VTBL_ENTRY)&(_ZTI8S20683C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20683C7D1Ev,_ZTv0_n28_N8S20683C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20683C7D0Ev,_ZTv0_n28_N8S20683C7D0Ev),
};
extern VTBL_ENTRY _ZTV8S20683C7[];
extern void _ZN8S20683C4D1Ev();
extern void _ZN8S20683C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C4__A__8S20683C7[] = {
  ABISELECT(336,176),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C4[0]),
  (VTBL_ENTRY)&_ZN8S20683C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C4D0Ev,
};
extern void _ZN8S20683C9D1Ev();
extern void _ZN8S20683C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C9__A__8S20683C7[] = {
  ABISELECT(368,184),
  ABISELECT(304,156),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C9[0]),
  (VTBL_ENTRY)&_ZN8S20683C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C9D0Ev,
};
extern void _ZN8S20683C2D1Ev();
extern void _ZN8S20683C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C28S20683C9__A1__8S20683C7[] = {
  ABISELECT(304,156),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C2[0]),
  (VTBL_ENTRY)&_ZN8S20683C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C2D0Ev,
};
extern void _ZN8S20683C4D1Ev();
extern void _ZN8S20683C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C48S20683C28S20683C9__A3__8S20683C7[] = {
  ABISELECT(304,156),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C4[0]),
  (VTBL_ENTRY)&_ZN8S20683C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C4D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S20683C9D1Ev,_ZTv0_n16_N8S20683C9D1Ev)();
extern void ABISELECT(_ZThn368_N8S20683C9D1Ev,_ZThn184_N8S20683C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20683C9D0Ev,_ZTv0_n16_N8S20683C9D0Ev)();
extern void ABISELECT(_ZThn368_N8S20683C9D0Ev,_ZThn184_N8S20683C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20683C4__A1__8S20683C9__A__8S20683C7[] = {
  ABISELECT(-368,-184),
  ABISELECT(-64,-28),
  ABISELECT(-368,-184),
  (VTBL_ENTRY)&(_ZTI8S20683C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20683C9D1Ev,_ZTv0_n16_N8S20683C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20683C9D0Ev,_ZTv0_n16_N8S20683C9D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S20683C8D1Ev,_ZTv0_n24_N8S20683C8D1Ev)();
extern void _ZN8S20683C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20683C8D0Ev,_ZTv0_n24_N8S20683C8D0Ev)();
extern void _ZN8S20683C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20683C8__8S20683C7[] = {
  0,
  0,
  ABISELECT(248,120),
  ABISELECT(184,92),
  ABISELECT(72,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20683C8D1Ev,_ZTv0_n24_N8S20683C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20683C8D0Ev,_ZTv0_n24_N8S20683C8D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20683C8D1Ev,_ZTv0_n20_N8S20683C8D1Ev)();
extern void ABISELECT(_ZThn72_N8S20683C8D1Ev,_ZThn32_N8S20683C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20683C8D0Ev,_ZTv0_n20_N8S20683C8D0Ev)();
extern void ABISELECT(_ZThn72_N8S20683C8D0Ev,_ZThn32_N8S20683C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20683C9__8S20683C8__8S20683C7[] = {
  ABISELECT(-72,-32),
  ABISELECT(176,88),
  ABISELECT(112,60),
  ABISELECT(-72,-32),
  (VTBL_ENTRY)&(_ZTI8S20683C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20683C8D1Ev,_ZTv0_n20_N8S20683C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20683C8D0Ev,_ZTv0_n20_N8S20683C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S20683C8D1Ev,_ZTv0_n16_N8S20683C8D1Ev)();
extern void ABISELECT(_ZThn248_N8S20683C8D1Ev,_ZThn120_N8S20683C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20683C8D0Ev,_ZTv0_n16_N8S20683C8D0Ev)();
extern void ABISELECT(_ZThn248_N8S20683C8D0Ev,_ZThn120_N8S20683C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20683C4__A1__8S20683C8__8S20683C7[] = {
  ABISELECT(-248,-120),
  ABISELECT(-64,-28),
  ABISELECT(-248,-120),
  (VTBL_ENTRY)&(_ZTI8S20683C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20683C8D1Ev,_ZTv0_n16_N8S20683C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20683C8D0Ev,_ZTv0_n16_N8S20683C8D0Ev),
};
extern void _ZN8S20683C9D1Ev();
extern void _ZN8S20683C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C9__8S20683C7[] = {
  ABISELECT(176,88),
  ABISELECT(112,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C9[0]),
  (VTBL_ENTRY)&_ZN8S20683C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C9D0Ev,
};
extern void _ZN8S20683C2D1Ev();
extern void _ZN8S20683C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C28S20683C9__8S20683C7[] = {
  ABISELECT(112,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C2[0]),
  (VTBL_ENTRY)&_ZN8S20683C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C2D0Ev,
};
extern void _ZN8S20683C4D1Ev();
extern void _ZN8S20683C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C48S20683C28S20683C9__8S20683C7[] = {
  ABISELECT(112,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C4[0]),
  (VTBL_ENTRY)&_ZN8S20683C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C4D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S20683C9D1Ev,_ZTv0_n16_N8S20683C9D1Ev)();
extern void ABISELECT(_ZThn176_N8S20683C9D1Ev,_ZThn88_N8S20683C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20683C9D0Ev,_ZTv0_n16_N8S20683C9D0Ev)();
extern void ABISELECT(_ZThn176_N8S20683C9D0Ev,_ZThn88_N8S20683C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20683C4__A1__8S20683C9__8S20683C7[] = {
  ABISELECT(-176,-88),
  ABISELECT(-64,-28),
  ABISELECT(-176,-88),
  (VTBL_ENTRY)&(_ZTI8S20683C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20683C9D1Ev,_ZTv0_n16_N8S20683C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20683C9D0Ev,_ZTv0_n16_N8S20683C9D0Ev),
};
extern void _ZN8S20683C4D1Ev();
extern void _ZN8S20683C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C4__A1__8S20683C7[] = {
  ABISELECT(-64,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C4[0]),
  (VTBL_ENTRY)&_ZN8S20683C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C4D0Ev,
};
extern void _ZN9S20683C10D1Ev();
extern void _ZN9S20683C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20683C10__8S20683C7[] = {
  ABISELECT(248,120),
  ABISELECT(184,92),
  ABISELECT(72,32),
  0,
  (VTBL_ENTRY)&(_ZTI9S20683C10[0]),
  (VTBL_ENTRY)&_ZN9S20683C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20683C10D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S20683C10D1Ev,_ZTv0_n20_N9S20683C10D1Ev)();
extern void ABISELECT(_ZThn72_N9S20683C10D1Ev,_ZThn32_N9S20683C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20683C10D0Ev,_ZTv0_n20_N9S20683C10D0Ev)();
extern void ABISELECT(_ZThn72_N9S20683C10D0Ev,_ZThn32_N9S20683C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20683C9__9S20683C10__8S20683C7[] = {
  ABISELECT(-72,-32),
  ABISELECT(176,88),
  ABISELECT(112,60),
  ABISELECT(-72,-32),
  (VTBL_ENTRY)&(_ZTI9S20683C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20683C10D1Ev,_ZTv0_n20_N9S20683C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20683C10D0Ev,_ZTv0_n20_N9S20683C10D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20683C10D1Ev,_ZTv0_n16_N9S20683C10D1Ev)();
extern void ABISELECT(_ZThn248_N9S20683C10D1Ev,_ZThn120_N9S20683C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20683C10D0Ev,_ZTv0_n16_N9S20683C10D0Ev)();
extern void ABISELECT(_ZThn248_N9S20683C10D0Ev,_ZThn120_N9S20683C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20683C4__A1__9S20683C10__8S20683C7[] = {
  ABISELECT(-248,-120),
  ABISELECT(-64,-28),
  ABISELECT(-248,-120),
  (VTBL_ENTRY)&(_ZTI9S20683C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20683C10D1Ev,_ZTv0_n16_N9S20683C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20683C10D0Ev,_ZTv0_n16_N9S20683C10D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S20683C11__8S20683C7[] = {
  ABISELECT(-96,-48),
  0,
  (VTBL_ENTRY)&(_ZTI9S20683C11[0]),
};
extern void _ZN9S20683C12D1Ev();
extern void _ZN9S20683C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20683C12__8S20683C7[] = {
  ABISELECT(-8,-4),
  ABISELECT(-40,-24),
  ABISELECT(-104,-52),
  ABISELECT(-216,-112),
  0,
  (VTBL_ENTRY)&(_ZTI9S20683C12[0]),
  (VTBL_ENTRY)&_ZN9S20683C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20683C12D0Ev,
};
extern void _ZN9S20683C13D1Ev();
extern void _ZN9S20683C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20683C139S20683C12__8S20683C7[] = {
  ABISELECT(-8,-4),
  ABISELECT(-40,-24),
  ABISELECT(-104,-52),
  ABISELECT(-216,-112),
  0,
  (VTBL_ENTRY)&(_ZTI9S20683C13[0]),
  (VTBL_ENTRY)&_ZN9S20683C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20683C13D0Ev,
};
extern void _ZN9S20683C10D1Ev();
extern void _ZN9S20683C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20683C109S20683C139S20683C12__A1__8S20683C7[] = {
  ABISELECT(-40,-24),
  ABISELECT(-104,-52),
  ABISELECT(-216,-112),
  0,
  (VTBL_ENTRY)&(_ZTI9S20683C10[0]),
  (VTBL_ENTRY)&_ZN9S20683C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20683C10D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S20683C10D1Ev,_ZTv0_n20_N9S20683C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20683C10D0Ev,_ZTv0_n20_N9S20683C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20683C9__9S20683C109S20683C139S20683C12__A1__8S20683C7[] = {
  ABISELECT(216,112),
  ABISELECT(176,88),
  ABISELECT(112,60),
  ABISELECT(216,112),
  (VTBL_ENTRY)&(_ZTI9S20683C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20683C10D1Ev,_ZTv0_n20_N9S20683C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20683C10D0Ev,_ZTv0_n20_N9S20683C10D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20683C10D1Ev,_ZTv0_n16_N9S20683C10D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S20683C10D0Ev,_ZTv0_n16_N9S20683C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20683C4__A1__9S20683C109S20683C139S20683C12__A1__8S20683C7[] = {
  ABISELECT(40,24),
  ABISELECT(-64,-28),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI9S20683C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20683C10D1Ev,_ZTv0_n16_N9S20683C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20683C10D0Ev,_ZTv0_n16_N9S20683C10D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20683C13D1Ev,_ZTv0_n16_N9S20683C13D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S20683C13D0Ev,_ZTv0_n16_N9S20683C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20683C4__9S20683C139S20683C12__8S20683C7[] = {
  ABISELECT(40,24),
  ABISELECT(-64,-28),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI9S20683C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20683C13D1Ev,_ZTv0_n16_N9S20683C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20683C13D0Ev,_ZTv0_n16_N9S20683C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S20683C11__9S20683C139S20683C12__8S20683C7[] = {
  ABISELECT(-96,-48),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI9S20683C13[0]),
};
extern void ABISELECT(_ZTv0_n40_N9S20683C13D1Ev,_ZTv0_n20_N9S20683C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20683C13D0Ev,_ZTv0_n20_N9S20683C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20683C9__9S20683C139S20683C12__8S20683C7[] = {
  ABISELECT(216,112),
  ABISELECT(176,88),
  ABISELECT(112,60),
  ABISELECT(216,112),
  (VTBL_ENTRY)&(_ZTI9S20683C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20683C13D1Ev,_ZTv0_n20_N9S20683C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20683C13D0Ev,_ZTv0_n20_N9S20683C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S20683C11__9S20683C12__8S20683C7[] = {
  ABISELECT(-96,-48),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI9S20683C12[0]),
};
extern void ABISELECT(_ZTv0_n40_N9S20683C12D1Ev,_ZTv0_n20_N9S20683C12D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20683C12D0Ev,_ZTv0_n20_N9S20683C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20683C9__9S20683C12__8S20683C7[] = {
  ABISELECT(216,112),
  ABISELECT(176,88),
  ABISELECT(112,60),
  ABISELECT(216,112),
  (VTBL_ENTRY)&(_ZTI9S20683C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20683C12D1Ev,_ZTv0_n20_N9S20683C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20683C12D0Ev,_ZTv0_n20_N9S20683C12D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20683C12D1Ev,_ZTv0_n16_N9S20683C12D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S20683C12D0Ev,_ZTv0_n16_N9S20683C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20683C4__A1__9S20683C12__8S20683C7[] = {
  ABISELECT(40,24),
  ABISELECT(-64,-28),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI9S20683C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20683C12D1Ev,_ZTv0_n16_N9S20683C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20683C12D0Ev,_ZTv0_n16_N9S20683C12D0Ev),
};
static  VTT_ENTRY vtt_S20683C7[] = {
  {&(_ZTV8S20683C7[9]),  9,51},
  {&(_tg__ZTV8S20683C4__A__8S20683C7[3]),  3,5},
  {&(_tg__ZTV8S20683C9__A__8S20683C7[4]),  4,6},
  {&(_tg__ZTV8S20683C28S20683C9__A1__8S20683C7[3]),  3,5},
  {&(_tg__ZTV8S20683C48S20683C28S20683C9__A3__8S20683C7[3]),  3,5},
  {&(_tg__ZTV8S20683C4__A1__8S20683C9__A__8S20683C7[4]),  4,6},
  {&(_ZTV8S20683C7[24]),  24,51},
  {&(_ZTV8S20683C7[31]),  31,51},
  {&(_ZTV8S20683C7[37]),  37,51},
  {&(_ZTV8S20683C7[24]),  24,51},
  {&(_ZTV8S20683C7[42]),  42,51},
  {&(_ZTV8S20683C7[49]),  49,51},
  {&(_ZTV8S20683C7[15]),  15,51},
  {&(_tg__ZTV8S20683C8__8S20683C7[7]),  7,9},
  {&(_tg__ZTV8S20683C9__8S20683C8__8S20683C7[5]),  5,7},
  {&(_tg__ZTV8S20683C4__A1__8S20683C8__8S20683C7[4]),  4,6},
  {&(_tg__ZTV8S20683C8__8S20683C7[7]),  7,9},
  {&(_tg__ZTV8S20683C9__8S20683C7[4]),  4,6},
  {&(_tg__ZTV8S20683C28S20683C9__8S20683C7[3]),  3,5},
  {&(_tg__ZTV8S20683C48S20683C28S20683C9__8S20683C7[3]),  3,5},
  {&(_tg__ZTV8S20683C4__A1__8S20683C9__8S20683C7[4]),  4,6},
  {&(_tg__ZTV8S20683C4__A1__8S20683C7[3]),  3,5},
  {&(_tg__ZTV9S20683C10__8S20683C7[5]),  5,7},
  {&(_tg__ZTV8S20683C9__9S20683C10__8S20683C7[5]),  5,7},
  {&(_tg__ZTV8S20683C4__A1__9S20683C10__8S20683C7[4]),  4,6},
  {&(_tg__ZTV9S20683C11__8S20683C7[3]),  3,3},
  {&(_tg__ZTV9S20683C12__8S20683C7[6]),  6,8},
  {&(_tg__ZTV9S20683C139S20683C12__8S20683C7[6]),  6,8},
  {&(_tg__ZTV9S20683C109S20683C139S20683C12__A1__8S20683C7[5]),  5,7},
  {&(_tg__ZTV8S20683C9__9S20683C109S20683C139S20683C12__A1__8S20683C7[5]),  5,7},
  {&(_tg__ZTV8S20683C4__A1__9S20683C109S20683C139S20683C12__A1__8S20683C7[4]),  4,6},
  {&(_tg__ZTV8S20683C4__9S20683C139S20683C12__8S20683C7[4]),  4,6},
  {&(_tg__ZTV9S20683C11__9S20683C139S20683C12__8S20683C7[3]),  3,3},
  {&(_tg__ZTV8S20683C9__9S20683C139S20683C12__8S20683C7[5]),  5,7},
  {&(_tg__ZTV9S20683C11__9S20683C12__8S20683C7[3]),  3,3},
  {&(_tg__ZTV8S20683C9__9S20683C12__8S20683C7[5]),  5,7},
  {&(_tg__ZTV8S20683C4__A1__9S20683C12__8S20683C7[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S20683C7[];
extern  VTBL_ENTRY _ZTV8S20683C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C7[];
static VTBL_ENTRY alt_thunk_names7[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20683C10D0Ev,_ZTv0_n16_N9S20683C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N9S20683C10D0Ev,_ZThn120_N9S20683C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20683C10D1Ev,_ZTv0_n16_N9S20683C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N9S20683C10D1Ev,_ZThn120_N9S20683C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20683C10D0Ev,_ZTv0_n20_N9S20683C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N9S20683C10D0Ev,_ZThn32_N9S20683C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20683C10D1Ev,_ZTv0_n20_N9S20683C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N9S20683C10D1Ev,_ZThn32_N9S20683C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20683C8D0Ev,_ZTv0_n16_N8S20683C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S20683C8D0Ev,_ZThn120_N8S20683C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20683C8D1Ev,_ZTv0_n16_N8S20683C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S20683C8D1Ev,_ZThn120_N8S20683C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20683C8D0Ev,_ZTv0_n20_N8S20683C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S20683C8D0Ev,_ZThn32_N8S20683C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20683C8D1Ev,_ZTv0_n20_N8S20683C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S20683C8D1Ev,_ZThn32_N8S20683C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20683C8D0Ev,_ZTv0_n24_N8S20683C8D0Ev), // 
  (VTBL_ENTRY)_ZN8S20683C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20683C8D1Ev,_ZTv0_n24_N8S20683C8D1Ev), // 
  (VTBL_ENTRY)_ZN8S20683C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20683C9D0Ev,_ZTv0_n16_N8S20683C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S20683C9D0Ev,_ZThn88_N8S20683C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn368_N8S20683C9D0Ev,_ZThn184_N8S20683C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20683C9D1Ev,_ZTv0_n16_N8S20683C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S20683C9D1Ev,_ZThn88_N8S20683C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn368_N8S20683C9D1Ev,_ZThn184_N8S20683C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20683C7D0Ev,_ZTv0_n28_N8S20683C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn440_N8S20683C7D0Ev,_ZThn228_N8S20683C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20683C7D1Ev,_ZTv0_n28_N8S20683C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn440_N8S20683C7D1Ev,_ZThn228_N8S20683C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20683C7D0Ev,_ZTv0_n16_N8S20683C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn400_N8S20683C7D0Ev,_ZThn204_N8S20683C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20683C7D1Ev,_ZTv0_n16_N8S20683C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn400_N8S20683C7D1Ev,_ZThn204_N8S20683C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20683C7D0Ev,_ZTv0_n20_N8S20683C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S20683C7D0Ev,_ZThn116_N8S20683C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20683C7D1Ev,_ZTv0_n20_N8S20683C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S20683C7D1Ev,_ZThn116_N8S20683C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20683C7D0Ev,_ZTv0_n24_N8S20683C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N8S20683C7D0Ev,_ZThn84_N8S20683C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20683C7D1Ev,_ZTv0_n24_N8S20683C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N8S20683C7D1Ev,_ZThn84_N8S20683C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20683C7 = {  "S20683C7", // class name
  bases_S20683C7, 19,
  &(vtc_S20683C7[0]), // expected_vtbl_contents
  &(vtt_S20683C7[0]), // expected_vtt_contents
  ABISELECT(528,268), // object size
  NSPAIRA(_ZTI8S20683C7),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S20683C7),51, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20683C7),37, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names7,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20683C1  : virtual S20683C2 , virtual S2514C3_nt , S20683C7 {
  virtual  ~S20683C1(); // _ZN8S20683C1D2Ev
  S20683C1(); // tgen
};
//SIG(1 S20683C1) C1{ VBC2{ VBC3{ m Fp[7]} BC4{ VBC3 vd FU5{ m Fp} FD} vd Fp} VBC6{ m FD} BC7{ VBC8{ VBC9{ BC2 BC3 VBC4 vd FL:7 Fp} VBC10{ VBC9 vd} BC3 vd} BC4 VBC11{ VBC3} VBC12{ VBC11 VBC9 BC13{ VBC4 BC3 VBC11 VBC9 BC10 FU5} FU5} BC9 vd Fp} vd}


 S20683C1 ::~S20683C1(){ note_dtor("S20683C1", this);}
S20683C1 ::S20683C1(){ note_ctor("S20683C1", this);} // tgen

static void Test_S20683C1()
{
  extern Class_Descriptor cd_S20683C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(37,77)];
    init_test(&cd_S20683C1, buf);
    S20683C1 *dp, &lv = *(dp=new (buf) S20683C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(576,304), "sizeof(S20683C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20683C1)");
    /*is_ambiguous_... S20683C1::S20683C2 */ AMB_check_base_class_offset(lv, (S20683C3*)(S20683C2*), ABISELECT(200,108), "S20683C1");
    /*is_ambiguous_... S20683C1::S20683C2 */ AMB_check_base_class_offset(lv, (S20683C3*)(S20683C4*)(S20683C2*), ABISELECT(200,108), "S20683C1");
    /*is_ambiguous_... S20683C1::S20683C9 */ AMB_check_base_class_offset(lv, (S20683C3*)(S20683C2*)(S20683C9*), ABISELECT(200,108), "S20683C1");
    /*is_ambiguous_... S20683C1::S20683C9 */ AMB_check_base_class_offset(lv, (S20683C3*)(S20683C4*)(S20683C2*)(S20683C9*), ABISELECT(200,108), "S20683C1");
    /*is_ambiguous_... S20683C1::S20683C4 */ AMB_check_base_class_offset(lv, (S20683C3*)(S20683C4*), ABISELECT(200,108), "S20683C1");
    /*is_ambiguous_... S20683C7::S20683C4 */ AMB_check_base_class_offset(lv, (S20683C3*)(S20683C4*)(S20683C7*), ABISELECT(200,108), "S20683C1");
    check_base_class_offset(lv, (S20683C3*)(S20683C11*), ABISELECT(200,108), "S20683C1");
    /*is_ambiguous_... S20683C7::S20683C9 */ AMB_check_base_class_offset(lv, (S20683C3*)(S20683C2*)(S20683C9*)(S20683C7*), ABISELECT(200,108), "S20683C1");
    /*is_ambiguous_... S20683C7::S20683C9 */ AMB_check_base_class_offset(lv, (S20683C3*)(S20683C4*)(S20683C2*)(S20683C9*)(S20683C7*), ABISELECT(200,108), "S20683C1");
    /*is_ambiguous_... S20683C1::S20683C2 */ AMB_check_base_class_offset(lv, (S20683C4*)(S20683C2*), ABISELECT(160,84), "S20683C1");
    /*is_ambiguous_... S20683C1::S20683C2 */ AMB_check_base_class_offset(lv, (S20683C2*), ABISELECT(160,84), "S20683C1");
    check_base_class_offset(lv, (S2514C3_nt*), ABISELECT(256,136), "S20683C1");
    /*is_ambiguous_... S20683C1::S20683C9 */ AMB_check_base_class_offset(lv, (S20683C4*)(S20683C2*)(S20683C9*), ABISELECT(336,180), "S20683C1");
    /*is_ambiguous_... S20683C1::S20683C9 */ AMB_check_base_class_offset(lv, (S20683C2*)(S20683C9*), ABISELECT(336,180), "S20683C1");
    /*is_ambiguous_... S20683C1::S20683C9 */ AMB_check_base_class_offset(lv, (S20683C3*)(S20683C9*), ABISELECT(376,204), "S20683C1");
    /*is_ambiguous_... S20683C1::S20683C9 */ AMB_check_base_class_offset(lv, (S20683C4*)(S20683C9*), ABISELECT(448,240), "S20683C1");
    /*is_ambiguous_... S20683C13::S20683C4 */ AMB_check_base_class_offset(lv, (S20683C4*)(S20683C13*)(S20683C12*), ABISELECT(448,240), "S20683C1");
    /*is_ambiguous_... S20683C7::S20683C9 */ AMB_check_base_class_offset(lv, (S20683C4*)(S20683C9*)(S20683C7*), ABISELECT(448,240), "S20683C1");
    check_base_class_offset(lv, (S20683C9*)(S20683C8*), ABISELECT(336,180), "S20683C1");
    /*is_ambiguous_... S20683C1::S20683C10 */ AMB_check_base_class_offset(lv, (S20683C9*)(S20683C10*), ABISELECT(336,180), "S20683C1");
    check_base_class_offset(lv, (S20683C9*)(S20683C12*), ABISELECT(336,180), "S20683C1");
    check_base_class_offset(lv, (S20683C9*)(S20683C13*)(S20683C12*), ABISELECT(336,180), "S20683C1");
    check_base_class_offset(lv, (S20683C9*)(S20683C10*)(S20683C13*)(S20683C12*), ABISELECT(336,180), "S20683C1");
    check_base_class_offset(lv, (S20683C10*)(S20683C8*), ABISELECT(272,148), "S20683C1");
    /*is_ambiguous_... S20683C8::S20683C3 */ AMB_check_base_class_offset(lv, (S20683C3*)(S20683C8*), ABISELECT(280,152), "S20683C1");
    check_base_class_offset(lv, (S20683C8*)(S20683C7*), ABISELECT(272,148), "S20683C1");
    /*is_ambiguous_... S20683C7::S20683C4 */ AMB_check_base_class_offset(lv, (S20683C4*)(S20683C7*), 0, "S20683C1");
    check_base_class_offset(lv, (S20683C11*)(S20683C7*), ABISELECT(480,260), "S20683C1");
    check_base_class_offset(lv, (S20683C11*)(S20683C12*), ABISELECT(480,260), "S20683C1");
    check_base_class_offset(lv, (S20683C11*)(S20683C13*)(S20683C12*), ABISELECT(480,260), "S20683C1");
    /*is_ambiguous_... S20683C13::S20683C3 */ AMB_check_base_class_offset(lv, (S20683C3*)(S20683C13*)(S20683C12*), ABISELECT(496,268), "S20683C1");
    check_base_class_offset(lv, (S20683C10*)(S20683C13*)(S20683C12*), ABISELECT(488,264), "S20683C1");
    check_base_class_offset(lv, (S20683C13*)(S20683C12*), ABISELECT(488,264), "S20683C1");
    check_base_class_offset(lv, (S20683C12*)(S20683C7*), ABISELECT(488,264), "S20683C1");
    /*is_ambiguous_... S20683C7::S20683C9 */ AMB_check_base_class_offset(lv, (S20683C4*)(S20683C2*)(S20683C9*)(S20683C7*), ABISELECT(32,20), "S20683C1");
    /*is_ambiguous_... S20683C7::S20683C9 */ AMB_check_base_class_offset(lv, (S20683C2*)(S20683C9*)(S20683C7*), ABISELECT(32,20), "S20683C1");
    /*is_ambiguous_... S20683C7::S20683C9 */ AMB_check_base_class_offset(lv, (S20683C3*)(S20683C9*)(S20683C7*), ABISELECT(72,44), "S20683C1");
    /*is_ambiguous_... S20683C7::S20683C9 */ AMB_check_base_class_offset(lv, (S20683C9*)(S20683C7*), ABISELECT(32,20), "S20683C1");
    check_base_class_offset(lv, (S20683C7*), 0, "S20683C1");
    test_class_info(&lv, &cd_S20683C1);
    dp->~S20683C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20683C1(Test_S20683C1, "S20683C1", ABISELECT(576,304));

#else // __cplusplus

extern void _ZN8S20683C1C1Ev();
extern void _ZN8S20683C1D2Ev();
Name_Map name_map_S20683C1[] = {
  NSPAIR(_ZN8S20683C1C1Ev),
  NSPAIR(_ZN8S20683C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20683C3;
extern VTBL_ENTRY _ZTI8S20683C3[];
extern Class_Descriptor cd_S20683C4;
extern VTBL_ENTRY _ZTI8S20683C4[];
extern  VTBL_ENTRY _ZTV8S20683C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C4[];
extern Class_Descriptor cd_S20683C2;
extern VTBL_ENTRY _ZTI8S20683C2[];
extern  VTBL_ENTRY _ZTV8S20683C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C2[];
extern Class_Descriptor cd_S2514C3_nt;
extern VTBL_ENTRY _ZTI10S2514C3_nt[];
extern Class_Descriptor cd_S20683C4;
extern VTBL_ENTRY _ZTI8S20683C4[];
extern  VTBL_ENTRY _ZTV8S20683C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C4[];
extern Class_Descriptor cd_S20683C2;
extern VTBL_ENTRY _ZTI8S20683C2[];
extern  VTBL_ENTRY _ZTV8S20683C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C2[];
extern Class_Descriptor cd_S20683C3;
extern VTBL_ENTRY _ZTI8S20683C3[];
extern Class_Descriptor cd_S20683C4;
extern VTBL_ENTRY _ZTI8S20683C4[];
extern  VTBL_ENTRY _ZTV8S20683C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C4[];
extern Class_Descriptor cd_S20683C9;
extern VTBL_ENTRY _ZTI8S20683C9[];
extern  VTBL_ENTRY _ZTV8S20683C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C9[];
extern Class_Descriptor cd_S20683C10;
extern VTBL_ENTRY _ZTI9S20683C10[];
extern  VTBL_ENTRY _ZTV9S20683C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20683C10[];
extern Class_Descriptor cd_S20683C3;
extern VTBL_ENTRY _ZTI8S20683C3[];
extern Class_Descriptor cd_S20683C8;
extern VTBL_ENTRY _ZTI8S20683C8[];
extern  VTBL_ENTRY _ZTV8S20683C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C8[];
extern Class_Descriptor cd_S20683C4;
extern VTBL_ENTRY _ZTI8S20683C4[];
extern  VTBL_ENTRY _ZTV8S20683C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C4[];
extern Class_Descriptor cd_S20683C11;
extern VTBL_ENTRY _ZTI9S20683C11[];
extern  VTBL_ENTRY _ZTV9S20683C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20683C11[];
extern Class_Descriptor cd_S20683C3;
extern VTBL_ENTRY _ZTI8S20683C3[];
extern Class_Descriptor cd_S20683C10;
extern VTBL_ENTRY _ZTI9S20683C10[];
extern  VTBL_ENTRY _ZTV9S20683C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20683C10[];
extern Class_Descriptor cd_S20683C13;
extern VTBL_ENTRY _ZTI9S20683C13[];
extern  VTBL_ENTRY _ZTV9S20683C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20683C13[];
extern Class_Descriptor cd_S20683C12;
extern VTBL_ENTRY _ZTI9S20683C12[];
extern  VTBL_ENTRY _ZTV9S20683C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20683C12[];
extern Class_Descriptor cd_S20683C4;
extern VTBL_ENTRY _ZTI8S20683C4[];
extern  VTBL_ENTRY _ZTV8S20683C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C4[];
extern Class_Descriptor cd_S20683C2;
extern VTBL_ENTRY _ZTI8S20683C2[];
extern  VTBL_ENTRY _ZTV8S20683C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C2[];
extern Class_Descriptor cd_S20683C3;
extern VTBL_ENTRY _ZTI8S20683C3[];
extern Class_Descriptor cd_S20683C9;
extern VTBL_ENTRY _ZTI8S20683C9[];
extern  VTBL_ENTRY _ZTV8S20683C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C9[];
extern Class_Descriptor cd_S20683C7;
extern VTBL_ENTRY _ZTI8S20683C7[];
extern  VTBL_ENTRY _ZTV8S20683C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C7[];
static Base_Class bases_S20683C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20683C3,    ABISELECT(200,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
    1, //immediately_derived
  0, 1},
  {&cd_S20683C4,    ABISELECT(160,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20683C2,    ABISELECT(160,84), //bcp->offset
    19, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2514C3_nt,    ABISELECT(256,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20683C4,    ABISELECT(336,180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20683C2,    ABISELECT(336,180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20683C3,    ABISELECT(376,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
    8, //immediately_derived
  0, 0},
  {&cd_S20683C4,    ABISELECT(448,240), //bcp->offset
    41, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20683C9,    ABISELECT(336,180), //bcp->offset
    34, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20683C10,    ABISELECT(272,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S20683C3,    ABISELECT(280,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
    11, //immediately_derived
  0, 0},
  {&cd_S20683C8,    ABISELECT(272,148), //bcp->offset
    25, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S20683C4,    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
    13, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S20683C11,    ABISELECT(480,260), //bcp->offset
    47, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S20683C3,    ABISELECT(496,268), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20683C10,    ABISELECT(488,264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20683C13,    ABISELECT(488,264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20683C12,    ABISELECT(488,264), //bcp->offset
    50, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S20683C4,    ABISELECT(32,20), //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
    14, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S20683C2,    ABISELECT(32,20), //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
    15, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20683C3,    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
    21, //immediately_derived
  0, 0},
  {&cd_S20683C9,    ABISELECT(32,20), //bcp->offset
    13, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S20683C7,    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
    17, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20683C1[];
extern void _ZN8S20683C1D1Ev();
extern void _ZN8S20683C1D0Ev();
extern void ABISELECT(_ZThn32_N8S20683C1D1Ev,_ZThn20_N8S20683C1D1Ev)();
extern void ABISELECT(_ZThn32_N8S20683C1D0Ev,_ZThn20_N8S20683C1D0Ev)();
extern void ABISELECT(_ZTv0_n32_N8S20683C1D1Ev,_ZTv0_n16_N8S20683C1D1Ev)();
extern void ABISELECT(_ZThn160_N8S20683C1D1Ev,_ZThn84_N8S20683C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20683C1D0Ev,_ZTv0_n16_N8S20683C1D0Ev)();
extern void ABISELECT(_ZThn160_N8S20683C1D0Ev,_ZThn84_N8S20683C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20683C1D1Ev,_ZTv0_n24_N8S20683C1D1Ev)();
extern void ABISELECT(_ZThn272_N8S20683C1D1Ev,_ZThn148_N8S20683C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20683C1D0Ev,_ZTv0_n24_N8S20683C1D0Ev)();
extern void ABISELECT(_ZThn272_N8S20683C1D0Ev,_ZThn148_N8S20683C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20683C1D1Ev,_ZTv0_n20_N8S20683C1D1Ev)();
extern void ABISELECT(_ZThn336_N8S20683C1D1Ev,_ZThn180_N8S20683C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20683C1D0Ev,_ZTv0_n20_N8S20683C1D0Ev)();
extern void ABISELECT(_ZThn336_N8S20683C1D0Ev,_ZThn180_N8S20683C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20683C1D1Ev,_ZTv0_n16_N8S20683C1D1Ev)();
extern void ABISELECT(_ZThn448_N8S20683C1D1Ev,_ZThn240_N8S20683C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20683C1D0Ev,_ZTv0_n16_N8S20683C1D0Ev)();
extern void ABISELECT(_ZThn448_N8S20683C1D0Ev,_ZThn240_N8S20683C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20683C1D1Ev,_ZTv0_n28_N8S20683C1D1Ev)();
extern void ABISELECT(_ZThn488_N8S20683C1D1Ev,_ZThn264_N8S20683C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20683C1D0Ev,_ZTv0_n28_N8S20683C1D0Ev)();
extern void ABISELECT(_ZThn488_N8S20683C1D0Ev,_ZThn264_N8S20683C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20683C1[] = {
  ABISELECT(256,136),
  ABISELECT(160,84),
  ABISELECT(488,264),
  ABISELECT(480,260),
  ABISELECT(272,148),
  ABISELECT(448,240),
  ABISELECT(336,180),
  ABISELECT(272,148),
  ABISELECT(200,108),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C1[0]),
  (VTBL_ENTRY)&_ZN8S20683C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C1D0Ev,
  ABISELECT(416,220),
  ABISELECT(168,88),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20683C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S20683C1D1Ev,_ZThn20_N8S20683C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S20683C1D0Ev,_ZThn20_N8S20683C1D0Ev),
  ABISELECT(-160,-84),
  ABISELECT(40,24),
  ABISELECT(-160,-84),
  (VTBL_ENTRY)&(_ZTI8S20683C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20683C1D1Ev,_ZTv0_n16_N8S20683C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20683C1D0Ev,_ZTv0_n16_N8S20683C1D0Ev),
  0,
  ABISELECT(-272,-148),
  ABISELECT(176,92),
  ABISELECT(-72,-40),
  ABISELECT(64,32),
  ABISELECT(-272,-148),
  (VTBL_ENTRY)&(_ZTI8S20683C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20683C1D1Ev,_ZTv0_n24_N8S20683C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20683C1D0Ev,_ZTv0_n24_N8S20683C1D0Ev),
  ABISELECT(-336,-180),
  ABISELECT(112,60),
  ABISELECT(-136,-72),
  ABISELECT(-336,-180),
  (VTBL_ENTRY)&(_ZTI8S20683C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20683C1D1Ev,_ZTv0_n20_N8S20683C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20683C1D0Ev,_ZTv0_n20_N8S20683C1D0Ev),
  ABISELECT(-448,-240),
  ABISELECT(-248,-132),
  ABISELECT(-448,-240),
  (VTBL_ENTRY)&(_ZTI8S20683C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20683C1D1Ev,_ZTv0_n16_N8S20683C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20683C1D0Ev,_ZTv0_n16_N8S20683C1D0Ev),
  ABISELECT(-280,-152),
  ABISELECT(-480,-260),
  (VTBL_ENTRY)&(_ZTI8S20683C1[0]),
  ABISELECT(-488,-264),
  ABISELECT(-8,-4),
  ABISELECT(-40,-24),
  ABISELECT(-288,-156),
  ABISELECT(-152,-84),
  ABISELECT(-488,-264),
  (VTBL_ENTRY)&(_ZTI8S20683C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20683C1D1Ev,_ZTv0_n28_N8S20683C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20683C1D0Ev,_ZTv0_n28_N8S20683C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S20683C1[];
extern void _ZN8S20683C7D1Ev();
extern void _ZN8S20683C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C7__8S20683C1[] = {
  ABISELECT(488,264),
  ABISELECT(480,260),
  ABISELECT(272,148),
  ABISELECT(448,240),
  ABISELECT(336,180),
  ABISELECT(272,148),
  ABISELECT(200,108),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C7[0]),
  (VTBL_ENTRY)&_ZN8S20683C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C7D0Ev,
};
extern void _ZN8S20683C4D1Ev();
extern void _ZN8S20683C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C48S20683C7__A3__8S20683C1[] = {
  ABISELECT(200,108),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C4[0]),
  (VTBL_ENTRY)&_ZN8S20683C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C4D0Ev,
};
extern void _ZN8S20683C9D1Ev();
extern void _ZN8S20683C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C98S20683C7__A1__8S20683C1[] = {
  ABISELECT(416,220),
  ABISELECT(168,88),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C9[0]),
  (VTBL_ENTRY)&_ZN8S20683C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C9D0Ev,
};
extern void _ZN8S20683C2D1Ev();
extern void _ZN8S20683C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C28S20683C98S20683C7__A2__8S20683C1[] = {
  ABISELECT(168,88),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C2[0]),
  (VTBL_ENTRY)&_ZN8S20683C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C2D0Ev,
};
extern void _ZN8S20683C4D1Ev();
extern void _ZN8S20683C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C48S20683C28S20683C98S20683C7__A4__8S20683C1[] = {
  ABISELECT(168,88),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C4[0]),
  (VTBL_ENTRY)&_ZN8S20683C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C4D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S20683C9D1Ev,_ZTv0_n16_N8S20683C9D1Ev)();
extern void ABISELECT(_ZThn416_N8S20683C9D1Ev,_ZThn220_N8S20683C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20683C9D0Ev,_ZTv0_n16_N8S20683C9D0Ev)();
extern void ABISELECT(_ZThn416_N8S20683C9D0Ev,_ZThn220_N8S20683C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20683C4__A1__8S20683C98S20683C7__A1__8S20683C1[] = {
  ABISELECT(-416,-220),
  ABISELECT(-248,-132),
  ABISELECT(-416,-220),
  (VTBL_ENTRY)&(_ZTI8S20683C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20683C9D1Ev,_ZTv0_n16_N8S20683C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20683C9D0Ev,_ZTv0_n16_N8S20683C9D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S20683C7D1Ev,_ZTv0_n24_N8S20683C7D1Ev)();
extern void ABISELECT(_ZThn272_N8S20683C7D1Ev,_ZThn148_N8S20683C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20683C7D0Ev,_ZTv0_n24_N8S20683C7D0Ev)();
extern void ABISELECT(_ZThn272_N8S20683C7D0Ev,_ZThn148_N8S20683C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20683C8__8S20683C7__8S20683C1[] = {
  0,
  ABISELECT(-272,-148),
  ABISELECT(176,92),
  ABISELECT(-72,-40),
  ABISELECT(64,32),
  ABISELECT(-272,-148),
  (VTBL_ENTRY)&(_ZTI8S20683C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20683C7D1Ev,_ZTv0_n24_N8S20683C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20683C7D0Ev,_ZTv0_n24_N8S20683C7D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20683C7D1Ev,_ZTv0_n20_N8S20683C7D1Ev)();
extern void ABISELECT(_ZThn336_N8S20683C7D1Ev,_ZThn180_N8S20683C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20683C7D0Ev,_ZTv0_n20_N8S20683C7D0Ev)();
extern void ABISELECT(_ZThn336_N8S20683C7D0Ev,_ZThn180_N8S20683C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20683C9__8S20683C7__8S20683C1[] = {
  ABISELECT(-336,-180),
  ABISELECT(112,60),
  ABISELECT(-136,-72),
  ABISELECT(-336,-180),
  (VTBL_ENTRY)&(_ZTI8S20683C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20683C7D1Ev,_ZTv0_n20_N8S20683C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20683C7D0Ev,_ZTv0_n20_N8S20683C7D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S20683C7D1Ev,_ZTv0_n16_N8S20683C7D1Ev)();
extern void ABISELECT(_ZThn448_N8S20683C7D1Ev,_ZThn240_N8S20683C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20683C7D0Ev,_ZTv0_n16_N8S20683C7D0Ev)();
extern void ABISELECT(_ZThn448_N8S20683C7D0Ev,_ZThn240_N8S20683C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20683C4__A1__8S20683C7__8S20683C1[] = {
  ABISELECT(-448,-240),
  ABISELECT(-248,-132),
  ABISELECT(-448,-240),
  (VTBL_ENTRY)&(_ZTI8S20683C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20683C7D1Ev,_ZTv0_n16_N8S20683C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20683C7D0Ev,_ZTv0_n16_N8S20683C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S20683C11__8S20683C7__8S20683C1[] = {
  ABISELECT(-280,-152),
  ABISELECT(-480,-260),
  (VTBL_ENTRY)&(_ZTI8S20683C7[0]),
};
extern void ABISELECT(_ZTv0_n56_N8S20683C7D1Ev,_ZTv0_n28_N8S20683C7D1Ev)();
extern void ABISELECT(_ZThn488_N8S20683C7D1Ev,_ZThn264_N8S20683C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20683C7D0Ev,_ZTv0_n28_N8S20683C7D0Ev)();
extern void ABISELECT(_ZThn488_N8S20683C7D0Ev,_ZThn264_N8S20683C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20683C12__8S20683C7__8S20683C1[] = {
  ABISELECT(-488,-264),
  ABISELECT(-8,-4),
  ABISELECT(-40,-24),
  ABISELECT(-288,-156),
  ABISELECT(-152,-84),
  ABISELECT(-488,-264),
  (VTBL_ENTRY)&(_ZTI8S20683C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20683C7D1Ev,_ZTv0_n28_N8S20683C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20683C7D0Ev,_ZTv0_n28_N8S20683C7D0Ev),
};
extern void ABISELECT(_ZThn32_N8S20683C7D1Ev,_ZThn20_N8S20683C7D1Ev)();
extern void ABISELECT(_ZThn32_N8S20683C7D0Ev,_ZThn20_N8S20683C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20683C9__A__8S20683C7__8S20683C1[] = {
  ABISELECT(416,220),
  ABISELECT(168,88),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20683C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S20683C7D1Ev,_ZThn20_N8S20683C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S20683C7D0Ev,_ZThn20_N8S20683C7D0Ev),
};
extern void _ZN8S20683C2D1Ev();
extern void _ZN8S20683C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C2__8S20683C1[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C2[0]),
  (VTBL_ENTRY)&_ZN8S20683C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C2D0Ev,
};
extern void _ZN8S20683C4D1Ev();
extern void _ZN8S20683C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C48S20683C2__8S20683C1[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C4[0]),
  (VTBL_ENTRY)&_ZN8S20683C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C4D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S20683C8D1Ev,_ZTv0_n24_N8S20683C8D1Ev)();
extern void _ZN8S20683C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20683C8D0Ev,_ZTv0_n24_N8S20683C8D0Ev)();
extern void _ZN8S20683C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20683C8__8S20683C1[] = {
  0,
  0,
  ABISELECT(176,92),
  ABISELECT(-72,-40),
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20683C8D1Ev,_ZTv0_n24_N8S20683C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20683C8D0Ev,_ZTv0_n24_N8S20683C8D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20683C8D1Ev,_ZTv0_n20_N8S20683C8D1Ev)();
extern void ABISELECT(_ZThn64_N8S20683C8D1Ev,_ZThn32_N8S20683C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20683C8D0Ev,_ZTv0_n20_N8S20683C8D0Ev)();
extern void ABISELECT(_ZThn64_N8S20683C8D0Ev,_ZThn32_N8S20683C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20683C9__8S20683C8__8S20683C1[] = {
  ABISELECT(-64,-32),
  ABISELECT(112,60),
  ABISELECT(-136,-72),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S20683C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20683C8D1Ev,_ZTv0_n20_N8S20683C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20683C8D0Ev,_ZTv0_n20_N8S20683C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S20683C8D1Ev,_ZTv0_n16_N8S20683C8D1Ev)();
extern void ABISELECT(_ZThn176_N8S20683C8D1Ev,_ZThn92_N8S20683C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20683C8D0Ev,_ZTv0_n16_N8S20683C8D0Ev)();
extern void ABISELECT(_ZThn176_N8S20683C8D0Ev,_ZThn92_N8S20683C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20683C4__A1__8S20683C8__8S20683C1[] = {
  ABISELECT(-176,-92),
  ABISELECT(-248,-132),
  ABISELECT(-176,-92),
  (VTBL_ENTRY)&(_ZTI8S20683C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20683C8D1Ev,_ZTv0_n16_N8S20683C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20683C8D0Ev,_ZTv0_n16_N8S20683C8D0Ev),
};
extern void _ZN8S20683C9D1Ev();
extern void _ZN8S20683C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C9__8S20683C1[] = {
  ABISELECT(112,60),
  ABISELECT(-136,-72),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C9[0]),
  (VTBL_ENTRY)&_ZN8S20683C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C9D0Ev,
};
extern void _ZN8S20683C2D1Ev();
extern void _ZN8S20683C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C28S20683C9__A1__8S20683C1[] = {
  ABISELECT(-136,-72),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C2[0]),
  (VTBL_ENTRY)&_ZN8S20683C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C2D0Ev,
};
extern void _ZN8S20683C4D1Ev();
extern void _ZN8S20683C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C48S20683C28S20683C9__A1__8S20683C1[] = {
  ABISELECT(-136,-72),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C4[0]),
  (VTBL_ENTRY)&_ZN8S20683C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C4D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S20683C9D1Ev,_ZTv0_n16_N8S20683C9D1Ev)();
extern void ABISELECT(_ZThn112_N8S20683C9D1Ev,_ZThn60_N8S20683C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20683C9D0Ev,_ZTv0_n16_N8S20683C9D0Ev)();
extern void ABISELECT(_ZThn112_N8S20683C9D0Ev,_ZThn60_N8S20683C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20683C4__A1__8S20683C9__8S20683C1[] = {
  ABISELECT(-112,-60),
  ABISELECT(-248,-132),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI8S20683C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20683C9D1Ev,_ZTv0_n16_N8S20683C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20683C9D0Ev,_ZTv0_n16_N8S20683C9D0Ev),
};
extern void _ZN8S20683C4D1Ev();
extern void _ZN8S20683C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C4__A2__8S20683C1[] = {
  ABISELECT(-248,-132),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C4[0]),
  (VTBL_ENTRY)&_ZN8S20683C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C4D0Ev,
};
extern void _ZN9S20683C10D1Ev();
extern void _ZN9S20683C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20683C10__8S20683C1[] = {
  ABISELECT(176,92),
  ABISELECT(-72,-40),
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI9S20683C10[0]),
  (VTBL_ENTRY)&_ZN9S20683C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20683C10D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S20683C10D1Ev,_ZTv0_n20_N9S20683C10D1Ev)();
extern void ABISELECT(_ZThn64_N9S20683C10D1Ev,_ZThn32_N9S20683C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20683C10D0Ev,_ZTv0_n20_N9S20683C10D0Ev)();
extern void ABISELECT(_ZThn64_N9S20683C10D0Ev,_ZThn32_N9S20683C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20683C9__9S20683C10__8S20683C1[] = {
  ABISELECT(-64,-32),
  ABISELECT(112,60),
  ABISELECT(-136,-72),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI9S20683C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20683C10D1Ev,_ZTv0_n20_N9S20683C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20683C10D0Ev,_ZTv0_n20_N9S20683C10D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20683C10D1Ev,_ZTv0_n16_N9S20683C10D1Ev)();
extern void ABISELECT(_ZThn176_N9S20683C10D1Ev,_ZThn92_N9S20683C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20683C10D0Ev,_ZTv0_n16_N9S20683C10D0Ev)();
extern void ABISELECT(_ZThn176_N9S20683C10D0Ev,_ZThn92_N9S20683C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20683C4__A1__9S20683C10__8S20683C1[] = {
  ABISELECT(-176,-92),
  ABISELECT(-248,-132),
  ABISELECT(-176,-92),
  (VTBL_ENTRY)&(_ZTI9S20683C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20683C10D1Ev,_ZTv0_n16_N9S20683C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20683C10D0Ev,_ZTv0_n16_N9S20683C10D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S20683C11__8S20683C1[] = {
  ABISELECT(-280,-152),
  0,
  (VTBL_ENTRY)&(_ZTI9S20683C11[0]),
};
extern void _ZN9S20683C12D1Ev();
extern void _ZN9S20683C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20683C12__8S20683C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-40,-24),
  ABISELECT(-288,-156),
  ABISELECT(-152,-84),
  0,
  (VTBL_ENTRY)&(_ZTI9S20683C12[0]),
  (VTBL_ENTRY)&_ZN9S20683C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20683C12D0Ev,
};
extern void _ZN9S20683C13D1Ev();
extern void _ZN9S20683C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20683C139S20683C12__8S20683C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-40,-24),
  ABISELECT(-288,-156),
  ABISELECT(-152,-84),
  0,
  (VTBL_ENTRY)&(_ZTI9S20683C13[0]),
  (VTBL_ENTRY)&_ZN9S20683C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20683C13D0Ev,
};
extern void _ZN9S20683C10D1Ev();
extern void _ZN9S20683C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20683C109S20683C139S20683C12__A1__8S20683C1[] = {
  ABISELECT(-40,-24),
  ABISELECT(-288,-156),
  ABISELECT(-152,-84),
  0,
  (VTBL_ENTRY)&(_ZTI9S20683C10[0]),
  (VTBL_ENTRY)&_ZN9S20683C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20683C10D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S20683C10D1Ev,_ZTv0_n20_N9S20683C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20683C10D0Ev,_ZTv0_n20_N9S20683C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20683C9__9S20683C109S20683C139S20683C12__A1__8S20683C1[] = {
  ABISELECT(152,84),
  ABISELECT(112,60),
  ABISELECT(-136,-72),
  ABISELECT(152,84),
  (VTBL_ENTRY)&(_ZTI9S20683C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20683C10D1Ev,_ZTv0_n20_N9S20683C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20683C10D0Ev,_ZTv0_n20_N9S20683C10D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20683C10D1Ev,_ZTv0_n16_N9S20683C10D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S20683C10D0Ev,_ZTv0_n16_N9S20683C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20683C4__A1__9S20683C109S20683C139S20683C12__A1__8S20683C1[] = {
  ABISELECT(40,24),
  ABISELECT(-248,-132),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI9S20683C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20683C10D1Ev,_ZTv0_n16_N9S20683C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20683C10D0Ev,_ZTv0_n16_N9S20683C10D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20683C13D1Ev,_ZTv0_n16_N9S20683C13D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S20683C13D0Ev,_ZTv0_n16_N9S20683C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20683C4__9S20683C139S20683C12__8S20683C1[] = {
  ABISELECT(40,24),
  ABISELECT(-248,-132),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI9S20683C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20683C13D1Ev,_ZTv0_n16_N9S20683C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20683C13D0Ev,_ZTv0_n16_N9S20683C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S20683C11__9S20683C139S20683C12__8S20683C1[] = {
  ABISELECT(-280,-152),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI9S20683C13[0]),
};
extern void ABISELECT(_ZTv0_n40_N9S20683C13D1Ev,_ZTv0_n20_N9S20683C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20683C13D0Ev,_ZTv0_n20_N9S20683C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20683C9__9S20683C139S20683C12__8S20683C1[] = {
  ABISELECT(152,84),
  ABISELECT(112,60),
  ABISELECT(-136,-72),
  ABISELECT(152,84),
  (VTBL_ENTRY)&(_ZTI9S20683C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20683C13D1Ev,_ZTv0_n20_N9S20683C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20683C13D0Ev,_ZTv0_n20_N9S20683C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S20683C11__9S20683C12__8S20683C1[] = {
  ABISELECT(-280,-152),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI9S20683C12[0]),
};
extern void ABISELECT(_ZTv0_n40_N9S20683C12D1Ev,_ZTv0_n20_N9S20683C12D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20683C12D0Ev,_ZTv0_n20_N9S20683C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20683C9__9S20683C12__8S20683C1[] = {
  ABISELECT(152,84),
  ABISELECT(112,60),
  ABISELECT(-136,-72),
  ABISELECT(152,84),
  (VTBL_ENTRY)&(_ZTI9S20683C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20683C12D1Ev,_ZTv0_n20_N9S20683C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20683C12D0Ev,_ZTv0_n20_N9S20683C12D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20683C12D1Ev,_ZTv0_n16_N9S20683C12D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S20683C12D0Ev,_ZTv0_n16_N9S20683C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20683C4__A1__9S20683C12__8S20683C1[] = {
  ABISELECT(40,24),
  ABISELECT(-248,-132),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI9S20683C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20683C12D1Ev,_ZTv0_n16_N9S20683C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20683C12D0Ev,_ZTv0_n16_N9S20683C12D0Ev),
};
static  VTT_ENTRY vtt_S20683C1[] = {
  {&(_ZTV8S20683C1[11]),  11,59},
  {&(_tg__ZTV8S20683C7__8S20683C1[9]),  9,11},
  {&(_tg__ZTV8S20683C48S20683C7__A3__8S20683C1[3]),  3,5},
  {&(_tg__ZTV8S20683C98S20683C7__A1__8S20683C1[4]),  4,6},
  {&(_tg__ZTV8S20683C28S20683C98S20683C7__A2__8S20683C1[3]),  3,5},
  {&(_tg__ZTV8S20683C48S20683C28S20683C98S20683C7__A4__8S20683C1[3]),  3,5},
  {&(_tg__ZTV8S20683C4__A1__8S20683C98S20683C7__A1__8S20683C1[4]),  4,6},
  {&(_tg__ZTV8S20683C8__8S20683C7__8S20683C1[7]),  7,9},
  {&(_tg__ZTV8S20683C9__8S20683C7__8S20683C1[5]),  5,7},
  {&(_tg__ZTV8S20683C4__A1__8S20683C7__8S20683C1[4]),  4,6},
  {&(_tg__ZTV8S20683C8__8S20683C7__8S20683C1[7]),  7,9},
  {&(_tg__ZTV9S20683C11__8S20683C7__8S20683C1[3]),  3,3},
  {&(_tg__ZTV9S20683C12__8S20683C7__8S20683C1[7]),  7,9},
  {&(_tg__ZTV8S20683C9__A__8S20683C7__8S20683C1[4]),  4,6},
  {&(_ZTV8S20683C1[23]),  23,59},
  {&(_ZTV8S20683C1[32]),  32,59},
  {&(_ZTV8S20683C1[39]),  39,59},
  {&(_ZTV8S20683C1[45]),  45,59},
  {&(_ZTV8S20683C1[32]),  32,59},
  {&(_ZTV8S20683C1[50]),  50,59},
  {&(_ZTV8S20683C1[57]),  57,59},
  {&(_ZTV8S20683C1[17]),  17,59},
  {&(_tg__ZTV8S20683C2__8S20683C1[3]),  3,5},
  {&(_tg__ZTV8S20683C48S20683C2__8S20683C1[3]),  3,5},
  {&(_tg__ZTV8S20683C8__8S20683C1[7]),  7,9},
  {&(_tg__ZTV8S20683C9__8S20683C8__8S20683C1[5]),  5,7},
  {&(_tg__ZTV8S20683C4__A1__8S20683C8__8S20683C1[4]),  4,6},
  {&(_tg__ZTV8S20683C8__8S20683C1[7]),  7,9},
  {&(_tg__ZTV8S20683C9__8S20683C1[4]),  4,6},
  {&(_tg__ZTV8S20683C28S20683C9__A1__8S20683C1[3]),  3,5},
  {&(_tg__ZTV8S20683C48S20683C28S20683C9__A1__8S20683C1[3]),  3,5},
  {&(_tg__ZTV8S20683C4__A1__8S20683C9__8S20683C1[4]),  4,6},
  {&(_tg__ZTV8S20683C4__A2__8S20683C1[3]),  3,5},
  {&(_tg__ZTV9S20683C10__8S20683C1[5]),  5,7},
  {&(_tg__ZTV8S20683C9__9S20683C10__8S20683C1[5]),  5,7},
  {&(_tg__ZTV8S20683C4__A1__9S20683C10__8S20683C1[4]),  4,6},
  {&(_tg__ZTV9S20683C11__8S20683C1[3]),  3,3},
  {&(_tg__ZTV9S20683C12__8S20683C1[6]),  6,8},
  {&(_tg__ZTV9S20683C139S20683C12__8S20683C1[6]),  6,8},
  {&(_tg__ZTV9S20683C109S20683C139S20683C12__A1__8S20683C1[5]),  5,7},
  {&(_tg__ZTV8S20683C9__9S20683C109S20683C139S20683C12__A1__8S20683C1[5]),  5,7},
  {&(_tg__ZTV8S20683C4__A1__9S20683C109S20683C139S20683C12__A1__8S20683C1[4]),  4,6},
  {&(_tg__ZTV8S20683C4__9S20683C139S20683C12__8S20683C1[4]),  4,6},
  {&(_tg__ZTV9S20683C11__9S20683C139S20683C12__8S20683C1[3]),  3,3},
  {&(_tg__ZTV8S20683C9__9S20683C139S20683C12__8S20683C1[5]),  5,7},
  {&(_tg__ZTV9S20683C11__9S20683C12__8S20683C1[3]),  3,3},
  {&(_tg__ZTV8S20683C9__9S20683C12__8S20683C1[5]),  5,7},
  {&(_tg__ZTV8S20683C4__A1__9S20683C12__8S20683C1[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S20683C1[];
extern  VTBL_ENTRY _ZTV8S20683C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C1[];
static VTBL_ENTRY alt_thunk_names8[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20683C10D0Ev,_ZTv0_n16_N9S20683C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S20683C10D0Ev,_ZThn92_N9S20683C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20683C10D1Ev,_ZTv0_n16_N9S20683C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S20683C10D1Ev,_ZThn92_N9S20683C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20683C10D0Ev,_ZTv0_n20_N9S20683C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S20683C10D0Ev,_ZThn32_N9S20683C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20683C10D1Ev,_ZTv0_n20_N9S20683C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S20683C10D1Ev,_ZThn32_N9S20683C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20683C8D0Ev,_ZTv0_n16_N8S20683C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S20683C8D0Ev,_ZThn92_N8S20683C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20683C8D1Ev,_ZTv0_n16_N8S20683C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S20683C8D1Ev,_ZThn92_N8S20683C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20683C8D0Ev,_ZTv0_n20_N8S20683C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20683C8D0Ev,_ZThn32_N8S20683C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20683C8D1Ev,_ZTv0_n20_N8S20683C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20683C8D1Ev,_ZThn32_N8S20683C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20683C8D0Ev,_ZTv0_n24_N8S20683C8D0Ev), // 
  (VTBL_ENTRY)_ZN8S20683C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20683C8D1Ev,_ZTv0_n24_N8S20683C8D1Ev), // 
  (VTBL_ENTRY)_ZN8S20683C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20683C7D0Ev,_ZTv0_n28_N8S20683C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn488_N8S20683C7D0Ev,_ZThn264_N8S20683C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20683C7D1Ev,_ZTv0_n28_N8S20683C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn488_N8S20683C7D1Ev,_ZThn264_N8S20683C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20683C7D0Ev,_ZTv0_n16_N8S20683C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn448_N8S20683C7D0Ev,_ZThn240_N8S20683C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20683C7D1Ev,_ZTv0_n16_N8S20683C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn448_N8S20683C7D1Ev,_ZThn240_N8S20683C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20683C7D0Ev,_ZTv0_n20_N8S20683C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N8S20683C7D0Ev,_ZThn180_N8S20683C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20683C7D1Ev,_ZTv0_n20_N8S20683C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N8S20683C7D1Ev,_ZThn180_N8S20683C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20683C7D0Ev,_ZTv0_n24_N8S20683C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S20683C7D0Ev,_ZThn148_N8S20683C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20683C7D1Ev,_ZTv0_n24_N8S20683C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S20683C7D1Ev,_ZThn148_N8S20683C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20683C9D0Ev,_ZTv0_n16_N8S20683C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20683C9D0Ev,_ZThn60_N8S20683C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn416_N8S20683C9D0Ev,_ZThn220_N8S20683C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20683C9D1Ev,_ZTv0_n16_N8S20683C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20683C9D1Ev,_ZThn60_N8S20683C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn416_N8S20683C9D1Ev,_ZThn220_N8S20683C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20683C1D0Ev,_ZTv0_n28_N8S20683C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn488_N8S20683C1D0Ev,_ZThn264_N8S20683C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20683C1D1Ev,_ZTv0_n28_N8S20683C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn488_N8S20683C1D1Ev,_ZThn264_N8S20683C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20683C1D0Ev,_ZTv0_n20_N8S20683C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N8S20683C1D0Ev,_ZThn180_N8S20683C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20683C1D1Ev,_ZTv0_n20_N8S20683C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N8S20683C1D1Ev,_ZThn180_N8S20683C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20683C1D0Ev,_ZTv0_n24_N8S20683C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S20683C1D0Ev,_ZThn148_N8S20683C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20683C1D1Ev,_ZTv0_n24_N8S20683C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S20683C1D1Ev,_ZThn148_N8S20683C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20683C1D0Ev,_ZTv0_n16_N8S20683C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn448_N8S20683C1D0Ev,_ZThn240_N8S20683C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S20683C1D0Ev,_ZThn84_N8S20683C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20683C1D1Ev,_ZTv0_n16_N8S20683C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn448_N8S20683C1D1Ev,_ZThn240_N8S20683C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S20683C1D1Ev,_ZThn84_N8S20683C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20683C1 = {  "S20683C1", // class name
  bases_S20683C1, 23,
  &(vtc_S20683C1[0]), // expected_vtbl_contents
  &(vtt_S20683C1[0]), // expected_vtt_contents
  ABISELECT(576,304), // object size
  NSPAIRA(_ZTI8S20683C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20683C1),59, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20683C1),48, //virtual table table var
  17, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names8,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20405C2  {
  void *s20405c2f0[6];
  int s20405c2f1;
  virtual void  v9(); // _ZN8S20405C22v9Ev
  virtual void  v10(); // _ZN8S20405C23v10Ev
  virtual void  v11(); // _ZN8S20405C23v11Ev
  virtual void  v12(); // _ZN8S20405C23v12Ev
  virtual void  v13(); // _ZN8S20405C23v13Ev
  virtual void  v14(); // _ZN8S20405C23v14Ev
  ~S20405C2(); // tgen
  S20405C2(); // tgen
};
//SIG(-1 S20405C2) C1{ v1 v2 v3 v4 v5 v6 Fp[6] Fi}


void  S20405C2 ::v9(){vfunc_called(this, "_ZN8S20405C22v9Ev");}
void  S20405C2 ::v10(){vfunc_called(this, "_ZN8S20405C23v10Ev");}
void  S20405C2 ::v11(){vfunc_called(this, "_ZN8S20405C23v11Ev");}
void  S20405C2 ::v12(){vfunc_called(this, "_ZN8S20405C23v12Ev");}
void  S20405C2 ::v13(){vfunc_called(this, "_ZN8S20405C23v13Ev");}
void  S20405C2 ::v14(){vfunc_called(this, "_ZN8S20405C23v14Ev");}
S20405C2 ::~S20405C2(){ note_dtor("S20405C2", this);} // tgen
S20405C2 ::S20405C2(){ note_ctor("S20405C2", this);} // tgen

static void Test_S20405C2()
{
  extern Class_Descriptor cd_S20405C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S20405C2, buf);
    S20405C2 *dp, &lv = *(dp=new (buf) S20405C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S20405C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20405C2)");
    check_field_offset(lv, s20405c2f0, ABISELECT(8,4), "S20405C2.s20405c2f0");
    check_field_offset(lv, s20405c2f1, ABISELECT(56,28), "S20405C2.s20405c2f1");
    test_class_info(&lv, &cd_S20405C2);
    dp->~S20405C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20405C2(Test_S20405C2, "S20405C2", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN8S20405C2C1Ev();
extern void _ZN8S20405C2D1Ev();
Name_Map name_map_S20405C2[] = {
  NSPAIR(_ZN8S20405C2C1Ev),
  NSPAIR(_ZN8S20405C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20405C2[];
extern void _ZN8S20405C22v9Ev();
extern void _ZN8S20405C23v10Ev();
extern void _ZN8S20405C23v11Ev();
extern void _ZN8S20405C23v12Ev();
extern void _ZN8S20405C23v13Ev();
extern void _ZN8S20405C23v14Ev();
static  VTBL_ENTRY vtc_S20405C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20405C2[0]),
  (VTBL_ENTRY)&_ZN8S20405C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v12Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v13Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v14Ev,
};
extern VTBL_ENTRY _ZTI8S20405C2[];
extern  VTBL_ENTRY _ZTV8S20405C2[];
Class_Descriptor cd_S20405C2 = {  "S20405C2", // class name
  0,0,//no base classes
  &(vtc_S20405C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI8S20405C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20405C2),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

union  S20405C5_nt  {
  void  mf20405c5(); // _ZN11S20405C5_nt9mf20405c5Ev
};
//SIG(1 S20405C5_nt) U1{ m}

#endif // __cplusplus
#ifdef __cplusplus

struct  S20405C4  : virtual S20405C2 {
  int s20405c4f0;
  ::S20405C5_nt s20405c4f1;
  virtual  ~S20405C4(); // _ZN8S20405C4D2Ev
  virtual void  v15(); // _ZN8S20405C43v15Ev
  virtual void  v16(); // _ZN8S20405C43v16Ev
  virtual void  v17(); // _ZN8S20405C43v17Ev
  virtual void  v18(); // _ZN8S20405C43v18Ev
  virtual void  v19(); // _ZN8S20405C43v19Ev
  S20405C4(); // tgen
};
//SIG(-1 S20405C4) C1{ VBC2{ v6 v7 v8 v9 v10 v11 Fp[6] Fi} vd v1 v2 v3 v4 v5 Fi FU3{ m}}


 S20405C4 ::~S20405C4(){ note_dtor("S20405C4", this);}
void  S20405C4 ::v15(){vfunc_called(this, "_ZN8S20405C43v15Ev");}
void  S20405C4 ::v16(){vfunc_called(this, "_ZN8S20405C43v16Ev");}
void  S20405C4 ::v17(){vfunc_called(this, "_ZN8S20405C43v17Ev");}
void  S20405C4 ::v18(){vfunc_called(this, "_ZN8S20405C43v18Ev");}
void  S20405C4 ::v19(){vfunc_called(this, "_ZN8S20405C43v19Ev");}
S20405C4 ::S20405C4(){ note_ctor("S20405C4", this);} // tgen

static void Test_S20405C4()
{
  extern Class_Descriptor cd_S20405C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,12)];
    init_test(&cd_S20405C4, buf);
    S20405C4 *dp, &lv = *(dp=new (buf) S20405C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S20405C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20405C4)");
    check_base_class_offset(lv, (S20405C2*), ABISELECT(16,12), "S20405C4");
    check_field_offset(lv, s20405c4f0, ABISELECT(8,4), "S20405C4.s20405c4f0");
    check_field_offset(lv, s20405c4f1, ABISELECT(12,8), "S20405C4.s20405c4f1");
    test_class_info(&lv, &cd_S20405C4);
    dp->~S20405C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20405C4(Test_S20405C4, "S20405C4", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN8S20405C4C1Ev();
extern void _ZN8S20405C4D2Ev();
Name_Map name_map_S20405C4[] = {
  NSPAIR(_ZN8S20405C4C1Ev),
  NSPAIR(_ZN8S20405C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20405C2;
extern VTBL_ENTRY _ZTI8S20405C2[];
extern  VTBL_ENTRY _ZTV8S20405C2[];
static Base_Class bases_S20405C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20405C2,    ABISELECT(16,12), //bcp->offset
    10, //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 _ZTI8S20405C4[];
extern void _ZN8S20405C4D1Ev();
extern void _ZN8S20405C4D0Ev();
extern void _ZN8S20405C43v15Ev();
extern void _ZN8S20405C43v16Ev();
extern void _ZN8S20405C43v17Ev();
extern void _ZN8S20405C43v18Ev();
extern void _ZN8S20405C43v19Ev();
extern void _ZN8S20405C22v9Ev();
extern void _ZN8S20405C23v10Ev();
extern void _ZN8S20405C23v11Ev();
extern void _ZN8S20405C23v12Ev();
extern void _ZN8S20405C23v13Ev();
extern void _ZN8S20405C23v14Ev();
static  VTBL_ENTRY vtc_S20405C4[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20405C4[0]),
  (VTBL_ENTRY)&_ZN8S20405C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20405C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v19Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S20405C4[0]),
  (VTBL_ENTRY)&_ZN8S20405C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v12Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v13Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v14Ev,
};
extern VTBL_ENTRY _ZTV8S20405C4[];
static  VTT_ENTRY vtt_S20405C4[] = {
  {&(_ZTV8S20405C4[3]),  3,24},
  {&(_ZTV8S20405C4[18]),  18,24},
};
extern VTBL_ENTRY _ZTI8S20405C4[];
extern  VTBL_ENTRY _ZTV8S20405C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20405C4[];
Class_Descriptor cd_S20405C4 = {  "S20405C4", // class name
  bases_S20405C4, 1,
  &(vtc_S20405C4[0]), // expected_vtbl_contents
  &(vtt_S20405C4[0]), // expected_vtt_contents
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI8S20405C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20405C4),24, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20405C4),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  S20405C3  : virtual S20405C2 , virtual S20405C4 {
  virtual  ~S20405C3(); // _ZN8S20405C3D2Ev
  virtual void  v20(); // _ZN8S20405C33v20Ev
  S20405C3(); // tgen
};
//SIG(-1 S20405C3) C1{ VBC2{ v2 v3 v4 v5 v6 v7 Fp[6] Fi} VBC3{ VBC2 vd v8 v9 v10 v11 v12 Fi FU4{ m}} vd v1}


 S20405C3 ::~S20405C3(){ note_dtor("S20405C3", this);}
void  S20405C3 ::v20(){vfunc_called(this, "_ZN8S20405C33v20Ev");}
S20405C3 ::S20405C3(){ note_ctor("S20405C3", this);} // tgen

static void Test_S20405C3()
{
  extern Class_Descriptor cd_S20405C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,13)];
    init_test(&cd_S20405C3, buf);
    S20405C3 *dp, &lv = *(dp=new (buf) S20405C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,48), "sizeof(S20405C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20405C3)");
    check_base_class_offset(lv, (S20405C2*), ABISELECT(8,4), "S20405C3");
    check_base_class_offset(lv, (S20405C2*)(S20405C4*), ABISELECT(8,4), "S20405C3");
    check_base_class_offset(lv, (S20405C4*), ABISELECT(72,36), "S20405C3");
    test_class_info(&lv, &cd_S20405C3);
    dp->~S20405C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20405C3(Test_S20405C3, "S20405C3", ABISELECT(88,48));

#else // __cplusplus

extern void _ZN8S20405C3C1Ev();
extern void _ZN8S20405C3D2Ev();
Name_Map name_map_S20405C3[] = {
  NSPAIR(_ZN8S20405C3C1Ev),
  NSPAIR(_ZN8S20405C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20405C2;
extern VTBL_ENTRY _ZTI8S20405C2[];
extern  VTBL_ENTRY _ZTV8S20405C2[];
extern Class_Descriptor cd_S20405C4;
extern VTBL_ENTRY _ZTI8S20405C4[];
extern  VTBL_ENTRY _ZTV8S20405C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20405C4[];
static Base_Class bases_S20405C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20405C2,    ABISELECT(8,4), //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},
  {&cd_S20405C4,    ABISELECT(72,36), //bcp->offset
    21, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20405C3[];
extern void _ZN8S20405C3D1Ev();
extern void _ZN8S20405C3D0Ev();
extern void _ZN8S20405C33v20Ev();
extern void _ZN8S20405C22v9Ev();
extern void _ZN8S20405C23v10Ev();
extern void _ZN8S20405C23v11Ev();
extern void _ZN8S20405C23v12Ev();
extern void _ZN8S20405C23v13Ev();
extern void _ZN8S20405C23v14Ev();
extern void ABISELECT(_ZTv0_n32_N8S20405C3D1Ev,_ZTv0_n16_N8S20405C3D1Ev)();
extern void ABISELECT(_ZThn72_N8S20405C3D1Ev,_ZThn36_N8S20405C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20405C3D0Ev,_ZTv0_n16_N8S20405C3D0Ev)();
extern void ABISELECT(_ZThn72_N8S20405C3D0Ev,_ZThn36_N8S20405C3D0Ev)() __attribute__((weak));
extern void _ZN8S20405C43v15Ev();
extern void _ZN8S20405C43v16Ev();
extern void _ZN8S20405C43v17Ev();
extern void _ZN8S20405C43v18Ev();
extern void _ZN8S20405C43v19Ev();
static  VTBL_ENTRY vtc_S20405C3[] = {
  ABISELECT(72,36),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20405C3[0]),
  (VTBL_ENTRY)&_ZN8S20405C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20405C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20405C33v20Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20405C3[0]),
  (VTBL_ENTRY)&_ZN8S20405C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v12Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v13Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v14Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-36),
  ABISELECT(-64,-32),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S20405C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20405C3D1Ev,_ZTv0_n16_N8S20405C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20405C3D0Ev,_ZTv0_n16_N8S20405C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20405C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v19Ev,
};
extern VTBL_ENTRY _ZTV8S20405C3[];
extern void _ZN8S20405C4D1Ev();
extern void _ZN8S20405C4D0Ev();
extern void _ZN8S20405C43v15Ev();
extern void _ZN8S20405C43v16Ev();
extern void _ZN8S20405C43v17Ev();
extern void _ZN8S20405C43v18Ev();
extern void _ZN8S20405C43v19Ev();
static  VTBL_ENTRY _tg__ZTV8S20405C4__8S20405C3[] = {
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S20405C4[0]),
  (VTBL_ENTRY)&_ZN8S20405C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20405C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v19Ev,
};
extern void _ZN8S20405C22v9Ev();
extern void _ZN8S20405C23v10Ev();
extern void _ZN8S20405C23v11Ev();
extern void _ZN8S20405C23v12Ev();
extern void _ZN8S20405C23v13Ev();
extern void _ZN8S20405C23v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20405C2__8S20405C4__8S20405C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(64,32),
  (VTBL_ENTRY)&(_ZTI8S20405C4[0]),
  (VTBL_ENTRY)&_ZN8S20405C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v12Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v13Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v14Ev,
};
static  VTT_ENTRY vtt_S20405C3[] = {
  {&(_ZTV8S20405C3[4]),  4,37},
  {&(_ZTV8S20405C3[15]),  15,37},
  {&(_ZTV8S20405C3[30]),  30,37},
  {&(_tg__ZTV8S20405C4__8S20405C3[3]),  3,10},
  {&(_tg__ZTV8S20405C2__8S20405C4__8S20405C3[8]),  8,14},
};
extern VTBL_ENTRY _ZTI8S20405C3[];
extern  VTBL_ENTRY _ZTV8S20405C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20405C3[];
static VTBL_ENTRY alt_thunk_names9[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20405C3D0Ev,_ZTv0_n16_N8S20405C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S20405C3D0Ev,_ZThn36_N8S20405C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20405C3D1Ev,_ZTv0_n16_N8S20405C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S20405C3D1Ev,_ZThn36_N8S20405C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20405C3 = {  "S20405C3", // class name
  bases_S20405C3, 2,
  &(vtc_S20405C3[0]), // expected_vtbl_contents
  &(vtt_S20405C3[0]), // expected_vtt_contents
  ABISELECT(88,48), // object size
  NSPAIRA(_ZTI8S20405C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20405C3),37, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20405C3),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names9,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20405C6  : virtual S20405C2 , virtual S20405C4 {
  virtual  ~S20405C6(); // _ZN8S20405C6D2Ev
  virtual void  v21(); // _ZN8S20405C63v21Ev
  virtual void  v22(); // _ZN8S20405C63v22Ev
  virtual void  v23(); // _ZN8S20405C63v23Ev
  virtual void  v24(); // _ZN8S20405C63v24Ev
  virtual void  v25(); // _ZN8S20405C63v25Ev
  virtual void  v26(); // _ZN8S20405C63v26Ev
  virtual void  v27(); // _ZN8S20405C63v27Ev
  virtual void  v28(); // _ZN8S20405C63v28Ev
  virtual void  v29(); // _ZN8S20405C63v29Ev
  S20405C6(); // tgen
};
//SIG(-1 S20405C6) C1{ VBC2{ v10 v11 v12 v13 v14 v15 Fp[6] Fi} VBC3{ VBC2 vd v16 v17 v18 v19 v20 Fi FU4{ m}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9}


 S20405C6 ::~S20405C6(){ note_dtor("S20405C6", this);}
void  S20405C6 ::v21(){vfunc_called(this, "_ZN8S20405C63v21Ev");}
void  S20405C6 ::v22(){vfunc_called(this, "_ZN8S20405C63v22Ev");}
void  S20405C6 ::v23(){vfunc_called(this, "_ZN8S20405C63v23Ev");}
void  S20405C6 ::v24(){vfunc_called(this, "_ZN8S20405C63v24Ev");}
void  S20405C6 ::v25(){vfunc_called(this, "_ZN8S20405C63v25Ev");}
void  S20405C6 ::v26(){vfunc_called(this, "_ZN8S20405C63v26Ev");}
void  S20405C6 ::v27(){vfunc_called(this, "_ZN8S20405C63v27Ev");}
void  S20405C6 ::v28(){vfunc_called(this, "_ZN8S20405C63v28Ev");}
void  S20405C6 ::v29(){vfunc_called(this, "_ZN8S20405C63v29Ev");}
S20405C6 ::S20405C6(){ note_ctor("S20405C6", this);} // tgen

static void Test_S20405C6()
{
  extern Class_Descriptor cd_S20405C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,13)];
    init_test(&cd_S20405C6, buf);
    S20405C6 *dp, &lv = *(dp=new (buf) S20405C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,48), "sizeof(S20405C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20405C6)");
    check_base_class_offset(lv, (S20405C2*), ABISELECT(8,4), "S20405C6");
    check_base_class_offset(lv, (S20405C2*)(S20405C4*), ABISELECT(8,4), "S20405C6");
    check_base_class_offset(lv, (S20405C4*), ABISELECT(72,36), "S20405C6");
    test_class_info(&lv, &cd_S20405C6);
    dp->~S20405C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20405C6(Test_S20405C6, "S20405C6", ABISELECT(88,48));

#else // __cplusplus

extern void _ZN8S20405C6C1Ev();
extern void _ZN8S20405C6D2Ev();
Name_Map name_map_S20405C6[] = {
  NSPAIR(_ZN8S20405C6C1Ev),
  NSPAIR(_ZN8S20405C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20405C2;
extern VTBL_ENTRY _ZTI8S20405C2[];
extern  VTBL_ENTRY _ZTV8S20405C2[];
extern Class_Descriptor cd_S20405C4;
extern VTBL_ENTRY _ZTI8S20405C4[];
extern  VTBL_ENTRY _ZTV8S20405C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20405C4[];
static Base_Class bases_S20405C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20405C2,    ABISELECT(8,4), //bcp->offset
    15, //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_S20405C4,    ABISELECT(72,36), //bcp->offset
    29, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20405C6[];
extern void _ZN8S20405C6D1Ev();
extern void _ZN8S20405C6D0Ev();
extern void _ZN8S20405C63v21Ev();
extern void _ZN8S20405C63v22Ev();
extern void _ZN8S20405C63v23Ev();
extern void _ZN8S20405C63v24Ev();
extern void _ZN8S20405C63v25Ev();
extern void _ZN8S20405C63v26Ev();
extern void _ZN8S20405C63v27Ev();
extern void _ZN8S20405C63v28Ev();
extern void _ZN8S20405C63v29Ev();
extern void _ZN8S20405C22v9Ev();
extern void _ZN8S20405C23v10Ev();
extern void _ZN8S20405C23v11Ev();
extern void _ZN8S20405C23v12Ev();
extern void _ZN8S20405C23v13Ev();
extern void _ZN8S20405C23v14Ev();
extern void ABISELECT(_ZTv0_n32_N8S20405C6D1Ev,_ZTv0_n16_N8S20405C6D1Ev)();
extern void ABISELECT(_ZThn72_N8S20405C6D1Ev,_ZThn36_N8S20405C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20405C6D0Ev,_ZTv0_n16_N8S20405C6D0Ev)();
extern void ABISELECT(_ZThn72_N8S20405C6D0Ev,_ZThn36_N8S20405C6D0Ev)() __attribute__((weak));
extern void _ZN8S20405C43v15Ev();
extern void _ZN8S20405C43v16Ev();
extern void _ZN8S20405C43v17Ev();
extern void _ZN8S20405C43v18Ev();
extern void _ZN8S20405C43v19Ev();
static  VTBL_ENTRY vtc_S20405C6[] = {
  ABISELECT(72,36),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20405C6[0]),
  (VTBL_ENTRY)&_ZN8S20405C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20405C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20405C63v21Ev,
  (VTBL_ENTRY)&_ZN8S20405C63v22Ev,
  (VTBL_ENTRY)&_ZN8S20405C63v23Ev,
  (VTBL_ENTRY)&_ZN8S20405C63v24Ev,
  (VTBL_ENTRY)&_ZN8S20405C63v25Ev,
  (VTBL_ENTRY)&_ZN8S20405C63v26Ev,
  (VTBL_ENTRY)&_ZN8S20405C63v27Ev,
  (VTBL_ENTRY)&_ZN8S20405C63v28Ev,
  (VTBL_ENTRY)&_ZN8S20405C63v29Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20405C6[0]),
  (VTBL_ENTRY)&_ZN8S20405C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v12Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v13Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v14Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-36),
  ABISELECT(-64,-32),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S20405C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20405C6D1Ev,_ZTv0_n16_N8S20405C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20405C6D0Ev,_ZTv0_n16_N8S20405C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20405C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v19Ev,
};
extern VTBL_ENTRY _ZTV8S20405C6[];
extern void _ZN8S20405C4D1Ev();
extern void _ZN8S20405C4D0Ev();
extern void _ZN8S20405C43v15Ev();
extern void _ZN8S20405C43v16Ev();
extern void _ZN8S20405C43v17Ev();
extern void _ZN8S20405C43v18Ev();
extern void _ZN8S20405C43v19Ev();
static  VTBL_ENTRY _tg__ZTV8S20405C4__8S20405C6[] = {
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S20405C4[0]),
  (VTBL_ENTRY)&_ZN8S20405C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20405C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v19Ev,
};
extern void _ZN8S20405C22v9Ev();
extern void _ZN8S20405C23v10Ev();
extern void _ZN8S20405C23v11Ev();
extern void _ZN8S20405C23v12Ev();
extern void _ZN8S20405C23v13Ev();
extern void _ZN8S20405C23v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20405C2__8S20405C4__8S20405C6[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(64,32),
  (VTBL_ENTRY)&(_ZTI8S20405C4[0]),
  (VTBL_ENTRY)&_ZN8S20405C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v12Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v13Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v14Ev,
};
static  VTT_ENTRY vtt_S20405C6[] = {
  {&(_ZTV8S20405C6[4]),  4,45},
  {&(_ZTV8S20405C6[23]),  23,45},
  {&(_ZTV8S20405C6[38]),  38,45},
  {&(_tg__ZTV8S20405C4__8S20405C6[3]),  3,10},
  {&(_tg__ZTV8S20405C2__8S20405C4__8S20405C6[8]),  8,14},
};
extern VTBL_ENTRY _ZTI8S20405C6[];
extern  VTBL_ENTRY _ZTV8S20405C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20405C6[];
static VTBL_ENTRY alt_thunk_names10[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20405C6D0Ev,_ZTv0_n16_N8S20405C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S20405C6D0Ev,_ZThn36_N8S20405C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20405C6D1Ev,_ZTv0_n16_N8S20405C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S20405C6D1Ev,_ZThn36_N8S20405C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20405C6 = {  "S20405C6", // class name
  bases_S20405C6, 2,
  &(vtc_S20405C6[0]), // expected_vtbl_contents
  &(vtt_S20405C6[0]), // expected_vtt_contents
  ABISELECT(88,48), // object size
  NSPAIRA(_ZTI8S20405C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20405C6),45, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20405C6),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names10,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20405C1  : virtual S20405C2 , virtual S20405C3 , S20405C4 , virtual S20405C6 {
  short  :0;
  char s20405c1f1[8];
  virtual  ~S20405C1(); // _ZN8S20405C1D2Ev
  virtual void  v1(); // _ZN8S20405C12v1Ev
  virtual void  v2(); // _ZN8S20405C12v2Ev
  virtual void  v3(); // _ZN8S20405C12v3Ev
  virtual void  v4(); // _ZN8S20405C12v4Ev
  virtual void  v5(); // _ZN8S20405C12v5Ev
  virtual void  v6(); // _ZN8S20405C12v6Ev
  virtual void  v7(); // _ZN8S20405C12v7Ev
  virtual void  v8(); // _ZN8S20405C12v8Ev
  S20405C1(); // tgen
};
//SIG(1 S20405C1) C1{ VBC2{ v9 v10 v11 v12 v13 v14 Fp[6] Fi} VBC3{ VBC2 VBC4{ VBC2 vd v15 v16 v17 v18 v19 Fi FU5{ m}} vd v20} BC4 VBC6{ VBC2 VBC4 vd v21 v22 v23 v24 v25 v26 v27 v28 v29} vd v1 v2 v3 v4 v5 v6 v7 v8 Fs:0 Fc[8]}


 S20405C1 ::~S20405C1(){ note_dtor("S20405C1", this);}
void  S20405C1 ::v1(){vfunc_called(this, "_ZN8S20405C12v1Ev");}
void  S20405C1 ::v2(){vfunc_called(this, "_ZN8S20405C12v2Ev");}
void  S20405C1 ::v3(){vfunc_called(this, "_ZN8S20405C12v3Ev");}
void  S20405C1 ::v4(){vfunc_called(this, "_ZN8S20405C12v4Ev");}
void  S20405C1 ::v5(){vfunc_called(this, "_ZN8S20405C12v5Ev");}
void  S20405C1 ::v6(){vfunc_called(this, "_ZN8S20405C12v6Ev");}
void  S20405C1 ::v7(){vfunc_called(this, "_ZN8S20405C12v7Ev");}
void  S20405C1 ::v8(){vfunc_called(this, "_ZN8S20405C12v8Ev");}
S20405C1 ::S20405C1(){ note_ctor("S20405C1", this);} // tgen

static void Test_S20405C1()
{
  extern Class_Descriptor cd_S20405C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,19)];
    init_test(&cd_S20405C1, buf);
    S20405C1 *dp, &lv = *(dp=new (buf) S20405C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,72), "sizeof(S20405C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20405C1)");
    check_base_class_offset(lv, (S20405C2*), ABISELECT(24,20), "S20405C1");
    check_base_class_offset(lv, (S20405C2*)(S20405C3*), ABISELECT(24,20), "S20405C1");
    /*is_ambiguous_... S20405C1::S20405C4 */ AMB_check_base_class_offset(lv, (S20405C2*)(S20405C4*), ABISELECT(24,20), "S20405C1");
    /*is_ambiguous_... S20405C1::S20405C4 */ AMB_check_base_class_offset(lv, (S20405C2*)(S20405C4*), ABISELECT(24,20), "S20405C1");
    check_base_class_offset(lv, (S20405C2*)(S20405C6*), ABISELECT(24,20), "S20405C1");
    check_base_class_offset(lv, (S20405C4*)(S20405C3*), ABISELECT(96,56), "S20405C1");
    check_base_class_offset(lv, (S20405C4*)(S20405C6*), ABISELECT(96,56), "S20405C1");
    check_base_class_offset(lv, (S20405C3*), ABISELECT(88,52), "S20405C1");
    /*is_ambiguous_... S20405C1::S20405C4 */ AMB_check_base_class_offset(lv, (S20405C4*), 0, "S20405C1");
    check_base_class_offset(lv, (S20405C6*), ABISELECT(112,68), "S20405C1");
    check_field_offset(lv, s20405c1f1, ABISELECT(14,10), "S20405C1.s20405c1f1");
    test_class_info(&lv, &cd_S20405C1);
    dp->~S20405C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20405C1(Test_S20405C1, "S20405C1", ABISELECT(120,72));

#else // __cplusplus

extern void _ZN8S20405C1C1Ev();
extern void _ZN8S20405C1D2Ev();
Name_Map name_map_S20405C1[] = {
  NSPAIR(_ZN8S20405C1C1Ev),
  NSPAIR(_ZN8S20405C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20405C2;
extern VTBL_ENTRY _ZTI8S20405C2[];
extern  VTBL_ENTRY _ZTV8S20405C2[];
extern Class_Descriptor cd_S20405C4;
extern VTBL_ENTRY _ZTI8S20405C4[];
extern  VTBL_ENTRY _ZTV8S20405C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20405C4[];
extern Class_Descriptor cd_S20405C3;
extern VTBL_ENTRY _ZTI8S20405C3[];
extern  VTBL_ENTRY _ZTV8S20405C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20405C3[];
extern Class_Descriptor cd_S20405C4;
extern VTBL_ENTRY _ZTI8S20405C4[];
extern  VTBL_ENTRY _ZTV8S20405C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20405C4[];
extern Class_Descriptor cd_S20405C6;
extern VTBL_ENTRY _ZTI8S20405C6[];
extern  VTBL_ENTRY _ZTV8S20405C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20405C6[];
static Base_Class bases_S20405C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20405C2,    ABISELECT(24,20), //bcp->offset
    21, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S20405C4,    ABISELECT(96,56), //bcp->offset
    44, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S20405C3,    ABISELECT(88,52), //bcp->offset
    35, //bcp->virtual_function_table_offset
    6, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S20405C4,    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_S20405C6,    ABISELECT(112,68), //bcp->offset
    60, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20405C1[];
extern void _ZN8S20405C1D1Ev();
extern void _ZN8S20405C1D0Ev();
extern void _ZN8S20405C43v15Ev();
extern void _ZN8S20405C43v16Ev();
extern void _ZN8S20405C43v17Ev();
extern void _ZN8S20405C43v18Ev();
extern void _ZN8S20405C43v19Ev();
extern void _ZN8S20405C12v1Ev();
extern void _ZN8S20405C12v2Ev();
extern void _ZN8S20405C12v3Ev();
extern void _ZN8S20405C12v4Ev();
extern void _ZN8S20405C12v5Ev();
extern void _ZN8S20405C12v6Ev();
extern void _ZN8S20405C12v7Ev();
extern void _ZN8S20405C12v8Ev();
extern void _ZN8S20405C22v9Ev();
extern void _ZN8S20405C23v10Ev();
extern void _ZN8S20405C23v11Ev();
extern void _ZN8S20405C23v12Ev();
extern void _ZN8S20405C23v13Ev();
extern void _ZN8S20405C23v14Ev();
extern void ABISELECT(_ZTv0_n40_N8S20405C1D1Ev,_ZTv0_n20_N8S20405C1D1Ev)();
extern void ABISELECT(_ZThn88_N8S20405C1D1Ev,_ZThn52_N8S20405C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20405C1D0Ev,_ZTv0_n20_N8S20405C1D0Ev)();
extern void ABISELECT(_ZThn88_N8S20405C1D0Ev,_ZThn52_N8S20405C1D0Ev)() __attribute__((weak));
extern void _ZN8S20405C33v20Ev();
extern void ABISELECT(_ZTv0_n32_N8S20405C1D1Ev,_ZTv0_n16_N8S20405C1D1Ev)();
extern void ABISELECT(_ZThn96_N8S20405C1D1Ev,_ZThn56_N8S20405C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20405C1D0Ev,_ZTv0_n16_N8S20405C1D0Ev)();
extern void ABISELECT(_ZThn96_N8S20405C1D0Ev,_ZThn56_N8S20405C1D0Ev)() __attribute__((weak));
extern void _ZN8S20405C43v15Ev();
extern void _ZN8S20405C43v16Ev();
extern void _ZN8S20405C43v17Ev();
extern void _ZN8S20405C43v18Ev();
extern void _ZN8S20405C43v19Ev();
extern void ABISELECT(_ZTv0_n40_N8S20405C1D1Ev,_ZTv0_n20_N8S20405C1D1Ev)();
extern void ABISELECT(_ZThn112_N8S20405C1D1Ev,_ZThn68_N8S20405C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20405C1D0Ev,_ZTv0_n20_N8S20405C1D0Ev)();
extern void ABISELECT(_ZThn112_N8S20405C1D0Ev,_ZThn68_N8S20405C1D0Ev)() __attribute__((weak));
extern void _ZN8S20405C63v21Ev();
extern void _ZN8S20405C63v22Ev();
extern void _ZN8S20405C63v23Ev();
extern void _ZN8S20405C63v24Ev();
extern void _ZN8S20405C63v25Ev();
extern void _ZN8S20405C63v26Ev();
extern void _ZN8S20405C63v27Ev();
extern void _ZN8S20405C63v28Ev();
extern void _ZN8S20405C63v29Ev();
static  VTBL_ENTRY vtc_S20405C1[] = {
  ABISELECT(112,68),
  ABISELECT(96,56),
  ABISELECT(88,52),
  ABISELECT(24,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20405C1[0]),
  (VTBL_ENTRY)&_ZN8S20405C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20405C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20405C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20405C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20405C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20405C12v4Ev,
  (VTBL_ENTRY)&_ZN8S20405C12v5Ev,
  (VTBL_ENTRY)&_ZN8S20405C12v6Ev,
  (VTBL_ENTRY)&_ZN8S20405C12v7Ev,
  (VTBL_ENTRY)&_ZN8S20405C12v8Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-20),
  (VTBL_ENTRY)&(_ZTI8S20405C1[0]),
  (VTBL_ENTRY)&_ZN8S20405C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v12Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v13Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v14Ev,
  0,
  ABISELECT(-88,-52),
  ABISELECT(8,4),
  ABISELECT(-64,-32),
  ABISELECT(-88,-52),
  (VTBL_ENTRY)&(_ZTI8S20405C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20405C1D1Ev,_ZTv0_n20_N8S20405C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20405C1D0Ev,_ZTv0_n20_N8S20405C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20405C33v20Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-56),
  ABISELECT(-72,-36),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI8S20405C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20405C1D1Ev,_ZTv0_n16_N8S20405C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20405C1D0Ev,_ZTv0_n16_N8S20405C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20405C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v19Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-68),
  ABISELECT(-16,-12),
  ABISELECT(-88,-48),
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI8S20405C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20405C1D1Ev,_ZTv0_n20_N8S20405C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20405C1D0Ev,_ZTv0_n20_N8S20405C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20405C63v21Ev,
  (VTBL_ENTRY)&_ZN8S20405C63v22Ev,
  (VTBL_ENTRY)&_ZN8S20405C63v23Ev,
  (VTBL_ENTRY)&_ZN8S20405C63v24Ev,
  (VTBL_ENTRY)&_ZN8S20405C63v25Ev,
  (VTBL_ENTRY)&_ZN8S20405C63v26Ev,
  (VTBL_ENTRY)&_ZN8S20405C63v27Ev,
  (VTBL_ENTRY)&_ZN8S20405C63v28Ev,
  (VTBL_ENTRY)&_ZN8S20405C63v29Ev,
};
extern VTBL_ENTRY _ZTV8S20405C1[];
extern void _ZN8S20405C4D1Ev();
extern void _ZN8S20405C4D0Ev();
extern void _ZN8S20405C43v15Ev();
extern void _ZN8S20405C43v16Ev();
extern void _ZN8S20405C43v17Ev();
extern void _ZN8S20405C43v18Ev();
extern void _ZN8S20405C43v19Ev();
static  VTBL_ENTRY _tg__ZTV8S20405C4__A__8S20405C1[] = {
  ABISELECT(24,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20405C4[0]),
  (VTBL_ENTRY)&_ZN8S20405C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20405C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v19Ev,
};
extern void _ZN8S20405C22v9Ev();
extern void _ZN8S20405C23v10Ev();
extern void _ZN8S20405C23v11Ev();
extern void _ZN8S20405C23v12Ev();
extern void _ZN8S20405C23v13Ev();
extern void _ZN8S20405C23v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20405C2__8S20405C4__A__8S20405C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-20),
  (VTBL_ENTRY)&(_ZTI8S20405C4[0]),
  (VTBL_ENTRY)&_ZN8S20405C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v12Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v13Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v14Ev,
};
extern void _ZN8S20405C3D1Ev();
extern void _ZN8S20405C3D0Ev();
extern void _ZN8S20405C33v20Ev();
static  VTBL_ENTRY _tg__ZTV8S20405C3__8S20405C1[] = {
  ABISELECT(8,4),
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S20405C3[0]),
  (VTBL_ENTRY)&_ZN8S20405C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20405C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20405C33v20Ev,
};
extern void _ZN8S20405C22v9Ev();
extern void _ZN8S20405C23v10Ev();
extern void _ZN8S20405C23v11Ev();
extern void _ZN8S20405C23v12Ev();
extern void _ZN8S20405C23v13Ev();
extern void _ZN8S20405C23v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20405C2__8S20405C3__8S20405C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(64,32),
  (VTBL_ENTRY)&(_ZTI8S20405C3[0]),
  (VTBL_ENTRY)&_ZN8S20405C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v12Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v13Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v14Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S20405C3D1Ev,_ZTv0_n16_N8S20405C3D1Ev)();
extern void ABISELECT(_ZThn8_N8S20405C3D1Ev,_ZThn4_N8S20405C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20405C3D0Ev,_ZTv0_n16_N8S20405C3D0Ev)();
extern void ABISELECT(_ZThn8_N8S20405C3D0Ev,_ZThn4_N8S20405C3D0Ev)() __attribute__((weak));
extern void _ZN8S20405C43v15Ev();
extern void _ZN8S20405C43v16Ev();
extern void _ZN8S20405C43v17Ev();
extern void _ZN8S20405C43v18Ev();
extern void _ZN8S20405C43v19Ev();
static  VTBL_ENTRY _tg__ZTV8S20405C4__8S20405C3__8S20405C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-72,-36),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20405C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20405C3D1Ev,_ZTv0_n16_N8S20405C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20405C3D0Ev,_ZTv0_n16_N8S20405C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20405C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v19Ev,
};
extern void _ZN8S20405C4D1Ev();
extern void _ZN8S20405C4D0Ev();
extern void _ZN8S20405C43v15Ev();
extern void _ZN8S20405C43v16Ev();
extern void _ZN8S20405C43v17Ev();
extern void _ZN8S20405C43v18Ev();
extern void _ZN8S20405C43v19Ev();
static  VTBL_ENTRY _tg__ZTV8S20405C4__8S20405C1[] = {
  ABISELECT(-72,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S20405C4[0]),
  (VTBL_ENTRY)&_ZN8S20405C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20405C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v19Ev,
};
extern void _ZN8S20405C22v9Ev();
extern void _ZN8S20405C23v10Ev();
extern void _ZN8S20405C23v11Ev();
extern void _ZN8S20405C23v12Ev();
extern void _ZN8S20405C23v13Ev();
extern void _ZN8S20405C23v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20405C2__8S20405C4__8S20405C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(72,36),
  (VTBL_ENTRY)&(_ZTI8S20405C4[0]),
  (VTBL_ENTRY)&_ZN8S20405C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v12Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v13Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v14Ev,
};
extern void _ZN8S20405C6D1Ev();
extern void _ZN8S20405C6D0Ev();
extern void _ZN8S20405C63v21Ev();
extern void _ZN8S20405C63v22Ev();
extern void _ZN8S20405C63v23Ev();
extern void _ZN8S20405C63v24Ev();
extern void _ZN8S20405C63v25Ev();
extern void _ZN8S20405C63v26Ev();
extern void _ZN8S20405C63v27Ev();
extern void _ZN8S20405C63v28Ev();
extern void _ZN8S20405C63v29Ev();
static  VTBL_ENTRY _tg__ZTV8S20405C6__8S20405C1[] = {
  ABISELECT(-16,-12),
  ABISELECT(-88,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S20405C6[0]),
  (VTBL_ENTRY)&_ZN8S20405C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20405C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20405C63v21Ev,
  (VTBL_ENTRY)&_ZN8S20405C63v22Ev,
  (VTBL_ENTRY)&_ZN8S20405C63v23Ev,
  (VTBL_ENTRY)&_ZN8S20405C63v24Ev,
  (VTBL_ENTRY)&_ZN8S20405C63v25Ev,
  (VTBL_ENTRY)&_ZN8S20405C63v26Ev,
  (VTBL_ENTRY)&_ZN8S20405C63v27Ev,
  (VTBL_ENTRY)&_ZN8S20405C63v28Ev,
  (VTBL_ENTRY)&_ZN8S20405C63v29Ev,
};
extern void _ZN8S20405C22v9Ev();
extern void _ZN8S20405C23v10Ev();
extern void _ZN8S20405C23v11Ev();
extern void _ZN8S20405C23v12Ev();
extern void _ZN8S20405C23v13Ev();
extern void _ZN8S20405C23v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20405C2__8S20405C6__8S20405C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(88,48),
  (VTBL_ENTRY)&(_ZTI8S20405C6[0]),
  (VTBL_ENTRY)&_ZN8S20405C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v12Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v13Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v14Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S20405C6D1Ev,_ZTv0_n16_N8S20405C6D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S20405C6D0Ev,_ZTv0_n16_N8S20405C6D0Ev)();
extern void _ZN8S20405C43v15Ev();
extern void _ZN8S20405C43v16Ev();
extern void _ZN8S20405C43v17Ev();
extern void _ZN8S20405C43v18Ev();
extern void _ZN8S20405C43v19Ev();
static  VTBL_ENTRY _tg__ZTV8S20405C4__8S20405C6__8S20405C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,12),
  ABISELECT(-72,-36),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S20405C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20405C6D1Ev,_ZTv0_n16_N8S20405C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20405C6D0Ev,_ZTv0_n16_N8S20405C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20405C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v19Ev,
};
static  VTT_ENTRY vtt_S20405C1[] = {
  {&(_ZTV8S20405C1[6]),  6,85},
  {&(_tg__ZTV8S20405C4__A__8S20405C1[3]),  3,10},
  {&(_tg__ZTV8S20405C2__8S20405C4__A__8S20405C1[8]),  8,14},
  {&(_ZTV8S20405C1[29]),  29,85},
  {&(_ZTV8S20405C1[41]),  41,85},
  {&(_ZTV8S20405C1[53]),  53,85},
  {&(_ZTV8S20405C1[74]),  74,85},
  {&(_tg__ZTV8S20405C3__8S20405C1[4]),  4,7},
  {&(_tg__ZTV8S20405C2__8S20405C3__8S20405C1[8]),  8,14},
  {&(_tg__ZTV8S20405C4__8S20405C3__8S20405C1[9]),  9,16},
  {&(_tg__ZTV8S20405C4__8S20405C1[3]),  3,10},
  {&(_tg__ZTV8S20405C2__8S20405C4__8S20405C1[8]),  8,14},
  {&(_tg__ZTV8S20405C6__8S20405C1[4]),  4,15},
  {&(_tg__ZTV8S20405C2__8S20405C6__8S20405C1[8]),  8,14},
  {&(_tg__ZTV8S20405C4__8S20405C6__8S20405C1[9]),  9,16},
};
extern VTBL_ENTRY _ZTI8S20405C1[];
extern  VTBL_ENTRY _ZTV8S20405C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20405C1[];
static VTBL_ENTRY alt_thunk_names11[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20405C3D0Ev,_ZTv0_n16_N8S20405C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20405C3D0Ev,_ZThn4_N8S20405C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20405C3D1Ev,_ZTv0_n16_N8S20405C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20405C3D1Ev,_ZThn4_N8S20405C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20405C1D0Ev,_ZTv0_n16_N8S20405C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S20405C1D0Ev,_ZThn56_N8S20405C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20405C1D1Ev,_ZTv0_n16_N8S20405C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S20405C1D1Ev,_ZThn56_N8S20405C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20405C1D0Ev,_ZTv0_n20_N8S20405C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20405C1D0Ev,_ZThn68_N8S20405C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S20405C1D0Ev,_ZThn52_N8S20405C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20405C1D1Ev,_ZTv0_n20_N8S20405C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20405C1D1Ev,_ZThn68_N8S20405C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S20405C1D1Ev,_ZThn52_N8S20405C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20405C1 = {  "S20405C1", // class name
  bases_S20405C1, 5,
  &(vtc_S20405C1[0]), // expected_vtbl_contents
  &(vtt_S20405C1[0]), // expected_vtt_contents
  ABISELECT(120,72), // object size
  NSPAIRA(_ZTI8S20405C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20405C1),85, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20405C1),15, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names11,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20733C6  {
  virtual void  v1(); // _ZN8S20733C62v1Ev
  ~S20733C6(); // tgen
  S20733C6(); // tgen
};
//SIG(-1 S20733C6) C1{ v1}


void  S20733C6 ::v1(){vfunc_called(this, "_ZN8S20733C62v1Ev");}
S20733C6 ::~S20733C6(){ note_dtor("S20733C6", this);} // tgen
S20733C6 ::S20733C6(){ note_ctor("S20733C6", this);} // tgen

static void Test_S20733C6()
{
  extern Class_Descriptor cd_S20733C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20733C6, buf);
    S20733C6 *dp, &lv = *(dp=new (buf) S20733C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20733C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20733C6)");
    test_class_info(&lv, &cd_S20733C6);
    dp->~S20733C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20733C6(Test_S20733C6, "S20733C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20733C6C1Ev();
extern void _ZN8S20733C6D1Ev();
Name_Map name_map_S20733C6[] = {
  NSPAIR(_ZN8S20733C6C1Ev),
  NSPAIR(_ZN8S20733C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20733C6[];
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY vtc_S20733C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C6[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
Class_Descriptor cd_S20733C6 = {  "S20733C6", // class name
  0,0,//no base classes
  &(vtc_S20733C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20733C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20733C6),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  S20733C5  : virtual S2121C38 , S20733C6 , virtual S2121C28 {
  ~S20733C5(); // tgen
  S20733C5(); // tgen
};
//SIG(-1 S20733C5) C1{ VBC2{ m} BC3{ v1} VBC4{ m}}


S20733C5 ::~S20733C5(){ note_dtor("S20733C5", this);} // tgen
S20733C5 ::S20733C5(){ note_ctor("S20733C5", this);} // tgen

static void Test_S20733C5()
{
  extern Class_Descriptor cd_S20733C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20733C5, buf);
    S20733C5 *dp, &lv = *(dp=new (buf) S20733C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20733C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20733C5)");
    check_base_class_offset(lv, (S2121C38*), 0, "S20733C5");
    check_base_class_offset(lv, (S20733C6*), 0, "S20733C5");
    check_base_class_offset(lv, (S2121C28*), 0, "S20733C5");
    test_class_info(&lv, &cd_S20733C5);
    dp->~S20733C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20733C5(Test_S20733C5, "S20733C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20733C5C1Ev();
extern void _ZN8S20733C5D1Ev();
Name_Map name_map_S20733C5[] = {
  NSPAIR(_ZN8S20733C5C1Ev),
  NSPAIR(_ZN8S20733C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
static Base_Class bases_S20733C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20733C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S20733C5[];
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY vtc_S20733C5[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C5[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern VTBL_ENTRY _ZTV8S20733C5[];
static  VTT_ENTRY vtt_S20733C5[] = {
  {&(_ZTV8S20733C5[4]),  4,5},
};
extern VTBL_ENTRY _ZTI8S20733C5[];
extern  VTBL_ENTRY _ZTV8S20733C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C5[];
Class_Descriptor cd_S20733C5 = {  "S20733C5", // class name
  bases_S20733C5, 3,
  &(vtc_S20733C5[0]), // expected_vtbl_contents
  &(vtt_S20733C5[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20733C5),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20733C5),5, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20733C5),1, //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  S20733C4  : S20733C5 , S20733C6 {
  ~S20733C4(); // tgen
  S20733C4(); // tgen
};
//SIG(-1 S20733C4) C1{ BC2{ VBC3{ m} BC4{ v1} VBC5{ m}} BC4}


S20733C4 ::~S20733C4(){ note_dtor("S20733C4", this);} // tgen
S20733C4 ::S20733C4(){ note_ctor("S20733C4", this);} // tgen

static void Test_S20733C4()
{
  extern Class_Descriptor cd_S20733C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20733C4, buf);
    S20733C4 *dp, &lv = *(dp=new (buf) S20733C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20733C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20733C4)");
    check_base_class_offset(lv, (S2121C38*)(S20733C5*), 0, "S20733C4");
    check_base_class_offset(lv, (S20733C6*)(S20733C5*), 0, "S20733C4");
    check_base_class_offset(lv, (S2121C28*)(S20733C5*), 0, "S20733C4");
    check_base_class_offset(lv, (S20733C5*), 0, "S20733C4");
    /*is_ambiguous_... S20733C4::S20733C6 */ AMB_check_base_class_offset(lv, (S20733C6*), ABISELECT(8,4), "S20733C4");
    test_class_info(&lv, &cd_S20733C4);
    dp->~S20733C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20733C4(Test_S20733C4, "S20733C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S20733C4C1Ev();
extern void _ZN8S20733C4D1Ev();
Name_Map name_map_S20733C4[] = {
  NSPAIR(_ZN8S20733C4C1Ev),
  NSPAIR(_ZN8S20733C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20733C5;
extern VTBL_ENTRY _ZTI8S20733C5[];
extern  VTBL_ENTRY _ZTV8S20733C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C5[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
static Base_Class bases_S20733C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20733C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20733C5,    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_S20733C6,    ABISELECT(8,4), //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
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20733C4[];
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY vtc_S20733C4[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C4[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20733C4[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern VTBL_ENTRY _ZTV8S20733C4[];
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C5__8S20733C4[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C5[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
static  VTT_ENTRY vtt_S20733C4[] = {
  {&(_ZTV8S20733C4[4]),  4,8},
  {&(_tg__ZTV8S20733C5__8S20733C4[4]),  4,5},
};
extern VTBL_ENTRY _ZTI8S20733C4[];
extern  VTBL_ENTRY _ZTV8S20733C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C4[];
Class_Descriptor cd_S20733C4 = {  "S20733C4", // class name
  bases_S20733C4, 5,
  &(vtc_S20733C4[0]), // expected_vtbl_contents
  &(vtt_S20733C4[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20733C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20733C4),8, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20733C4),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  S20733C8  : S2121C38 , S20733C5 {
  virtual void  v2(); // _ZN8S20733C82v2Ev
  ~S20733C8(); // tgen
  S20733C8(); // tgen
};
//SIG(-1 S20733C8) C1{ BC2{ m} BC3{ VBC2 BC4{ v2} VBC5{ m}} v1}


void  S20733C8 ::v2(){vfunc_called(this, "_ZN8S20733C82v2Ev");}
S20733C8 ::~S20733C8(){ note_dtor("S20733C8", this);} // tgen
S20733C8 ::S20733C8(){ note_ctor("S20733C8", this);} // tgen

static void Test_S20733C8()
{
  extern Class_Descriptor cd_S20733C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20733C8, buf);
    S20733C8 *dp, &lv = *(dp=new (buf) S20733C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20733C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20733C8)");
    /*is_ambiguous_... S20733C8::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*), 0, "S20733C8");
    check_base_class_offset(lv, (S2121C38*)(S20733C5*), ABISELECT(8,4), "S20733C8");
    check_base_class_offset(lv, (S20733C6*)(S20733C5*), 0, "S20733C8");
    check_base_class_offset(lv, (S2121C28*)(S20733C5*), 0, "S20733C8");
    check_base_class_offset(lv, (S20733C5*), 0, "S20733C8");
    test_class_info(&lv, &cd_S20733C8);
    dp->~S20733C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20733C8(Test_S20733C8, "S20733C8", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S20733C8C1Ev();
extern void _ZN8S20733C8D1Ev();
Name_Map name_map_S20733C8[] = {
  NSPAIR(_ZN8S20733C8C1Ev),
  NSPAIR(_ZN8S20733C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20733C5;
extern VTBL_ENTRY _ZTI8S20733C5[];
extern  VTBL_ENTRY _ZTV8S20733C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C5[];
static Base_Class bases_S20733C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2121C38,    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, 1},
  {&cd_S20733C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20733C5,    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 _ZTI8S20733C8[];
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C82v2Ev();
static  VTBL_ENTRY vtc_S20733C8[] = {
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C8[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20733C82v2Ev,
};
extern VTBL_ENTRY _ZTV8S20733C8[];
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C5__8S20733C8[] = {
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C5[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
static  VTT_ENTRY vtt_S20733C8[] = {
  {&(_ZTV8S20733C8[4]),  4,6},
  {&(_tg__ZTV8S20733C5__8S20733C8[4]),  4,5},
};
extern VTBL_ENTRY _ZTI8S20733C8[];
extern  VTBL_ENTRY _ZTV8S20733C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C8[];
Class_Descriptor cd_S20733C8 = {  "S20733C8", // class name
  bases_S20733C8, 5,
  &(vtc_S20733C8[0]), // expected_vtbl_contents
  &(vtt_S20733C8[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20733C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20733C8),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20733C8),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  S20733C9  : S20733C6 , S2121C28 , virtual S2121C38 {
  ~S20733C9(); // tgen
  S20733C9(); // tgen
};
//SIG(-1 S20733C9) C1{ BC2{ v1} BC3{ m} VBC4{ m}}


S20733C9 ::~S20733C9(){ note_dtor("S20733C9", this);} // tgen
S20733C9 ::S20733C9(){ note_ctor("S20733C9", this);} // tgen

static void Test_S20733C9()
{
  extern Class_Descriptor cd_S20733C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20733C9, buf);
    S20733C9 *dp, &lv = *(dp=new (buf) S20733C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20733C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20733C9)");
    check_base_class_offset(lv, (S20733C6*), 0, "S20733C9");
    check_base_class_offset(lv, (S2121C28*), 0, "S20733C9");
    check_base_class_offset(lv, (S2121C38*), 0, "S20733C9");
    test_class_info(&lv, &cd_S20733C9);
    dp->~S20733C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20733C9(Test_S20733C9, "S20733C9", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20733C9C1Ev();
extern void _ZN8S20733C9D1Ev();
Name_Map name_map_S20733C9[] = {
  NSPAIR(_ZN8S20733C9C1Ev),
  NSPAIR(_ZN8S20733C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
static Base_Class bases_S20733C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20733C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S20733C9[];
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY vtc_S20733C9[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C9[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern VTBL_ENTRY _ZTV8S20733C9[];
static  VTT_ENTRY vtt_S20733C9[] = {
  {&(_ZTV8S20733C9[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20733C9[];
extern  VTBL_ENTRY _ZTV8S20733C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C9[];
Class_Descriptor cd_S20733C9 = {  "S20733C9", // class name
  bases_S20733C9, 3,
  &(vtc_S20733C9[0]), // expected_vtbl_contents
  &(vtt_S20733C9[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20733C9),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20733C9),4, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20733C9),1, //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  S20733C2  : virtual S2121C38 , virtual S20733C4 , virtual S20733C8 , virtual S20733C9 , S20733C6 {
  ~S20733C2(); // tgen
  S20733C2(); // tgen
};
//SIG(-1 S20733C2) C1{ VBC2{ m} VBC3{ BC4{ VBC2 BC5{ v1} VBC6{ m}} BC5} VBC7{ BC2 BC4 v2} VBC8{ BC5 BC6 VBC2} BC5}


S20733C2 ::~S20733C2(){ note_dtor("S20733C2", this);} // tgen
S20733C2 ::S20733C2(){ note_ctor("S20733C2", this);} // tgen

static void Test_S20733C2()
{
  extern Class_Descriptor cd_S20733C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S20733C2, buf);
    S20733C2 *dp, &lv = *(dp=new (buf) S20733C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S20733C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20733C2)");
    /*is_ambiguous_... S20733C2::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*), 0, "S20733C2");
    check_base_class_offset(lv, (S2121C38*)(S20733C5*)(S20733C4*), 0, "S20733C2");
    check_base_class_offset(lv, (S2121C38*)(S20733C5*)(S20733C8*), 0, "S20733C2");
    check_base_class_offset(lv, (S2121C38*)(S20733C9*), 0, "S20733C2");
    check_base_class_offset(lv, (S20733C6*)(S20733C5*)(S20733C4*), ABISELECT(8,4), "S20733C2");
    check_base_class_offset(lv, (S2121C28*)(S20733C5*)(S20733C4*), 0, "S20733C2");
    check_base_class_offset(lv, (S2121C28*)(S20733C5*)(S20733C8*), 0, "S20733C2");
    check_base_class_offset(lv, (S20733C5*)(S20733C4*), ABISELECT(8,4), "S20733C2");
    /*is_ambiguous_... S20733C4::S20733C6 */ AMB_check_base_class_offset(lv, (S20733C6*)(S20733C4*), ABISELECT(16,8), "S20733C2");
    check_base_class_offset(lv, (S20733C4*), ABISELECT(8,4), "S20733C2");
    /*is_ambiguous_... S20733C8::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20733C8*), ABISELECT(24,12), "S20733C2");
    check_base_class_offset(lv, (S20733C6*)(S20733C5*)(S20733C8*), ABISELECT(24,12), "S20733C2");
    check_base_class_offset(lv, (S20733C5*)(S20733C8*), ABISELECT(24,12), "S20733C2");
    check_base_class_offset(lv, (S20733C8*), ABISELECT(24,12), "S20733C2");
    check_base_class_offset(lv, (S20733C6*)(S20733C9*), ABISELECT(32,16), "S20733C2");
    check_base_class_offset(lv, (S2121C28*)(S20733C9*), ABISELECT(32,16), "S20733C2");
    check_base_class_offset(lv, (S20733C9*), ABISELECT(32,16), "S20733C2");
    /*is_ambiguous_... S20733C2::S20733C6 */ AMB_check_base_class_offset(lv, (S20733C6*), 0, "S20733C2");
    test_class_info(&lv, &cd_S20733C2);
    dp->~S20733C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20733C2(Test_S20733C2, "S20733C2", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S20733C2C1Ev();
extern void _ZN8S20733C2D1Ev();
Name_Map name_map_S20733C2[] = {
  NSPAIR(_ZN8S20733C2C1Ev),
  NSPAIR(_ZN8S20733C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20733C5;
extern VTBL_ENTRY _ZTI8S20733C5[];
extern  VTBL_ENTRY _ZTV8S20733C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C5[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S20733C4;
extern VTBL_ENTRY _ZTI8S20733C4[];
extern  VTBL_ENTRY _ZTV8S20733C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C4[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S20733C5;
extern VTBL_ENTRY _ZTI8S20733C5[];
extern  VTBL_ENTRY _ZTV8S20733C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C5[];
extern Class_Descriptor cd_S20733C8;
extern VTBL_ENTRY _ZTI8S20733C8[];
extern  VTBL_ENTRY _ZTV8S20733C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C8[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20733C9;
extern VTBL_ENTRY _ZTI8S20733C9[];
extern  VTBL_ENTRY _ZTV8S20733C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C9[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
static Base_Class bases_S20733C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20733C6,    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
    3, //immediately_derived
  0, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20733C5,    ABISELECT(8,4), //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
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20733C6,    ABISELECT(16,8), //bcp->offset
    14, //bcp->virtual_function_table_offset
    2, //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
    5, //immediately_derived
  0, 0},
  {&cd_S20733C4,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2121C38,    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
    9, //immediately_derived
  0, 0},
  {&cd_S20733C6,    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
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20733C5,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20733C8,    ABISELECT(24,12), //bcp->offset
    17, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20733C6,    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
    8, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2121C28,    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
    12, //immediately_derived
  0, 0},
  {&cd_S20733C9,    ABISELECT(32,16), //bcp->offset
    25, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20733C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20733C2[];
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C82v2Ev();
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY vtc_S20733C2[] = {
  ABISELECT(32,16),
  ABISELECT(24,12),
  0,
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C2[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20733C2[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20733C2[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20733C2[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20733C82v2Ev,
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20733C2[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern VTBL_ENTRY _ZTV8S20733C2[];
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C4__8S20733C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C4[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C58S20733C4__8S20733C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C5[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C8__8S20733C2[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C8[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20733C82v2Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C58S20733C8__A1__8S20733C2[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C5[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C9__8S20733C2[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C9[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
static  VTT_ENTRY vtt_S20733C2[] = {
  {&(_ZTV8S20733C2[7]),  7,30},
  {&(_ZTV8S20733C2[13]),  13,30},
  {&(_ZTV8S20733C2[16]),  16,30},
  {&(_ZTV8S20733C2[23]),  23,30},
  {&(_ZTV8S20733C2[29]),  29,30},
  {&(_tg__ZTV8S20733C4__8S20733C2[4]),  4,5},
  {&(_tg__ZTV8S20733C58S20733C4__8S20733C2[4]),  4,5},
  {&(_tg__ZTV8S20733C8__8S20733C2[4]),  4,6},
  {&(_tg__ZTV8S20733C58S20733C8__A1__8S20733C2[4]),  4,5},
  {&(_tg__ZTV8S20733C9__8S20733C2[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20733C2[];
extern  VTBL_ENTRY _ZTV8S20733C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C2[];
Class_Descriptor cd_S20733C2 = {  "S20733C2", // class name
  bases_S20733C2, 14,
  &(vtc_S20733C2[0]), // expected_vtbl_contents
  &(vtt_S20733C2[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S20733C2),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S20733C2),30, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20733C2),10, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20733C13  : virtual S2121C38 , virtual S20733C8 , S20733C6 {
  int s20733c13f0;
  void *s20733c13f1;
  ~S20733C13(); // tgen
  S20733C13(); // tgen
};
//SIG(-1 S20733C13) C1{ VBC2{ m} VBC3{ BC2 BC4{ VBC2 BC5{ v1} VBC6{ m}} v2} BC5 Fi Fp}


S20733C13 ::~S20733C13(){ note_dtor("S20733C13", this);} // tgen
S20733C13 ::S20733C13(){ note_ctor("S20733C13", this);} // tgen

static void Test_S20733C13()
{
  extern Class_Descriptor cd_S20733C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S20733C13, buf);
    S20733C13 *dp, &lv = *(dp=new (buf) S20733C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S20733C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20733C13)");
    /*is_ambiguous_... S20733C13::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*), 0, "S20733C13");
    check_base_class_offset(lv, (S2121C38*)(S20733C5*)(S20733C8*), 0, "S20733C13");
    /*is_ambiguous_... S20733C8::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20733C8*), ABISELECT(24,12), "S20733C13");
    check_base_class_offset(lv, (S20733C6*)(S20733C5*)(S20733C8*), ABISELECT(24,12), "S20733C13");
    check_base_class_offset(lv, (S2121C28*)(S20733C5*)(S20733C8*), 0, "S20733C13");
    check_base_class_offset(lv, (S20733C5*)(S20733C8*), ABISELECT(24,12), "S20733C13");
    check_base_class_offset(lv, (S20733C8*), ABISELECT(24,12), "S20733C13");
    /*is_ambiguous_... S20733C13::S20733C6 */ AMB_check_base_class_offset(lv, (S20733C6*), 0, "S20733C13");
    check_field_offset(lv, s20733c13f0, ABISELECT(8,4), "S20733C13.s20733c13f0");
    check_field_offset(lv, s20733c13f1, ABISELECT(16,8), "S20733C13.s20733c13f1");
    test_class_info(&lv, &cd_S20733C13);
    dp->~S20733C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20733C13(Test_S20733C13, "S20733C13", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN9S20733C13C1Ev();
extern void _ZN9S20733C13D1Ev();
Name_Map name_map_S20733C13[] = {
  NSPAIR(_ZN9S20733C13C1Ev),
  NSPAIR(_ZN9S20733C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20733C5;
extern VTBL_ENTRY _ZTI8S20733C5[];
extern  VTBL_ENTRY _ZTV8S20733C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C5[];
extern Class_Descriptor cd_S20733C8;
extern VTBL_ENTRY _ZTI8S20733C8[];
extern  VTBL_ENTRY _ZTV8S20733C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C8[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
static Base_Class bases_S20733C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2121C38,    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
    5, //immediately_derived
  0, 0},
  {&cd_S20733C6,    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_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20733C5,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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
    5, //immediately_derived
  0, 0},
  {&cd_S20733C8,    ABISELECT(24,12), //bcp->offset
    6, //bcp->virtual_function_table_offset
    6, //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},
  {&cd_S20733C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI9S20733C13[];
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C82v2Ev();
static  VTBL_ENTRY vtc_S20733C13[] = {
  0,
  ABISELECT(24,12),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20733C13[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S20733C13[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20733C82v2Ev,
};
extern VTBL_ENTRY _ZTV9S20733C13[];
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C8__9S20733C13[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C8[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20733C82v2Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C58S20733C8__9S20733C13[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C5[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
static  VTT_ENTRY vtt_S20733C13[] = {
  {&(_ZTV9S20733C13[5]),  5,14},
  {&(_ZTV9S20733C13[12]),  12,14},
  {&(_tg__ZTV8S20733C8__9S20733C13[4]),  4,6},
  {&(_tg__ZTV8S20733C58S20733C8__9S20733C13[4]),  4,5},
};
extern VTBL_ENTRY _ZTI9S20733C13[];
extern  VTBL_ENTRY _ZTV9S20733C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20733C13[];
Class_Descriptor cd_S20733C13 = {  "S20733C13", // class name
  bases_S20733C13, 7,
  &(vtc_S20733C13[0]), // expected_vtbl_contents
  &(vtt_S20733C13[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI9S20733C13),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20733C13),14, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20733C13),4, //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  S20733C12  : virtual S20733C2 , virtual S20733C13 {
  int s20733c12f0:32;
  ~S20733C12(); // tgen
  S20733C12(); // tgen
};
//SIG(-1 S20733C12) C1{ VBC2{ VBC3{ m} VBC4{ BC5{ VBC3 BC6{ v1} VBC7{ m}} BC6} VBC8{ BC3 BC5 v2} VBC9{ BC6 BC7 VBC3} BC6} VBC10{ VBC3 VBC8 BC6 Fi Fp} Fi:32}


S20733C12 ::~S20733C12(){ note_dtor("S20733C12", this);} // tgen
S20733C12 ::S20733C12(){ note_ctor("S20733C12", this);} // tgen

static void Test_S20733C12()
{
  extern Class_Descriptor cd_S20733C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S20733C12, buf);
    S20733C12 *dp, &lv = *(dp=new (buf) S20733C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S20733C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20733C12)");
    /*is_ambiguous_... S20733C2::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20733C2*), 0, "S20733C12");
    check_base_class_offset(lv, (S2121C38*)(S20733C5*)(S20733C4*), 0, "S20733C12");
    check_base_class_offset(lv, (S2121C38*)(S20733C5*)(S20733C8*), 0, "S20733C12");
    check_base_class_offset(lv, (S2121C38*)(S20733C9*), 0, "S20733C12");
    /*is_ambiguous_... S20733C13::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20733C13*), 0, "S20733C12");
    check_base_class_offset(lv, (S20733C6*)(S20733C5*)(S20733C4*), ABISELECT(16,8), "S20733C12");
    check_base_class_offset(lv, (S2121C28*)(S20733C5*)(S20733C4*), 0, "S20733C12");
    check_base_class_offset(lv, (S2121C28*)(S20733C5*)(S20733C8*), 0, "S20733C12");
    check_base_class_offset(lv, (S20733C5*)(S20733C4*), ABISELECT(16,8), "S20733C12");
    /*is_ambiguous_... S20733C4::S20733C6 */ AMB_check_base_class_offset(lv, (S20733C6*)(S20733C4*), ABISELECT(24,12), "S20733C12");
    check_base_class_offset(lv, (S20733C4*)(S20733C2*), ABISELECT(16,8), "S20733C12");
    /*is_ambiguous_... S20733C8::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20733C8*), ABISELECT(32,16), "S20733C12");
    check_base_class_offset(lv, (S20733C6*)(S20733C5*)(S20733C8*), ABISELECT(32,16), "S20733C12");
    check_base_class_offset(lv, (S20733C5*)(S20733C8*), ABISELECT(32,16), "S20733C12");
    check_base_class_offset(lv, (S20733C8*)(S20733C2*), ABISELECT(32,16), "S20733C12");
    check_base_class_offset(lv, (S20733C8*)(S20733C13*), ABISELECT(32,16), "S20733C12");
    check_base_class_offset(lv, (S20733C6*)(S20733C9*), ABISELECT(40,20), "S20733C12");
    check_base_class_offset(lv, (S2121C28*)(S20733C9*), ABISELECT(40,20), "S20733C12");
    check_base_class_offset(lv, (S20733C9*)(S20733C2*), ABISELECT(40,20), "S20733C12");
    /*is_ambiguous_... S20733C2::S20733C6 */ AMB_check_base_class_offset(lv, (S20733C6*)(S20733C2*), 0, "S20733C12");
    check_base_class_offset(lv, (S20733C2*), 0, "S20733C12");
    /*is_ambiguous_... S20733C13::S20733C6 */ AMB_check_base_class_offset(lv, (S20733C6*)(S20733C13*), ABISELECT(48,24), "S20733C12");
    check_base_class_offset(lv, (S20733C13*), ABISELECT(48,24), "S20733C12");
    set_bf_and_test(lv, s20733c12f0, ABISELECT(8,4), 0, 32, 1, "S20733C12");
    set_bf_and_test(lv, s20733c12f0, ABISELECT(8,4), 0, 32, hide_sll(1LL<<31), "S20733C12");
    test_class_info(&lv, &cd_S20733C12);
    dp->~S20733C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20733C12(Test_S20733C12, "S20733C12", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN9S20733C12C1Ev();
extern void _ZN9S20733C12D1Ev();
Name_Map name_map_S20733C12[] = {
  NSPAIR(_ZN9S20733C12C1Ev),
  NSPAIR(_ZN9S20733C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20733C5;
extern VTBL_ENTRY _ZTI8S20733C5[];
extern  VTBL_ENTRY _ZTV8S20733C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C5[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S20733C4;
extern VTBL_ENTRY _ZTI8S20733C4[];
extern  VTBL_ENTRY _ZTV8S20733C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C4[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S20733C5;
extern VTBL_ENTRY _ZTI8S20733C5[];
extern  VTBL_ENTRY _ZTV8S20733C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C5[];
extern Class_Descriptor cd_S20733C8;
extern VTBL_ENTRY _ZTI8S20733C8[];
extern  VTBL_ENTRY _ZTV8S20733C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C8[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20733C9;
extern VTBL_ENTRY _ZTI8S20733C9[];
extern  VTBL_ENTRY _ZTV8S20733C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C9[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S20733C2;
extern VTBL_ENTRY _ZTI8S20733C2[];
extern  VTBL_ENTRY _ZTV8S20733C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C2[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S20733C13;
extern VTBL_ENTRY _ZTI9S20733C13[];
extern  VTBL_ENTRY _ZTV9S20733C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20733C13[];
static Base_Class bases_S20733C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20733C6,    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_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20733C5,    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
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20733C6,    ABISELECT(24,12), //bcp->offset
    17, //bcp->virtual_function_table_offset
    2, //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
    5, //immediately_derived
  0, 0},
  {&cd_S20733C4,    ABISELECT(16,8), //bcp->offset
    11, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S2121C38,    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
    9, //immediately_derived
  0, 0},
  {&cd_S20733C6,    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
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20733C5,    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
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20733C8,    ABISELECT(32,16), //bcp->offset
    20, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20733C6,    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
    8, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2121C28,    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
    12, //immediately_derived
  0, 0},
  {&cd_S20733C9,    ABISELECT(40,20), //bcp->offset
    28, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20733C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20733C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20733C6,    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
    12, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20733C13,    ABISELECT(48,24), //bcp->offset
    33, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20733C12[];
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C82v2Ev();
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY vtc_S20733C12[] = {
  ABISELECT(48,24),
  0,
  0,
  ABISELECT(40,20),
  ABISELECT(32,16),
  0,
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20733C12[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20733C12[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S20733C12[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  0,
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S20733C12[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20733C82v2Ev,
  0,
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S20733C12[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  0,
  ABISELECT(-48,-24),
  ABISELECT(-16,-8),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S20733C12[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern VTBL_ENTRY _ZTV9S20733C12[];
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C2__9S20733C12[] = {
  ABISELECT(40,20),
  ABISELECT(32,16),
  0,
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C2[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C4__8S20733C2__9S20733C12[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20733C2[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C68S20733C4__A1__8S20733C2__9S20733C12[] = {
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20733C2[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C8__8S20733C2__9S20733C12[] = {
  0,
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20733C2[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20733C82v2Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C9__8S20733C2__9S20733C12[] = {
  0,
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20733C2[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C4__9S20733C12[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C4[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C58S20733C4__9S20733C12[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C5[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C8__9S20733C12[] = {
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C8[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20733C82v2Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C58S20733C8__A1__9S20733C12[] = {
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C5[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C9__9S20733C12[] = {
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C9[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV9S20733C13__9S20733C12[] = {
  ABISELECT(-48,-24),
  ABISELECT(-16,-8),
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI9S20733C13[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C8__9S20733C13__9S20733C12[] = {
  0,
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S20733C13[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20733C82v2Ev,
};
static  VTT_ENTRY vtt_S20733C12[] = {
  {&(_ZTV9S20733C12[10]),  10,40},
  {&(_ZTV9S20733C12[10]),  10,40},
  {&(_ZTV9S20733C12[16]),  16,40},
  {&(_ZTV9S20733C12[19]),  19,40},
  {&(_ZTV9S20733C12[26]),  26,40},
  {&(_ZTV9S20733C12[32]),  32,40},
  {&(_ZTV9S20733C12[39]),  39,40},
  {&(_tg__ZTV8S20733C2__9S20733C12[7]),  7,8},
  {&(_tg__ZTV8S20733C4__8S20733C2__9S20733C12[5]),  5,6},
  {&(_tg__ZTV8S20733C68S20733C4__A1__8S20733C2__9S20733C12[2]),  2,3},
  {&(_tg__ZTV8S20733C8__8S20733C2__9S20733C12[6]),  6,8},
  {&(_tg__ZTV8S20733C9__8S20733C2__9S20733C12[4]),  4,5},
  {&(_tg__ZTV8S20733C4__9S20733C12[4]),  4,5},
  {&(_tg__ZTV8S20733C58S20733C4__9S20733C12[4]),  4,5},
  {&(_tg__ZTV8S20733C8__9S20733C12[4]),  4,6},
  {&(_tg__ZTV8S20733C58S20733C8__A1__9S20733C12[4]),  4,5},
  {&(_tg__ZTV8S20733C9__9S20733C12[3]),  3,4},
  {&(_tg__ZTV9S20733C13__9S20733C12[5]),  5,6},
  {&(_tg__ZTV8S20733C8__9S20733C13__9S20733C12[6]),  6,8},
};
extern VTBL_ENTRY _ZTI9S20733C12[];
extern  VTBL_ENTRY _ZTV9S20733C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20733C12[];
Class_Descriptor cd_S20733C12 = {  "S20733C12", // class name
  bases_S20733C12, 17,
  &(vtc_S20733C12[0]), // expected_vtbl_contents
  &(vtt_S20733C12[0]), // expected_vtt_contents
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI9S20733C12),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20733C12),40, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20733C12),19, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20733C15  : virtual S20733C8 {
  int s20733c15f0;
  ~S20733C15(); // tgen
  S20733C15(); // tgen
};
//SIG(-1 S20733C15) C1{ VBC2{ BC3{ m} BC4{ VBC3 BC5{ v1} VBC6{ m}} v2} Fi}


S20733C15 ::~S20733C15(){ note_dtor("S20733C15", this);} // tgen
S20733C15 ::S20733C15(){ note_ctor("S20733C15", this);} // tgen

static void Test_S20733C15()
{
  extern Class_Descriptor cd_S20733C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S20733C15, buf);
    S20733C15 *dp, &lv = *(dp=new (buf) S20733C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S20733C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20733C15)");
    /*is_ambiguous_... S20733C8::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20733C8*), 0, "S20733C15");
    check_base_class_offset(lv, (S2121C38*)(S20733C5*)(S20733C8*), ABISELECT(12,8), "S20733C15");
    check_base_class_offset(lv, (S20733C6*)(S20733C5*)(S20733C8*), 0, "S20733C15");
    check_base_class_offset(lv, (S2121C28*)(S20733C5*)(S20733C8*), 0, "S20733C15");
    check_base_class_offset(lv, (S20733C5*)(S20733C8*), 0, "S20733C15");
    check_base_class_offset(lv, (S20733C8*), 0, "S20733C15");
    check_field_offset(lv, s20733c15f0, ABISELECT(8,4), "S20733C15.s20733c15f0");
    test_class_info(&lv, &cd_S20733C15);
    dp->~S20733C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20733C15(Test_S20733C15, "S20733C15", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN9S20733C15C1Ev();
extern void _ZN9S20733C15D1Ev();
Name_Map name_map_S20733C15[] = {
  NSPAIR(_ZN9S20733C15C1Ev),
  NSPAIR(_ZN9S20733C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20733C5;
extern VTBL_ENTRY _ZTI8S20733C5[];
extern  VTBL_ENTRY _ZTV8S20733C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C5[];
extern Class_Descriptor cd_S20733C8;
extern VTBL_ENTRY _ZTI8S20733C8[];
extern  VTBL_ENTRY _ZTV8S20733C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C8[];
static Base_Class bases_S20733C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2121C38,    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
    4, //immediately_derived
  0, 1},
  {&cd_S20733C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20733C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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
    5, //immediately_derived
  0, 0},
  {&cd_S20733C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //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 _ZTI9S20733C15[];
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C82v2Ev();
static  VTBL_ENTRY vtc_S20733C15[] = {
  0,
  0,
  0,
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20733C15[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20733C82v2Ev,
};
extern VTBL_ENTRY _ZTV9S20733C15[];
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C8__9S20733C15[] = {
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C8[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20733C82v2Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C58S20733C8__9S20733C15[] = {
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C5[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
static  VTT_ENTRY vtt_S20733C15[] = {
  {&(_ZTV9S20733C15[7]),  7,9},
  {&(_ZTV9S20733C15[7]),  7,9},
  {&(_tg__ZTV8S20733C8__9S20733C15[4]),  4,6},
  {&(_tg__ZTV8S20733C58S20733C8__9S20733C15[4]),  4,5},
};
extern VTBL_ENTRY _ZTI9S20733C15[];
extern  VTBL_ENTRY _ZTV9S20733C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20733C15[];
Class_Descriptor cd_S20733C15 = {  "S20733C15", // class name
  bases_S20733C15, 6,
  &(vtc_S20733C15[0]), // expected_vtbl_contents
  &(vtt_S20733C15[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI9S20733C15),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S20733C15),9, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20733C15),4, //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  S20733C14  : S20733C15 , virtual S20733C6 {
  __tsu64 s20733c14f0:1;
  ~S20733C14(); // tgen
  S20733C14(); // tgen
};
//SIG(-1 S20733C14) C1{ BC2{ VBC3{ BC4{ m} BC5{ VBC4 BC6{ v1} VBC7{ m}} v2} Fi} VBC6 FL:1}


S20733C14 ::~S20733C14(){ note_dtor("S20733C14", this);} // tgen
S20733C14 ::S20733C14(){ note_ctor("S20733C14", this);} // tgen

static void Test_S20733C14()
{
  extern Class_Descriptor cd_S20733C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S20733C14, buf);
    S20733C14 *dp, &lv = *(dp=new (buf) S20733C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S20733C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20733C14)");
    /*is_ambiguous_... S20733C8::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20733C8*), 0, "S20733C14");
    check_base_class_offset(lv, (S2121C38*)(S20733C5*)(S20733C8*), ABISELECT(13,9), "S20733C14");
    check_base_class_offset(lv, (S20733C6*)(S20733C5*)(S20733C8*), 0, "S20733C14");
    check_base_class_offset(lv, (S2121C28*)(S20733C5*)(S20733C8*), 0, "S20733C14");
    check_base_class_offset(lv, (S20733C5*)(S20733C8*), 0, "S20733C14");
    check_base_class_offset(lv, (S20733C8*)(S20733C15*), 0, "S20733C14");
    check_base_class_offset(lv, (S20733C15*), 0, "S20733C14");
    /*is_ambiguous_... S20733C14::S20733C6 */ AMB_check_base_class_offset(lv, (S20733C6*), ABISELECT(16,12), "S20733C14");
    set_bf_and_test(lv, s20733c14f0, ABISELECT(12,8), 0, 1, 1, "S20733C14");
    test_class_info(&lv, &cd_S20733C14);
    dp->~S20733C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20733C14(Test_S20733C14, "S20733C14", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN9S20733C14C1Ev();
extern void _ZN9S20733C14D1Ev();
Name_Map name_map_S20733C14[] = {
  NSPAIR(_ZN9S20733C14C1Ev),
  NSPAIR(_ZN9S20733C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20733C5;
extern VTBL_ENTRY _ZTI8S20733C5[];
extern  VTBL_ENTRY _ZTV8S20733C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C5[];
extern Class_Descriptor cd_S20733C8;
extern VTBL_ENTRY _ZTI8S20733C8[];
extern  VTBL_ENTRY _ZTV8S20733C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C8[];
extern Class_Descriptor cd_S20733C15;
extern VTBL_ENTRY _ZTI9S20733C15[];
extern  VTBL_ENTRY _ZTV9S20733C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20733C15[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
static Base_Class bases_S20733C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2121C38,    ABISELECT(13,9), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20733C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20733C5,    0, //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
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20733C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20733C15,    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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20733C6,    ABISELECT(16,12), //bcp->offset
    10, //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
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20733C14[];
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C82v2Ev();
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY vtc_S20733C14[] = {
  ABISELECT(16,12),
  0,
  0,
  0,
  0,
  ABISELECT(13,9),
  0,
  (VTBL_ENTRY)&(_ZTI9S20733C14[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20733C82v2Ev,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S20733C14[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern VTBL_ENTRY _ZTV9S20733C14[];
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C82v2Ev();
static  VTBL_ENTRY _tg__ZTV9S20733C15__9S20733C14[] = {
  0,
  0,
  0,
  0,
  ABISELECT(13,9),
  0,
  (VTBL_ENTRY)&(_ZTI9S20733C15[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20733C82v2Ev,
};
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C8__9S20733C14[] = {
  0,
  ABISELECT(13,9),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C8[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20733C82v2Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C58S20733C8__9S20733C14[] = {
  0,
  ABISELECT(13,9),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C5[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
static  VTT_ENTRY vtt_S20733C14[] = {
  {&(_ZTV9S20733C14[8]),  8,14},
  {&(_tg__ZTV9S20733C15__9S20733C14[7]),  7,9},
  {&(_tg__ZTV9S20733C15__9S20733C14[7]),  7,9},
  {&(_ZTV9S20733C14[8]),  8,14},
  {&(_ZTV9S20733C14[13]),  13,14},
  {&(_tg__ZTV8S20733C8__9S20733C14[4]),  4,6},
  {&(_tg__ZTV8S20733C58S20733C8__9S20733C14[4]),  4,5},
};
extern VTBL_ENTRY _ZTI9S20733C14[];
extern  VTBL_ENTRY _ZTV9S20733C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20733C14[];
Class_Descriptor cd_S20733C14 = {  "S20733C14", // class name
  bases_S20733C14, 8,
  &(vtc_S20733C14[0]), // expected_vtbl_contents
  &(vtt_S20733C14[0]), // expected_vtt_contents
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI9S20733C14),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20733C14),14, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20733C14),7, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20733C10  : S6282C14_nt , virtual S20733C12 , virtual S20733C14 , S20733C5 {
  ~S20733C10(); // tgen
  S20733C10(); // tgen
};
//SIG(-1 S20733C10) C1{ BC2{ vd m Fi} VBC3{ VBC4{ VBC5{ m} VBC6{ BC7{ VBC5 BC8{ v1} VBC9{ m}} BC8} VBC10{ BC5 BC7 v2} VBC11{ BC8 BC9 VBC5} BC8} VBC12{ VBC5 VBC10 BC8 Fi Fp} Fi:32} VBC13{ BC14{ VBC10 Fi} VBC8 FL:1} BC7}


S20733C10 ::~S20733C10(){ note_dtor("S20733C10", this);} // tgen
S20733C10 ::S20733C10(){ note_ctor("S20733C10", this);} // tgen

static void Test_S20733C10()
{
  extern Class_Descriptor cd_S20733C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,16)];
    init_test(&cd_S20733C10, buf);
    S20733C10 *dp, &lv = *(dp=new (buf) S20733C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,60), "sizeof(S20733C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20733C10)");
    check_base_class_offset(lv, (S6282C14_nt*), 0, "S20733C10");
    /*is_ambiguous_... S20733C2::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20733C2*), 0, "S20733C10");
    check_base_class_offset(lv, (S2121C38*)(S20733C5*)(S20733C4*), 0, "S20733C10");
    check_base_class_offset(lv, (S2121C38*)(S20733C5*)(S20733C8*), 0, "S20733C10");
    check_base_class_offset(lv, (S2121C38*)(S20733C9*), 0, "S20733C10");
    /*is_ambiguous_... S20733C13::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20733C13*), 0, "S20733C10");
    /*is_ambiguous_... S20733C10::S20733C5 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20733C5*), 0, "S20733C10");
    check_base_class_offset(lv, (S20733C6*)(S20733C5*)(S20733C4*), ABISELECT(40,20), "S20733C10");
    check_base_class_offset(lv, (S2121C28*)(S20733C5*)(S20733C4*), 0, "S20733C10");
    check_base_class_offset(lv, (S2121C28*)(S20733C5*)(S20733C8*), 0, "S20733C10");
    /*is_ambiguous_... S20733C10::S20733C5 */ AMB_check_base_class_offset(lv, (S2121C28*)(S20733C5*), 0, "S20733C10");
    check_base_class_offset(lv, (S20733C5*)(S20733C4*), ABISELECT(40,20), "S20733C10");
    /*is_ambiguous_... S20733C4::S20733C6 */ AMB_check_base_class_offset(lv, (S20733C6*)(S20733C4*), ABISELECT(48,24), "S20733C10");
    check_base_class_offset(lv, (S20733C4*)(S20733C2*), ABISELECT(40,20), "S20733C10");
    /*is_ambiguous_... S20733C8::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20733C8*), ABISELECT(88,44), "S20733C10");
    check_base_class_offset(lv, (S20733C6*)(S20733C5*)(S20733C8*), ABISELECT(88,44), "S20733C10");
    check_base_class_offset(lv, (S20733C5*)(S20733C8*), ABISELECT(88,44), "S20733C10");
    check_base_class_offset(lv, (S20733C8*)(S20733C2*), ABISELECT(88,44), "S20733C10");
    check_base_class_offset(lv, (S20733C8*)(S20733C13*), ABISELECT(88,44), "S20733C10");
    check_base_class_offset(lv, (S20733C8*)(S20733C15*)(S20733C14*), ABISELECT(88,44), "S20733C10");
    check_base_class_offset(lv, (S20733C6*)(S20733C9*), ABISELECT(56,28), "S20733C10");
    check_base_class_offset(lv, (S2121C28*)(S20733C9*), ABISELECT(56,28), "S20733C10");
    check_base_class_offset(lv, (S20733C9*)(S20733C2*), ABISELECT(56,28), "S20733C10");
    /*is_ambiguous_... S20733C2::S20733C6 */ AMB_check_base_class_offset(lv, (S20733C6*)(S20733C2*), ABISELECT(24,12), "S20733C10");
    check_base_class_offset(lv, (S20733C2*)(S20733C12*), ABISELECT(24,12), "S20733C10");
    /*is_ambiguous_... S20733C13::S20733C6 */ AMB_check_base_class_offset(lv, (S20733C6*)(S20733C13*), ABISELECT(64,32), "S20733C10");
    check_base_class_offset(lv, (S20733C13*)(S20733C12*), ABISELECT(64,32), "S20733C10");
    check_base_class_offset(lv, (S20733C12*), ABISELECT(24,12), "S20733C10");
    check_base_class_offset(lv, (S20733C15*)(S20733C14*), ABISELECT(88,44), "S20733C10");
    /*is_ambiguous_... S20733C14::S20733C6 */ AMB_check_base_class_offset(lv, (S20733C6*)(S20733C14*), ABISELECT(104,56), "S20733C10");
    check_base_class_offset(lv, (S20733C14*), ABISELECT(88,44), "S20733C10");
    /*is_ambiguous_... S20733C10::S20733C5 */ AMB_check_base_class_offset(lv, (S20733C6*)(S20733C5*), ABISELECT(16,8), "S20733C10");
    /*is_ambiguous_... S20733C10::S20733C5 */ AMB_check_base_class_offset(lv, (S20733C5*), ABISELECT(16,8), "S20733C10");
    test_class_info(&lv, &cd_S20733C10);
    dp->~S20733C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20733C10(Test_S20733C10, "S20733C10", ABISELECT(112,60));

#else // __cplusplus

extern void _ZN9S20733C10C1Ev();
extern void _ZN9S20733C10D1Ev();
Name_Map name_map_S20733C10[] = {
  NSPAIR(_ZN9S20733C10C1Ev),
  NSPAIR(_ZN9S20733C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6282C14_nt;
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
extern  VTBL_ENTRY _ZTV11S6282C14_nt[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20733C5;
extern VTBL_ENTRY _ZTI8S20733C5[];
extern  VTBL_ENTRY _ZTV8S20733C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C5[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S20733C4;
extern VTBL_ENTRY _ZTI8S20733C4[];
extern  VTBL_ENTRY _ZTV8S20733C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C4[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S20733C5;
extern VTBL_ENTRY _ZTI8S20733C5[];
extern  VTBL_ENTRY _ZTV8S20733C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C5[];
extern Class_Descriptor cd_S20733C8;
extern VTBL_ENTRY _ZTI8S20733C8[];
extern  VTBL_ENTRY _ZTV8S20733C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C8[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20733C9;
extern VTBL_ENTRY _ZTI8S20733C9[];
extern  VTBL_ENTRY _ZTV8S20733C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C9[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S20733C2;
extern VTBL_ENTRY _ZTI8S20733C2[];
extern  VTBL_ENTRY _ZTV8S20733C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C2[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S20733C13;
extern VTBL_ENTRY _ZTI9S20733C13[];
extern  VTBL_ENTRY _ZTV9S20733C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20733C13[];
extern Class_Descriptor cd_S20733C12;
extern VTBL_ENTRY _ZTI9S20733C12[];
extern  VTBL_ENTRY _ZTV9S20733C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20733C12[];
extern Class_Descriptor cd_S20733C15;
extern VTBL_ENTRY _ZTI9S20733C15[];
extern  VTBL_ENTRY _ZTV9S20733C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20733C15[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S20733C14;
extern VTBL_ENTRY _ZTI9S20733C14[];
extern  VTBL_ENTRY _ZTV9S20733C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20733C14[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S20733C5;
extern VTBL_ENTRY _ZTI8S20733C5[];
extern  VTBL_ENTRY _ZTV8S20733C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C5[];
static Base_Class bases_S20733C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6282C14_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
    18, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20733C6,    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
    4, //immediately_derived
  0, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20733C5,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20733C6,    ABISELECT(48,24), //bcp->offset
    36, //bcp->virtual_function_table_offset
    2, //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
    6, //immediately_derived
  0, 0},
  {&cd_S20733C4,    ABISELECT(40,20), //bcp->offset
    30, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S2121C38,    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
    10, //immediately_derived
  0, 0},
  {&cd_S20733C6,    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
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20733C5,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20733C8,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S20733C6,    ABISELECT(56,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
    8, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S2121C28,    ABISELECT(56,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
    13, //immediately_derived
  0, 0},
  {&cd_S20733C9,    ABISELECT(56,28), //bcp->offset
    39, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S20733C6,    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
    10, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S20733C2,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S20733C6,    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
    12, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20733C13,    ABISELECT(64,32), //bcp->offset
    44, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S20733C12,    ABISELECT(24,12), //bcp->offset
    19, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20733C15,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20733C6,    ABISELECT(104,56), //bcp->offset
    61, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S20733C14,    ABISELECT(88,44), //bcp->offset
    51, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20733C6,    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
    19, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20733C5,    ABISELECT(16,8), //bcp->offset
    14, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20733C10[];
extern void _ZN9S20733C10D1Ev();
extern void _ZN9S20733C10D0Ev();
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C82v2Ev();
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY vtc_S20733C10[] = {
  ABISELECT(104,56),
  ABISELECT(88,44),
  ABISELECT(64,32),
  ABISELECT(56,28),
  ABISELECT(88,44),
  0,
  ABISELECT(40,20),
  0,
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI9S20733C10[0]),
  (VTBL_ENTRY)&_ZN9S20733C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20733C10D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20733C10[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  ABISELECT(40,20),
  0,
  0,
  ABISELECT(32,16),
  ABISELECT(64,32),
  ABISELECT(-24,-12),
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S20733C10[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  0,
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S20733C10[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S20733C10[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  0,
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI9S20733C10[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  0,
  ABISELECT(-64,-32),
  ABISELECT(24,12),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI9S20733C10[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  ABISELECT(16,12),
  0,
  0,
  0,
  ABISELECT(-88,-44),
  ABISELECT(-88,-44),
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI9S20733C10[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20733C82v2Ev,
  0,
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI9S20733C10[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern VTBL_ENTRY _ZTV9S20733C10[];
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C5__A2__9S20733C10[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C5[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV9S20733C12__9S20733C10[] = {
  ABISELECT(40,20),
  0,
  0,
  ABISELECT(32,16),
  ABISELECT(64,32),
  ABISELECT(-24,-12),
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI9S20733C12[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C4__9S20733C12__9S20733C10[] = {
  0,
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20733C12[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C68S20733C4__A1__9S20733C12__9S20733C10[] = {
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S20733C12[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C8__9S20733C12__9S20733C10[] = {
  0,
  0,
  ABISELECT(-88,-44),
  ABISELECT(-88,-44),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI9S20733C12[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20733C82v2Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C9__9S20733C12__9S20733C10[] = {
  0,
  ABISELECT(-56,-28),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S20733C12[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV9S20733C13__9S20733C12__9S20733C10[] = {
  0,
  ABISELECT(-64,-32),
  ABISELECT(24,12),
  ABISELECT(-64,-32),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S20733C12[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C2__9S20733C10[] = {
  ABISELECT(32,16),
  ABISELECT(64,32),
  ABISELECT(-24,-12),
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C2[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C4__8S20733C2__9S20733C10[] = {
  0,
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20733C2[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C68S20733C4__A1__8S20733C2__9S20733C10[] = {
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20733C2[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C8__8S20733C2__9S20733C10[] = {
  0,
  0,
  ABISELECT(-88,-44),
  ABISELECT(-88,-44),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S20733C2[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20733C82v2Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C9__8S20733C2__9S20733C10[] = {
  0,
  ABISELECT(-56,-28),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20733C2[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C4__9S20733C10[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C4[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C58S20733C4__9S20733C10[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C5[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C8__9S20733C10[] = {
  ABISELECT(-88,-44),
  ABISELECT(-88,-44),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C8[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20733C82v2Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C58S20733C8__A1__9S20733C10[] = {
  ABISELECT(-88,-44),
  ABISELECT(-88,-44),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C5[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C9__9S20733C10[] = {
  ABISELECT(-56,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C9[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV9S20733C13__9S20733C10[] = {
  ABISELECT(-64,-32),
  ABISELECT(24,12),
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI9S20733C13[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C8__9S20733C13__9S20733C10[] = {
  0,
  0,
  ABISELECT(-88,-44),
  ABISELECT(-88,-44),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S20733C13[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20733C82v2Ev,
};
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C82v2Ev();
static  VTBL_ENTRY _tg__ZTV9S20733C14__9S20733C10[] = {
  ABISELECT(16,12),
  0,
  0,
  0,
  ABISELECT(-88,-44),
  ABISELECT(-88,-44),
  0,
  (VTBL_ENTRY)&(_ZTI9S20733C14[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20733C82v2Ev,
};
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C82v2Ev();
static  VTBL_ENTRY _tg__ZTV9S20733C159S20733C14__9S20733C10[] = {
  0,
  0,
  0,
  ABISELECT(-88,-44),
  ABISELECT(-88,-44),
  0,
  (VTBL_ENTRY)&(_ZTI9S20733C15[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20733C82v2Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C6__A1__9S20733C14__9S20733C10[] = {
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S20733C14[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
static  VTT_ENTRY vtt_S20733C10[] = {
  {&(_ZTV9S20733C10[12]),  12,65},
  {&(_tg__ZTV8S20733C5__A2__9S20733C10[4]),  4,5},
  {&(_ZTV9S20733C10[29]),  29,65},
  {&(_ZTV9S20733C10[29]),  29,65},
  {&(_ZTV9S20733C10[35]),  35,65},
  {&(_ZTV9S20733C10[38]),  38,65},
  {&(_ZTV9S20733C10[59]),  59,65},
  {&(_ZTV9S20733C10[43]),  43,65},
  {&(_ZTV9S20733C10[50]),  50,65},
  {&(_ZTV9S20733C10[59]),  59,65},
  {&(_ZTV9S20733C10[64]),  64,65},
  {&(_ZTV9S20733C10[18]),  18,65},
  {&(_tg__ZTV9S20733C12__9S20733C10[10]),  10,11},
  {&(_tg__ZTV9S20733C12__9S20733C10[10]),  10,11},
  {&(_tg__ZTV8S20733C4__9S20733C12__9S20733C10[5]),  5,6},
  {&(_tg__ZTV8S20733C68S20733C4__A1__9S20733C12__9S20733C10[2]),  2,3},
  {&(_tg__ZTV8S20733C8__9S20733C12__9S20733C10[6]),  6,8},
  {&(_tg__ZTV8S20733C9__9S20733C12__9S20733C10[4]),  4,5},
  {&(_tg__ZTV9S20733C13__9S20733C12__9S20733C10[6]),  6,7},
  {&(_tg__ZTV8S20733C2__9S20733C10[7]),  7,8},
  {&(_tg__ZTV8S20733C4__8S20733C2__9S20733C10[5]),  5,6},
  {&(_tg__ZTV8S20733C68S20733C4__A1__8S20733C2__9S20733C10[2]),  2,3},
  {&(_tg__ZTV8S20733C8__8S20733C2__9S20733C10[6]),  6,8},
  {&(_tg__ZTV8S20733C9__8S20733C2__9S20733C10[4]),  4,5},
  {&(_tg__ZTV8S20733C4__9S20733C10[4]),  4,5},
  {&(_tg__ZTV8S20733C58S20733C4__9S20733C10[4]),  4,5},
  {&(_tg__ZTV8S20733C8__9S20733C10[4]),  4,6},
  {&(_tg__ZTV8S20733C58S20733C8__A1__9S20733C10[4]),  4,5},
  {&(_tg__ZTV8S20733C9__9S20733C10[3]),  3,4},
  {&(_tg__ZTV9S20733C13__9S20733C10[5]),  5,6},
  {&(_tg__ZTV8S20733C8__9S20733C13__9S20733C10[6]),  6,8},
  {&(_tg__ZTV9S20733C14__9S20733C10[8]),  8,10},
  {&(_tg__ZTV9S20733C159S20733C14__9S20733C10[7]),  7,9},
  {&(_tg__ZTV9S20733C159S20733C14__9S20733C10[7]),  7,9},
  {&(_tg__ZTV9S20733C14__9S20733C10[8]),  8,10},
  {&(_tg__ZTV8S20733C6__A1__9S20733C14__9S20733C10[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S20733C10[];
extern  VTBL_ENTRY _ZTV9S20733C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20733C10[];
Class_Descriptor cd_S20733C10 = {  "S20733C10", // class name
  bases_S20733C10, 24,
  &(vtc_S20733C10[0]), // expected_vtbl_contents
  &(vtt_S20733C10[0]), // expected_vtt_contents
  ABISELECT(112,60), // object size
  NSPAIRA(_ZTI9S20733C10),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S20733C10),65, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20733C10),36, //virtual table table var
  20, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20733C1  : virtual S20733C2 , S20733C10 , S20733C4 {
  ::S15319C7 s20733c1f0;
  virtual  ~S20733C1(); // _ZN8S20733C1D2Ev
  S20733C1(); // tgen
};
//SIG(1 S20733C1) C1{ VBC2{ VBC3{ m} VBC4{ BC5{ VBC3 BC6{ v1} VBC7{ m}} BC6} VBC8{ BC3 BC5 v2} VBC9{ BC6 BC7 VBC3} BC6} BC10{ BC11{ vd m Fi} VBC12{ VBC2 VBC13{ VBC3 VBC8 BC6 Fi Fp} Fi:32} VBC14{ BC15{ VBC8 Fi} VBC6 FL:1} BC5} BC4 vd FC16{}}


 S20733C1 ::~S20733C1(){ note_dtor("S20733C1", this);}
S20733C1 ::S20733C1(){ note_ctor("S20733C1", this);} // tgen

static void Test_S20733C1()
{
  extern Class_Descriptor cd_S20733C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,19)];
    init_test(&cd_S20733C1, buf);
    S20733C1 *dp, &lv = *(dp=new (buf) S20733C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,72), "sizeof(S20733C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20733C1)");
    /*is_ambiguous_... S20733C2::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20733C2*), 0, "S20733C1");
    /*is_ambiguous_... S20733C1::S20733C4 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20733C5*)(S20733C4*), 0, "S20733C1");
    check_base_class_offset(lv, (S2121C38*)(S20733C5*)(S20733C8*), 0, "S20733C1");
    check_base_class_offset(lv, (S2121C38*)(S20733C9*), 0, "S20733C1");
    /*is_ambiguous_... S20733C13::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20733C13*), 0, "S20733C1");
    /*is_ambiguous_... S20733C10::S20733C5 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20733C5*)(S20733C10*), 0, "S20733C1");
    /*is_ambiguous_... S20733C1::S20733C4 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20733C5*)(S20733C4*), 0, "S20733C1");
    /*is_ambiguous_... S20733C1::S20733C4 */ AMB_check_base_class_offset(lv, (S20733C6*)(S20733C5*)(S20733C4*), ABISELECT(48,24), "S20733C1");
    /*is_ambiguous_... S20733C1::S20733C4 */ AMB_check_base_class_offset(lv, (S2121C28*)(S20733C5*)(S20733C4*), 0, "S20733C1");
    check_base_class_offset(lv, (S2121C28*)(S20733C5*)(S20733C8*), 0, "S20733C1");
    /*is_ambiguous_... S20733C10::S20733C5 */ AMB_check_base_class_offset(lv, (S2121C28*)(S20733C5*)(S20733C10*), 0, "S20733C1");
    /*is_ambiguous_... S20733C1::S20733C4 */ AMB_check_base_class_offset(lv, (S2121C28*)(S20733C5*)(S20733C4*), 0, "S20733C1");
    /*is_ambiguous_... S20733C1::S20733C4 */ AMB_check_base_class_offset(lv, (S20733C5*)(S20733C4*), ABISELECT(48,24), "S20733C1");
    /*is_ambiguous_... S20733C1::S20733C4 */ AMB_check_base_class_offset(lv, (S20733C6*)(S20733C4*), ABISELECT(56,28), "S20733C1");
    check_base_class_offset(lv, (S20733C4*)(S20733C2*), ABISELECT(48,24), "S20733C1");
    /*is_ambiguous_... S20733C8::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20733C8*), ABISELECT(112,56), "S20733C1");
    check_base_class_offset(lv, (S20733C6*)(S20733C5*)(S20733C8*), ABISELECT(112,56), "S20733C1");
    check_base_class_offset(lv, (S20733C5*)(S20733C8*), ABISELECT(112,56), "S20733C1");
    check_base_class_offset(lv, (S20733C8*)(S20733C2*), ABISELECT(112,56), "S20733C1");
    check_base_class_offset(lv, (S20733C8*)(S20733C13*), ABISELECT(112,56), "S20733C1");
    check_base_class_offset(lv, (S20733C8*)(S20733C15*)(S20733C14*), ABISELECT(112,56), "S20733C1");
    check_base_class_offset(lv, (S20733C6*)(S20733C9*), ABISELECT(64,32), "S20733C1");
    check_base_class_offset(lv, (S2121C28*)(S20733C9*), ABISELECT(64,32), "S20733C1");
    check_base_class_offset(lv, (S20733C9*)(S20733C2*), ABISELECT(64,32), "S20733C1");
    /*is_ambiguous_... S20733C2::S20733C6 */ AMB_check_base_class_offset(lv, (S20733C6*)(S20733C2*), ABISELECT(72,36), "S20733C1");
    check_base_class_offset(lv, (S20733C2*), ABISELECT(72,36), "S20733C1");
    check_base_class_offset(lv, (S20733C2*)(S20733C12*), ABISELECT(72,36), "S20733C1");
    check_base_class_offset(lv, (S6282C14_nt*)(S20733C10*), 0, "S20733C1");
    /*is_ambiguous_... S20733C13::S20733C6 */ AMB_check_base_class_offset(lv, (S20733C6*)(S20733C13*), ABISELECT(88,44), "S20733C1");
    check_base_class_offset(lv, (S20733C13*)(S20733C12*), ABISELECT(88,44), "S20733C1");
    check_base_class_offset(lv, (S20733C12*)(S20733C10*), ABISELECT(72,36), "S20733C1");
    check_base_class_offset(lv, (S20733C15*)(S20733C14*), ABISELECT(112,56), "S20733C1");
    /*is_ambiguous_... S20733C14::S20733C6 */ AMB_check_base_class_offset(lv, (S20733C6*)(S20733C14*), ABISELECT(128,68), "S20733C1");
    check_base_class_offset(lv, (S20733C14*)(S20733C10*), ABISELECT(112,56), "S20733C1");
    /*is_ambiguous_... S20733C10::S20733C5 */ AMB_check_base_class_offset(lv, (S20733C6*)(S20733C5*)(S20733C10*), ABISELECT(16,8), "S20733C1");
    /*is_ambiguous_... S20733C10::S20733C5 */ AMB_check_base_class_offset(lv, (S20733C5*)(S20733C10*), ABISELECT(16,8), "S20733C1");
    check_base_class_offset(lv, (S20733C10*), 0, "S20733C1");
    /*is_ambiguous_... S20733C1::S20733C4 */ AMB_check_base_class_offset(lv, (S20733C6*)(S20733C5*)(S20733C4*), ABISELECT(24,12), "S20733C1");
    /*is_ambiguous_... S20733C1::S20733C4 */ AMB_check_base_class_offset(lv, (S20733C5*)(S20733C4*), ABISELECT(24,12), "S20733C1");
    /*is_ambiguous_... S20733C1::S20733C4 */ AMB_check_base_class_offset(lv, (S20733C6*)(S20733C4*), ABISELECT(32,16), "S20733C1");
    /*is_ambiguous_... S20733C1::S20733C4 */ AMB_check_base_class_offset(lv, (S20733C4*), ABISELECT(24,12), "S20733C1");
    check_field_offset(lv, s20733c1f0, ABISELECT(40,20), "S20733C1.s20733c1f0");
    test_class_info(&lv, &cd_S20733C1);
    dp->~S20733C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20733C1(Test_S20733C1, "S20733C1", ABISELECT(136,72));

#else // __cplusplus

extern void _ZN8S20733C1C1Ev();
extern void _ZN8S20733C1D2Ev();
Name_Map name_map_S20733C1[] = {
  NSPAIR(_ZN8S20733C1C1Ev),
  NSPAIR(_ZN8S20733C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20733C5;
extern VTBL_ENTRY _ZTI8S20733C5[];
extern  VTBL_ENTRY _ZTV8S20733C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C5[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S20733C4;
extern VTBL_ENTRY _ZTI8S20733C4[];
extern  VTBL_ENTRY _ZTV8S20733C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C4[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S20733C5;
extern VTBL_ENTRY _ZTI8S20733C5[];
extern  VTBL_ENTRY _ZTV8S20733C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C5[];
extern Class_Descriptor cd_S20733C8;
extern VTBL_ENTRY _ZTI8S20733C8[];
extern  VTBL_ENTRY _ZTV8S20733C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C8[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20733C9;
extern VTBL_ENTRY _ZTI8S20733C9[];
extern  VTBL_ENTRY _ZTV8S20733C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C9[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S20733C2;
extern VTBL_ENTRY _ZTI8S20733C2[];
extern  VTBL_ENTRY _ZTV8S20733C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C2[];
extern Class_Descriptor cd_S6282C14_nt;
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
extern  VTBL_ENTRY _ZTV11S6282C14_nt[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S20733C13;
extern VTBL_ENTRY _ZTI9S20733C13[];
extern  VTBL_ENTRY _ZTV9S20733C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20733C13[];
extern Class_Descriptor cd_S20733C12;
extern VTBL_ENTRY _ZTI9S20733C12[];
extern  VTBL_ENTRY _ZTV9S20733C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20733C12[];
extern Class_Descriptor cd_S20733C15;
extern VTBL_ENTRY _ZTI9S20733C15[];
extern  VTBL_ENTRY _ZTV9S20733C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20733C15[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S20733C14;
extern VTBL_ENTRY _ZTI9S20733C14[];
extern  VTBL_ENTRY _ZTV9S20733C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20733C14[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S20733C5;
extern VTBL_ENTRY _ZTI8S20733C5[];
extern  VTBL_ENTRY _ZTV8S20733C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C5[];
extern Class_Descriptor cd_S20733C10;
extern VTBL_ENTRY _ZTI9S20733C10[];
extern  VTBL_ENTRY _ZTV9S20733C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20733C10[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S20733C5;
extern VTBL_ENTRY _ZTI8S20733C5[];
extern  VTBL_ENTRY _ZTV8S20733C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C5[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S20733C4;
extern VTBL_ENTRY _ZTI8S20733C4[];
extern  VTBL_ENTRY _ZTV8S20733C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C4[];
static Base_Class bases_S20733C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20733C6,    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
    3, //immediately_derived
  0, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20733C5,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20733C6,    ABISELECT(56,28), //bcp->offset
    33, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20733C4,    ABISELECT(48,24), //bcp->offset
    27, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S2121C38,    ABISELECT(112,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
    9, //immediately_derived
  0, 0},
  {&cd_S20733C6,    ABISELECT(112,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
    8, //immediately_derived
  0, 0},
  {&cd_S20733C5,    ABISELECT(112,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20733C8,    ABISELECT(112,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20733C6,    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
    8, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2121C28,    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
    12, //immediately_derived
  0, 0},
  {&cd_S20733C9,    ABISELECT(64,32), //bcp->offset
    36, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20733C6,    ABISELECT(72,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
    10, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20733C2,    ABISELECT(72,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6282C14_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
    18, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S20733C6,    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
    12, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20733C13,    ABISELECT(88,44), //bcp->offset
    52, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S20733C12,    ABISELECT(72,36), //bcp->offset
    41, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S20733C15,    ABISELECT(112,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20733C6,    ABISELECT(128,68), //bcp->offset
    69, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S20733C14,    ABISELECT(112,56), //bcp->offset
    59, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S20733C6,    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
    19, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20733C5,    ABISELECT(16,8), //bcp->offset
    14, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S20733C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20733C6,    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
    22, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S20733C5,    ABISELECT(24,12), //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
    23, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S20733C6,    ABISELECT(32,16), //bcp->offset
    24, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S20733C4,    ABISELECT(24,12), //bcp->offset
    19, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20733C1[];
extern void _ZN8S20733C1D1Ev();
extern void _ZN8S20733C1D0Ev();
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C82v2Ev();
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY vtc_S20733C1[] = {
  ABISELECT(128,68),
  ABISELECT(112,56),
  ABISELECT(88,44),
  ABISELECT(64,32),
  ABISELECT(112,56),
  0,
  ABISELECT(48,24),
  0,
  ABISELECT(72,36),
  ABISELECT(72,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C1[0]),
  (VTBL_ENTRY)&_ZN8S20733C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20733C1D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20733C1[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20733C1[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20733C1[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S20733C1[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S20733C1[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  0,
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S20733C1[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  ABISELECT(16,8),
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(40,20),
  ABISELECT(-72,-36),
  ABISELECT(-24,-12),
  ABISELECT(-72,-36),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S20733C1[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  0,
  ABISELECT(-88,-44),
  ABISELECT(24,12),
  ABISELECT(-88,-44),
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI8S20733C1[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  ABISELECT(16,12),
  0,
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI8S20733C1[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20733C82v2Ev,
  0,
  ABISELECT(-128,-68),
  (VTBL_ENTRY)&(_ZTI8S20733C1[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern VTBL_ENTRY _ZTV8S20733C1[];
extern void _ZN9S20733C10D1Ev();
extern void _ZN9S20733C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20733C10__8S20733C1[] = {
  ABISELECT(128,68),
  ABISELECT(112,56),
  ABISELECT(88,44),
  ABISELECT(64,32),
  ABISELECT(112,56),
  0,
  ABISELECT(48,24),
  0,
  ABISELECT(72,36),
  ABISELECT(72,36),
  0,
  (VTBL_ENTRY)&(_ZTI9S20733C10[0]),
  (VTBL_ENTRY)&_ZN9S20733C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20733C10D0Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C59S20733C10__A2__8S20733C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C5[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV9S20733C12__9S20733C10__8S20733C1[] = {
  ABISELECT(16,8),
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(40,20),
  ABISELECT(-72,-36),
  ABISELECT(-24,-12),
  ABISELECT(-72,-36),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI9S20733C10[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C4__9S20733C10__8S20733C1[] = {
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S20733C10[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C68S20733C4__A1__9S20733C10__8S20733C1[] = {
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI9S20733C10[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C82v2Ev();
static  VTBL_ENTRY _tg__ZTV9S20733C14__9S20733C10__8S20733C1[] = {
  ABISELECT(16,12),
  0,
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI9S20733C10[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20733C82v2Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C9__9S20733C10__8S20733C1[] = {
  0,
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI9S20733C10[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV9S20733C13__9S20733C10__8S20733C1[] = {
  0,
  ABISELECT(-88,-44),
  ABISELECT(24,12),
  ABISELECT(-88,-44),
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI9S20733C10[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C6__A6__9S20733C10__8S20733C1[] = {
  0,
  ABISELECT(-128,-68),
  (VTBL_ENTRY)&(_ZTI9S20733C10[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C5__A2__9S20733C10__8S20733C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20733C10[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C4__A__8S20733C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C4[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C58S20733C4__A3__8S20733C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C5[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C2__8S20733C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(40,20),
  ABISELECT(-72,-36),
  ABISELECT(-24,-12),
  ABISELECT(-72,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C2[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C4__8S20733C2__8S20733C1[] = {
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI8S20733C2[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C68S20733C4__A1__8S20733C2__8S20733C1[] = {
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S20733C2[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C8__8S20733C2__8S20733C1[] = {
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20733C2[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20733C82v2Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C9__8S20733C2__8S20733C1[] = {
  0,
  ABISELECT(-64,-32),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S20733C2[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C4__8S20733C1[] = {
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C4[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C58S20733C4__8S20733C1[] = {
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C5[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C8__8S20733C1[] = {
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C8[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20733C82v2Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C58S20733C8__A1__8S20733C1[] = {
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C5[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C9__8S20733C1[] = {
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C9[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV9S20733C12__8S20733C1[] = {
  ABISELECT(16,8),
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(40,20),
  ABISELECT(-72,-36),
  ABISELECT(-24,-12),
  ABISELECT(-72,-36),
  0,
  (VTBL_ENTRY)&(_ZTI9S20733C12[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C4__9S20733C12__8S20733C1[] = {
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI9S20733C12[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C68S20733C4__A1__9S20733C12__8S20733C1[] = {
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S20733C12[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C8__9S20733C12__8S20733C1[] = {
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S20733C12[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20733C82v2Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C9__9S20733C12__8S20733C1[] = {
  0,
  ABISELECT(-64,-32),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI9S20733C12[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV9S20733C13__9S20733C12__8S20733C1[] = {
  0,
  ABISELECT(-88,-44),
  ABISELECT(24,12),
  ABISELECT(-88,-44),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20733C12[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV9S20733C13__8S20733C1[] = {
  ABISELECT(-88,-44),
  ABISELECT(24,12),
  ABISELECT(-88,-44),
  0,
  (VTBL_ENTRY)&(_ZTI9S20733C13[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C8__9S20733C13__8S20733C1[] = {
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S20733C13[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20733C82v2Ev,
};
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C82v2Ev();
static  VTBL_ENTRY _tg__ZTV9S20733C14__8S20733C1[] = {
  ABISELECT(16,12),
  0,
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  0,
  (VTBL_ENTRY)&(_ZTI9S20733C14[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20733C82v2Ev,
};
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C82v2Ev();
static  VTBL_ENTRY _tg__ZTV9S20733C159S20733C14__8S20733C1[] = {
  0,
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  0,
  (VTBL_ENTRY)&(_ZTI9S20733C15[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20733C82v2Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C6__A1__9S20733C14__8S20733C1[] = {
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S20733C14[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
static  VTT_ENTRY vtt_S20733C1[] = {
  {&(_ZTV8S20733C1[12]),  12,73},
  {&(_tg__ZTV9S20733C10__8S20733C1[12]),  12,14},
  {&(_tg__ZTV8S20733C59S20733C10__A2__8S20733C1[4]),  4,5},
  {&(_tg__ZTV9S20733C12__9S20733C10__8S20733C1[10]),  10,11},
  {&(_tg__ZTV9S20733C12__9S20733C10__8S20733C1[10]),  10,11},
  {&(_tg__ZTV8S20733C4__9S20733C10__8S20733C1[5]),  5,6},
  {&(_tg__ZTV8S20733C68S20733C4__A1__9S20733C10__8S20733C1[2]),  2,3},
  {&(_tg__ZTV9S20733C14__9S20733C10__8S20733C1[8]),  8,10},
  {&(_tg__ZTV8S20733C9__9S20733C10__8S20733C1[4]),  4,5},
  {&(_tg__ZTV9S20733C13__9S20733C10__8S20733C1[6]),  6,7},
  {&(_tg__ZTV9S20733C14__9S20733C10__8S20733C1[8]),  8,10},
  {&(_tg__ZTV8S20733C6__A6__9S20733C10__8S20733C1[3]),  3,4},
  {&(_tg__ZTV8S20733C5__A2__9S20733C10__8S20733C1[4]),  4,5},
  {&(_tg__ZTV8S20733C4__A__8S20733C1[4]),  4,5},
  {&(_tg__ZTV8S20733C58S20733C4__A3__8S20733C1[4]),  4,5},
  {&(_ZTV8S20733C1[51]),  51,73},
  {&(_ZTV8S20733C1[32]),  32,73},
  {&(_ZTV8S20733C1[35]),  35,73},
  {&(_ZTV8S20733C1[67]),  67,73},
  {&(_ZTV8S20733C1[40]),  40,73},
  {&(_ZTV8S20733C1[51]),  51,73},
  {&(_ZTV8S20733C1[58]),  58,73},
  {&(_ZTV8S20733C1[67]),  67,73},
  {&(_ZTV8S20733C1[72]),  72,73},
  {&(_ZTV8S20733C1[18]),  18,73},
  {&(_ZTV8S20733C1[23]),  23,73},
  {&(_tg__ZTV8S20733C2__8S20733C1[7]),  7,8},
  {&(_tg__ZTV8S20733C4__8S20733C2__8S20733C1[5]),  5,6},
  {&(_tg__ZTV8S20733C68S20733C4__A1__8S20733C2__8S20733C1[2]),  2,3},
  {&(_tg__ZTV8S20733C8__8S20733C2__8S20733C1[6]),  6,8},
  {&(_tg__ZTV8S20733C9__8S20733C2__8S20733C1[4]),  4,5},
  {&(_tg__ZTV8S20733C4__8S20733C1[4]),  4,5},
  {&(_tg__ZTV8S20733C58S20733C4__8S20733C1[4]),  4,5},
  {&(_tg__ZTV8S20733C8__8S20733C1[4]),  4,6},
  {&(_tg__ZTV8S20733C58S20733C8__A1__8S20733C1[4]),  4,5},
  {&(_tg__ZTV8S20733C9__8S20733C1[3]),  3,4},
  {&(_tg__ZTV9S20733C12__8S20733C1[10]),  10,11},
  {&(_tg__ZTV9S20733C12__8S20733C1[10]),  10,11},
  {&(_tg__ZTV8S20733C4__9S20733C12__8S20733C1[5]),  5,6},
  {&(_tg__ZTV8S20733C68S20733C4__A1__9S20733C12__8S20733C1[2]),  2,3},
  {&(_tg__ZTV8S20733C8__9S20733C12__8S20733C1[6]),  6,8},
  {&(_tg__ZTV8S20733C9__9S20733C12__8S20733C1[4]),  4,5},
  {&(_tg__ZTV9S20733C13__9S20733C12__8S20733C1[6]),  6,7},
  {&(_tg__ZTV9S20733C13__8S20733C1[5]),  5,6},
  {&(_tg__ZTV8S20733C8__9S20733C13__8S20733C1[6]),  6,8},
  {&(_tg__ZTV9S20733C14__8S20733C1[8]),  8,10},
  {&(_tg__ZTV9S20733C159S20733C14__8S20733C1[7]),  7,9},
  {&(_tg__ZTV9S20733C159S20733C14__8S20733C1[7]),  7,9},
  {&(_tg__ZTV9S20733C14__8S20733C1[8]),  8,10},
  {&(_tg__ZTV8S20733C6__A1__9S20733C14__8S20733C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20733C1[];
extern  VTBL_ENTRY _ZTV8S20733C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C1[];
Class_Descriptor cd_S20733C1 = {  "S20733C1", // class name
  bases_S20733C1, 29,
  &(vtc_S20733C1[0]), // expected_vtbl_contents
  &(vtt_S20733C1[0]), // expected_vtt_contents
  ABISELECT(136,72), // object size
  NSPAIRA(_ZTI8S20733C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20733C1),73, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20733C1),50, //virtual table table var
  25, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16617C10  {
  void *s16617c10f0;
  int s16617c10f1;
  char s16617c10f2;
  int s16617c10f3;
  int s16617c10f4[21];
  int s16617c10f5;
  virtual  ~S16617C10(); // _ZN9S16617C10D1Ev
  virtual void  v4(); // _ZN9S16617C102v4Ev
  virtual void  v5(); // _ZN9S16617C102v5Ev
  virtual void  v6(); // _ZN9S16617C102v6Ev
  virtual void  v7(); // _ZN9S16617C102v7Ev
  S16617C10(); // tgen
};
//SIG(-1 S16617C10) C1{ vd v1 v2 v3 v4 Fp Fi Fc Fi[23]}


 S16617C10 ::~S16617C10(){ note_dtor("S16617C10", this);}
void  S16617C10 ::v4(){vfunc_called(this, "_ZN9S16617C102v4Ev");}
void  S16617C10 ::v5(){vfunc_called(this, "_ZN9S16617C102v5Ev");}
void  S16617C10 ::v6(){vfunc_called(this, "_ZN9S16617C102v6Ev");}
void  S16617C10 ::v7(){vfunc_called(this, "_ZN9S16617C102v7Ev");}
S16617C10 ::S16617C10(){ note_ctor("S16617C10", this);} // tgen

static void Test_S16617C10()
{
  extern Class_Descriptor cd_S16617C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,28)];
    init_test(&cd_S16617C10, buf);
    S16617C10 *dp, &lv = *(dp=new (buf) S16617C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,108), "sizeof(S16617C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16617C10)");
    check_field_offset(lv, s16617c10f0, ABISELECT(8,4), "S16617C10.s16617c10f0");
    check_field_offset(lv, s16617c10f1, ABISELECT(16,8), "S16617C10.s16617c10f1");
    check_field_offset(lv, s16617c10f2, ABISELECT(20,12), "S16617C10.s16617c10f2");
    check_field_offset(lv, s16617c10f3, ABISELECT(24,16), "S16617C10.s16617c10f3");
    check_field_offset(lv, s16617c10f4, ABISELECT(28,20), "S16617C10.s16617c10f4");
    check_field_offset(lv, s16617c10f5, ABISELECT(112,104), "S16617C10.s16617c10f5");
    test_class_info(&lv, &cd_S16617C10);
    dp->~S16617C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS16617C10(Test_S16617C10, "S16617C10", ABISELECT(120,108));

#else // __cplusplus

extern void _ZN9S16617C10C1Ev();
extern void _ZN9S16617C10D1Ev();
Name_Map name_map_S16617C10[] = {
  NSPAIR(_ZN9S16617C10C1Ev),
  NSPAIR(_ZN9S16617C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S16617C10[];
extern void _ZN9S16617C10D1Ev();
extern void _ZN9S16617C10D0Ev();
extern void _ZN9S16617C102v4Ev();
extern void _ZN9S16617C102v5Ev();
extern void _ZN9S16617C102v6Ev();
extern void _ZN9S16617C102v7Ev();
static  VTBL_ENTRY vtc_S16617C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S16617C10[0]),
  (VTBL_ENTRY)&_ZN9S16617C10D1Ev,
  (VTBL_ENTRY)&_ZN9S16617C10D0Ev,
  (VTBL_ENTRY)&_ZN9S16617C102v4Ev,
  (VTBL_ENTRY)&_ZN9S16617C102v5Ev,
  (VTBL_ENTRY)&_ZN9S16617C102v6Ev,
  (VTBL_ENTRY)&_ZN9S16617C102v7Ev,
};
extern VTBL_ENTRY _ZTI9S16617C10[];
extern  VTBL_ENTRY _ZTV9S16617C10[];
Class_Descriptor cd_S16617C10 = {  "S16617C10", // class name
  0,0,//no base classes
  &(vtc_S16617C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,108), // object size
  NSPAIRA(_ZTI9S16617C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S16617C10),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  S16617C9  : S16617C10 {
  int s16617c9f0;
  int s16617c9f1;
  int s16617c9f2;
  int s16617c9f3;
  void *s16617c9f4;
  void *s16617c9f5;
  ::S15319C2_nt s16617c9f6;
  char s16617c9f7;
  int s16617c9f8;
  int s16617c9f9;
  int s16617c9f10;
  char s16617c9f11;
  char s16617c9f12;
  int s16617c9f13;
  int s16617c9f14;
  virtual  ~S16617C9(); // _ZN8S16617C9D1Ev
  virtual void  v1(); // _ZN8S16617C92v1Ev
  virtual void  v2(); // _ZN8S16617C92v2Ev
  virtual void  v3(); // _ZN8S16617C92v3Ev
  S16617C9(); // tgen
};
//SIG(-1 S16617C9) C1{ BC2{ vd v4 v5 v6 v7 Fp Fi Fc Fi[23]} vd v1 v2 v3 Fi[4] Fp[2] FC3{ BC4{ BC5{ BC6{}} FC7{ BC8{}}} FU9{ Fc[16] Fp} Fi Fi} Fc Fi Fi Fi Fc Fc Fi Fi}


 S16617C9 ::~S16617C9(){ note_dtor("S16617C9", this);}
void  S16617C9 ::v1(){vfunc_called(this, "_ZN8S16617C92v1Ev");}
void  S16617C9 ::v2(){vfunc_called(this, "_ZN8S16617C92v2Ev");}
void  S16617C9 ::v3(){vfunc_called(this, "_ZN8S16617C92v3Ev");}
S16617C9 ::S16617C9(){ note_ctor("S16617C9", this);} // tgen

static void Test_S16617C9()
{
  extern Class_Descriptor cd_S16617C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(28,48)];
    init_test(&cd_S16617C9, buf);
    S16617C9 *dp, &lv = *(dp=new (buf) S16617C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(216,188), "sizeof(S16617C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16617C9)");
    check_base_class_offset(lv, (S16617C10*), 0, "S16617C9");
    check_field_offset(lv, s16617c9f0, ABISELECT(116,108), "S16617C9.s16617c9f0");
    check_field_offset(lv, s16617c9f1, ABISELECT(120,112), "S16617C9.s16617c9f1");
    check_field_offset(lv, s16617c9f2, ABISELECT(124,116), "S16617C9.s16617c9f2");
    check_field_offset(lv, s16617c9f3, ABISELECT(128,120), "S16617C9.s16617c9f3");
    check_field_offset(lv, s16617c9f4, ABISELECT(136,124), "S16617C9.s16617c9f4");
    check_field_offset(lv, s16617c9f5, ABISELECT(144,128), "S16617C9.s16617c9f5");
    check_field_offset(lv, s16617c9f6, ABISELECT(152,132), "S16617C9.s16617c9f6");
    check_field_offset(lv, s16617c9f7, ABISELECT(184,160), "S16617C9.s16617c9f7");
    check_field_offset(lv, s16617c9f8, ABISELECT(188,164), "S16617C9.s16617c9f8");
    check_field_offset(lv, s16617c9f9, ABISELECT(192,168), "S16617C9.s16617c9f9");
    check_field_offset(lv, s16617c9f10, ABISELECT(196,172), "S16617C9.s16617c9f10");
    check_field_offset(lv, s16617c9f11, ABISELECT(200,176), "S16617C9.s16617c9f11");
    check_field_offset(lv, s16617c9f12, ABISELECT(201,177), "S16617C9.s16617c9f12");
    check_field_offset(lv, s16617c9f13, ABISELECT(204,180), "S16617C9.s16617c9f13");
    check_field_offset(lv, s16617c9f14, ABISELECT(208,184), "S16617C9.s16617c9f14");
    test_class_info(&lv, &cd_S16617C9);
    dp->~S16617C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS16617C9(Test_S16617C9, "S16617C9", ABISELECT(216,188));

#else // __cplusplus

extern void _ZN8S16617C9C1Ev();
extern void _ZN8S16617C9D1Ev();
Name_Map name_map_S16617C9[] = {
  NSPAIR(_ZN8S16617C9C1Ev),
  NSPAIR(_ZN8S16617C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16617C10;
extern VTBL_ENTRY _ZTI9S16617C10[];
extern  VTBL_ENTRY _ZTV9S16617C10[];
static Base_Class bases_S16617C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16617C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S16617C9[];
extern void _ZN8S16617C9D1Ev();
extern void _ZN8S16617C9D0Ev();
extern void _ZN9S16617C102v4Ev();
extern void _ZN9S16617C102v5Ev();
extern void _ZN9S16617C102v6Ev();
extern void _ZN9S16617C102v7Ev();
extern void _ZN8S16617C92v1Ev();
extern void _ZN8S16617C92v2Ev();
extern void _ZN8S16617C92v3Ev();
static  VTBL_ENTRY vtc_S16617C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S16617C9[0]),
  (VTBL_ENTRY)&_ZN8S16617C9D1Ev,
  (VTBL_ENTRY)&_ZN8S16617C9D0Ev,
  (VTBL_ENTRY)&_ZN9S16617C102v4Ev,
  (VTBL_ENTRY)&_ZN9S16617C102v5Ev,
  (VTBL_ENTRY)&_ZN9S16617C102v6Ev,
  (VTBL_ENTRY)&_ZN9S16617C102v7Ev,
  (VTBL_ENTRY)&_ZN8S16617C92v1Ev,
  (VTBL_ENTRY)&_ZN8S16617C92v2Ev,
  (VTBL_ENTRY)&_ZN8S16617C92v3Ev,
};
extern VTBL_ENTRY _ZTI8S16617C9[];
extern  VTBL_ENTRY _ZTV8S16617C9[];
Class_Descriptor cd_S16617C9 = {  "S16617C9", // class name
  bases_S16617C9, 1,
  &(vtc_S16617C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(216,188), // object size
  NSPAIRA(_ZTI8S16617C9),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S16617C9),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16617C1  {
  int s16617c1f0;
  ::S15319C2_nt s16617c1f1;
  int s16617c1f2;
  int s16617c1f3[16];
  int s16617c1f4;
  void *s16617c1f5;
  ::S15319C2_nt s16617c1f6;
  ::S16617C9 s16617c1f7;
  int s16617c1f8;
  void *s16617c1f9;
  void  mf16617c1(); // _ZN8S16617C19mf16617c1Ev
};
//SIG(1 S16617C1) C1{ m Fi FC2{ BC3{ BC4{ BC5{}} FC6{ BC7{}}} FU8{ Fc[16] Fp} Fi Fi} Fi Fi[16] Fi Fp FC2 FC9{ BC10{ vd v4 v5 v6 v7 Fp Fi Fc Fi Fi[21] Fi} vd v1 v2 v3 Fi Fi Fi Fi Fp Fp FC2 Fc Fi Fi Fi Fc Fc Fi Fi} Fi Fp}


void  S16617C1 ::mf16617c1(){}

static void Test_S16617C1()
{
  {
    init_simple_test("S16617C1");
    S16617C1 lv;
    check2(sizeof(lv), ABISELECT(384,332), "sizeof(S16617C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16617C1)");
    check_field_offset(lv, s16617c1f0, 0, "S16617C1.s16617c1f0");
    check_field_offset(lv, s16617c1f1, ABISELECT(8,4), "S16617C1.s16617c1f1");
    check_field_offset(lv, s16617c1f2, ABISELECT(40,32), "S16617C1.s16617c1f2");
    check_field_offset(lv, s16617c1f3, ABISELECT(44,36), "S16617C1.s16617c1f3");
    check_field_offset(lv, s16617c1f4, ABISELECT(108,100), "S16617C1.s16617c1f4");
    check_field_offset(lv, s16617c1f5, ABISELECT(112,104), "S16617C1.s16617c1f5");
    check_field_offset(lv, s16617c1f6, ABISELECT(120,108), "S16617C1.s16617c1f6");
    check_field_offset(lv, s16617c1f7, ABISELECT(152,136), "S16617C1.s16617c1f7");
    check_field_offset(lv, s16617c1f8, ABISELECT(368,324), "S16617C1.s16617c1f8");
    check_field_offset(lv, s16617c1f9, ABISELECT(376,328), "S16617C1.s16617c1f9");
  }
}
static Arrange_To_Call_Me vS16617C1(Test_S16617C1, "S16617C1", ABISELECT(384,332));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20728C6  {
  virtual void  v1(); // _ZN8S20728C62v1Ev
  ~S20728C6(); // tgen
  S20728C6(); // tgen
};
//SIG(-1 S20728C6) C1{ v1}


void  S20728C6 ::v1(){vfunc_called(this, "_ZN8S20728C62v1Ev");}
S20728C6 ::~S20728C6(){ note_dtor("S20728C6", this);} // tgen
S20728C6 ::S20728C6(){ note_ctor("S20728C6", this);} // tgen

static void Test_S20728C6()
{
  extern Class_Descriptor cd_S20728C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20728C6, buf);
    S20728C6 *dp, &lv = *(dp=new (buf) S20728C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20728C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20728C6)");
    test_class_info(&lv, &cd_S20728C6);
    dp->~S20728C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20728C6(Test_S20728C6, "S20728C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20728C6C1Ev();
extern void _ZN8S20728C6D1Ev();
Name_Map name_map_S20728C6[] = {
  NSPAIR(_ZN8S20728C6C1Ev),
  NSPAIR(_ZN8S20728C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20728C6[];
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY vtc_S20728C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C6[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
Class_Descriptor cd_S20728C6 = {  "S20728C6", // class name
  0,0,//no base classes
  &(vtc_S20728C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20728C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20728C6),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  S20728C5  : virtual S2121C38 , S20728C6 , virtual S2121C28 {
  ~S20728C5(); // tgen
  S20728C5(); // tgen
};
//SIG(-1 S20728C5) C1{ VBC2{ m} BC3{ v1} VBC4{ m}}


S20728C5 ::~S20728C5(){ note_dtor("S20728C5", this);} // tgen
S20728C5 ::S20728C5(){ note_ctor("S20728C5", this);} // tgen

static void Test_S20728C5()
{
  extern Class_Descriptor cd_S20728C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20728C5, buf);
    S20728C5 *dp, &lv = *(dp=new (buf) S20728C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20728C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20728C5)");
    check_base_class_offset(lv, (S2121C38*), 0, "S20728C5");
    check_base_class_offset(lv, (S20728C6*), 0, "S20728C5");
    check_base_class_offset(lv, (S2121C28*), 0, "S20728C5");
    test_class_info(&lv, &cd_S20728C5);
    dp->~S20728C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20728C5(Test_S20728C5, "S20728C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20728C5C1Ev();
extern void _ZN8S20728C5D1Ev();
Name_Map name_map_S20728C5[] = {
  NSPAIR(_ZN8S20728C5C1Ev),
  NSPAIR(_ZN8S20728C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
static Base_Class bases_S20728C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20728C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S20728C5[];
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY vtc_S20728C5[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C5[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern VTBL_ENTRY _ZTV8S20728C5[];
static  VTT_ENTRY vtt_S20728C5[] = {
  {&(_ZTV8S20728C5[4]),  4,5},
};
extern VTBL_ENTRY _ZTI8S20728C5[];
extern  VTBL_ENTRY _ZTV8S20728C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C5[];
Class_Descriptor cd_S20728C5 = {  "S20728C5", // class name
  bases_S20728C5, 3,
  &(vtc_S20728C5[0]), // expected_vtbl_contents
  &(vtt_S20728C5[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20728C5),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20728C5),5, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20728C5),1, //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  S20728C4  : S2121C38 , S20728C5 {
  virtual void  v2(); // _ZN8S20728C42v2Ev
  ~S20728C4(); // tgen
  S20728C4(); // tgen
};
//SIG(-1 S20728C4) C1{ BC2{ m} BC3{ VBC2 BC4{ v2} VBC5{ m}} v1}


void  S20728C4 ::v2(){vfunc_called(this, "_ZN8S20728C42v2Ev");}
S20728C4 ::~S20728C4(){ note_dtor("S20728C4", this);} // tgen
S20728C4 ::S20728C4(){ note_ctor("S20728C4", this);} // tgen

static void Test_S20728C4()
{
  extern Class_Descriptor cd_S20728C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20728C4, buf);
    S20728C4 *dp, &lv = *(dp=new (buf) S20728C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20728C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20728C4)");
    /*is_ambiguous_... S20728C4::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*), 0, "S20728C4");
    check_base_class_offset(lv, (S2121C38*)(S20728C5*), ABISELECT(8,4), "S20728C4");
    check_base_class_offset(lv, (S20728C6*)(S20728C5*), 0, "S20728C4");
    check_base_class_offset(lv, (S2121C28*)(S20728C5*), 0, "S20728C4");
    check_base_class_offset(lv, (S20728C5*), 0, "S20728C4");
    test_class_info(&lv, &cd_S20728C4);
    dp->~S20728C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20728C4(Test_S20728C4, "S20728C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S20728C4C1Ev();
extern void _ZN8S20728C4D1Ev();
Name_Map name_map_S20728C4[] = {
  NSPAIR(_ZN8S20728C4C1Ev),
  NSPAIR(_ZN8S20728C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20728C5;
extern VTBL_ENTRY _ZTI8S20728C5[];
extern  VTBL_ENTRY _ZTV8S20728C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C5[];
static Base_Class bases_S20728C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2121C38,    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, 1},
  {&cd_S20728C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20728C5,    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 _ZTI8S20728C4[];
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C42v2Ev();
static  VTBL_ENTRY vtc_S20728C4[] = {
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C4[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20728C42v2Ev,
};
extern VTBL_ENTRY _ZTV8S20728C4[];
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C5__8S20728C4[] = {
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C5[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
static  VTT_ENTRY vtt_S20728C4[] = {
  {&(_ZTV8S20728C4[4]),  4,6},
  {&(_tg__ZTV8S20728C5__8S20728C4[4]),  4,5},
};
extern VTBL_ENTRY _ZTI8S20728C4[];
extern  VTBL_ENTRY _ZTV8S20728C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C4[];
Class_Descriptor cd_S20728C4 = {  "S20728C4", // class name
  bases_S20728C4, 5,
  &(vtc_S20728C4[0]), // expected_vtbl_contents
  &(vtt_S20728C4[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20728C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20728C4),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20728C4),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  S20728C2  : virtual S2121C38 , virtual S20728C4 , S20728C6 {
  int s20728c2f0;
  void *s20728c2f1;
  ~S20728C2(); // tgen
  S20728C2(); // tgen
};
//SIG(-1 S20728C2) C1{ VBC2{ m} VBC3{ BC2 BC4{ VBC2 BC5{ v1} VBC6{ m}} v2} BC5 Fi Fp}


S20728C2 ::~S20728C2(){ note_dtor("S20728C2", this);} // tgen
S20728C2 ::S20728C2(){ note_ctor("S20728C2", this);} // tgen

static void Test_S20728C2()
{
  extern Class_Descriptor cd_S20728C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S20728C2, buf);
    S20728C2 *dp, &lv = *(dp=new (buf) S20728C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S20728C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20728C2)");
    /*is_ambiguous_... S20728C2::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*), 0, "S20728C2");
    check_base_class_offset(lv, (S2121C38*)(S20728C5*)(S20728C4*), 0, "S20728C2");
    /*is_ambiguous_... S20728C4::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20728C4*), ABISELECT(24,12), "S20728C2");
    check_base_class_offset(lv, (S20728C6*)(S20728C5*)(S20728C4*), ABISELECT(24,12), "S20728C2");
    check_base_class_offset(lv, (S2121C28*)(S20728C5*)(S20728C4*), 0, "S20728C2");
    check_base_class_offset(lv, (S20728C5*)(S20728C4*), ABISELECT(24,12), "S20728C2");
    check_base_class_offset(lv, (S20728C4*), ABISELECT(24,12), "S20728C2");
    /*is_ambiguous_... S20728C2::S20728C6 */ AMB_check_base_class_offset(lv, (S20728C6*), 0, "S20728C2");
    check_field_offset(lv, s20728c2f0, ABISELECT(8,4), "S20728C2.s20728c2f0");
    check_field_offset(lv, s20728c2f1, ABISELECT(16,8), "S20728C2.s20728c2f1");
    test_class_info(&lv, &cd_S20728C2);
    dp->~S20728C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20728C2(Test_S20728C2, "S20728C2", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S20728C2C1Ev();
extern void _ZN8S20728C2D1Ev();
Name_Map name_map_S20728C2[] = {
  NSPAIR(_ZN8S20728C2C1Ev),
  NSPAIR(_ZN8S20728C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20728C5;
extern VTBL_ENTRY _ZTI8S20728C5[];
extern  VTBL_ENTRY _ZTV8S20728C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C5[];
extern Class_Descriptor cd_S20728C4;
extern VTBL_ENTRY _ZTI8S20728C4[];
extern  VTBL_ENTRY _ZTV8S20728C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C4[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
static Base_Class bases_S20728C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2121C38,    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
    5, //immediately_derived
  0, 0},
  {&cd_S20728C6,    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_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20728C5,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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
    5, //immediately_derived
  0, 0},
  {&cd_S20728C4,    ABISELECT(24,12), //bcp->offset
    6, //bcp->virtual_function_table_offset
    6, //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},
  {&cd_S20728C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S20728C2[];
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C42v2Ev();
static  VTBL_ENTRY vtc_S20728C2[] = {
  0,
  ABISELECT(24,12),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C2[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20728C2[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20728C42v2Ev,
};
extern VTBL_ENTRY _ZTV8S20728C2[];
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C4__8S20728C2[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C4[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20728C42v2Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C58S20728C4__8S20728C2[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C5[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
static  VTT_ENTRY vtt_S20728C2[] = {
  {&(_ZTV8S20728C2[5]),  5,14},
  {&(_ZTV8S20728C2[12]),  12,14},
  {&(_tg__ZTV8S20728C4__8S20728C2[4]),  4,6},
  {&(_tg__ZTV8S20728C58S20728C4__8S20728C2[4]),  4,5},
};
extern VTBL_ENTRY _ZTI8S20728C2[];
extern  VTBL_ENTRY _ZTV8S20728C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C2[];
Class_Descriptor cd_S20728C2 = {  "S20728C2", // class name
  bases_S20728C2, 7,
  &(vtc_S20728C2[0]), // expected_vtbl_contents
  &(vtt_S20728C2[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S20728C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20728C2),14, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20728C2),4, //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  S20728C8  : S20728C6 , S2121C28 , virtual S2121C38 {
  ~S20728C8(); // tgen
  S20728C8(); // tgen
};
//SIG(-1 S20728C8) C1{ BC2{ v1} BC3{ m} VBC4{ m}}


S20728C8 ::~S20728C8(){ note_dtor("S20728C8", this);} // tgen
S20728C8 ::S20728C8(){ note_ctor("S20728C8", this);} // tgen

static void Test_S20728C8()
{
  extern Class_Descriptor cd_S20728C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20728C8, buf);
    S20728C8 *dp, &lv = *(dp=new (buf) S20728C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20728C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20728C8)");
    check_base_class_offset(lv, (S20728C6*), 0, "S20728C8");
    check_base_class_offset(lv, (S2121C28*), 0, "S20728C8");
    check_base_class_offset(lv, (S2121C38*), 0, "S20728C8");
    test_class_info(&lv, &cd_S20728C8);
    dp->~S20728C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20728C8(Test_S20728C8, "S20728C8", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20728C8C1Ev();
extern void _ZN8S20728C8D1Ev();
Name_Map name_map_S20728C8[] = {
  NSPAIR(_ZN8S20728C8C1Ev),
  NSPAIR(_ZN8S20728C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
static Base_Class bases_S20728C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20728C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S20728C8[];
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY vtc_S20728C8[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C8[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern VTBL_ENTRY _ZTV8S20728C8[];
static  VTT_ENTRY vtt_S20728C8[] = {
  {&(_ZTV8S20728C8[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20728C8[];
extern  VTBL_ENTRY _ZTV8S20728C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C8[];
Class_Descriptor cd_S20728C8 = {  "S20728C8", // class name
  bases_S20728C8, 3,
  &(vtc_S20728C8[0]), // expected_vtbl_contents
  &(vtt_S20728C8[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20728C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20728C8),4, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20728C8),1, //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  S20728C9  : virtual S2121C38 {
  ~S20728C9(); // tgen
  S20728C9(); // tgen
};
//SIG(-1 S20728C9) C1{ VBC2{ m}}


S20728C9 ::~S20728C9(){ note_dtor("S20728C9", this);} // tgen
S20728C9 ::S20728C9(){ note_ctor("S20728C9", this);} // tgen

static void Test_S20728C9()
{
  extern Class_Descriptor cd_S20728C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20728C9, buf);
    S20728C9 *dp, &lv = *(dp=new (buf) S20728C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20728C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20728C9)");
    check_base_class_offset(lv, (S2121C38*), 0, "S20728C9");
    test_class_info(&lv, &cd_S20728C9);
    dp->~S20728C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20728C9(Test_S20728C9, "S20728C9", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20728C9C1Ev();
extern void _ZN8S20728C9D1Ev();
Name_Map name_map_S20728C9[] = {
  NSPAIR(_ZN8S20728C9C1Ev),
  NSPAIR(_ZN8S20728C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
static Base_Class bases_S20728C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S20728C9[];
static  VTBL_ENTRY vtc_S20728C9[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C9[0]),
};
extern VTBL_ENTRY _ZTV8S20728C9[];
static  VTT_ENTRY vtt_S20728C9[] = {
  {&(_ZTV8S20728C9[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20728C9[];
extern  VTBL_ENTRY _ZTV8S20728C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C9[];
Class_Descriptor cd_S20728C9 = {  "S20728C9", // class name
  bases_S20728C9, 1,
  &(vtc_S20728C9[0]), // expected_vtbl_contents
  &(vtt_S20728C9[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20728C9),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20728C9),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20728C9),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  S20728C11  : virtual S20728C4 {
  int s20728c11f0;
  ~S20728C11(); // tgen
  S20728C11(); // tgen
};
//SIG(-1 S20728C11) C1{ VBC2{ BC3{ m} BC4{ VBC3 BC5{ v1} VBC6{ m}} v2} Fi}


S20728C11 ::~S20728C11(){ note_dtor("S20728C11", this);} // tgen
S20728C11 ::S20728C11(){ note_ctor("S20728C11", this);} // tgen

static void Test_S20728C11()
{
  extern Class_Descriptor cd_S20728C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S20728C11, buf);
    S20728C11 *dp, &lv = *(dp=new (buf) S20728C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S20728C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20728C11)");
    /*is_ambiguous_... S20728C4::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20728C4*), 0, "S20728C11");
    check_base_class_offset(lv, (S2121C38*)(S20728C5*)(S20728C4*), ABISELECT(12,8), "S20728C11");
    check_base_class_offset(lv, (S20728C6*)(S20728C5*)(S20728C4*), 0, "S20728C11");
    check_base_class_offset(lv, (S2121C28*)(S20728C5*)(S20728C4*), 0, "S20728C11");
    check_base_class_offset(lv, (S20728C5*)(S20728C4*), 0, "S20728C11");
    check_base_class_offset(lv, (S20728C4*), 0, "S20728C11");
    check_field_offset(lv, s20728c11f0, ABISELECT(8,4), "S20728C11.s20728c11f0");
    test_class_info(&lv, &cd_S20728C11);
    dp->~S20728C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20728C11(Test_S20728C11, "S20728C11", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN9S20728C11C1Ev();
extern void _ZN9S20728C11D1Ev();
Name_Map name_map_S20728C11[] = {
  NSPAIR(_ZN9S20728C11C1Ev),
  NSPAIR(_ZN9S20728C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20728C5;
extern VTBL_ENTRY _ZTI8S20728C5[];
extern  VTBL_ENTRY _ZTV8S20728C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C5[];
extern Class_Descriptor cd_S20728C4;
extern VTBL_ENTRY _ZTI8S20728C4[];
extern  VTBL_ENTRY _ZTV8S20728C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C4[];
static Base_Class bases_S20728C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2121C38,    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
    4, //immediately_derived
  0, 1},
  {&cd_S20728C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20728C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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
    5, //immediately_derived
  0, 0},
  {&cd_S20728C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //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 _ZTI9S20728C11[];
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C42v2Ev();
static  VTBL_ENTRY vtc_S20728C11[] = {
  0,
  0,
  0,
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20728C11[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20728C42v2Ev,
};
extern VTBL_ENTRY _ZTV9S20728C11[];
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C4__9S20728C11[] = {
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C4[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20728C42v2Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C58S20728C4__9S20728C11[] = {
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C5[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
static  VTT_ENTRY vtt_S20728C11[] = {
  {&(_ZTV9S20728C11[7]),  7,9},
  {&(_ZTV9S20728C11[7]),  7,9},
  {&(_tg__ZTV8S20728C4__9S20728C11[4]),  4,6},
  {&(_tg__ZTV8S20728C58S20728C4__9S20728C11[4]),  4,5},
};
extern VTBL_ENTRY _ZTI9S20728C11[];
extern  VTBL_ENTRY _ZTV9S20728C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20728C11[];
Class_Descriptor cd_S20728C11 = {  "S20728C11", // class name
  bases_S20728C11, 6,
  &(vtc_S20728C11[0]), // expected_vtbl_contents
  &(vtt_S20728C11[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI9S20728C11),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S20728C11),9, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20728C11),4, //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  S20728C14  : S20728C5 , S20728C6 {
  ~S20728C14(); // tgen
  S20728C14(); // tgen
};
//SIG(-1 S20728C14) C1{ BC2{ VBC3{ m} BC4{ v1} VBC5{ m}} BC4}


S20728C14 ::~S20728C14(){ note_dtor("S20728C14", this);} // tgen
S20728C14 ::S20728C14(){ note_ctor("S20728C14", this);} // tgen

static void Test_S20728C14()
{
  extern Class_Descriptor cd_S20728C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20728C14, buf);
    S20728C14 *dp, &lv = *(dp=new (buf) S20728C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20728C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20728C14)");
    check_base_class_offset(lv, (S2121C38*)(S20728C5*), 0, "S20728C14");
    check_base_class_offset(lv, (S20728C6*)(S20728C5*), 0, "S20728C14");
    check_base_class_offset(lv, (S2121C28*)(S20728C5*), 0, "S20728C14");
    check_base_class_offset(lv, (S20728C5*), 0, "S20728C14");
    /*is_ambiguous_... S20728C14::S20728C6 */ AMB_check_base_class_offset(lv, (S20728C6*), ABISELECT(8,4), "S20728C14");
    test_class_info(&lv, &cd_S20728C14);
    dp->~S20728C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20728C14(Test_S20728C14, "S20728C14", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN9S20728C14C1Ev();
extern void _ZN9S20728C14D1Ev();
Name_Map name_map_S20728C14[] = {
  NSPAIR(_ZN9S20728C14C1Ev),
  NSPAIR(_ZN9S20728C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20728C5;
extern VTBL_ENTRY _ZTI8S20728C5[];
extern  VTBL_ENTRY _ZTV8S20728C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C5[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
static Base_Class bases_S20728C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20728C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20728C5,    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_S20728C6,    ABISELECT(8,4), //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
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20728C14[];
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY vtc_S20728C14[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20728C14[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20728C14[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern VTBL_ENTRY _ZTV9S20728C14[];
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C5__9S20728C14[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C5[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
static  VTT_ENTRY vtt_S20728C14[] = {
  {&(_ZTV9S20728C14[4]),  4,8},
  {&(_tg__ZTV8S20728C5__9S20728C14[4]),  4,5},
};
extern VTBL_ENTRY _ZTI9S20728C14[];
extern  VTBL_ENTRY _ZTV9S20728C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20728C14[];
Class_Descriptor cd_S20728C14 = {  "S20728C14", // class name
  bases_S20728C14, 5,
  &(vtc_S20728C14[0]), // expected_vtbl_contents
  &(vtt_S20728C14[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S20728C14),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20728C14),8, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20728C14),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  S20728C13  : virtual S2121C38 , virtual S20728C14 , virtual S20728C4 , virtual S20728C8 , S20728C6 {
  ~S20728C13(); // tgen
  S20728C13(); // tgen
};
//SIG(-1 S20728C13) C1{ VBC2{ m} VBC3{ BC4{ VBC2 BC5{ v1} VBC6{ m}} BC5} VBC7{ BC2 BC4 v2} VBC8{ BC5 BC6 VBC2} BC5}


S20728C13 ::~S20728C13(){ note_dtor("S20728C13", this);} // tgen
S20728C13 ::S20728C13(){ note_ctor("S20728C13", this);} // tgen

static void Test_S20728C13()
{
  extern Class_Descriptor cd_S20728C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S20728C13, buf);
    S20728C13 *dp, &lv = *(dp=new (buf) S20728C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S20728C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20728C13)");
    /*is_ambiguous_... S20728C13::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*), 0, "S20728C13");
    check_base_class_offset(lv, (S2121C38*)(S20728C5*)(S20728C14*), 0, "S20728C13");
    check_base_class_offset(lv, (S2121C38*)(S20728C5*)(S20728C4*), 0, "S20728C13");
    check_base_class_offset(lv, (S2121C38*)(S20728C8*), 0, "S20728C13");
    check_base_class_offset(lv, (S20728C6*)(S20728C5*)(S20728C14*), ABISELECT(8,4), "S20728C13");
    check_base_class_offset(lv, (S2121C28*)(S20728C5*)(S20728C14*), 0, "S20728C13");
    check_base_class_offset(lv, (S2121C28*)(S20728C5*)(S20728C4*), 0, "S20728C13");
    check_base_class_offset(lv, (S20728C5*)(S20728C14*), ABISELECT(8,4), "S20728C13");
    /*is_ambiguous_... S20728C14::S20728C6 */ AMB_check_base_class_offset(lv, (S20728C6*)(S20728C14*), ABISELECT(16,8), "S20728C13");
    check_base_class_offset(lv, (S20728C14*), ABISELECT(8,4), "S20728C13");
    /*is_ambiguous_... S20728C4::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20728C4*), ABISELECT(24,12), "S20728C13");
    check_base_class_offset(lv, (S20728C6*)(S20728C5*)(S20728C4*), ABISELECT(24,12), "S20728C13");
    check_base_class_offset(lv, (S20728C5*)(S20728C4*), ABISELECT(24,12), "S20728C13");
    check_base_class_offset(lv, (S20728C4*), ABISELECT(24,12), "S20728C13");
    check_base_class_offset(lv, (S20728C6*)(S20728C8*), ABISELECT(32,16), "S20728C13");
    check_base_class_offset(lv, (S2121C28*)(S20728C8*), ABISELECT(32,16), "S20728C13");
    check_base_class_offset(lv, (S20728C8*), ABISELECT(32,16), "S20728C13");
    /*is_ambiguous_... S20728C13::S20728C6 */ AMB_check_base_class_offset(lv, (S20728C6*), 0, "S20728C13");
    test_class_info(&lv, &cd_S20728C13);
    dp->~S20728C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20728C13(Test_S20728C13, "S20728C13", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN9S20728C13C1Ev();
extern void _ZN9S20728C13D1Ev();
Name_Map name_map_S20728C13[] = {
  NSPAIR(_ZN9S20728C13C1Ev),
  NSPAIR(_ZN9S20728C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20728C5;
extern VTBL_ENTRY _ZTI8S20728C5[];
extern  VTBL_ENTRY _ZTV8S20728C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C5[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
extern Class_Descriptor cd_S20728C14;
extern VTBL_ENTRY _ZTI9S20728C14[];
extern  VTBL_ENTRY _ZTV9S20728C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20728C14[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
extern Class_Descriptor cd_S20728C5;
extern VTBL_ENTRY _ZTI8S20728C5[];
extern  VTBL_ENTRY _ZTV8S20728C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C5[];
extern Class_Descriptor cd_S20728C4;
extern VTBL_ENTRY _ZTI8S20728C4[];
extern  VTBL_ENTRY _ZTV8S20728C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C4[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20728C8;
extern VTBL_ENTRY _ZTI8S20728C8[];
extern  VTBL_ENTRY _ZTV8S20728C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C8[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
static Base_Class bases_S20728C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20728C6,    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
    3, //immediately_derived
  0, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20728C5,    ABISELECT(8,4), //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
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20728C6,    ABISELECT(16,8), //bcp->offset
    14, //bcp->virtual_function_table_offset
    2, //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
    5, //immediately_derived
  0, 0},
  {&cd_S20728C14,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2121C38,    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
    9, //immediately_derived
  0, 0},
  {&cd_S20728C6,    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
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20728C5,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20728C4,    ABISELECT(24,12), //bcp->offset
    17, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20728C6,    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
    8, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2121C28,    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
    12, //immediately_derived
  0, 0},
  {&cd_S20728C8,    ABISELECT(32,16), //bcp->offset
    25, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20728C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20728C13[];
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C42v2Ev();
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY vtc_S20728C13[] = {
  ABISELECT(32,16),
  ABISELECT(24,12),
  0,
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20728C13[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20728C13[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20728C13[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S20728C13[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20728C42v2Ev,
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S20728C13[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern VTBL_ENTRY _ZTV9S20728C13[];
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV9S20728C14__9S20728C13[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20728C14[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C59S20728C14__9S20728C13[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C5[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C4__9S20728C13[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C4[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20728C42v2Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C58S20728C4__A1__9S20728C13[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C5[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C8__9S20728C13[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C8[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
static  VTT_ENTRY vtt_S20728C13[] = {
  {&(_ZTV9S20728C13[7]),  7,30},
  {&(_ZTV9S20728C13[13]),  13,30},
  {&(_ZTV9S20728C13[16]),  16,30},
  {&(_ZTV9S20728C13[23]),  23,30},
  {&(_ZTV9S20728C13[29]),  29,30},
  {&(_tg__ZTV9S20728C14__9S20728C13[4]),  4,5},
  {&(_tg__ZTV8S20728C59S20728C14__9S20728C13[4]),  4,5},
  {&(_tg__ZTV8S20728C4__9S20728C13[4]),  4,6},
  {&(_tg__ZTV8S20728C58S20728C4__A1__9S20728C13[4]),  4,5},
  {&(_tg__ZTV8S20728C8__9S20728C13[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S20728C13[];
extern  VTBL_ENTRY _ZTV9S20728C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20728C13[];
Class_Descriptor cd_S20728C13 = {  "S20728C13", // class name
  bases_S20728C13, 14,
  &(vtc_S20728C13[0]), // expected_vtbl_contents
  &(vtt_S20728C13[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI9S20728C13),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S20728C13),30, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20728C13),10, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20728C12  : S20728C13 , virtual S2121C24 , S20728C5 , S2121C28 , S20728C8 {
  virtual  ~S20728C12(); // _ZN9S20728C12D2Ev
  S20728C12(); // tgen
};
//SIG(-1 S20728C12) C1{ BC2{ VBC3{ m} VBC4{ BC5{ VBC3 BC6{ v1} VBC7{ m}} BC6} VBC8{ BC3 BC5 v2} VBC9{ BC6 BC7 VBC3} BC6} VBC10{ m} BC5 BC7 BC9 vd}


 S20728C12 ::~S20728C12(){ note_dtor("S20728C12", this);}
S20728C12 ::S20728C12(){ note_ctor("S20728C12", this);} // tgen

static void Test_S20728C12()
{
  extern Class_Descriptor cd_S20728C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S20728C12, buf);
    S20728C12 *dp, &lv = *(dp=new (buf) S20728C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S20728C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20728C12)");
    /*is_ambiguous_... S20728C13::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20728C13*), 0, "S20728C12");
    check_base_class_offset(lv, (S2121C38*)(S20728C5*)(S20728C14*), 0, "S20728C12");
    check_base_class_offset(lv, (S2121C38*)(S20728C5*)(S20728C4*), 0, "S20728C12");
    /*is_ambiguous_... S20728C12::S20728C8 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20728C8*), 0, "S20728C12");
    /*is_ambiguous_... S20728C12::S20728C5 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20728C5*), 0, "S20728C12");
    /*is_ambiguous_... S20728C12::S20728C8 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20728C8*), 0, "S20728C12");
    check_base_class_offset(lv, (S20728C6*)(S20728C5*)(S20728C14*), ABISELECT(24,12), "S20728C12");
    check_base_class_offset(lv, (S2121C28*)(S20728C5*)(S20728C14*), ABISELECT(40,20), "S20728C12");
    check_base_class_offset(lv, (S2121C28*)(S20728C5*)(S20728C4*), ABISELECT(40,20), "S20728C12");
    /*is_ambiguous_... S20728C12::S20728C5 */ AMB_check_base_class_offset(lv, (S2121C28*)(S20728C5*), ABISELECT(40,20), "S20728C12");
    check_base_class_offset(lv, (S20728C5*)(S20728C14*), ABISELECT(24,12), "S20728C12");
    /*is_ambiguous_... S20728C14::S20728C6 */ AMB_check_base_class_offset(lv, (S20728C6*)(S20728C14*), ABISELECT(32,16), "S20728C12");
    check_base_class_offset(lv, (S20728C14*)(S20728C13*), ABISELECT(24,12), "S20728C12");
    /*is_ambiguous_... S20728C4::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20728C4*), ABISELECT(40,20), "S20728C12");
    check_base_class_offset(lv, (S20728C6*)(S20728C5*)(S20728C4*), ABISELECT(40,20), "S20728C12");
    check_base_class_offset(lv, (S20728C5*)(S20728C4*), ABISELECT(40,20), "S20728C12");
    check_base_class_offset(lv, (S20728C4*)(S20728C13*), ABISELECT(40,20), "S20728C12");
    /*is_ambiguous_... S20728C12::S20728C8 */ AMB_check_base_class_offset(lv, (S20728C6*)(S20728C8*), ABISELECT(48,24), "S20728C12");
    /*is_ambiguous_... S20728C12::S20728C8 */ AMB_check_base_class_offset(lv, (S2121C28*)(S20728C8*), ABISELECT(48,24), "S20728C12");
    check_base_class_offset(lv, (S20728C8*)(S20728C13*), ABISELECT(48,24), "S20728C12");
    /*is_ambiguous_... S20728C13::S20728C6 */ AMB_check_base_class_offset(lv, (S20728C6*)(S20728C13*), 0, "S20728C12");
    check_base_class_offset(lv, (S20728C13*), 0, "S20728C12");
    check_base_class_offset(lv, (S2121C24*), 0, "S20728C12");
    /*is_ambiguous_... S20728C12::S20728C5 */ AMB_check_base_class_offset(lv, (S20728C6*)(S20728C5*), ABISELECT(8,4), "S20728C12");
    /*is_ambiguous_... S20728C12::S20728C5 */ AMB_check_base_class_offset(lv, (S20728C5*), ABISELECT(8,4), "S20728C12");
    /*is_ambiguous_... S20728C12::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*), 0, "S20728C12");
    /*is_ambiguous_... S20728C12::S20728C8 */ AMB_check_base_class_offset(lv, (S20728C6*)(S20728C8*), ABISELECT(16,8), "S20728C12");
    /*is_ambiguous_... S20728C12::S20728C8 */ AMB_check_base_class_offset(lv, (S2121C28*)(S20728C8*), ABISELECT(16,8), "S20728C12");
    /*is_ambiguous_... S20728C12::S20728C8 */ AMB_check_base_class_offset(lv, (S20728C8*), ABISELECT(16,8), "S20728C12");
    test_class_info(&lv, &cd_S20728C12);
    dp->~S20728C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20728C12(Test_S20728C12, "S20728C12", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN9S20728C12C1Ev();
extern void _ZN9S20728C12D2Ev();
Name_Map name_map_S20728C12[] = {
  NSPAIR(_ZN9S20728C12C1Ev),
  NSPAIR(_ZN9S20728C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20728C5;
extern VTBL_ENTRY _ZTI8S20728C5[];
extern  VTBL_ENTRY _ZTV8S20728C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C5[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
extern Class_Descriptor cd_S20728C14;
extern VTBL_ENTRY _ZTI9S20728C14[];
extern  VTBL_ENTRY _ZTV9S20728C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20728C14[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
extern Class_Descriptor cd_S20728C5;
extern VTBL_ENTRY _ZTI8S20728C5[];
extern  VTBL_ENTRY _ZTV8S20728C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C5[];
extern Class_Descriptor cd_S20728C4;
extern VTBL_ENTRY _ZTI8S20728C4[];
extern  VTBL_ENTRY _ZTV8S20728C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C4[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20728C8;
extern VTBL_ENTRY _ZTI8S20728C8[];
extern  VTBL_ENTRY _ZTV8S20728C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C8[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
extern Class_Descriptor cd_S20728C13;
extern VTBL_ENTRY _ZTI9S20728C13[];
extern  VTBL_ENTRY _ZTV9S20728C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20728C13[];
extern Class_Descriptor cd_S2121C24;
extern VTBL_ENTRY _ZTI8S2121C24[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
extern Class_Descriptor cd_S20728C5;
extern VTBL_ENTRY _ZTI8S20728C5[];
extern  VTBL_ENTRY _ZTV8S20728C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C5[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20728C8;
extern VTBL_ENTRY _ZTI8S20728C8[];
extern  VTBL_ENTRY _ZTV8S20728C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C8[];
static Base_Class bases_S20728C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20728C6,    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
    3, //immediately_derived
  0, 0},
  {&cd_S2121C28,    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
    3, //immediately_derived
  0, 1},
  {&cd_S20728C5,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20728C6,    ABISELECT(32,16), //bcp->offset
    26, //bcp->virtual_function_table_offset
    2, //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
    5, //immediately_derived
  0, 0},
  {&cd_S20728C14,    ABISELECT(24,12), //bcp->offset
    20, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S2121C38,    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
    9, //immediately_derived
  0, 0},
  {&cd_S20728C6,    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
    8, //immediately_derived
  0, 0},
  {&cd_S20728C5,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20728C4,    ABISELECT(40,20), //bcp->offset
    29, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20728C6,    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
    8, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2121C28,    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
    12, //immediately_derived
  0, 0},
  {&cd_S20728C8,    ABISELECT(48,24), //bcp->offset
    37, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20728C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20728C13,    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
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20728C6,    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
    12, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20728C5,    ABISELECT(8,4), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S20728C6,    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
    14, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S2121C28,    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
    21, //immediately_derived
  0, 0},
  {&cd_S20728C8,    ABISELECT(16,8), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20728C12[];
extern void _ZN8S20728C62v1Ev();
extern void _ZN9S20728C12D1Ev();
extern void _ZN9S20728C12D0Ev();
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C42v2Ev();
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY vtc_S20728C12[] = {
  0,
  ABISELECT(48,24),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(24,12),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20728C12[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  (VTBL_ENTRY)&_ZN9S20728C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20728C12D0Ev,
  ABISELECT(32,16),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20728C12[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20728C12[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  0,
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S20728C12[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S20728C12[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  0,
  0,
  0,
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S20728C12[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20728C42v2Ev,
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S20728C12[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern VTBL_ENTRY _ZTV9S20728C12[];
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV9S20728C13__9S20728C12[] = {
  ABISELECT(48,24),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(24,12),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20728C13[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV9S20728C14__9S20728C13__9S20728C12[] = {
  0,
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S20728C13[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C69S20728C14__A1__9S20728C13__9S20728C12[] = {
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S20728C13[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C4__9S20728C13__9S20728C12[] = {
  0,
  0,
  0,
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S20728C13[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20728C42v2Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C8__9S20728C13__9S20728C12[] = {
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S20728C13[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C5__A2__9S20728C12[] = {
  ABISELECT(32,16),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C5[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C8__A__9S20728C12[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C8[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV9S20728C14__9S20728C12[] = {
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI9S20728C14[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C59S20728C14__9S20728C12[] = {
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C5[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C4__9S20728C12[] = {
  0,
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C4[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20728C42v2Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C58S20728C4__A1__9S20728C12[] = {
  0,
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C5[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C8__9S20728C12[] = {
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C8[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
static  VTT_ENTRY vtt_S20728C12[] = {
  {&(_ZTV9S20728C12[8]),  8,42},
  {&(_tg__ZTV9S20728C13__9S20728C12[7]),  7,8},
  {&(_tg__ZTV9S20728C14__9S20728C13__9S20728C12[5]),  5,6},
  {&(_tg__ZTV8S20728C69S20728C14__A1__9S20728C13__9S20728C12[2]),  2,3},
  {&(_tg__ZTV8S20728C4__9S20728C13__9S20728C12[6]),  6,8},
  {&(_tg__ZTV8S20728C8__9S20728C13__9S20728C12[4]),  4,5},
  {&(_tg__ZTV8S20728C5__A2__9S20728C12[4]),  4,5},
  {&(_tg__ZTV8S20728C8__A__9S20728C12[3]),  3,4},
  {&(_ZTV9S20728C12[25]),  25,42},
  {&(_ZTV9S20728C12[28]),  28,42},
  {&(_ZTV9S20728C12[35]),  35,42},
  {&(_ZTV9S20728C12[41]),  41,42},
  {&(_ZTV9S20728C12[15]),  15,42},
  {&(_ZTV9S20728C12[19]),  19,42},
  {&(_tg__ZTV9S20728C14__9S20728C12[4]),  4,5},
  {&(_tg__ZTV8S20728C59S20728C14__9S20728C12[4]),  4,5},
  {&(_tg__ZTV8S20728C4__9S20728C12[4]),  4,6},
  {&(_tg__ZTV8S20728C58S20728C4__A1__9S20728C12[4]),  4,5},
  {&(_tg__ZTV8S20728C8__9S20728C12[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S20728C12[];
extern  VTBL_ENTRY _ZTV9S20728C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20728C12[];
Class_Descriptor cd_S20728C12 = {  "S20728C12", // class name
  bases_S20728C12, 22,
  &(vtc_S20728C12[0]), // expected_vtbl_contents
  &(vtt_S20728C12[0]), // expected_vtt_contents
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI9S20728C12),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S20728C12),42, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20728C12),19, //virtual table table var
  15, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20728C10  : S20728C11 , S20728C12 {
  int s20728c10f0;
  virtual  ~S20728C10(); // _ZN9S20728C10D2Ev
  S20728C10(); // tgen
};
//SIG(-1 S20728C10) C1{ BC2{ VBC3{ BC4{ m} BC5{ VBC4 BC6{ v1} VBC7{ m}} v2} Fi} BC8{ BC9{ VBC4 VBC10{ BC5 BC6} VBC3 VBC11{ BC6 BC7 VBC4} BC6} VBC12{ m} BC5 BC7 BC11 vd} vd Fi}


 S20728C10 ::~S20728C10(){ note_dtor("S20728C10", this);}
S20728C10 ::S20728C10(){ note_ctor("S20728C10", this);} // tgen

static void Test_S20728C10()
{
  extern Class_Descriptor cd_S20728C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S20728C10, buf);
    S20728C10 *dp, &lv = *(dp=new (buf) S20728C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S20728C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20728C10)");
    /*is_ambiguous_... S20728C4::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20728C4*), 0, "S20728C10");
    check_base_class_offset(lv, (S2121C38*)(S20728C5*)(S20728C4*), ABISELECT(44,24), "S20728C10");
    /*is_ambiguous_... S20728C13::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20728C13*)(S20728C12*), ABISELECT(44,24), "S20728C10");
    check_base_class_offset(lv, (S2121C38*)(S20728C5*)(S20728C14*), ABISELECT(44,24), "S20728C10");
    /*is_ambiguous_... S20728C10::S20728C8 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20728C8*), ABISELECT(44,24), "S20728C10");
    /*is_ambiguous_... S20728C12::S20728C5 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20728C5*)(S20728C12*), ABISELECT(44,24), "S20728C10");
    /*is_ambiguous_... S20728C12::S20728C8 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20728C8*)(S20728C12*), ABISELECT(44,24), "S20728C10");
    check_base_class_offset(lv, (S20728C6*)(S20728C5*)(S20728C4*), 0, "S20728C10");
    check_base_class_offset(lv, (S2121C28*)(S20728C5*)(S20728C4*), 0, "S20728C10");
    check_base_class_offset(lv, (S2121C28*)(S20728C5*)(S20728C14*), 0, "S20728C10");
    /*is_ambiguous_... S20728C12::S20728C5 */ AMB_check_base_class_offset(lv, (S2121C28*)(S20728C5*)(S20728C12*), 0, "S20728C10");
    check_base_class_offset(lv, (S20728C5*)(S20728C4*), 0, "S20728C10");
    check_base_class_offset(lv, (S20728C4*)(S20728C11*), 0, "S20728C10");
    check_base_class_offset(lv, (S20728C4*)(S20728C13*)(S20728C12*), 0, "S20728C10");
    check_base_class_offset(lv, (S20728C11*), 0, "S20728C10");
    check_base_class_offset(lv, (S20728C6*)(S20728C5*)(S20728C14*), ABISELECT(48,24), "S20728C10");
    check_base_class_offset(lv, (S20728C5*)(S20728C14*), ABISELECT(48,24), "S20728C10");
    /*is_ambiguous_... S20728C14::S20728C6 */ AMB_check_base_class_offset(lv, (S20728C6*)(S20728C14*), ABISELECT(56,28), "S20728C10");
    check_base_class_offset(lv, (S20728C14*)(S20728C13*)(S20728C12*), ABISELECT(48,24), "S20728C10");
    /*is_ambiguous_... S20728C10::S20728C8 */ AMB_check_base_class_offset(lv, (S20728C6*)(S20728C8*), ABISELECT(64,32), "S20728C10");
    /*is_ambiguous_... S20728C10::S20728C8 */ AMB_check_base_class_offset(lv, (S2121C28*)(S20728C8*), ABISELECT(64,32), "S20728C10");
    check_base_class_offset(lv, (S20728C8*)(S20728C13*)(S20728C12*), ABISELECT(64,32), "S20728C10");
    /*is_ambiguous_... S20728C13::S20728C6 */ AMB_check_base_class_offset(lv, (S20728C6*)(S20728C13*)(S20728C12*), ABISELECT(16,8), "S20728C10");
    check_base_class_offset(lv, (S20728C13*)(S20728C12*), ABISELECT(16,8), "S20728C10");
    check_base_class_offset(lv, (S2121C24*)(S20728C12*), 0, "S20728C10");
    /*is_ambiguous_... S20728C12::S20728C5 */ AMB_check_base_class_offset(lv, (S20728C6*)(S20728C5*)(S20728C12*), ABISELECT(24,12), "S20728C10");
    /*is_ambiguous_... S20728C12::S20728C5 */ AMB_check_base_class_offset(lv, (S20728C5*)(S20728C12*), ABISELECT(24,12), "S20728C10");
    /*is_ambiguous_... S20728C12::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*)(S20728C12*), ABISELECT(16,8), "S20728C10");
    /*is_ambiguous_... S20728C12::S20728C8 */ AMB_check_base_class_offset(lv, (S20728C6*)(S20728C8*)(S20728C12*), ABISELECT(32,16), "S20728C10");
    /*is_ambiguous_... S20728C12::S20728C8 */ AMB_check_base_class_offset(lv, (S2121C28*)(S20728C8*)(S20728C12*), ABISELECT(32,16), "S20728C10");
    /*is_ambiguous_... S20728C12::S20728C8 */ AMB_check_base_class_offset(lv, (S20728C8*)(S20728C12*), ABISELECT(32,16), "S20728C10");
    check_base_class_offset(lv, (S20728C12*), ABISELECT(16,8), "S20728C10");
    check_field_offset(lv, s20728c10f0, ABISELECT(40,20), "S20728C10.s20728c10f0");
    test_class_info(&lv, &cd_S20728C10);
    dp->~S20728C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20728C10(Test_S20728C10, "S20728C10", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN9S20728C10C1Ev();
extern void _ZN9S20728C10D2Ev();
Name_Map name_map_S20728C10[] = {
  NSPAIR(_ZN9S20728C10C1Ev),
  NSPAIR(_ZN9S20728C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20728C5;
extern VTBL_ENTRY _ZTI8S20728C5[];
extern  VTBL_ENTRY _ZTV8S20728C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C5[];
extern Class_Descriptor cd_S20728C4;
extern VTBL_ENTRY _ZTI8S20728C4[];
extern  VTBL_ENTRY _ZTV8S20728C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C4[];
extern Class_Descriptor cd_S20728C11;
extern VTBL_ENTRY _ZTI9S20728C11[];
extern  VTBL_ENTRY _ZTV9S20728C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20728C11[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
extern Class_Descriptor cd_S20728C5;
extern VTBL_ENTRY _ZTI8S20728C5[];
extern  VTBL_ENTRY _ZTV8S20728C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C5[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
extern Class_Descriptor cd_S20728C14;
extern VTBL_ENTRY _ZTI9S20728C14[];
extern  VTBL_ENTRY _ZTV9S20728C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20728C14[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20728C8;
extern VTBL_ENTRY _ZTI8S20728C8[];
extern  VTBL_ENTRY _ZTV8S20728C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C8[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
extern Class_Descriptor cd_S20728C13;
extern VTBL_ENTRY _ZTI9S20728C13[];
extern  VTBL_ENTRY _ZTV9S20728C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20728C13[];
extern Class_Descriptor cd_S2121C24;
extern VTBL_ENTRY _ZTI8S2121C24[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
extern Class_Descriptor cd_S20728C5;
extern VTBL_ENTRY _ZTI8S20728C5[];
extern  VTBL_ENTRY _ZTV8S20728C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C5[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20728C8;
extern VTBL_ENTRY _ZTI8S20728C8[];
extern  VTBL_ENTRY _ZTV8S20728C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C8[];
extern Class_Descriptor cd_S20728C12;
extern VTBL_ENTRY _ZTI9S20728C12[];
extern  VTBL_ENTRY _ZTV9S20728C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20728C12[];
static Base_Class bases_S20728C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2121C38,    ABISELECT(44,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, 1},
  {&cd_S20728C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20728C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20728C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20728C11,    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
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20728C6,    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
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20728C5,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20728C6,    ABISELECT(56,28), //bcp->offset
    40, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20728C14,    ABISELECT(48,24), //bcp->offset
    34, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S20728C6,    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
    8, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S2121C28,    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
    13, //immediately_derived
  0, 0},
  {&cd_S20728C8,    ABISELECT(64,32), //bcp->offset
    43, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S20728C6,    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
    11, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S20728C13,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S2121C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S20728C6,    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
    13, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S20728C5,    ABISELECT(24,12), //bcp->offset
    25, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S2121C28,    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
    23, //immediately_derived
  0, 0},
  {&cd_S20728C6,    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
    15, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S2121C28,    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
    22, //immediately_derived
  0, 0},
  {&cd_S20728C8,    ABISELECT(32,16), //bcp->offset
    30, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20728C12,    ABISELECT(16,8), //bcp->offset
    14, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20728C10[];
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C42v2Ev();
extern void _ZN9S20728C10D1Ev();
extern void _ZN9S20728C10D0Ev();
extern void _ZN8S20728C62v1Ev();
extern void ABISELECT(_ZThn16_N9S20728C10D1Ev,_ZThn8_N9S20728C10D1Ev)();
extern void ABISELECT(_ZThn16_N9S20728C10D0Ev,_ZThn8_N9S20728C10D0Ev)();
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY vtc_S20728C10[] = {
  0,
  ABISELECT(64,32),
  ABISELECT(48,24),
  0,
  0,
  0,
  0,
  ABISELECT(44,24),
  0,
  (VTBL_ENTRY)&(_ZTI9S20728C10[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20728C42v2Ev,
  (VTBL_ENTRY)&_ZN9S20728C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20728C10D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(28,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20728C10[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S20728C10D1Ev,_ZThn8_N9S20728C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S20728C10D0Ev,_ZThn8_N9S20728C10D0Ev),
  ABISELECT(-24,-12),
  ABISELECT(20,12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S20728C10[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  ABISELECT(12,8),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S20728C10[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  0,
  ABISELECT(-48,-24),
  ABISELECT(-4,0),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S20728C10[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI9S20728C10[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  0,
  ABISELECT(-20,-8),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI9S20728C10[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern VTBL_ENTRY _ZTV9S20728C10[];
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C42v2Ev();
static  VTBL_ENTRY _tg__ZTV9S20728C11__9S20728C10[] = {
  0,
  0,
  0,
  0,
  ABISELECT(44,24),
  0,
  (VTBL_ENTRY)&(_ZTI9S20728C11[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20728C42v2Ev,
};
extern void _ZN8S20728C62v1Ev();
extern void _ZN9S20728C12D1Ev();
extern void _ZN9S20728C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20728C12__9S20728C10[] = {
  ABISELECT(-16,-8),
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(28,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S20728C12[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  (VTBL_ENTRY)&_ZN9S20728C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20728C12D0Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV9S20728C139S20728C12__9S20728C10[] = {
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(28,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S20728C13[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV9S20728C14__9S20728C139S20728C12__9S20728C10[] = {
  0,
  ABISELECT(-48,-24),
  ABISELECT(-4,0),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S20728C13[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C69S20728C14__A1__9S20728C139S20728C12__9S20728C10[] = {
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S20728C13[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C4__9S20728C139S20728C12__9S20728C10[] = {
  0,
  0,
  0,
  ABISELECT(44,24),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S20728C13[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20728C42v2Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C8__9S20728C139S20728C12__9S20728C10[] = {
  0,
  ABISELECT(-20,-8),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S20728C13[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C59S20728C12__A2__9S20728C10[] = {
  ABISELECT(-24,-12),
  ABISELECT(20,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C5[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C89S20728C12__A1__9S20728C10[] = {
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C8[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV9S20728C14__9S20728C12__9S20728C10[] = {
  0,
  ABISELECT(-48,-24),
  ABISELECT(-4,0),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S20728C12[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C69S20728C14__A1__9S20728C12__9S20728C10[] = {
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S20728C12[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C4__9S20728C12__9S20728C10[] = {
  0,
  0,
  0,
  ABISELECT(44,24),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S20728C12[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20728C42v2Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C8__9S20728C12__9S20728C10[] = {
  0,
  ABISELECT(-20,-8),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S20728C12[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C5__A2__9S20728C12__9S20728C10[] = {
  ABISELECT(-24,-12),
  ABISELECT(20,12),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20728C12[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C8__A__9S20728C12__9S20728C10[] = {
  ABISELECT(12,8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20728C12[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C4__9S20728C10[] = {
  0,
  ABISELECT(44,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C4[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20728C42v2Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C58S20728C4__9S20728C10[] = {
  0,
  ABISELECT(44,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C5[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV9S20728C14__9S20728C10[] = {
  ABISELECT(-48,-24),
  ABISELECT(-4,0),
  0,
  (VTBL_ENTRY)&(_ZTI9S20728C14[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C59S20728C14__A1__9S20728C10[] = {
  ABISELECT(-48,-24),
  ABISELECT(-4,0),
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C5[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C8__9S20728C10[] = {
  ABISELECT(-20,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C8[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
static  VTT_ENTRY vtt_S20728C10[] = {
  {&(_ZTV9S20728C10[10]),  10,48},
  {&(_tg__ZTV9S20728C11__9S20728C10[7]),  7,9},
  {&(_tg__ZTV9S20728C11__9S20728C10[7]),  7,9},
  {&(_tg__ZTV9S20728C12__9S20728C10[8]),  8,11},
  {&(_tg__ZTV9S20728C139S20728C12__9S20728C10[7]),  7,8},
  {&(_tg__ZTV9S20728C14__9S20728C139S20728C12__9S20728C10[5]),  5,6},
  {&(_tg__ZTV8S20728C69S20728C14__A1__9S20728C139S20728C12__9S20728C10[2]),  2,3},
  {&(_tg__ZTV8S20728C4__9S20728C139S20728C12__9S20728C10[6]),  6,8},
  {&(_tg__ZTV8S20728C8__9S20728C139S20728C12__9S20728C10[4]),  4,5},
  {&(_tg__ZTV8S20728C59S20728C12__A2__9S20728C10[4]),  4,5},
  {&(_tg__ZTV8S20728C89S20728C12__A1__9S20728C10[3]),  3,4},
  {&(_tg__ZTV9S20728C14__9S20728C12__9S20728C10[5]),  5,6},
  {&(_tg__ZTV8S20728C69S20728C14__A1__9S20728C12__9S20728C10[2]),  2,3},
  {&(_tg__ZTV8S20728C4__9S20728C12__9S20728C10[6]),  6,8},
  {&(_tg__ZTV8S20728C8__9S20728C12__9S20728C10[4]),  4,5},
  {&(_tg__ZTV8S20728C5__A2__9S20728C12__9S20728C10[4]),  4,5},
  {&(_tg__ZTV8S20728C8__A__9S20728C12__9S20728C10[3]),  3,4},
  {&(_ZTV9S20728C10[10]),  10,48},
  {&(_ZTV9S20728C10[22]),  22,48},
  {&(_ZTV9S20728C10[39]),  39,48},
  {&(_ZTV9S20728C10[42]),  42,48},
  {&(_ZTV9S20728C10[47]),  47,48},
  {&(_ZTV9S20728C10[29]),  29,48},
  {&(_ZTV9S20728C10[33]),  33,48},
  {&(_tg__ZTV8S20728C4__9S20728C10[4]),  4,6},
  {&(_tg__ZTV8S20728C58S20728C4__9S20728C10[4]),  4,5},
  {&(_tg__ZTV9S20728C14__9S20728C10[4]),  4,5},
  {&(_tg__ZTV8S20728C59S20728C14__A1__9S20728C10[4]),  4,5},
  {&(_tg__ZTV8S20728C8__9S20728C10[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S20728C10[];
extern  VTBL_ENTRY _ZTV9S20728C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20728C10[];
Class_Descriptor cd_S20728C10 = {  "S20728C10", // class name
  bases_S20728C10, 24,
  &(vtc_S20728C10[0]), // expected_vtbl_contents
  &(vtt_S20728C10[0]), // expected_vtt_contents
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI9S20728C10),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20728C10),48, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20728C10),29, //virtual table table var
  17, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20728C1  : virtual S20728C2 , virtual S20728C8 , S20728C4 , S20728C9 , S20728C10 {
  virtual  ~S20728C1(); // _ZN8S20728C1D2Ev
  S20728C1(); // tgen
};
//SIG(1 S20728C1) C1{ VBC2{ VBC3{ m} VBC4{ BC3 BC5{ VBC3 BC6{ v1} VBC7{ m}} v2} BC6 Fi Fp} VBC8{ BC6 BC7 VBC3} BC4 BC9{ VBC3} BC10{ BC11{ VBC4 Fi} BC12{ BC13{ VBC3 VBC14{ BC5 BC6} VBC4 VBC8 BC6} VBC15{ m} BC5 BC7 BC8 vd} vd Fi} vd}


 S20728C1 ::~S20728C1(){ note_dtor("S20728C1", this);}
S20728C1 ::S20728C1(){ note_ctor("S20728C1", this);} // tgen

static void Test_S20728C1()
{
  extern Class_Descriptor cd_S20728C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[15];
    init_test(&cd_S20728C1, buf);
    S20728C1 *dp, &lv = *(dp=new (buf) S20728C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,56), "sizeof(S20728C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20728C1)");
    /*is_ambiguous_... S20728C2::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20728C2*), ABISELECT(88,44), "S20728C1");
    /*is_ambiguous_... S20728C1::S20728C4 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20728C5*)(S20728C4*), ABISELECT(88,44), "S20728C1");
    /*is_ambiguous_... S20728C1::S20728C8 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20728C8*), ABISELECT(88,44), "S20728C1");
    /*is_ambiguous_... S20728C1::S20728C4 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20728C5*)(S20728C4*), ABISELECT(88,44), "S20728C1");
    check_base_class_offset(lv, (S2121C38*)(S20728C9*), ABISELECT(88,44), "S20728C1");
    /*is_ambiguous_... S20728C13::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20728C13*)(S20728C12*)(S20728C10*), ABISELECT(88,44), "S20728C1");
    check_base_class_offset(lv, (S2121C38*)(S20728C5*)(S20728C14*), ABISELECT(88,44), "S20728C1");
    /*is_ambiguous_... S20728C12::S20728C5 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20728C5*)(S20728C12*)(S20728C10*), ABISELECT(88,44), "S20728C1");
    /*is_ambiguous_... S20728C12::S20728C8 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20728C8*)(S20728C12*)(S20728C10*), ABISELECT(88,44), "S20728C1");
    /*is_ambiguous_... S20728C1::S20728C4 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20728C4*), ABISELECT(16,8), "S20728C1");
    /*is_ambiguous_... S20728C1::S20728C4 */ AMB_check_base_class_offset(lv, (S20728C6*)(S20728C5*)(S20728C4*), ABISELECT(16,8), "S20728C1");
    /*is_ambiguous_... S20728C1::S20728C4 */ AMB_check_base_class_offset(lv, (S2121C28*)(S20728C5*)(S20728C4*), 0, "S20728C1");
    /*is_ambiguous_... S20728C1::S20728C4 */ AMB_check_base_class_offset(lv, (S2121C28*)(S20728C5*)(S20728C4*), 0, "S20728C1");
    check_base_class_offset(lv, (S2121C28*)(S20728C5*)(S20728C14*), 0, "S20728C1");
    /*is_ambiguous_... S20728C12::S20728C5 */ AMB_check_base_class_offset(lv, (S2121C28*)(S20728C5*)(S20728C12*)(S20728C10*), 0, "S20728C1");
    /*is_ambiguous_... S20728C1::S20728C4 */ AMB_check_base_class_offset(lv, (S20728C5*)(S20728C4*), ABISELECT(16,8), "S20728C1");
    check_base_class_offset(lv, (S20728C4*)(S20728C2*), ABISELECT(16,8), "S20728C1");
    check_base_class_offset(lv, (S20728C4*)(S20728C11*)(S20728C10*), ABISELECT(16,8), "S20728C1");
    check_base_class_offset(lv, (S20728C4*)(S20728C13*)(S20728C12*)(S20728C10*), ABISELECT(16,8), "S20728C1");
    /*is_ambiguous_... S20728C2::S20728C6 */ AMB_check_base_class_offset(lv, (S20728C6*)(S20728C2*), ABISELECT(64,32), "S20728C1");
    check_base_class_offset(lv, (S20728C2*), ABISELECT(64,32), "S20728C1");
    /*is_ambiguous_... S20728C1::S20728C8 */ AMB_check_base_class_offset(lv, (S20728C6*)(S20728C8*), ABISELECT(88,44), "S20728C1");
    /*is_ambiguous_... S20728C1::S20728C8 */ AMB_check_base_class_offset(lv, (S2121C28*)(S20728C8*), ABISELECT(88,44), "S20728C1");
    /*is_ambiguous_... S20728C1::S20728C8 */ AMB_check_base_class_offset(lv, (S20728C8*), ABISELECT(88,44), "S20728C1");
    check_base_class_offset(lv, (S20728C8*)(S20728C13*)(S20728C12*)(S20728C10*), ABISELECT(88,44), "S20728C1");
    /*is_ambiguous_... S20728C1::S20728C4 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20728C4*), 0, "S20728C1");
    /*is_ambiguous_... S20728C1::S20728C4 */ AMB_check_base_class_offset(lv, (S20728C6*)(S20728C5*)(S20728C4*), 0, "S20728C1");
    /*is_ambiguous_... S20728C1::S20728C4 */ AMB_check_base_class_offset(lv, (S20728C5*)(S20728C4*), 0, "S20728C1");
    /*is_ambiguous_... S20728C1::S20728C4 */ AMB_check_base_class_offset(lv, (S20728C4*), 0, "S20728C1");
    check_base_class_offset(lv, (S20728C9*), ABISELECT(8,4), "S20728C1");
    check_base_class_offset(lv, (S20728C11*)(S20728C10*), ABISELECT(16,8), "S20728C1");
    check_base_class_offset(lv, (S20728C6*)(S20728C5*)(S20728C14*), ABISELECT(96,48), "S20728C1");
    check_base_class_offset(lv, (S20728C5*)(S20728C14*), ABISELECT(96,48), "S20728C1");
    /*is_ambiguous_... S20728C14::S20728C6 */ AMB_check_base_class_offset(lv, (S20728C6*)(S20728C14*), ABISELECT(104,52), "S20728C1");
    check_base_class_offset(lv, (S20728C14*)(S20728C13*)(S20728C12*)(S20728C10*), ABISELECT(96,48), "S20728C1");
    /*is_ambiguous_... S20728C13::S20728C6 */ AMB_check_base_class_offset(lv, (S20728C6*)(S20728C13*)(S20728C12*)(S20728C10*), ABISELECT(32,16), "S20728C1");
    check_base_class_offset(lv, (S20728C13*)(S20728C12*)(S20728C10*), ABISELECT(32,16), "S20728C1");
    check_base_class_offset(lv, (S2121C24*)(S20728C12*)(S20728C10*), 0, "S20728C1");
    /*is_ambiguous_... S20728C12::S20728C5 */ AMB_check_base_class_offset(lv, (S20728C6*)(S20728C5*)(S20728C12*)(S20728C10*), ABISELECT(40,20), "S20728C1");
    /*is_ambiguous_... S20728C12::S20728C5 */ AMB_check_base_class_offset(lv, (S20728C5*)(S20728C12*)(S20728C10*), ABISELECT(40,20), "S20728C1");
    /*is_ambiguous_... S20728C12::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*)(S20728C12*)(S20728C10*), ABISELECT(32,16), "S20728C1");
    /*is_ambiguous_... S20728C12::S20728C8 */ AMB_check_base_class_offset(lv, (S20728C6*)(S20728C8*)(S20728C12*)(S20728C10*), ABISELECT(48,24), "S20728C1");
    /*is_ambiguous_... S20728C12::S20728C8 */ AMB_check_base_class_offset(lv, (S2121C28*)(S20728C8*)(S20728C12*)(S20728C10*), ABISELECT(48,24), "S20728C1");
    /*is_ambiguous_... S20728C12::S20728C8 */ AMB_check_base_class_offset(lv, (S20728C8*)(S20728C12*)(S20728C10*), ABISELECT(48,24), "S20728C1");
    check_base_class_offset(lv, (S20728C12*)(S20728C10*), ABISELECT(32,16), "S20728C1");
    check_base_class_offset(lv, (S20728C10*), ABISELECT(16,8), "S20728C1");
    test_class_info(&lv, &cd_S20728C1);
    dp->~S20728C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20728C1(Test_S20728C1, "S20728C1", ABISELECT(112,56));

#else // __cplusplus

extern void _ZN8S20728C1C1Ev();
extern void _ZN8S20728C1D2Ev();
Name_Map name_map_S20728C1[] = {
  NSPAIR(_ZN8S20728C1C1Ev),
  NSPAIR(_ZN8S20728C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20728C5;
extern VTBL_ENTRY _ZTI8S20728C5[];
extern  VTBL_ENTRY _ZTV8S20728C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C5[];
extern Class_Descriptor cd_S20728C4;
extern VTBL_ENTRY _ZTI8S20728C4[];
extern  VTBL_ENTRY _ZTV8S20728C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C4[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
extern Class_Descriptor cd_S20728C2;
extern VTBL_ENTRY _ZTI8S20728C2[];
extern  VTBL_ENTRY _ZTV8S20728C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C2[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20728C8;
extern VTBL_ENTRY _ZTI8S20728C8[];
extern  VTBL_ENTRY _ZTV8S20728C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C8[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
extern Class_Descriptor cd_S20728C5;
extern VTBL_ENTRY _ZTI8S20728C5[];
extern  VTBL_ENTRY _ZTV8S20728C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C5[];
extern Class_Descriptor cd_S20728C4;
extern VTBL_ENTRY _ZTI8S20728C4[];
extern  VTBL_ENTRY _ZTV8S20728C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C4[];
extern Class_Descriptor cd_S20728C9;
extern VTBL_ENTRY _ZTI8S20728C9[];
extern  VTBL_ENTRY _ZTV8S20728C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C9[];
extern Class_Descriptor cd_S20728C11;
extern VTBL_ENTRY _ZTI9S20728C11[];
extern  VTBL_ENTRY _ZTV9S20728C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20728C11[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
extern Class_Descriptor cd_S20728C5;
extern VTBL_ENTRY _ZTI8S20728C5[];
extern  VTBL_ENTRY _ZTV8S20728C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C5[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
extern Class_Descriptor cd_S20728C14;
extern VTBL_ENTRY _ZTI9S20728C14[];
extern  VTBL_ENTRY _ZTV9S20728C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20728C14[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
extern Class_Descriptor cd_S20728C13;
extern VTBL_ENTRY _ZTI9S20728C13[];
extern  VTBL_ENTRY _ZTV9S20728C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20728C13[];
extern Class_Descriptor cd_S2121C24;
extern VTBL_ENTRY _ZTI8S2121C24[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
extern Class_Descriptor cd_S20728C5;
extern VTBL_ENTRY _ZTI8S20728C5[];
extern  VTBL_ENTRY _ZTV8S20728C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C5[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20728C8;
extern VTBL_ENTRY _ZTI8S20728C8[];
extern  VTBL_ENTRY _ZTV8S20728C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C8[];
extern Class_Descriptor cd_S20728C12;
extern VTBL_ENTRY _ZTI9S20728C12[];
extern  VTBL_ENTRY _ZTV9S20728C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20728C12[];
extern Class_Descriptor cd_S20728C10;
extern VTBL_ENTRY _ZTI9S20728C10[];
extern  VTBL_ENTRY _ZTV9S20728C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20728C10[];
static Base_Class bases_S20728C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    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, 1},
  {&cd_S2121C38,    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
    5, //immediately_derived
  0, 0},
  {&cd_S20728C6,    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_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20728C5,    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
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20728C4,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20728C6,    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
    4, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20728C2,    ABISELECT(64,32), //bcp->offset
    50, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20728C6,    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
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S2121C28,    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
    10, //immediately_derived
  0, 0},
  {&cd_S20728C8,    ABISELECT(88,44), //bcp->offset
    57, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20728C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20728C5,    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
    13, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20728C4,    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
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20728C9,    ABISELECT(8,4), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20728C11,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S20728C6,    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
    8, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S20728C5,    ABISELECT(96,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S20728C6,    ABISELECT(104,52), //bcp->offset
    68, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S20728C14,    ABISELECT(96,48), //bcp->offset
    62, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S20728C6,    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
    17, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S20728C13,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S2121C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S20728C6,    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
    19, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S20728C5,    ABISELECT(40,20), //bcp->offset
    41, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S2121C28,    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
    30, //immediately_derived
  0, 0},
  {&cd_S20728C6,    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
    21, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S2121C28,    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
    29, //immediately_derived
  0, 0},
  {&cd_S20728C8,    ABISELECT(48,24), //bcp->offset
    46, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    38, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S20728C12,    ABISELECT(32,16), //bcp->offset
    30, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S20728C10,    ABISELECT(16,8), //bcp->offset
    16, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20728C1[];
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C42v2Ev();
extern void _ZN8S20728C1D1Ev();
extern void _ZN8S20728C1D0Ev();
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C42v2Ev();
extern void ABISELECT(_ZThn16_N8S20728C1D1Ev,_ZThn8_N8S20728C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S20728C1D0Ev,_ZThn8_N8S20728C1D0Ev)();
extern void _ZN8S20728C62v1Ev();
extern void ABISELECT(_ZThn32_N8S20728C1D1Ev,_ZThn16_N8S20728C1D1Ev)();
extern void ABISELECT(_ZThn32_N8S20728C1D0Ev,_ZThn16_N8S20728C1D0Ev)();
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY vtc_S20728C1[] = {
  0,
  ABISELECT(96,48),
  ABISELECT(88,44),
  ABISELECT(16,8),
  ABISELECT(64,32),
  0,
  ABISELECT(88,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C1[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20728C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20728C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20728C1D0Ev,
  ABISELECT(80,40),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20728C1[0]),
  ABISELECT(-16,-8),
  ABISELECT(72,36),
  ABISELECT(80,40),
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(72,36),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20728C1[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20728C42v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20728C1D1Ev,_ZThn8_N8S20728C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20728C1D0Ev,_ZThn8_N8S20728C1D0Ev),
  ABISELECT(-32,-16),
  ABISELECT(56,28),
  ABISELECT(-16,-8),
  ABISELECT(-32,-16),
  ABISELECT(64,32),
  ABISELECT(56,28),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20728C1[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S20728C1D1Ev,_ZThn16_N8S20728C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S20728C1D0Ev,_ZThn16_N8S20728C1D0Ev),
  ABISELECT(-40,-20),
  ABISELECT(48,24),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20728C1[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  ABISELECT(40,20),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S20728C1[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  0,
  ABISELECT(-64,-32),
  ABISELECT(-48,-24),
  ABISELECT(24,12),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S20728C1[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  0,
  0,
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI8S20728C1[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  0,
  ABISELECT(-96,-48),
  ABISELECT(-8,-4),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI8S20728C1[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI8S20728C1[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern VTBL_ENTRY _ZTV8S20728C1[];
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C4__A__8S20728C1[] = {
  0,
  ABISELECT(88,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C4[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20728C42v2Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C58S20728C4__A1__8S20728C1[] = {
  0,
  ABISELECT(88,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C5[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20728C9__8S20728C1[] = {
  ABISELECT(80,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C9[0]),
};
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C42v2Ev();
extern void _ZN9S20728C10D1Ev();
extern void _ZN9S20728C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20728C10__8S20728C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(72,36),
  ABISELECT(80,40),
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(72,36),
  0,
  (VTBL_ENTRY)&(_ZTI9S20728C10[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20728C42v2Ev,
  (VTBL_ENTRY)&_ZN9S20728C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20728C10D0Ev,
};
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C42v2Ev();
static  VTBL_ENTRY _tg__ZTV9S20728C119S20728C10__8S20728C1[] = {
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(72,36),
  0,
  (VTBL_ENTRY)&(_ZTI9S20728C11[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20728C42v2Ev,
};
extern void _ZN8S20728C62v1Ev();
extern void _ZN9S20728C12D1Ev();
extern void _ZN9S20728C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20728C129S20728C10__8S20728C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(56,28),
  ABISELECT(-16,-8),
  ABISELECT(-32,-16),
  ABISELECT(64,32),
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI9S20728C12[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  (VTBL_ENTRY)&_ZN9S20728C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20728C12D0Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV9S20728C139S20728C129S20728C10__8S20728C1[] = {
  ABISELECT(56,28),
  ABISELECT(-16,-8),
  ABISELECT(-32,-16),
  ABISELECT(64,32),
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI9S20728C13[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV9S20728C14__9S20728C139S20728C129S20728C10__8S20728C1[] = {
  0,
  ABISELECT(-96,-48),
  ABISELECT(-8,-4),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI9S20728C13[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C69S20728C14__A1__9S20728C139S20728C129S20728C10__8S20728C1[] = {
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI9S20728C13[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C4__9S20728C139S20728C129S20728C10__8S20728C1[] = {
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(72,36),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S20728C13[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20728C42v2Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C8__9S20728C139S20728C129S20728C10__8S20728C1[] = {
  0,
  0,
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI9S20728C13[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C59S20728C129S20728C10__A3__8S20728C1[] = {
  ABISELECT(-40,-20),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C5[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C89S20728C129S20728C10__A1__8S20728C1[] = {
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C8[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV9S20728C14__9S20728C129S20728C10__8S20728C1[] = {
  0,
  ABISELECT(-96,-48),
  ABISELECT(-8,-4),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI9S20728C12[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C69S20728C14__A1__9S20728C129S20728C10__8S20728C1[] = {
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI9S20728C12[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C4__9S20728C129S20728C10__8S20728C1[] = {
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(72,36),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S20728C12[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20728C42v2Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C8__9S20728C129S20728C10__8S20728C1[] = {
  0,
  0,
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI9S20728C12[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C5__A2__9S20728C129S20728C10__8S20728C1[] = {
  ABISELECT(-40,-20),
  ABISELECT(48,24),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20728C12[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C8__A__9S20728C129S20728C10__8S20728C1[] = {
  ABISELECT(40,20),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20728C12[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
extern void ABISELECT(_ZThn16_N9S20728C10D1Ev,_ZThn8_N9S20728C10D1Ev)();
extern void ABISELECT(_ZThn16_N9S20728C10D0Ev,_ZThn8_N9S20728C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20728C12__9S20728C10__8S20728C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(56,28),
  ABISELECT(-16,-8),
  ABISELECT(-32,-16),
  ABISELECT(64,32),
  ABISELECT(56,28),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20728C10[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S20728C10D1Ev,_ZThn8_N9S20728C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S20728C10D0Ev,_ZThn8_N9S20728C10D0Ev),
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV9S20728C14__9S20728C10__8S20728C1[] = {
  0,
  ABISELECT(-96,-48),
  ABISELECT(-8,-4),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI9S20728C10[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C69S20728C14__A2__9S20728C10__8S20728C1[] = {
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI9S20728C10[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C8__9S20728C10__8S20728C1[] = {
  0,
  0,
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI9S20728C10[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C59S20728C12__A2__9S20728C10__8S20728C1[] = {
  ABISELECT(-40,-20),
  ABISELECT(48,24),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S20728C10[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C89S20728C12__A1__9S20728C10__8S20728C1[] = {
  ABISELECT(40,20),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S20728C10[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C2__8S20728C1[] = {
  ABISELECT(-64,-32),
  ABISELECT(-48,-24),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C2[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C4__8S20728C2__8S20728C1[] = {
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(72,36),
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI8S20728C2[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20728C42v2Ev,
};
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C4__8S20728C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(72,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C4[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20728C42v2Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C58S20728C4__8S20728C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(72,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C5[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C8__8S20728C1[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C8[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV9S20728C14__8S20728C1[] = {
  ABISELECT(-96,-48),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20728C14[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C59S20728C14__A2__8S20728C1[] = {
  ABISELECT(-96,-48),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C5[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
static  VTT_ENTRY vtt_S20728C1[] = {
  {&(_ZTV8S20728C1[9]),  9,71},
  {&(_tg__ZTV8S20728C4__A__8S20728C1[4]),  4,6},
  {&(_tg__ZTV8S20728C58S20728C4__A1__8S20728C1[4]),  4,5},
  {&(_tg__ZTV8S20728C9__8S20728C1[3]),  3,3},
  {&(_tg__ZTV9S20728C10__8S20728C1[10]),  10,14},
  {&(_tg__ZTV9S20728C119S20728C10__8S20728C1[7]),  7,9},
  {&(_tg__ZTV9S20728C119S20728C10__8S20728C1[7]),  7,9},
  {&(_tg__ZTV9S20728C129S20728C10__8S20728C1[8]),  8,11},
  {&(_tg__ZTV9S20728C139S20728C129S20728C10__8S20728C1[7]),  7,8},
  {&(_tg__ZTV9S20728C14__9S20728C139S20728C129S20728C10__8S20728C1[5]),  5,6},
  {&(_tg__ZTV8S20728C69S20728C14__A1__9S20728C139S20728C129S20728C10__8S20728C1[2]),  2,3},
  {&(_tg__ZTV8S20728C4__9S20728C139S20728C129S20728C10__8S20728C1[6]),  6,8},
  {&(_tg__ZTV8S20728C8__9S20728C139S20728C129S20728C10__8S20728C1[4]),  4,5},
  {&(_tg__ZTV8S20728C59S20728C129S20728C10__A3__8S20728C1[4]),  4,5},
  {&(_tg__ZTV8S20728C89S20728C129S20728C10__A1__8S20728C1[3]),  3,4},
  {&(_tg__ZTV9S20728C14__9S20728C129S20728C10__8S20728C1[5]),  5,6},
  {&(_tg__ZTV8S20728C69S20728C14__A1__9S20728C129S20728C10__8S20728C1[2]),  2,3},
  {&(_tg__ZTV8S20728C4__9S20728C129S20728C10__8S20728C1[6]),  6,8},
  {&(_tg__ZTV8S20728C8__9S20728C129S20728C10__8S20728C1[4]),  4,5},
  {&(_tg__ZTV8S20728C5__A2__9S20728C129S20728C10__8S20728C1[4]),  4,5},
  {&(_tg__ZTV8S20728C8__A__9S20728C129S20728C10__8S20728C1[3]),  3,4},
  {&(_tg__ZTV9S20728C10__8S20728C1[10]),  10,14},
  {&(_tg__ZTV9S20728C12__9S20728C10__8S20728C1[8]),  8,11},
  {&(_tg__ZTV9S20728C14__9S20728C10__8S20728C1[5]),  5,6},
  {&(_tg__ZTV8S20728C69S20728C14__A2__9S20728C10__8S20728C1[2]),  2,3},
  {&(_tg__ZTV8S20728C8__9S20728C10__8S20728C1[4]),  4,5},
  {&(_tg__ZTV8S20728C59S20728C12__A2__9S20728C10__8S20728C1[4]),  4,5},
  {&(_tg__ZTV8S20728C89S20728C12__A1__9S20728C10__8S20728C1[3]),  3,4},
  {&(_ZTV8S20728C1[56]),  56,71},
  {&(_ZTV8S20728C1[26]),  26,71},
  {&(_ZTV8S20728C1[61]),  61,71},
  {&(_ZTV8S20728C1[16]),  16,71},
  {&(_ZTV8S20728C1[26]),  26,71},
  {&(_ZTV8S20728C1[38]),  38,71},
  {&(_ZTV8S20728C1[67]),  67,71},
  {&(_ZTV8S20728C1[70]),  70,71},
  {&(_ZTV8S20728C1[45]),  45,71},
  {&(_ZTV8S20728C1[49]),  49,71},
  {&(_tg__ZTV8S20728C2__8S20728C1[5]),  5,6},
  {&(_tg__ZTV8S20728C4__8S20728C2__8S20728C1[6]),  6,8},
  {&(_tg__ZTV8S20728C4__8S20728C1[4]),  4,6},
  {&(_tg__ZTV8S20728C58S20728C4__8S20728C1[4]),  4,5},
  {&(_tg__ZTV8S20728C8__8S20728C1[3]),  3,4},
  {&(_tg__ZTV9S20728C14__8S20728C1[4]),  4,5},
  {&(_tg__ZTV8S20728C59S20728C14__A2__8S20728C1[4]),  4,5},
};
extern VTBL_ENTRY _ZTI8S20728C1[];
extern  VTBL_ENTRY _ZTV8S20728C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C1[];
Class_Descriptor cd_S20728C1 = {  "S20728C1", // class name
  bases_S20728C1, 32,
  &(vtc_S20728C1[0]), // expected_vtbl_contents
  &(vtt_S20728C1[0]), // expected_vtt_contents
  ABISELECT(112,56), // object size
  NSPAIRA(_ZTI8S20728C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S20728C1),71, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20728C1),45, //virtual table table var
  24, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4846C3  {
  ::S2185C10_nt s4846c3f0;
  int s4846c3f1[2];
  char s4846c3f2;
  virtual  ~S4846C3(); // _ZN7S4846C3D1Ev
  virtual void  v3(); // _ZN7S4846C32v3Ev
  virtual void  v4(); // _ZN7S4846C32v4Ev
  virtual void  v5(); // _ZN7S4846C32v5Ev
  S4846C3(); // tgen
};
//SIG(-1 S4846C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4846C3 ::~S4846C3(){ note_dtor("S4846C3", this);}
void  S4846C3 ::v3(){vfunc_called(this, "_ZN7S4846C32v3Ev");}
void  S4846C3 ::v4(){vfunc_called(this, "_ZN7S4846C32v4Ev");}
void  S4846C3 ::v5(){vfunc_called(this, "_ZN7S4846C32v5Ev");}
S4846C3 ::S4846C3(){ note_ctor("S4846C3", this);} // tgen

static void Test_S4846C3()
{
  extern Class_Descriptor cd_S4846C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4846C3, buf);
    S4846C3 *dp, &lv = *(dp=new (buf) S4846C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4846C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4846C3)");
    check_field_offset(lv, s4846c3f0, ABISELECT(8,4), "S4846C3.s4846c3f0");
    check_field_offset(lv, s4846c3f1, ABISELECT(24,16), "S4846C3.s4846c3f1");
    check_field_offset(lv, s4846c3f2, ABISELECT(32,24), "S4846C3.s4846c3f2");
    test_class_info(&lv, &cd_S4846C3);
    dp->~S4846C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4846C3(Test_S4846C3, "S4846C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4846C3C1Ev();
extern void _ZN7S4846C3D1Ev();
Name_Map name_map_S4846C3[] = {
  NSPAIR(_ZN7S4846C3C1Ev),
  NSPAIR(_ZN7S4846C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4846C3[];
extern void _ZN7S4846C3D1Ev();
extern void _ZN7S4846C3D0Ev();
extern void _ZN7S4846C32v3Ev();
extern void _ZN7S4846C32v4Ev();
extern void _ZN7S4846C32v5Ev();
static  VTBL_ENTRY vtc_S4846C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4846C3[0]),
  (VTBL_ENTRY)&_ZN7S4846C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4846C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4846C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4846C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4846C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4846C3[];
extern  VTBL_ENTRY _ZTV7S4846C3[];
Class_Descriptor cd_S4846C3 = {  "S4846C3", // class name
  0,0,//no base classes
  &(vtc_S4846C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4846C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4846C3),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  S4846C7_nt  {
  char s4846c7f0[20];
};
//SIG(-1 S4846C7_nt) C1{ Fc[20]}



//skip512 S4846C7_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4846C6_nt  {
  ::S4846C7_nt s4846c6f0;
  char s4846c6f1[16];
};
//SIG(-1 S4846C6_nt) C1{ FC2{ Fc[20]} Fc[16]}



//skip512 S4846C6_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4846C2  : S4846C3 {
  void *s4846c2f0[2];
  ::S4846C6_nt s4846c2f1;
  virtual  ~S4846C2(); // _ZN7S4846C2D1Ev
  virtual void  v6(); // _ZN7S4846C22v6Ev
  virtual void  v7(); // _ZN7S4846C22v7Ev
  virtual void  v8(); // _ZN7S4846C22v8Ev
  virtual void  v9(); // _ZN7S4846C22v9Ev
  S4846C2(); // tgen
};
//SIG(-1 S4846C2) C1{ BC2{ vd v5 v6 v7 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 v3 v4 Fp[2] FC5{ FC6{ Fc[20]} Fc[16]}}


 S4846C2 ::~S4846C2(){ note_dtor("S4846C2", this);}
void  S4846C2 ::v6(){vfunc_called(this, "_ZN7S4846C22v6Ev");}
void  S4846C2 ::v7(){vfunc_called(this, "_ZN7S4846C22v7Ev");}
void  S4846C2 ::v8(){vfunc_called(this, "_ZN7S4846C22v8Ev");}
void  S4846C2 ::v9(){vfunc_called(this, "_ZN7S4846C22v9Ev");}
S4846C2 ::S4846C2(){ note_ctor("S4846C2", this);} // tgen

static void Test_S4846C2()
{
  extern Class_Descriptor cd_S4846C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,19)];
    init_test(&cd_S4846C2, buf);
    S4846C2 *dp, &lv = *(dp=new (buf) S4846C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,72), "sizeof(S4846C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4846C2)");
    check_base_class_offset(lv, (S4846C3*), 0, "S4846C2");
    check_field_offset(lv, s4846c2f0, ABISELECT(40,28), "S4846C2.s4846c2f0");
    check_field_offset(lv, s4846c2f1, ABISELECT(56,36), "S4846C2.s4846c2f1");
    test_class_info(&lv, &cd_S4846C2);
    dp->~S4846C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4846C2(Test_S4846C2, "S4846C2", ABISELECT(96,72));

#else // __cplusplus

extern void _ZN7S4846C2C1Ev();
extern void _ZN7S4846C2D1Ev();
Name_Map name_map_S4846C2[] = {
  NSPAIR(_ZN7S4846C2C1Ev),
  NSPAIR(_ZN7S4846C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4846C3;
extern VTBL_ENTRY _ZTI7S4846C3[];
extern  VTBL_ENTRY _ZTV7S4846C3[];
static Base_Class bases_S4846C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4846C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S4846C2[];
extern void _ZN7S4846C2D1Ev();
extern void _ZN7S4846C2D0Ev();
extern void _ZN7S4846C32v3Ev();
extern void _ZN7S4846C32v4Ev();
extern void _ZN7S4846C32v5Ev();
extern void _ZN7S4846C22v6Ev();
extern void _ZN7S4846C22v7Ev();
extern void _ZN7S4846C22v8Ev();
extern void _ZN7S4846C22v9Ev();
static  VTBL_ENTRY vtc_S4846C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4846C2[0]),
  (VTBL_ENTRY)&_ZN7S4846C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4846C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4846C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4846C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4846C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4846C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4846C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4846C22v8Ev,
  (VTBL_ENTRY)&_ZN7S4846C22v9Ev,
};
extern VTBL_ENTRY _ZTI7S4846C2[];
extern  VTBL_ENTRY _ZTV7S4846C2[];
Class_Descriptor cd_S4846C2 = {  "S4846C2", // class name
  bases_S4846C2, 1,
  &(vtc_S4846C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,72), // object size
  NSPAIRA(_ZTI7S4846C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4846C2),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4846C9_nt  {
  char s4846c9f0[12];
};
//SIG(-1 S4846C9_nt) C1{ Fc[12]}



//skip512 S4846C9_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4846C11_nt  {
  int s4846c11f0[2];
  char s4846c11f1[320];
  int s4846c11f2;
};
//SIG(-1 S4846C11_nt) C1{ Fi[2] Fc[320] Fi}



//skip512 S4846C11_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4846C10_nt  {
  int s4846c10f0;
  char s4846c10f1[128];
  ::S4846C11_nt s4846c10f2;
};
//SIG(-1 S4846C10_nt) C1{ Fi Fc[128] FC2{ Fi[2] Fc[320] Fi}}



//skip512 S4846C10_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4846C8  {
  int s4846c8f0;
  ::S4846C9_nt s4846c8f1;
  char s4846c8f2[48];
  ::S4846C9_nt s4846c8f3;
  ::S4846C9_nt s4846c8f4;
  ::S4846C10_nt s4846c8f5;
};
//SIG(-1 S4846C8) C1{ Fi FC2{ Fc[12]} Fc[48] FC2 FC2 FC3{ Fi Fc[128] FC4{ Fi[2] Fc[320] Fi}}}



static void Test_S4846C8()
{
  {
    init_simple_test("S4846C8");
    S4846C8 lv;
    check2(sizeof(lv), 552, "sizeof(S4846C8)");
    check2(__alignof__(lv), 4, "__alignof__(S4846C8)");
    check_field_offset(lv, s4846c8f0, 0, "S4846C8.s4846c8f0");
    check_field_offset(lv, s4846c8f1, 4, "S4846C8.s4846c8f1");
    check_field_offset(lv, s4846c8f2, 16, "S4846C8.s4846c8f2");
    check_field_offset(lv, s4846c8f3, 64, "S4846C8.s4846c8f3");
    check_field_offset(lv, s4846c8f4, 76, "S4846C8.s4846c8f4");
    check_field_offset(lv, s4846c8f5, 88, "S4846C8.s4846c8f5");
  }
}
static Arrange_To_Call_Me vS4846C8(Test_S4846C8, "S4846C8", 552);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4846C1  : S4846C2 {
  int s4846c1f0;
  ::S4846C8 s4846c1f1;
  virtual  ~S4846C1(); // _ZN7S4846C1D1Ev
  virtual void  v1(); // _ZN7S4846C12v1Ev
  virtual void  v2(); // _ZN7S4846C12v2Ev
  S4846C1(); // tgen
};
//SIG(1 S4846C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} vd v6 v7 v8 v9 Fp[2] FC6{ FC7{ Fc[20]} Fc[16]}} vd v1 v2 Fi FC8{ Fi FC9{ Fc[12]} Fc[48] FC9 FC9 FC10{ Fi Fc[128] FC11{ Fi[2] Fc[320] Fi}}}}


 S4846C1 ::~S4846C1(){ note_dtor("S4846C1", this);}
void  S4846C1 ::v1(){vfunc_called(this, "_ZN7S4846C12v1Ev");}
void  S4846C1 ::v2(){vfunc_called(this, "_ZN7S4846C12v2Ev");}
S4846C1 ::S4846C1(){ note_ctor("S4846C1", this);} // tgen

static void Test_S4846C1()
{
  extern Class_Descriptor cd_S4846C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(82,158)];
    init_test(&cd_S4846C1, buf);
    S4846C1 *dp, &lv = *(dp=new (buf) S4846C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(648,628), "sizeof(S4846C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4846C1)");
    check_base_class_offset(lv, (S4846C3*)(S4846C2*), 0, "S4846C1");
    check_base_class_offset(lv, (S4846C2*), 0, "S4846C1");
    check_field_offset(lv, s4846c1f0, ABISELECT(92,72), "S4846C1.s4846c1f0");
    check_field_offset(lv, s4846c1f1, ABISELECT(96,76), "S4846C1.s4846c1f1");
    test_class_info(&lv, &cd_S4846C1);
    dp->~S4846C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4846C1(Test_S4846C1, "S4846C1", ABISELECT(648,628));

#else // __cplusplus

extern void _ZN7S4846C1C1Ev();
extern void _ZN7S4846C1D1Ev();
Name_Map name_map_S4846C1[] = {
  NSPAIR(_ZN7S4846C1C1Ev),
  NSPAIR(_ZN7S4846C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4846C3;
extern VTBL_ENTRY _ZTI7S4846C3[];
extern  VTBL_ENTRY _ZTV7S4846C3[];
extern Class_Descriptor cd_S4846C2;
extern VTBL_ENTRY _ZTI7S4846C2[];
extern  VTBL_ENTRY _ZTV7S4846C2[];
static Base_Class bases_S4846C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4846C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4846C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4846C1[];
extern void _ZN7S4846C1D1Ev();
extern void _ZN7S4846C1D0Ev();
extern void _ZN7S4846C32v3Ev();
extern void _ZN7S4846C32v4Ev();
extern void _ZN7S4846C32v5Ev();
extern void _ZN7S4846C22v6Ev();
extern void _ZN7S4846C22v7Ev();
extern void _ZN7S4846C22v8Ev();
extern void _ZN7S4846C22v9Ev();
extern void _ZN7S4846C12v1Ev();
extern void _ZN7S4846C12v2Ev();
static  VTBL_ENTRY vtc_S4846C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4846C1[0]),
  (VTBL_ENTRY)&_ZN7S4846C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4846C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4846C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4846C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4846C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4846C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4846C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4846C22v8Ev,
  (VTBL_ENTRY)&_ZN7S4846C22v9Ev,
  (VTBL_ENTRY)&_ZN7S4846C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4846C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4846C1[];
extern  VTBL_ENTRY _ZTV7S4846C1[];
Class_Descriptor cd_S4846C1 = {  "S4846C1", // class name
  bases_S4846C1, 2,
  &(vtc_S4846C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(648,628), // object size
  NSPAIRA(_ZTI7S4846C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4846C1),13, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2970C2_nt  : S2121C38 {
};
//SIG(-1 S2970C2_nt) C1{ BC2{ m}}



//skip512 S2970C2_nt

#else // __cplusplus

extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
static Base_Class bases_S2970C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI10S2970C2_nt[];
VTBL_ENTRY *P__ZTI10S2970C2_nt = _ZTI10S2970C2_nt; 
Class_Descriptor cd_S2970C2_nt = {  "S2970C2_nt", // class name
  bases_S2970C2_nt, 1,
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI10S2970C2_nt),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  S2970C9  {
  virtual void  v1(); // _ZN7S2970C92v1Ev
  ~S2970C9(); // tgen
  S2970C9(); // tgen
};
//SIG(-1 S2970C9) C1{ v1}


void  S2970C9 ::v1(){vfunc_called(this, "_ZN7S2970C92v1Ev");}
S2970C9 ::~S2970C9(){ note_dtor("S2970C9", this);} // tgen
S2970C9 ::S2970C9(){ note_ctor("S2970C9", this);} // tgen

static void Test_S2970C9()
{
  extern Class_Descriptor cd_S2970C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S2970C9, buf);
    S2970C9 *dp, &lv = *(dp=new (buf) S2970C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S2970C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2970C9)");
    test_class_info(&lv, &cd_S2970C9);
    dp->~S2970C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2970C9(Test_S2970C9, "S2970C9", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S2970C9C1Ev();
extern void _ZN7S2970C9D1Ev();
Name_Map name_map_S2970C9[] = {
  NSPAIR(_ZN7S2970C9C1Ev),
  NSPAIR(_ZN7S2970C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2970C9[];
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY vtc_S2970C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2970C9[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
Class_Descriptor cd_S2970C9 = {  "S2970C9", // class name
  0,0,//no base classes
  &(vtc_S2970C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2970C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2970C9),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  S2970C8  : virtual S2121C28 , S2970C9 , virtual S2121C38 {
  ~S2970C8(); // tgen
  S2970C8(); // tgen
};
//SIG(-1 S2970C8) C1{ VBC2{ m} BC3{ v1} VBC4{ m}}


S2970C8 ::~S2970C8(){ note_dtor("S2970C8", this);} // tgen
S2970C8 ::S2970C8(){ note_ctor("S2970C8", this);} // tgen

static void Test_S2970C8()
{
  extern Class_Descriptor cd_S2970C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S2970C8, buf);
    S2970C8 *dp, &lv = *(dp=new (buf) S2970C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S2970C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2970C8)");
    check_base_class_offset(lv, (S2121C28*), 0, "S2970C8");
    check_base_class_offset(lv, (S2970C9*), 0, "S2970C8");
    check_base_class_offset(lv, (S2121C38*), 0, "S2970C8");
    test_class_info(&lv, &cd_S2970C8);
    dp->~S2970C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2970C8(Test_S2970C8, "S2970C8", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S2970C8C1Ev();
extern void _ZN7S2970C8D1Ev();
Name_Map name_map_S2970C8[] = {
  NSPAIR(_ZN7S2970C8C1Ev),
  NSPAIR(_ZN7S2970C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
static Base_Class bases_S2970C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2970C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S2970C8[];
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY vtc_S2970C8[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S2970C8[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern VTBL_ENTRY _ZTV7S2970C8[];
static  VTT_ENTRY vtt_S2970C8[] = {
  {&(_ZTV7S2970C8[4]),  4,5},
};
extern VTBL_ENTRY _ZTI7S2970C8[];
extern  VTBL_ENTRY _ZTV7S2970C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2970C8[];
Class_Descriptor cd_S2970C8 = {  "S2970C8", // class name
  bases_S2970C8, 3,
  &(vtc_S2970C8[0]), // expected_vtbl_contents
  &(vtt_S2970C8[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2970C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S2970C8),5, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2970C8),1, //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  S2970C6  : S2121C28 , S2970C8 {
  virtual void  v2(); // _ZN7S2970C62v2Ev
  ~S2970C6(); // tgen
  S2970C6(); // tgen
};
//SIG(-1 S2970C6) C1{ BC2{ m} BC3{ VBC2 BC4{ v2} VBC5{ m}} v1}


void  S2970C6 ::v2(){vfunc_called(this, "_ZN7S2970C62v2Ev");}
S2970C6 ::~S2970C6(){ note_dtor("S2970C6", this);} // tgen
S2970C6 ::S2970C6(){ note_ctor("S2970C6", this);} // tgen

static void Test_S2970C6()
{
  extern Class_Descriptor cd_S2970C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S2970C6, buf);
    S2970C6 *dp, &lv = *(dp=new (buf) S2970C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S2970C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2970C6)");
    /*is_ambiguous_... S2970C6::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*), 0, "S2970C6");
    check_base_class_offset(lv, (S2121C28*)(S2970C8*), ABISELECT(8,4), "S2970C6");
    check_base_class_offset(lv, (S2970C9*)(S2970C8*), 0, "S2970C6");
    check_base_class_offset(lv, (S2121C38*)(S2970C8*), 0, "S2970C6");
    check_base_class_offset(lv, (S2970C8*), 0, "S2970C6");
    test_class_info(&lv, &cd_S2970C6);
    dp->~S2970C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2970C6(Test_S2970C6, "S2970C6", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S2970C6C1Ev();
extern void _ZN7S2970C6D1Ev();
Name_Map name_map_S2970C6[] = {
  NSPAIR(_ZN7S2970C6C1Ev),
  NSPAIR(_ZN7S2970C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2970C8;
extern VTBL_ENTRY _ZTI7S2970C8[];
extern  VTBL_ENTRY _ZTV7S2970C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2970C8[];
static Base_Class bases_S2970C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2121C28,    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, 1},
  {&cd_S2970C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2970C8,    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 _ZTI7S2970C6[];
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C62v2Ev();
static  VTBL_ENTRY vtc_S2970C6[] = {
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S2970C6[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&_ZN7S2970C62v2Ev,
};
extern VTBL_ENTRY _ZTV7S2970C6[];
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C8__7S2970C6[] = {
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S2970C8[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
static  VTT_ENTRY vtt_S2970C6[] = {
  {&(_ZTV7S2970C6[4]),  4,6},
  {&(_tg__ZTV7S2970C8__7S2970C6[4]),  4,5},
};
extern VTBL_ENTRY _ZTI7S2970C6[];
extern  VTBL_ENTRY _ZTV7S2970C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2970C6[];
Class_Descriptor cd_S2970C6 = {  "S2970C6", // class name
  bases_S2970C6, 5,
  &(vtc_S2970C6[0]), // expected_vtbl_contents
  &(vtt_S2970C6[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S2970C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2970C6),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2970C6),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  S2970C5  : virtual S2970C6 {
  int s2970c5f0;
  ~S2970C5(); // tgen
  S2970C5(); // tgen
};
//SIG(-1 S2970C5) C1{ VBC2{ BC3{ m} BC4{ VBC3 BC5{ v1} VBC6{ m}} v2} Fi}


S2970C5 ::~S2970C5(){ note_dtor("S2970C5", this);} // tgen
S2970C5 ::S2970C5(){ note_ctor("S2970C5", this);} // tgen

static void Test_S2970C5()
{
  extern Class_Descriptor cd_S2970C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S2970C5, buf);
    S2970C5 *dp, &lv = *(dp=new (buf) S2970C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2970C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2970C5)");
    /*is_ambiguous_... S2970C6::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*)(S2970C6*), 0, "S2970C5");
    check_base_class_offset(lv, (S2121C28*)(S2970C8*)(S2970C6*), ABISELECT(12,8), "S2970C5");
    check_base_class_offset(lv, (S2970C9*)(S2970C8*)(S2970C6*), 0, "S2970C5");
    check_base_class_offset(lv, (S2121C38*)(S2970C8*)(S2970C6*), 0, "S2970C5");
    check_base_class_offset(lv, (S2970C8*)(S2970C6*), 0, "S2970C5");
    check_base_class_offset(lv, (S2970C6*), 0, "S2970C5");
    check_field_offset(lv, s2970c5f0, ABISELECT(8,4), "S2970C5.s2970c5f0");
    test_class_info(&lv, &cd_S2970C5);
    dp->~S2970C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2970C5(Test_S2970C5, "S2970C5", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S2970C5C1Ev();
extern void _ZN7S2970C5D1Ev();
Name_Map name_map_S2970C5[] = {
  NSPAIR(_ZN7S2970C5C1Ev),
  NSPAIR(_ZN7S2970C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2970C8;
extern VTBL_ENTRY _ZTI7S2970C8[];
extern  VTBL_ENTRY _ZTV7S2970C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2970C8[];
extern Class_Descriptor cd_S2970C6;
extern VTBL_ENTRY _ZTI7S2970C6[];
extern  VTBL_ENTRY _ZTV7S2970C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2970C6[];
static Base_Class bases_S2970C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2121C28,    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
    4, //immediately_derived
  0, 1},
  {&cd_S2970C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2970C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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
    5, //immediately_derived
  0, 0},
  {&cd_S2970C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //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 _ZTI7S2970C5[];
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C62v2Ev();
static  VTBL_ENTRY vtc_S2970C5[] = {
  0,
  0,
  0,
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S2970C5[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&_ZN7S2970C62v2Ev,
};
extern VTBL_ENTRY _ZTV7S2970C5[];
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C6__7S2970C5[] = {
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S2970C6[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&_ZN7S2970C62v2Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C87S2970C6__7S2970C5[] = {
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S2970C8[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
static  VTT_ENTRY vtt_S2970C5[] = {
  {&(_ZTV7S2970C5[7]),  7,9},
  {&(_ZTV7S2970C5[7]),  7,9},
  {&(_tg__ZTV7S2970C6__7S2970C5[4]),  4,6},
  {&(_tg__ZTV7S2970C87S2970C6__7S2970C5[4]),  4,5},
};
extern VTBL_ENTRY _ZTI7S2970C5[];
extern  VTBL_ENTRY _ZTV7S2970C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2970C5[];
Class_Descriptor cd_S2970C5 = {  "S2970C5", // class name
  bases_S2970C5, 6,
  &(vtc_S2970C5[0]), // expected_vtbl_contents
  &(vtt_S2970C5[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S2970C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S2970C5),9, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2970C5),4, //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  S2970C4  : S2970C5 , virtual S2970C9 {
  __tsu64 s2970c4f0:1;
  ~S2970C4(); // tgen
  S2970C4(); // tgen
};
//SIG(-1 S2970C4) C1{ BC2{ VBC3{ BC4{ m} BC5{ VBC4 BC6{ v1} VBC7{ m}} v2} Fi} VBC6 FL:1}


S2970C4 ::~S2970C4(){ note_dtor("S2970C4", this);} // tgen
S2970C4 ::S2970C4(){ note_ctor("S2970C4", this);} // tgen

static void Test_S2970C4()
{
  extern Class_Descriptor cd_S2970C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S2970C4, buf);
    S2970C4 *dp, &lv = *(dp=new (buf) S2970C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S2970C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2970C4)");
    /*is_ambiguous_... S2970C6::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*)(S2970C6*), 0, "S2970C4");
    check_base_class_offset(lv, (S2121C28*)(S2970C8*)(S2970C6*), ABISELECT(13,9), "S2970C4");
    check_base_class_offset(lv, (S2970C9*)(S2970C8*)(S2970C6*), 0, "S2970C4");
    check_base_class_offset(lv, (S2121C38*)(S2970C8*)(S2970C6*), 0, "S2970C4");
    check_base_class_offset(lv, (S2970C8*)(S2970C6*), 0, "S2970C4");
    check_base_class_offset(lv, (S2970C6*)(S2970C5*), 0, "S2970C4");
    check_base_class_offset(lv, (S2970C5*), 0, "S2970C4");
    /*is_ambiguous_... S2970C4::S2970C9 */ AMB_check_base_class_offset(lv, (S2970C9*), ABISELECT(16,12), "S2970C4");
    set_bf_and_test(lv, s2970c4f0, ABISELECT(12,8), 0, 1, 1, "S2970C4");
    test_class_info(&lv, &cd_S2970C4);
    dp->~S2970C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2970C4(Test_S2970C4, "S2970C4", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S2970C4C1Ev();
extern void _ZN7S2970C4D1Ev();
Name_Map name_map_S2970C4[] = {
  NSPAIR(_ZN7S2970C4C1Ev),
  NSPAIR(_ZN7S2970C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2970C8;
extern VTBL_ENTRY _ZTI7S2970C8[];
extern  VTBL_ENTRY _ZTV7S2970C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2970C8[];
extern Class_Descriptor cd_S2970C6;
extern VTBL_ENTRY _ZTI7S2970C6[];
extern  VTBL_ENTRY _ZTV7S2970C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2970C6[];
extern Class_Descriptor cd_S2970C5;
extern VTBL_ENTRY _ZTI7S2970C5[];
extern  VTBL_ENTRY _ZTV7S2970C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2970C5[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
static Base_Class bases_S2970C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2121C28,    ABISELECT(13,9), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2970C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2970C8,    0, //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
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2970C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S2970C5,    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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2970C9,    ABISELECT(16,12), //bcp->offset
    10, //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
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S2970C4[];
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C62v2Ev();
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY vtc_S2970C4[] = {
  ABISELECT(16,12),
  0,
  0,
  0,
  0,
  ABISELECT(13,9),
  0,
  (VTBL_ENTRY)&(_ZTI7S2970C4[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&_ZN7S2970C62v2Ev,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S2970C4[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern VTBL_ENTRY _ZTV7S2970C4[];
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C5__7S2970C4[] = {
  0,
  0,
  0,
  0,
  ABISELECT(13,9),
  0,
  (VTBL_ENTRY)&(_ZTI7S2970C5[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&_ZN7S2970C62v2Ev,
};
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C6__7S2970C4[] = {
  0,
  ABISELECT(13,9),
  0,
  (VTBL_ENTRY)&(_ZTI7S2970C6[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&_ZN7S2970C62v2Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C87S2970C6__7S2970C4[] = {
  0,
  ABISELECT(13,9),
  0,
  (VTBL_ENTRY)&(_ZTI7S2970C8[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
static  VTT_ENTRY vtt_S2970C4[] = {
  {&(_ZTV7S2970C4[8]),  8,14},
  {&(_tg__ZTV7S2970C5__7S2970C4[7]),  7,9},
  {&(_tg__ZTV7S2970C5__7S2970C4[7]),  7,9},
  {&(_ZTV7S2970C4[8]),  8,14},
  {&(_ZTV7S2970C4[13]),  13,14},
  {&(_tg__ZTV7S2970C6__7S2970C4[4]),  4,6},
  {&(_tg__ZTV7S2970C87S2970C6__7S2970C4[4]),  4,5},
};
extern VTBL_ENTRY _ZTI7S2970C4[];
extern  VTBL_ENTRY _ZTV7S2970C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2970C4[];
Class_Descriptor cd_S2970C4 = {  "S2970C4", // class name
  bases_S2970C4, 8,
  &(vtc_S2970C4[0]), // expected_vtbl_contents
  &(vtt_S2970C4[0]), // expected_vtt_contents
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S2970C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2970C4),14, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2970C4),7, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2970C13  : S2970C8 , S2970C9 {
  ~S2970C13(); // tgen
  S2970C13(); // tgen
};
//SIG(-1 S2970C13) C1{ BC2{ VBC3{ m} BC4{ v1} VBC5{ m}} BC4}


S2970C13 ::~S2970C13(){ note_dtor("S2970C13", this);} // tgen
S2970C13 ::S2970C13(){ note_ctor("S2970C13", this);} // tgen

static void Test_S2970C13()
{
  extern Class_Descriptor cd_S2970C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S2970C13, buf);
    S2970C13 *dp, &lv = *(dp=new (buf) S2970C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S2970C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2970C13)");
    check_base_class_offset(lv, (S2121C28*)(S2970C8*), 0, "S2970C13");
    check_base_class_offset(lv, (S2970C9*)(S2970C8*), 0, "S2970C13");
    check_base_class_offset(lv, (S2121C38*)(S2970C8*), 0, "S2970C13");
    check_base_class_offset(lv, (S2970C8*), 0, "S2970C13");
    /*is_ambiguous_... S2970C13::S2970C9 */ AMB_check_base_class_offset(lv, (S2970C9*), ABISELECT(8,4), "S2970C13");
    test_class_info(&lv, &cd_S2970C13);
    dp->~S2970C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2970C13(Test_S2970C13, "S2970C13", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S2970C13C1Ev();
extern void _ZN8S2970C13D1Ev();
Name_Map name_map_S2970C13[] = {
  NSPAIR(_ZN8S2970C13C1Ev),
  NSPAIR(_ZN8S2970C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2970C8;
extern VTBL_ENTRY _ZTI7S2970C8[];
extern  VTBL_ENTRY _ZTV7S2970C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2970C8[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
static Base_Class bases_S2970C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2970C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2970C8,    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_S2970C9,    ABISELECT(8,4), //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
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S2970C13[];
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY vtc_S2970C13[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S2970C13[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S2970C13[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern VTBL_ENTRY _ZTV8S2970C13[];
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C8__8S2970C13[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S2970C8[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
static  VTT_ENTRY vtt_S2970C13[] = {
  {&(_ZTV8S2970C13[4]),  4,8},
  {&(_tg__ZTV7S2970C8__8S2970C13[4]),  4,5},
};
extern VTBL_ENTRY _ZTI8S2970C13[];
extern  VTBL_ENTRY _ZTV8S2970C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2970C13[];
Class_Descriptor cd_S2970C13 = {  "S2970C13", // class name
  bases_S2970C13, 5,
  &(vtc_S2970C13[0]), // expected_vtbl_contents
  &(vtt_S2970C13[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S2970C13),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S2970C13),8, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2970C13),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  S2970C14  : S2970C9 , S2121C38 , virtual S2121C28 {
  ~S2970C14(); // tgen
  S2970C14(); // tgen
};
//SIG(-1 S2970C14) C1{ BC2{ v1} BC3{ m} VBC4{ m}}


S2970C14 ::~S2970C14(){ note_dtor("S2970C14", this);} // tgen
S2970C14 ::S2970C14(){ note_ctor("S2970C14", this);} // tgen

static void Test_S2970C14()
{
  extern Class_Descriptor cd_S2970C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S2970C14, buf);
    S2970C14 *dp, &lv = *(dp=new (buf) S2970C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S2970C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2970C14)");
    check_base_class_offset(lv, (S2970C9*), 0, "S2970C14");
    check_base_class_offset(lv, (S2121C38*), 0, "S2970C14");
    check_base_class_offset(lv, (S2121C28*), 0, "S2970C14");
    test_class_info(&lv, &cd_S2970C14);
    dp->~S2970C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2970C14(Test_S2970C14, "S2970C14", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S2970C14C1Ev();
extern void _ZN8S2970C14D1Ev();
Name_Map name_map_S2970C14[] = {
  NSPAIR(_ZN8S2970C14C1Ev),
  NSPAIR(_ZN8S2970C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
static Base_Class bases_S2970C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2970C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S2970C14[];
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY vtc_S2970C14[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S2970C14[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern VTBL_ENTRY _ZTV8S2970C14[];
static  VTT_ENTRY vtt_S2970C14[] = {
  {&(_ZTV8S2970C14[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S2970C14[];
extern  VTBL_ENTRY _ZTV8S2970C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2970C14[];
Class_Descriptor cd_S2970C14 = {  "S2970C14", // class name
  bases_S2970C14, 3,
  &(vtc_S2970C14[0]), // expected_vtbl_contents
  &(vtt_S2970C14[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S2970C14),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S2970C14),4, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2970C14),1, //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  S2970C12  : virtual S2121C28 , virtual S2970C13 , virtual S2970C6 , virtual S2970C14 , S2970C9 {
  ~S2970C12(); // tgen
  S2970C12(); // tgen
};
//SIG(-1 S2970C12) C1{ VBC2{ m} VBC3{ BC4{ VBC2 BC5{ v1} VBC6{ m}} BC5} VBC7{ BC2 BC4 v2} VBC8{ BC5 BC6 VBC2} BC5}


S2970C12 ::~S2970C12(){ note_dtor("S2970C12", this);} // tgen
S2970C12 ::S2970C12(){ note_ctor("S2970C12", this);} // tgen

static void Test_S2970C12()
{
  extern Class_Descriptor cd_S2970C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S2970C12, buf);
    S2970C12 *dp, &lv = *(dp=new (buf) S2970C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S2970C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2970C12)");
    /*is_ambiguous_... S2970C12::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*), 0, "S2970C12");
    check_base_class_offset(lv, (S2121C28*)(S2970C8*)(S2970C13*), 0, "S2970C12");
    check_base_class_offset(lv, (S2121C28*)(S2970C8*)(S2970C6*), 0, "S2970C12");
    check_base_class_offset(lv, (S2121C28*)(S2970C14*), 0, "S2970C12");
    check_base_class_offset(lv, (S2970C9*)(S2970C8*)(S2970C13*), ABISELECT(8,4), "S2970C12");
    check_base_class_offset(lv, (S2121C38*)(S2970C8*)(S2970C13*), 0, "S2970C12");
    check_base_class_offset(lv, (S2121C38*)(S2970C8*)(S2970C6*), 0, "S2970C12");
    check_base_class_offset(lv, (S2970C8*)(S2970C13*), ABISELECT(8,4), "S2970C12");
    /*is_ambiguous_... S2970C13::S2970C9 */ AMB_check_base_class_offset(lv, (S2970C9*)(S2970C13*), ABISELECT(16,8), "S2970C12");
    check_base_class_offset(lv, (S2970C13*), ABISELECT(8,4), "S2970C12");
    /*is_ambiguous_... S2970C6::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*)(S2970C6*), ABISELECT(24,12), "S2970C12");
    check_base_class_offset(lv, (S2970C9*)(S2970C8*)(S2970C6*), ABISELECT(24,12), "S2970C12");
    check_base_class_offset(lv, (S2970C8*)(S2970C6*), ABISELECT(24,12), "S2970C12");
    check_base_class_offset(lv, (S2970C6*), ABISELECT(24,12), "S2970C12");
    check_base_class_offset(lv, (S2970C9*)(S2970C14*), ABISELECT(32,16), "S2970C12");
    check_base_class_offset(lv, (S2121C38*)(S2970C14*), ABISELECT(32,16), "S2970C12");
    check_base_class_offset(lv, (S2970C14*), ABISELECT(32,16), "S2970C12");
    /*is_ambiguous_... S2970C12::S2970C9 */ AMB_check_base_class_offset(lv, (S2970C9*), 0, "S2970C12");
    test_class_info(&lv, &cd_S2970C12);
    dp->~S2970C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2970C12(Test_S2970C12, "S2970C12", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S2970C12C1Ev();
extern void _ZN8S2970C12D1Ev();
Name_Map name_map_S2970C12[] = {
  NSPAIR(_ZN8S2970C12C1Ev),
  NSPAIR(_ZN8S2970C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2970C8;
extern VTBL_ENTRY _ZTI7S2970C8[];
extern  VTBL_ENTRY _ZTV7S2970C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2970C8[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
extern Class_Descriptor cd_S2970C13;
extern VTBL_ENTRY _ZTI8S2970C13[];
extern  VTBL_ENTRY _ZTV8S2970C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2970C13[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
extern Class_Descriptor cd_S2970C8;
extern VTBL_ENTRY _ZTI7S2970C8[];
extern  VTBL_ENTRY _ZTV7S2970C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2970C8[];
extern Class_Descriptor cd_S2970C6;
extern VTBL_ENTRY _ZTI7S2970C6[];
extern  VTBL_ENTRY _ZTV7S2970C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2970C6[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2970C14;
extern VTBL_ENTRY _ZTI8S2970C14[];
extern  VTBL_ENTRY _ZTV8S2970C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2970C14[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
static Base_Class bases_S2970C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2970C9,    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
    3, //immediately_derived
  0, 0},
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2970C8,    ABISELECT(8,4), //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
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2970C9,    ABISELECT(16,8), //bcp->offset
    14, //bcp->virtual_function_table_offset
    2, //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
    5, //immediately_derived
  0, 0},
  {&cd_S2970C13,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2121C28,    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
    9, //immediately_derived
  0, 0},
  {&cd_S2970C9,    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
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2970C8,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S2970C6,    ABISELECT(24,12), //bcp->offset
    17, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2970C9,    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
    8, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2121C38,    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
    12, //immediately_derived
  0, 0},
  {&cd_S2970C14,    ABISELECT(32,16), //bcp->offset
    25, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2970C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S2970C12[];
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C62v2Ev();
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY vtc_S2970C12[] = {
  ABISELECT(32,16),
  ABISELECT(24,12),
  0,
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S2970C12[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S2970C12[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S2970C12[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S2970C12[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&_ZN7S2970C62v2Ev,
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S2970C12[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern VTBL_ENTRY _ZTV8S2970C12[];
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S2970C13__8S2970C12[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S2970C13[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C88S2970C13__8S2970C12[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S2970C8[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C6__8S2970C12[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S2970C6[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&_ZN7S2970C62v2Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C87S2970C6__A1__8S2970C12[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S2970C8[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S2970C14__8S2970C12[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S2970C14[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
static  VTT_ENTRY vtt_S2970C12[] = {
  {&(_ZTV8S2970C12[7]),  7,30},
  {&(_ZTV8S2970C12[13]),  13,30},
  {&(_ZTV8S2970C12[16]),  16,30},
  {&(_ZTV8S2970C12[23]),  23,30},
  {&(_ZTV8S2970C12[29]),  29,30},
  {&(_tg__ZTV8S2970C13__8S2970C12[4]),  4,5},
  {&(_tg__ZTV7S2970C88S2970C13__8S2970C12[4]),  4,5},
  {&(_tg__ZTV7S2970C6__8S2970C12[4]),  4,6},
  {&(_tg__ZTV7S2970C87S2970C6__A1__8S2970C12[4]),  4,5},
  {&(_tg__ZTV8S2970C14__8S2970C12[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S2970C12[];
extern  VTBL_ENTRY _ZTV8S2970C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2970C12[];
Class_Descriptor cd_S2970C12 = {  "S2970C12", // class name
  bases_S2970C12, 14,
  &(vtc_S2970C12[0]), // expected_vtbl_contents
  &(vtt_S2970C12[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S2970C12),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S2970C12),30, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2970C12),10, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2970C11  : S2970C12 , virtual S2121C24 , S2970C8 , S2121C38 , S2970C14 {
  virtual  ~S2970C11(); // _ZN8S2970C11D2Ev
  S2970C11(); // tgen
};
//SIG(-1 S2970C11) C1{ BC2{ VBC3{ m} VBC4{ BC5{ VBC3 BC6{ v1} VBC7{ m}} BC6} VBC8{ BC3 BC5 v2} VBC9{ BC6 BC7 VBC3} BC6} VBC10{ m} BC5 BC7 BC9 vd}


 S2970C11 ::~S2970C11(){ note_dtor("S2970C11", this);}
S2970C11 ::S2970C11(){ note_ctor("S2970C11", this);} // tgen

static void Test_S2970C11()
{
  extern Class_Descriptor cd_S2970C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S2970C11, buf);
    S2970C11 *dp, &lv = *(dp=new (buf) S2970C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S2970C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2970C11)");
    /*is_ambiguous_... S2970C12::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*)(S2970C12*), 0, "S2970C11");
    check_base_class_offset(lv, (S2121C28*)(S2970C8*)(S2970C13*), 0, "S2970C11");
    check_base_class_offset(lv, (S2121C28*)(S2970C8*)(S2970C6*), 0, "S2970C11");
    /*is_ambiguous_... S2970C11::S2970C14 */ AMB_check_base_class_offset(lv, (S2121C28*)(S2970C14*), 0, "S2970C11");
    /*is_ambiguous_... S2970C11::S2970C8 */ AMB_check_base_class_offset(lv, (S2121C28*)(S2970C8*), 0, "S2970C11");
    /*is_ambiguous_... S2970C11::S2970C14 */ AMB_check_base_class_offset(lv, (S2121C28*)(S2970C14*), 0, "S2970C11");
    check_base_class_offset(lv, (S2970C9*)(S2970C8*)(S2970C13*), ABISELECT(24,12), "S2970C11");
    check_base_class_offset(lv, (S2121C38*)(S2970C8*)(S2970C13*), ABISELECT(40,20), "S2970C11");
    check_base_class_offset(lv, (S2121C38*)(S2970C8*)(S2970C6*), ABISELECT(40,20), "S2970C11");
    /*is_ambiguous_... S2970C11::S2970C8 */ AMB_check_base_class_offset(lv, (S2121C38*)(S2970C8*), ABISELECT(40,20), "S2970C11");
    check_base_class_offset(lv, (S2970C8*)(S2970C13*), ABISELECT(24,12), "S2970C11");
    /*is_ambiguous_... S2970C13::S2970C9 */ AMB_check_base_class_offset(lv, (S2970C9*)(S2970C13*), ABISELECT(32,16), "S2970C11");
    check_base_class_offset(lv, (S2970C13*)(S2970C12*), ABISELECT(24,12), "S2970C11");
    /*is_ambiguous_... S2970C6::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*)(S2970C6*), ABISELECT(40,20), "S2970C11");
    check_base_class_offset(lv, (S2970C9*)(S2970C8*)(S2970C6*), ABISELECT(40,20), "S2970C11");
    check_base_class_offset(lv, (S2970C8*)(S2970C6*), ABISELECT(40,20), "S2970C11");
    check_base_class_offset(lv, (S2970C6*)(S2970C12*), ABISELECT(40,20), "S2970C11");
    /*is_ambiguous_... S2970C11::S2970C14 */ AMB_check_base_class_offset(lv, (S2970C9*)(S2970C14*), ABISELECT(48,24), "S2970C11");
    /*is_ambiguous_... S2970C11::S2970C14 */ AMB_check_base_class_offset(lv, (S2121C38*)(S2970C14*), ABISELECT(48,24), "S2970C11");
    check_base_class_offset(lv, (S2970C14*)(S2970C12*), ABISELECT(48,24), "S2970C11");
    /*is_ambiguous_... S2970C12::S2970C9 */ AMB_check_base_class_offset(lv, (S2970C9*)(S2970C12*), 0, "S2970C11");
    check_base_class_offset(lv, (S2970C12*), 0, "S2970C11");
    check_base_class_offset(lv, (S2121C24*), 0, "S2970C11");
    /*is_ambiguous_... S2970C11::S2970C8 */ AMB_check_base_class_offset(lv, (S2970C9*)(S2970C8*), ABISELECT(8,4), "S2970C11");
    /*is_ambiguous_... S2970C11::S2970C8 */ AMB_check_base_class_offset(lv, (S2970C8*), ABISELECT(8,4), "S2970C11");
    /*is_ambiguous_... S2970C11::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*), 0, "S2970C11");
    /*is_ambiguous_... S2970C11::S2970C14 */ AMB_check_base_class_offset(lv, (S2970C9*)(S2970C14*), ABISELECT(16,8), "S2970C11");
    /*is_ambiguous_... S2970C11::S2970C14 */ AMB_check_base_class_offset(lv, (S2121C38*)(S2970C14*), ABISELECT(16,8), "S2970C11");
    /*is_ambiguous_... S2970C11::S2970C14 */ AMB_check_base_class_offset(lv, (S2970C14*), ABISELECT(16,8), "S2970C11");
    test_class_info(&lv, &cd_S2970C11);
    dp->~S2970C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2970C11(Test_S2970C11, "S2970C11", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN8S2970C11C1Ev();
extern void _ZN8S2970C11D2Ev();
Name_Map name_map_S2970C11[] = {
  NSPAIR(_ZN8S2970C11C1Ev),
  NSPAIR(_ZN8S2970C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2970C8;
extern VTBL_ENTRY _ZTI7S2970C8[];
extern  VTBL_ENTRY _ZTV7S2970C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2970C8[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
extern Class_Descriptor cd_S2970C13;
extern VTBL_ENTRY _ZTI8S2970C13[];
extern  VTBL_ENTRY _ZTV8S2970C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2970C13[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
extern Class_Descriptor cd_S2970C8;
extern VTBL_ENTRY _ZTI7S2970C8[];
extern  VTBL_ENTRY _ZTV7S2970C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2970C8[];
extern Class_Descriptor cd_S2970C6;
extern VTBL_ENTRY _ZTI7S2970C6[];
extern  VTBL_ENTRY _ZTV7S2970C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2970C6[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2970C14;
extern VTBL_ENTRY _ZTI8S2970C14[];
extern  VTBL_ENTRY _ZTV8S2970C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2970C14[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
extern Class_Descriptor cd_S2970C12;
extern VTBL_ENTRY _ZTI8S2970C12[];
extern  VTBL_ENTRY _ZTV8S2970C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2970C12[];
extern Class_Descriptor cd_S2121C24;
extern VTBL_ENTRY _ZTI8S2121C24[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
extern Class_Descriptor cd_S2970C8;
extern VTBL_ENTRY _ZTI7S2970C8[];
extern  VTBL_ENTRY _ZTV7S2970C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2970C8[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2970C14;
extern VTBL_ENTRY _ZTI8S2970C14[];
extern  VTBL_ENTRY _ZTV8S2970C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2970C14[];
static Base_Class bases_S2970C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2970C9,    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
    3, //immediately_derived
  0, 0},
  {&cd_S2121C38,    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
    3, //immediately_derived
  0, 1},
  {&cd_S2970C8,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2970C9,    ABISELECT(32,16), //bcp->offset
    26, //bcp->virtual_function_table_offset
    2, //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
    5, //immediately_derived
  0, 0},
  {&cd_S2970C13,    ABISELECT(24,12), //bcp->offset
    20, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S2121C28,    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
    9, //immediately_derived
  0, 0},
  {&cd_S2970C9,    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
    8, //immediately_derived
  0, 0},
  {&cd_S2970C8,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S2970C6,    ABISELECT(40,20), //bcp->offset
    29, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S2970C9,    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
    8, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2121C38,    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
    12, //immediately_derived
  0, 0},
  {&cd_S2970C14,    ABISELECT(48,24), //bcp->offset
    37, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S2970C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S2970C12,    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
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2970C9,    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
    12, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S2970C8,    ABISELECT(8,4), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2970C9,    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
    14, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S2121C38,    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
    21, //immediately_derived
  0, 0},
  {&cd_S2970C14,    ABISELECT(16,8), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S2970C11[];
extern void _ZN7S2970C92v1Ev();
extern void _ZN8S2970C11D1Ev();
extern void _ZN8S2970C11D0Ev();
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C62v2Ev();
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY vtc_S2970C11[] = {
  0,
  ABISELECT(48,24),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(24,12),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S2970C11[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&_ZN8S2970C11D1Ev,
  (VTBL_ENTRY)&_ZN8S2970C11D0Ev,
  ABISELECT(32,16),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S2970C11[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S2970C11[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  0,
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S2970C11[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S2970C11[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  0,
  0,
  0,
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S2970C11[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&_ZN7S2970C62v2Ev,
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S2970C11[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern VTBL_ENTRY _ZTV8S2970C11[];
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S2970C12__8S2970C11[] = {
  ABISELECT(48,24),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(24,12),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S2970C12[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S2970C13__8S2970C12__8S2970C11[] = {
  0,
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S2970C12[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C98S2970C13__A1__8S2970C12__8S2970C11[] = {
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S2970C12[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C6__8S2970C12__8S2970C11[] = {
  0,
  0,
  0,
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S2970C12[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&_ZN7S2970C62v2Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S2970C14__8S2970C12__8S2970C11[] = {
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S2970C12[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C8__A2__8S2970C11[] = {
  ABISELECT(32,16),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S2970C8[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S2970C14__A__8S2970C11[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S2970C14[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S2970C13__8S2970C11[] = {
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S2970C13[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C88S2970C13__8S2970C11[] = {
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S2970C8[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C6__8S2970C11[] = {
  0,
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI7S2970C6[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&_ZN7S2970C62v2Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C87S2970C6__A1__8S2970C11[] = {
  0,
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI7S2970C8[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S2970C14__8S2970C11[] = {
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S2970C14[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
static  VTT_ENTRY vtt_S2970C11[] = {
  {&(_ZTV8S2970C11[8]),  8,42},
  {&(_tg__ZTV8S2970C12__8S2970C11[7]),  7,8},
  {&(_tg__ZTV8S2970C13__8S2970C12__8S2970C11[5]),  5,6},
  {&(_tg__ZTV7S2970C98S2970C13__A1__8S2970C12__8S2970C11[2]),  2,3},
  {&(_tg__ZTV7S2970C6__8S2970C12__8S2970C11[6]),  6,8},
  {&(_tg__ZTV8S2970C14__8S2970C12__8S2970C11[4]),  4,5},
  {&(_tg__ZTV7S2970C8__A2__8S2970C11[4]),  4,5},
  {&(_tg__ZTV8S2970C14__A__8S2970C11[3]),  3,4},
  {&(_ZTV8S2970C11[25]),  25,42},
  {&(_ZTV8S2970C11[28]),  28,42},
  {&(_ZTV8S2970C11[35]),  35,42},
  {&(_ZTV8S2970C11[41]),  41,42},
  {&(_ZTV8S2970C11[15]),  15,42},
  {&(_ZTV8S2970C11[19]),  19,42},
  {&(_tg__ZTV8S2970C13__8S2970C11[4]),  4,5},
  {&(_tg__ZTV7S2970C88S2970C13__8S2970C11[4]),  4,5},
  {&(_tg__ZTV7S2970C6__8S2970C11[4]),  4,6},
  {&(_tg__ZTV7S2970C87S2970C6__A1__8S2970C11[4]),  4,5},
  {&(_tg__ZTV8S2970C14__8S2970C11[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S2970C11[];
extern  VTBL_ENTRY _ZTV8S2970C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2970C11[];
Class_Descriptor cd_S2970C11 = {  "S2970C11", // class name
  bases_S2970C11, 22,
  &(vtc_S2970C11[0]), // expected_vtbl_contents
  &(vtt_S2970C11[0]), // expected_vtt_contents
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI8S2970C11),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S2970C11),42, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2970C11),19, //virtual table table var
  15, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2970C10  : S2970C5 , S2970C11 {
  int s2970c10f0;
  virtual  ~S2970C10(); // _ZN8S2970C10D2Ev
  S2970C10(); // tgen
};
//SIG(-1 S2970C10) C1{ BC2{ VBC3{ BC4{ m} BC5{ VBC4 BC6{ v1} VBC7{ m}} v2} Fi} BC8{ BC9{ VBC4 VBC10{ BC5 BC6} VBC3 VBC11{ BC6 BC7 VBC4} BC6} VBC12{ m} BC5 BC7 BC11 vd} vd Fi}


 S2970C10 ::~S2970C10(){ note_dtor("S2970C10", this);}
S2970C10 ::S2970C10(){ note_ctor("S2970C10", this);} // tgen

static void Test_S2970C10()
{
  extern Class_Descriptor cd_S2970C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S2970C10, buf);
    S2970C10 *dp, &lv = *(dp=new (buf) S2970C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S2970C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2970C10)");
    /*is_ambiguous_... S2970C6::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*)(S2970C6*), 0, "S2970C10");
    check_base_class_offset(lv, (S2121C28*)(S2970C8*)(S2970C6*), ABISELECT(44,24), "S2970C10");
    /*is_ambiguous_... S2970C12::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*)(S2970C12*)(S2970C11*), ABISELECT(44,24), "S2970C10");
    check_base_class_offset(lv, (S2121C28*)(S2970C8*)(S2970C13*), ABISELECT(44,24), "S2970C10");
    /*is_ambiguous_... S2970C10::S2970C14 */ AMB_check_base_class_offset(lv, (S2121C28*)(S2970C14*), ABISELECT(44,24), "S2970C10");
    /*is_ambiguous_... S2970C11::S2970C8 */ AMB_check_base_class_offset(lv, (S2121C28*)(S2970C8*)(S2970C11*), ABISELECT(44,24), "S2970C10");
    /*is_ambiguous_... S2970C11::S2970C14 */ AMB_check_base_class_offset(lv, (S2121C28*)(S2970C14*)(S2970C11*), ABISELECT(44,24), "S2970C10");
    check_base_class_offset(lv, (S2970C9*)(S2970C8*)(S2970C6*), 0, "S2970C10");
    check_base_class_offset(lv, (S2121C38*)(S2970C8*)(S2970C6*), 0, "S2970C10");
    check_base_class_offset(lv, (S2121C38*)(S2970C8*)(S2970C13*), 0, "S2970C10");
    /*is_ambiguous_... S2970C11::S2970C8 */ AMB_check_base_class_offset(lv, (S2121C38*)(S2970C8*)(S2970C11*), 0, "S2970C10");
    check_base_class_offset(lv, (S2970C8*)(S2970C6*), 0, "S2970C10");
    check_base_class_offset(lv, (S2970C6*)(S2970C5*), 0, "S2970C10");
    check_base_class_offset(lv, (S2970C6*)(S2970C12*)(S2970C11*), 0, "S2970C10");
    check_base_class_offset(lv, (S2970C5*), 0, "S2970C10");
    check_base_class_offset(lv, (S2970C9*)(S2970C8*)(S2970C13*), ABISELECT(48,24), "S2970C10");
    check_base_class_offset(lv, (S2970C8*)(S2970C13*), ABISELECT(48,24), "S2970C10");
    /*is_ambiguous_... S2970C13::S2970C9 */ AMB_check_base_class_offset(lv, (S2970C9*)(S2970C13*), ABISELECT(56,28), "S2970C10");
    check_base_class_offset(lv, (S2970C13*)(S2970C12*)(S2970C11*), ABISELECT(48,24), "S2970C10");
    /*is_ambiguous_... S2970C10::S2970C14 */ AMB_check_base_class_offset(lv, (S2970C9*)(S2970C14*), ABISELECT(64,32), "S2970C10");
    /*is_ambiguous_... S2970C10::S2970C14 */ AMB_check_base_class_offset(lv, (S2121C38*)(S2970C14*), ABISELECT(64,32), "S2970C10");
    check_base_class_offset(lv, (S2970C14*)(S2970C12*)(S2970C11*), ABISELECT(64,32), "S2970C10");
    /*is_ambiguous_... S2970C12::S2970C9 */ AMB_check_base_class_offset(lv, (S2970C9*)(S2970C12*)(S2970C11*), ABISELECT(16,8), "S2970C10");
    check_base_class_offset(lv, (S2970C12*)(S2970C11*), ABISELECT(16,8), "S2970C10");
    check_base_class_offset(lv, (S2121C24*)(S2970C11*), 0, "S2970C10");
    /*is_ambiguous_... S2970C11::S2970C8 */ AMB_check_base_class_offset(lv, (S2970C9*)(S2970C8*)(S2970C11*), ABISELECT(24,12), "S2970C10");
    /*is_ambiguous_... S2970C11::S2970C8 */ AMB_check_base_class_offset(lv, (S2970C8*)(S2970C11*), ABISELECT(24,12), "S2970C10");
    /*is_ambiguous_... S2970C11::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S2970C11*), ABISELECT(16,8), "S2970C10");
    /*is_ambiguous_... S2970C11::S2970C14 */ AMB_check_base_class_offset(lv, (S2970C9*)(S2970C14*)(S2970C11*), ABISELECT(32,16), "S2970C10");
    /*is_ambiguous_... S2970C11::S2970C14 */ AMB_check_base_class_offset(lv, (S2121C38*)(S2970C14*)(S2970C11*), ABISELECT(32,16), "S2970C10");
    /*is_ambiguous_... S2970C11::S2970C14 */ AMB_check_base_class_offset(lv, (S2970C14*)(S2970C11*), ABISELECT(32,16), "S2970C10");
    check_base_class_offset(lv, (S2970C11*), ABISELECT(16,8), "S2970C10");
    check_field_offset(lv, s2970c10f0, ABISELECT(40,20), "S2970C10.s2970c10f0");
    test_class_info(&lv, &cd_S2970C10);
    dp->~S2970C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2970C10(Test_S2970C10, "S2970C10", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN8S2970C10C1Ev();
extern void _ZN8S2970C10D2Ev();
Name_Map name_map_S2970C10[] = {
  NSPAIR(_ZN8S2970C10C1Ev),
  NSPAIR(_ZN8S2970C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2970C8;
extern VTBL_ENTRY _ZTI7S2970C8[];
extern  VTBL_ENTRY _ZTV7S2970C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2970C8[];
extern Class_Descriptor cd_S2970C6;
extern VTBL_ENTRY _ZTI7S2970C6[];
extern  VTBL_ENTRY _ZTV7S2970C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2970C6[];
extern Class_Descriptor cd_S2970C5;
extern VTBL_ENTRY _ZTI7S2970C5[];
extern  VTBL_ENTRY _ZTV7S2970C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2970C5[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
extern Class_Descriptor cd_S2970C8;
extern VTBL_ENTRY _ZTI7S2970C8[];
extern  VTBL_ENTRY _ZTV7S2970C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2970C8[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
extern Class_Descriptor cd_S2970C13;
extern VTBL_ENTRY _ZTI8S2970C13[];
extern  VTBL_ENTRY _ZTV8S2970C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2970C13[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2970C14;
extern VTBL_ENTRY _ZTI8S2970C14[];
extern  VTBL_ENTRY _ZTV8S2970C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2970C14[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
extern Class_Descriptor cd_S2970C12;
extern VTBL_ENTRY _ZTI8S2970C12[];
extern  VTBL_ENTRY _ZTV8S2970C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2970C12[];
extern Class_Descriptor cd_S2121C24;
extern VTBL_ENTRY _ZTI8S2121C24[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
extern Class_Descriptor cd_S2970C8;
extern VTBL_ENTRY _ZTI7S2970C8[];
extern  VTBL_ENTRY _ZTV7S2970C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2970C8[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2970C14;
extern VTBL_ENTRY _ZTI8S2970C14[];
extern  VTBL_ENTRY _ZTV8S2970C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2970C14[];
extern Class_Descriptor cd_S2970C11;
extern VTBL_ENTRY _ZTI8S2970C11[];
extern  VTBL_ENTRY _ZTV8S2970C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2970C11[];
static Base_Class bases_S2970C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2121C28,    ABISELECT(44,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, 1},
  {&cd_S2970C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2970C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2970C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S2970C5,    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
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2970C9,    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
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2970C8,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S2970C9,    ABISELECT(56,28), //bcp->offset
    40, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S2970C13,    ABISELECT(48,24), //bcp->offset
    34, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S2970C9,    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
    8, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S2121C38,    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
    13, //immediately_derived
  0, 0},
  {&cd_S2970C14,    ABISELECT(64,32), //bcp->offset
    43, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S2970C9,    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
    11, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S2970C12,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S2121C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S2970C9,    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
    13, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S2970C8,    ABISELECT(24,12), //bcp->offset
    25, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S2121C38,    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
    23, //immediately_derived
  0, 0},
  {&cd_S2970C9,    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
    15, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S2121C38,    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
    22, //immediately_derived
  0, 0},
  {&cd_S2970C14,    ABISELECT(32,16), //bcp->offset
    30, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S2970C11,    ABISELECT(16,8), //bcp->offset
    14, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S2970C10[];
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C62v2Ev();
extern void _ZN8S2970C10D1Ev();
extern void _ZN8S2970C10D0Ev();
extern void _ZN7S2970C92v1Ev();
extern void ABISELECT(_ZThn16_N8S2970C10D1Ev,_ZThn8_N8S2970C10D1Ev)();
extern void ABISELECT(_ZThn16_N8S2970C10D0Ev,_ZThn8_N8S2970C10D0Ev)();
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY vtc_S2970C10[] = {
  0,
  ABISELECT(64,32),
  ABISELECT(48,24),
  0,
  0,
  0,
  0,
  ABISELECT(44,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S2970C10[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&_ZN7S2970C62v2Ev,
  (VTBL_ENTRY)&_ZN8S2970C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2970C10D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(28,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S2970C10[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S2970C10D1Ev,_ZThn8_N8S2970C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S2970C10D0Ev,_ZThn8_N8S2970C10D0Ev),
  ABISELECT(-24,-12),
  ABISELECT(20,12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S2970C10[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  ABISELECT(12,8),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S2970C10[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  0,
  ABISELECT(-48,-24),
  ABISELECT(-4,0),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S2970C10[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S2970C10[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  0,
  ABISELECT(-20,-8),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S2970C10[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern VTBL_ENTRY _ZTV8S2970C10[];
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C5__8S2970C10[] = {
  0,
  0,
  0,
  0,
  ABISELECT(44,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S2970C5[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&_ZN7S2970C62v2Ev,
};
extern void _ZN7S2970C92v1Ev();
extern void _ZN8S2970C11D1Ev();
extern void _ZN8S2970C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2970C11__8S2970C10[] = {
  ABISELECT(-16,-8),
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(28,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S2970C11[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&_ZN8S2970C11D1Ev,
  (VTBL_ENTRY)&_ZN8S2970C11D0Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S2970C128S2970C11__8S2970C10[] = {
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(28,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S2970C12[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S2970C13__8S2970C128S2970C11__8S2970C10[] = {
  0,
  ABISELECT(-48,-24),
  ABISELECT(-4,0),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S2970C12[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C98S2970C13__A1__8S2970C128S2970C11__8S2970C10[] = {
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S2970C12[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C6__8S2970C128S2970C11__8S2970C10[] = {
  0,
  0,
  0,
  ABISELECT(44,24),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S2970C12[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&_ZN7S2970C62v2Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S2970C14__8S2970C128S2970C11__8S2970C10[] = {
  0,
  ABISELECT(-20,-8),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S2970C12[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C88S2970C11__A2__8S2970C10[] = {
  ABISELECT(-24,-12),
  ABISELECT(20,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S2970C8[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S2970C148S2970C11__A1__8S2970C10[] = {
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S2970C14[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S2970C13__8S2970C11__8S2970C10[] = {
  0,
  ABISELECT(-48,-24),
  ABISELECT(-4,0),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S2970C11[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C98S2970C13__A1__8S2970C11__8S2970C10[] = {
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S2970C11[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C6__8S2970C11__8S2970C10[] = {
  0,
  0,
  0,
  ABISELECT(44,24),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S2970C11[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&_ZN7S2970C62v2Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S2970C14__8S2970C11__8S2970C10[] = {
  0,
  ABISELECT(-20,-8),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S2970C11[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C8__A2__8S2970C11__8S2970C10[] = {
  ABISELECT(-24,-12),
  ABISELECT(20,12),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S2970C11[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S2970C14__A__8S2970C11__8S2970C10[] = {
  ABISELECT(12,8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S2970C11[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C6__8S2970C10[] = {
  0,
  ABISELECT(44,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S2970C6[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&_ZN7S2970C62v2Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C87S2970C6__8S2970C10[] = {
  0,
  ABISELECT(44,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S2970C8[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S2970C13__8S2970C10[] = {
  ABISELECT(-48,-24),
  ABISELECT(-4,0),
  0,
  (VTBL_ENTRY)&(_ZTI8S2970C13[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C88S2970C13__A1__8S2970C10[] = {
  ABISELECT(-48,-24),
  ABISELECT(-4,0),
  0,
  (VTBL_ENTRY)&(_ZTI7S2970C8[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S2970C14__8S2970C10[] = {
  ABISELECT(-20,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S2970C14[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
static  VTT_ENTRY vtt_S2970C10[] = {
  {&(_ZTV8S2970C10[10]),  10,48},
  {&(_tg__ZTV7S2970C5__8S2970C10[7]),  7,9},
  {&(_tg__ZTV7S2970C5__8S2970C10[7]),  7,9},
  {&(_tg__ZTV8S2970C11__8S2970C10[8]),  8,11},
  {&(_tg__ZTV8S2970C128S2970C11__8S2970C10[7]),  7,8},
  {&(_tg__ZTV8S2970C13__8S2970C128S2970C11__8S2970C10[5]),  5,6},
  {&(_tg__ZTV7S2970C98S2970C13__A1__8S2970C128S2970C11__8S2970C10[2]),  2,3},
  {&(_tg__ZTV7S2970C6__8S2970C128S2970C11__8S2970C10[6]),  6,8},
  {&(_tg__ZTV8S2970C14__8S2970C128S2970C11__8S2970C10[4]),  4,5},
  {&(_tg__ZTV7S2970C88S2970C11__A2__8S2970C10[4]),  4,5},
  {&(_tg__ZTV8S2970C148S2970C11__A1__8S2970C10[3]),  3,4},
  {&(_tg__ZTV8S2970C13__8S2970C11__8S2970C10[5]),  5,6},
  {&(_tg__ZTV7S2970C98S2970C13__A1__8S2970C11__8S2970C10[2]),  2,3},
  {&(_tg__ZTV7S2970C6__8S2970C11__8S2970C10[6]),  6,8},
  {&(_tg__ZTV8S2970C14__8S2970C11__8S2970C10[4]),  4,5},
  {&(_tg__ZTV7S2970C8__A2__8S2970C11__8S2970C10[4]),  4,5},
  {&(_tg__ZTV8S2970C14__A__8S2970C11__8S2970C10[3]),  3,4},
  {&(_ZTV8S2970C10[10]),  10,48},
  {&(_ZTV8S2970C10[22]),  22,48},
  {&(_ZTV8S2970C10[39]),  39,48},
  {&(_ZTV8S2970C10[42]),  42,48},
  {&(_ZTV8S2970C10[47]),  47,48},
  {&(_ZTV8S2970C10[29]),  29,48},
  {&(_ZTV8S2970C10[33]),  33,48},
  {&(_tg__ZTV7S2970C6__8S2970C10[4]),  4,6},
  {&(_tg__ZTV7S2970C87S2970C6__8S2970C10[4]),  4,5},
  {&(_tg__ZTV8S2970C13__8S2970C10[4]),  4,5},
  {&(_tg__ZTV7S2970C88S2970C13__A1__8S2970C10[4]),  4,5},
  {&(_tg__ZTV8S2970C14__8S2970C10[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S2970C10[];
extern  VTBL_ENTRY _ZTV8S2970C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2970C10[];
Class_Descriptor cd_S2970C10 = {  "S2970C10", // class name
  bases_S2970C10, 24,
  &(vtc_S2970C10[0]), // expected_vtbl_contents
  &(vtt_S2970C10[0]), // expected_vtt_contents
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI8S2970C10),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S2970C10),48, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2970C10),29, //virtual table table var
  17, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2970C1  : S2970C2_nt , virtual S2970C4 , virtual S2970C10 , virtual S2121C21 {
  virtual  ~S2970C1(); // _ZN7S2970C1D2Ev
  S2970C1(); // tgen
};
//SIG(1 S2970C1) C1{ BC2{ BC3{ m}} VBC4{ BC5{ VBC6{ BC7{ m} BC8{ VBC7 BC9{ v1} VBC3} v2} Fi} VBC9 FL:1} VBC10{ BC5 BC11{ BC12{ VBC7 VBC13{ BC8 BC9} VBC6 VBC14{ BC9 BC3 VBC7} BC9} VBC15{ m} BC8 BC3 BC14 vd} vd Fi} VBC16{ m} vd}


 S2970C1 ::~S2970C1(){ note_dtor("S2970C1", this);}
S2970C1 ::S2970C1(){ note_ctor("S2970C1", this);} // tgen

static void Test_S2970C1()
{
  extern Class_Descriptor cd_S2970C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,14)];
    init_test(&cd_S2970C1, buf);
    S2970C1 *dp, &lv = *(dp=new (buf) S2970C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,52), "sizeof(S2970C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2970C1)");
    check_base_class_offset(lv, (S2121C38*)(S2970C2_nt*), 0, "S2970C1");
    check_base_class_offset(lv, (S2970C2_nt*), 0, "S2970C1");
    /*is_ambiguous_... S2970C6::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*)(S2970C6*), ABISELECT(8,4), "S2970C1");
    check_base_class_offset(lv, (S2121C28*)(S2970C8*)(S2970C6*), 0, "S2970C1");
    /*is_ambiguous_... S2970C12::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*)(S2970C12*)(S2970C11*)(S2970C10*), 0, "S2970C1");
    check_base_class_offset(lv, (S2121C28*)(S2970C8*)(S2970C13*), 0, "S2970C1");
    /*is_ambiguous_... S2970C1::S2970C14 */ AMB_check_base_class_offset(lv, (S2121C28*)(S2970C14*), 0, "S2970C1");
    /*is_ambiguous_... S2970C11::S2970C8 */ AMB_check_base_class_offset(lv, (S2121C28*)(S2970C8*)(S2970C11*)(S2970C10*), 0, "S2970C1");
    /*is_ambiguous_... S2970C11::S2970C14 */ AMB_check_base_class_offset(lv, (S2121C28*)(S2970C14*)(S2970C11*)(S2970C10*), 0, "S2970C1");
    check_base_class_offset(lv, (S2970C9*)(S2970C8*)(S2970C6*), ABISELECT(8,4), "S2970C1");
    check_base_class_offset(lv, (S2121C38*)(S2970C8*)(S2970C6*), ABISELECT(21,13), "S2970C1");
    check_base_class_offset(lv, (S2121C38*)(S2970C8*)(S2970C13*), ABISELECT(21,13), "S2970C1");
    /*is_ambiguous_... S2970C11::S2970C8 */ AMB_check_base_class_offset(lv, (S2121C38*)(S2970C8*)(S2970C11*)(S2970C10*), ABISELECT(21,13), "S2970C1");
    check_base_class_offset(lv, (S2970C8*)(S2970C6*), ABISELECT(8,4), "S2970C1");
    check_base_class_offset(lv, (S2970C6*)(S2970C5*)(S2970C4*), ABISELECT(8,4), "S2970C1");
    check_base_class_offset(lv, (S2970C6*)(S2970C5*)(S2970C10*), ABISELECT(8,4), "S2970C1");
    check_base_class_offset(lv, (S2970C6*)(S2970C12*)(S2970C11*)(S2970C10*), ABISELECT(8,4), "S2970C1");
    check_base_class_offset(lv, (S2970C5*)(S2970C4*), ABISELECT(8,4), "S2970C1");
    /*is_ambiguous_... S2970C4::S2970C9 */ AMB_check_base_class_offset(lv, (S2970C9*)(S2970C4*), 0, "S2970C1");
    check_base_class_offset(lv, (S2970C4*), ABISELECT(8,4), "S2970C1");
    check_base_class_offset(lv, (S2970C5*)(S2970C10*), ABISELECT(24,16), "S2970C1");
    check_base_class_offset(lv, (S2970C9*)(S2970C8*)(S2970C13*), ABISELECT(72,40), "S2970C1");
    check_base_class_offset(lv, (S2970C8*)(S2970C13*), ABISELECT(72,40), "S2970C1");
    /*is_ambiguous_... S2970C13::S2970C9 */ AMB_check_base_class_offset(lv, (S2970C9*)(S2970C13*), ABISELECT(80,44), "S2970C1");
    check_base_class_offset(lv, (S2970C13*)(S2970C12*)(S2970C11*)(S2970C10*), ABISELECT(72,40), "S2970C1");
    /*is_ambiguous_... S2970C1::S2970C14 */ AMB_check_base_class_offset(lv, (S2970C9*)(S2970C14*), ABISELECT(88,48), "S2970C1");
    /*is_ambiguous_... S2970C1::S2970C14 */ AMB_check_base_class_offset(lv, (S2121C38*)(S2970C14*), ABISELECT(88,48), "S2970C1");
    check_base_class_offset(lv, (S2970C14*)(S2970C12*)(S2970C11*)(S2970C10*), ABISELECT(88,48), "S2970C1");
    /*is_ambiguous_... S2970C12::S2970C9 */ AMB_check_base_class_offset(lv, (S2970C9*)(S2970C12*)(S2970C11*)(S2970C10*), ABISELECT(40,24), "S2970C1");
    check_base_class_offset(lv, (S2970C12*)(S2970C11*)(S2970C10*), ABISELECT(40,24), "S2970C1");
    check_base_class_offset(lv, (S2121C24*)(S2970C11*)(S2970C10*), 0, "S2970C1");
    /*is_ambiguous_... S2970C11::S2970C8 */ AMB_check_base_class_offset(lv, (S2970C9*)(S2970C8*)(S2970C11*)(S2970C10*), ABISELECT(48,28), "S2970C1");
    /*is_ambiguous_... S2970C11::S2970C8 */ AMB_check_base_class_offset(lv, (S2970C8*)(S2970C11*)(S2970C10*), ABISELECT(48,28), "S2970C1");
    /*is_ambiguous_... S2970C11::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S2970C11*)(S2970C10*), ABISELECT(40,24), "S2970C1");
    /*is_ambiguous_... S2970C11::S2970C14 */ AMB_check_base_class_offset(lv, (S2970C9*)(S2970C14*)(S2970C11*)(S2970C10*), ABISELECT(56,32), "S2970C1");
    /*is_ambiguous_... S2970C11::S2970C14 */ AMB_check_base_class_offset(lv, (S2121C38*)(S2970C14*)(S2970C11*)(S2970C10*), ABISELECT(56,32), "S2970C1");
    /*is_ambiguous_... S2970C11::S2970C14 */ AMB_check_base_class_offset(lv, (S2970C14*)(S2970C11*)(S2970C10*), ABISELECT(56,32), "S2970C1");
    check_base_class_offset(lv, (S2970C11*)(S2970C10*), ABISELECT(40,24), "S2970C1");
    check_base_class_offset(lv, (S2970C10*), ABISELECT(24,16), "S2970C1");
    check_base_class_offset(lv, (S2121C21*), 0, "S2970C1");
    test_class_info(&lv, &cd_S2970C1);
    dp->~S2970C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2970C1(Test_S2970C1, "S2970C1", ABISELECT(96,52));

#else // __cplusplus

extern void _ZN7S2970C1C1Ev();
extern void _ZN7S2970C1D2Ev();
Name_Map name_map_S2970C1[] = {
  NSPAIR(_ZN7S2970C1C1Ev),
  NSPAIR(_ZN7S2970C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2970C2_nt;
extern VTBL_ENTRY _ZTI10S2970C2_nt[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2970C8;
extern VTBL_ENTRY _ZTI7S2970C8[];
extern  VTBL_ENTRY _ZTV7S2970C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2970C8[];
extern Class_Descriptor cd_S2970C6;
extern VTBL_ENTRY _ZTI7S2970C6[];
extern  VTBL_ENTRY _ZTV7S2970C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2970C6[];
extern Class_Descriptor cd_S2970C5;
extern VTBL_ENTRY _ZTI7S2970C5[];
extern  VTBL_ENTRY _ZTV7S2970C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2970C5[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
extern Class_Descriptor cd_S2970C4;
extern VTBL_ENTRY _ZTI7S2970C4[];
extern  VTBL_ENTRY _ZTV7S2970C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2970C4[];
extern Class_Descriptor cd_S2970C5;
extern VTBL_ENTRY _ZTI7S2970C5[];
extern  VTBL_ENTRY _ZTV7S2970C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2970C5[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
extern Class_Descriptor cd_S2970C8;
extern VTBL_ENTRY _ZTI7S2970C8[];
extern  VTBL_ENTRY _ZTV7S2970C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2970C8[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
extern Class_Descriptor cd_S2970C13;
extern VTBL_ENTRY _ZTI8S2970C13[];
extern  VTBL_ENTRY _ZTV8S2970C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2970C13[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2970C14;
extern VTBL_ENTRY _ZTI8S2970C14[];
extern  VTBL_ENTRY _ZTV8S2970C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2970C14[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
extern Class_Descriptor cd_S2970C12;
extern VTBL_ENTRY _ZTI8S2970C12[];
extern  VTBL_ENTRY _ZTV8S2970C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2970C12[];
extern Class_Descriptor cd_S2121C24;
extern VTBL_ENTRY _ZTI8S2121C24[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
extern Class_Descriptor cd_S2970C8;
extern VTBL_ENTRY _ZTI7S2970C8[];
extern  VTBL_ENTRY _ZTV7S2970C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2970C8[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2970C14;
extern VTBL_ENTRY _ZTI8S2970C14[];
extern  VTBL_ENTRY _ZTV8S2970C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2970C14[];
extern Class_Descriptor cd_S2970C11;
extern VTBL_ENTRY _ZTI8S2970C11[];
extern  VTBL_ENTRY _ZTV8S2970C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2970C11[];
extern Class_Descriptor cd_S2970C10;
extern VTBL_ENTRY _ZTI8S2970C10[];
extern  VTBL_ENTRY _ZTV8S2970C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2970C10[];
extern Class_Descriptor cd_S2121C21;
extern VTBL_ENTRY _ZTI8S2121C21[];
static Base_Class bases_S2970C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2970C2_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_S2121C28,    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
    7, //immediately_derived
  0, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2970C9,    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
    6, //immediately_derived
  0, 0},
  {&cd_S2121C38,    ABISELECT(21,13), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2970C8,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S2970C6,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S2970C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S2970C9,    0, //bcp->offset
    -1, //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
    4, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S2970C4,    ABISELECT(8,4), //bcp->offset
    16, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2970C5,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S2970C9,    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
    7, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S2970C8,    ABISELECT(72,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S2970C9,    ABISELECT(80,44), //bcp->offset
    67, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S2970C13,    ABISELECT(72,40), //bcp->offset
    61, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S2970C9,    ABISELECT(88,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
    11, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S2121C38,    ABISELECT(88,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
    18, //immediately_derived
  0, 0},
  {&cd_S2970C14,    ABISELECT(88,48), //bcp->offset
    70, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S2970C9,    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
    14, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S2970C12,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S2121C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    28, //immediately_derived
  0, 1},
  {&cd_S2970C9,    ABISELECT(48,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
    16, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S2970C8,    ABISELECT(48,28), //bcp->offset
    52, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S2121C38,    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
    28, //immediately_derived
  0, 0},
  {&cd_S2970C9,    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
    18, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S2121C38,    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
    27, //immediately_derived
  0, 0},
  {&cd_S2970C14,    ABISELECT(56,32), //bcp->offset
    57, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S2970C11,    ABISELECT(40,24), //bcp->offset
    41, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S2970C10,    ABISELECT(24,16), //bcp->offset
    26, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2121C21,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S2970C1[];
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C1D1Ev();
extern void _ZN7S2970C1D0Ev();
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C62v2Ev();
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C62v2Ev();
extern void ABISELECT(_ZTv0_n88_N7S2970C1D1Ev,_ZTv0_n44_N7S2970C1D1Ev)();
extern void ABISELECT(_ZThn24_N7S2970C1D1Ev,_ZThn16_N7S2970C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N7S2970C1D0Ev,_ZTv0_n44_N7S2970C1D0Ev)();
extern void ABISELECT(_ZThn24_N7S2970C1D0Ev,_ZThn16_N7S2970C1D0Ev)() __attribute__((weak));
extern void _ZN7S2970C92v1Ev();
extern void ABISELECT(_ZTvn16_n88_N7S2970C1D1Ev,_ZTvn8_n44_N7S2970C1D1Ev)();
extern void ABISELECT(_ZTvn16_n88_N7S2970C1D0Ev,_ZTvn8_n44_N7S2970C1D0Ev)();
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY vtc_S2970C1[] = {
  0,
  0,
  ABISELECT(88,48),
  ABISELECT(72,40),
  ABISELECT(24,16),
  0,
  ABISELECT(21,13),
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S2970C1[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&_ZN7S2970C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2970C1D0Ev,
  ABISELECT(-8,-4),
  0,
  0,
  0,
  ABISELECT(13,9),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S2970C1[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&_ZN7S2970C62v2Ev,
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  ABISELECT(64,32),
  ABISELECT(48,24),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  -3,
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S2970C1[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&_ZN7S2970C62v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S2970C1D1Ev,_ZTv0_n44_N7S2970C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S2970C1D0Ev,_ZTv0_n44_N7S2970C1D0Ev),
  ABISELECT(-40,-24),
  ABISELECT(48,24),
  ABISELECT(-32,-20),
  ABISELECT(-19,-11),
  ABISELECT(32,16),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S2970C1[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n88_N7S2970C1D1Ev,_ZTvn8_n44_N7S2970C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n88_N7S2970C1D0Ev,_ZTvn8_n44_N7S2970C1D0Ev),
  ABISELECT(-27,-15),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S2970C1[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI7S2970C1[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  0,
  ABISELECT(-51,-27),
  ABISELECT(-72,-40),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI7S2970C1[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI7S2970C1[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  0,
  ABISELECT(-88,-48),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI7S2970C1[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern VTBL_ENTRY _ZTV7S2970C1[];
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C4__7S2970C1[] = {
  ABISELECT(-8,-4),
  0,
  0,
  0,
  ABISELECT(13,9),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S2970C4[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&_ZN7S2970C62v2Ev,
};
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C57S2970C4__7S2970C1[] = {
  0,
  0,
  0,
  ABISELECT(13,9),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S2970C5[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&_ZN7S2970C62v2Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C9__A1__7S2970C4__7S2970C1[] = {
  0,
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S2970C4[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C6__7S2970C1[] = {
  ABISELECT(13,9),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S2970C6[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&_ZN7S2970C62v2Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C87S2970C6__7S2970C1[] = {
  ABISELECT(13,9),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S2970C8[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C62v2Ev();
extern void _ZN8S2970C10D1Ev();
extern void _ZN8S2970C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2970C10__7S2970C1[] = {
  ABISELECT(-24,-16),
  ABISELECT(64,32),
  ABISELECT(48,24),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  -3,
  ABISELECT(-24,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S2970C10[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&_ZN7S2970C62v2Ev,
  (VTBL_ENTRY)&_ZN8S2970C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2970C10D0Ev,
};
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C58S2970C10__A1__7S2970C1[] = {
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  -3,
  ABISELECT(-24,-16),
  0,
  (VTBL_ENTRY)&(_ZTI7S2970C5[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&_ZN7S2970C62v2Ev,
};
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C6__7S2970C58S2970C10__A1__7S2970C1[] = {
  0,
  0,
  ABISELECT(13,9),
  ABISELECT(-8,-4),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI7S2970C5[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&_ZN7S2970C62v2Ev,
};
extern void _ZN7S2970C92v1Ev();
extern void _ZN8S2970C11D1Ev();
extern void _ZN8S2970C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2970C118S2970C10__7S2970C1[] = {
  ABISELECT(-40,-24),
  ABISELECT(48,24),
  ABISELECT(-32,-20),
  ABISELECT(-19,-11),
  ABISELECT(32,16),
  ABISELECT(-40,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S2970C11[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&_ZN8S2970C11D1Ev,
  (VTBL_ENTRY)&_ZN8S2970C11D0Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S2970C128S2970C118S2970C10__7S2970C1[] = {
  ABISELECT(48,24),
  ABISELECT(-32,-20),
  ABISELECT(-19,-11),
  ABISELECT(32,16),
  ABISELECT(-40,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S2970C12[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S2970C13__8S2970C128S2970C118S2970C10__7S2970C1[] = {
  0,
  ABISELECT(-51,-27),
  ABISELECT(-72,-40),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S2970C12[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C98S2970C13__A1__8S2970C128S2970C118S2970C10__7S2970C1[] = {
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S2970C12[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C6__8S2970C128S2970C118S2970C10__7S2970C1[] = {
  0,
  0,
  ABISELECT(13,9),
  ABISELECT(-8,-4),
  ABISELECT(32,20),
  (VTBL_ENTRY)&(_ZTI8S2970C12[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&_ZN7S2970C62v2Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S2970C14__8S2970C128S2970C118S2970C10__7S2970C1[] = {
  0,
  ABISELECT(-88,-48),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S2970C12[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C88S2970C118S2970C10__A2__7S2970C1[] = {
  ABISELECT(-27,-15),
  ABISELECT(-48,-28),
  0,
  (VTBL_ENTRY)&(_ZTI7S2970C8[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S2970C148S2970C118S2970C10__A1__7S2970C1[] = {
  ABISELECT(-56,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S2970C14[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S2970C13__8S2970C118S2970C10__7S2970C1[] = {
  0,
  ABISELECT(-51,-27),
  ABISELECT(-72,-40),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S2970C11[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C98S2970C13__A1__8S2970C118S2970C10__7S2970C1[] = {
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S2970C11[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C6__8S2970C118S2970C10__7S2970C1[] = {
  0,
  0,
  ABISELECT(13,9),
  ABISELECT(-8,-4),
  ABISELECT(32,20),
  (VTBL_ENTRY)&(_ZTI8S2970C11[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&_ZN7S2970C62v2Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S2970C14__8S2970C118S2970C10__7S2970C1[] = {
  0,
  ABISELECT(-88,-48),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S2970C11[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C8__A2__8S2970C118S2970C10__7S2970C1[] = {
  ABISELECT(-27,-15),
  ABISELECT(-48,-28),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S2970C11[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S2970C14__A__8S2970C118S2970C10__7S2970C1[] = {
  ABISELECT(-56,-32),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S2970C11[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C6__8S2970C10__7S2970C1[] = {
  0,
  0,
  ABISELECT(13,9),
  ABISELECT(-8,-4),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S2970C10[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&_ZN7S2970C62v2Ev,
};
extern void _ZN7S2970C92v1Ev();
extern void ABISELECT(_ZThn16_N8S2970C10D1Ev,_ZThn8_N8S2970C10D1Ev)();
extern void ABISELECT(_ZThn16_N8S2970C10D0Ev,_ZThn8_N8S2970C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2970C11__8S2970C10__7S2970C1[] = {
  ABISELECT(-40,-24),
  ABISELECT(48,24),
  ABISELECT(-32,-20),
  ABISELECT(-19,-11),
  ABISELECT(32,16),
  ABISELECT(-40,-24),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S2970C10[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S2970C10D1Ev,_ZThn8_N8S2970C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S2970C10D0Ev,_ZThn8_N8S2970C10D0Ev),
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S2970C13__8S2970C10__7S2970C1[] = {
  0,
  ABISELECT(-51,-27),
  ABISELECT(-72,-40),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S2970C10[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C98S2970C13__A2__8S2970C10__7S2970C1[] = {
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S2970C10[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S2970C14__8S2970C10__7S2970C1[] = {
  0,
  ABISELECT(-88,-48),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S2970C10[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C88S2970C11__A2__8S2970C10__7S2970C1[] = {
  ABISELECT(-27,-15),
  ABISELECT(-48,-28),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S2970C10[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S2970C148S2970C11__A1__8S2970C10__7S2970C1[] = {
  ABISELECT(-56,-32),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S2970C10[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S2970C13__7S2970C1[] = {
  ABISELECT(-51,-27),
  ABISELECT(-72,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S2970C13[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C88S2970C13__A1__7S2970C1[] = {
  ABISELECT(-51,-27),
  ABISELECT(-72,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S2970C8[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S2970C14__7S2970C1[] = {
  ABISELECT(-88,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S2970C14[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
static  VTT_ENTRY vtt_S2970C1[] = {
  {&(_ZTV7S2970C1[13]),  13,75},
  {&(_ZTV7S2970C1[24]),  24,75},
  {&(_ZTV7S2970C1[24]),  24,75},
  {&(_ZTV7S2970C1[13]),  13,75},
  {&(_ZTV7S2970C1[37]),  37,75},
  {&(_ZTV7S2970C1[49]),  49,75},
  {&(_ZTV7S2970C1[66]),  66,75},
  {&(_ZTV7S2970C1[69]),  69,75},
  {&(_ZTV7S2970C1[74]),  74,75},
  {&(_ZTV7S2970C1[56]),  56,75},
  {&(_ZTV7S2970C1[60]),  60,75},
  {&(_tg__ZTV7S2970C4__7S2970C1[8]),  8,10},
  {&(_tg__ZTV7S2970C57S2970C4__7S2970C1[7]),  7,9},
  {&(_tg__ZTV7S2970C57S2970C4__7S2970C1[7]),  7,9},
  {&(_tg__ZTV7S2970C4__7S2970C1[8]),  8,10},
  {&(_tg__ZTV7S2970C9__A1__7S2970C4__7S2970C1[3]),  3,4},
  {&(_tg__ZTV7S2970C6__7S2970C1[4]),  4,6},
  {&(_tg__ZTV7S2970C87S2970C6__7S2970C1[4]),  4,5},
  {&(_tg__ZTV8S2970C10__7S2970C1[10]),  10,14},
  {&(_tg__ZTV7S2970C58S2970C10__A1__7S2970C1[7]),  7,9},
  {&(_tg__ZTV7S2970C6__7S2970C58S2970C10__A1__7S2970C1[6]),  6,8},
  {&(_tg__ZTV8S2970C118S2970C10__7S2970C1[8]),  8,11},
  {&(_tg__ZTV8S2970C128S2970C118S2970C10__7S2970C1[7]),  7,8},
  {&(_tg__ZTV8S2970C13__8S2970C128S2970C118S2970C10__7S2970C1[5]),  5,6},
  {&(_tg__ZTV7S2970C98S2970C13__A1__8S2970C128S2970C118S2970C10__7S2970C1[2]),  2,3},
  {&(_tg__ZTV7S2970C6__8S2970C128S2970C118S2970C10__7S2970C1[6]),  6,8},
  {&(_tg__ZTV8S2970C14__8S2970C128S2970C118S2970C10__7S2970C1[4]),  4,5},
  {&(_tg__ZTV7S2970C88S2970C118S2970C10__A2__7S2970C1[4]),  4,5},
  {&(_tg__ZTV8S2970C148S2970C118S2970C10__A1__7S2970C1[3]),  3,4},
  {&(_tg__ZTV8S2970C13__8S2970C118S2970C10__7S2970C1[5]),  5,6},
  {&(_tg__ZTV7S2970C98S2970C13__A1__8S2970C118S2970C10__7S2970C1[2]),  2,3},
  {&(_tg__ZTV7S2970C6__8S2970C118S2970C10__7S2970C1[6]),  6,8},
  {&(_tg__ZTV8S2970C14__8S2970C118S2970C10__7S2970C1[4]),  4,5},
  {&(_tg__ZTV7S2970C8__A2__8S2970C118S2970C10__7S2970C1[4]),  4,5},
  {&(_tg__ZTV8S2970C14__A__8S2970C118S2970C10__7S2970C1[3]),  3,4},
  {&(_tg__ZTV7S2970C6__8S2970C10__7S2970C1[6]),  6,8},
  {&(_tg__ZTV8S2970C11__8S2970C10__7S2970C1[8]),  8,11},
  {&(_tg__ZTV8S2970C13__8S2970C10__7S2970C1[5]),  5,6},
  {&(_tg__ZTV7S2970C98S2970C13__A2__8S2970C10__7S2970C1[2]),  2,3},
  {&(_tg__ZTV8S2970C14__8S2970C10__7S2970C1[4]),  4,5},
  {&(_tg__ZTV7S2970C88S2970C11__A2__8S2970C10__7S2970C1[4]),  4,5},
  {&(_tg__ZTV8S2970C148S2970C11__A1__8S2970C10__7S2970C1[3]),  3,4},
  {&(_tg__ZTV8S2970C13__7S2970C1[4]),  4,5},
  {&(_tg__ZTV7S2970C88S2970C13__A1__7S2970C1[4]),  4,5},
  {&(_tg__ZTV8S2970C14__7S2970C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S2970C1[];
extern  VTBL_ENTRY _ZTV7S2970C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2970C1[];
static VTBL_ENTRY alt_thunk_names12[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S2970C1D0Ev,_ZTv0_n44_N7S2970C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S2970C1D0Ev,_ZThn16_N7S2970C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S2970C1D1Ev,_ZTv0_n44_N7S2970C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S2970C1D1Ev,_ZThn16_N7S2970C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2970C1 = {  "S2970C1", // class name
  bases_S2970C1, 31,
  &(vtc_S2970C1[0]), // expected_vtbl_contents
  &(vtt_S2970C1[0]), // expected_vtt_contents
  ABISELECT(96,52), // object size
  NSPAIRA(_ZTI7S2970C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S2970C1),75, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2970C1),45, //virtual table table var
  21, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names12,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1682C3_nt  : S6282C14_nt {
  virtual void  v4(); // _ZN10S1682C3_nt2v4Ev
  virtual void  v5(); // _ZN10S1682C3_nt2v5Ev
  virtual void  v6(); // _ZN10S1682C3_nt2v6Ev
  virtual void  v7(); // _ZN10S1682C3_nt2v7Ev
  virtual void  v8(); // _ZN10S1682C3_nt2v8Ev
  ~S1682C3_nt(); // tgen
  S1682C3_nt(); // tgen
};
//SIG(-1 S1682C3_nt) C1{ BC2{ vd m Fi} v1 v2 v3 v4 v5}


void  S1682C3_nt ::v4(){vfunc_called(this, "_ZN10S1682C3_nt2v4Ev");}
void  S1682C3_nt ::v5(){vfunc_called(this, "_ZN10S1682C3_nt2v5Ev");}
void  S1682C3_nt ::v6(){vfunc_called(this, "_ZN10S1682C3_nt2v6Ev");}
void  S1682C3_nt ::v7(){vfunc_called(this, "_ZN10S1682C3_nt2v7Ev");}
void  S1682C3_nt ::v8(){vfunc_called(this, "_ZN10S1682C3_nt2v8Ev");}
S1682C3_nt ::~S1682C3_nt(){ note_dtor("S1682C3_nt", this);} // tgen
S1682C3_nt ::S1682C3_nt(){ note_ctor("S1682C3_nt", this);} // tgen

//skip512 S1682C3_nt

#else // __cplusplus

extern void _ZN10S1682C3_ntC1Ev();
extern void _ZN10S1682C3_ntD1Ev();
Name_Map name_map_S1682C3_nt[] = {
  NSPAIR(_ZN10S1682C3_ntC1Ev),
  NSPAIR(_ZN10S1682C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6282C14_nt;
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
extern  VTBL_ENTRY _ZTV11S6282C14_nt[];
static Base_Class bases_S1682C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6282C14_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 _ZTI10S1682C3_nt[];
extern void _ZN10S1682C3_ntD1Ev();
extern void _ZN10S1682C3_ntD0Ev();
extern void _ZN10S1682C3_nt2v4Ev();
extern void _ZN10S1682C3_nt2v5Ev();
extern void _ZN10S1682C3_nt2v6Ev();
extern void _ZN10S1682C3_nt2v7Ev();
extern void _ZN10S1682C3_nt2v8Ev();
static  VTBL_ENTRY vtc_S1682C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1682C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S1682C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1682C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S1682C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S1682C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S1682C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S1682C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S1682C3_nt2v8Ev,
};
extern VTBL_ENTRY _ZTI10S1682C3_nt[];
VTBL_ENTRY *P__ZTI10S1682C3_nt = _ZTI10S1682C3_nt; 
extern  VTBL_ENTRY _ZTV10S1682C3_nt[];
Class_Descriptor cd_S1682C3_nt = {  "S1682C3_nt", // class name
  bases_S1682C3_nt, 1,
  &(vtc_S1682C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S1682C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S1682C3_nt),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1682C5_nt  {
  ::S21811C16 s1682c5f0;
  void *s1682c5f1[2];
  void  mf1682c5(); // _ZN10S1682C5_nt8mf1682c5Ev
};
//SIG(-1 S1682C5_nt) C1{ m FC2{ m Fp Fi[2] FC3{ m}} Fp[2]}


void  S1682C5_nt ::mf1682c5(){}

//skip512 S1682C5_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1682C2_nt  : S1682C3_nt {
  void *s1682c2f0[3];
  ::S1682C5_nt s1682c2f1;
  virtual void  v9(); // _ZN10S1682C2_nt2v9Ev
  virtual void  v10(); // _ZN10S1682C2_nt3v10Ev
  virtual void  v11(); // _ZN10S1682C2_nt3v11Ev
  virtual void  v12(); // _ZN10S1682C2_nt3v12Ev
  virtual void  v13(); // _ZN10S1682C2_nt3v13Ev
  virtual void  v14(); // _ZN10S1682C2_nt3v14Ev
  virtual void  v15(); // _ZN10S1682C2_nt3v15Ev
  virtual void  v16(); // _ZN10S1682C2_nt3v16Ev
  virtual void  v17(); // _ZN10S1682C2_nt3v17Ev
  virtual void  v18(); // _ZN10S1682C2_nt3v18Ev
  virtual void  v19(); // _ZN10S1682C2_nt3v19Ev
  ~S1682C2_nt(); // tgen
  S1682C2_nt(); // tgen
};
//SIG(-1 S1682C2_nt) C1{ BC2{ BC3{ vd m Fi} v12 v13 v14 v15 v16} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[3] FC4{ m FC5{ m Fp Fi[2] FC6{ m}} Fp[2]}}


void  S1682C2_nt ::v9(){vfunc_called(this, "_ZN10S1682C2_nt2v9Ev");}
void  S1682C2_nt ::v10(){vfunc_called(this, "_ZN10S1682C2_nt3v10Ev");}
void  S1682C2_nt ::v11(){vfunc_called(this, "_ZN10S1682C2_nt3v11Ev");}
void  S1682C2_nt ::v12(){vfunc_called(this, "_ZN10S1682C2_nt3v12Ev");}
void  S1682C2_nt ::v13(){vfunc_called(this, "_ZN10S1682C2_nt3v13Ev");}
void  S1682C2_nt ::v14(){vfunc_called(this, "_ZN10S1682C2_nt3v14Ev");}
void  S1682C2_nt ::v15(){vfunc_called(this, "_ZN10S1682C2_nt3v15Ev");}
void  S1682C2_nt ::v16(){vfunc_called(this, "_ZN10S1682C2_nt3v16Ev");}
void  S1682C2_nt ::v17(){vfunc_called(this, "_ZN10S1682C2_nt3v17Ev");}
void  S1682C2_nt ::v18(){vfunc_called(this, "_ZN10S1682C2_nt3v18Ev");}
void  S1682C2_nt ::v19(){vfunc_called(this, "_ZN10S1682C2_nt3v19Ev");}
S1682C2_nt ::~S1682C2_nt(){ note_dtor("S1682C2_nt", this);} // tgen
S1682C2_nt ::S1682C2_nt(){ note_ctor("S1682C2_nt", this);} // tgen

//skip512 S1682C2_nt

#else // __cplusplus

extern void _ZN10S1682C2_ntC1Ev();
extern void _ZN10S1682C2_ntD1Ev();
Name_Map name_map_S1682C2_nt[] = {
  NSPAIR(_ZN10S1682C2_ntC1Ev),
  NSPAIR(_ZN10S1682C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6282C14_nt;
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
extern  VTBL_ENTRY _ZTV11S6282C14_nt[];
extern Class_Descriptor cd_S1682C3_nt;
extern VTBL_ENTRY _ZTI10S1682C3_nt[];
extern  VTBL_ENTRY _ZTV10S1682C3_nt[];
static Base_Class bases_S1682C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6282C14_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_S1682C3_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 _ZTI10S1682C2_nt[];
extern void _ZN10S1682C2_ntD1Ev();
extern void _ZN10S1682C2_ntD0Ev();
extern void _ZN10S1682C3_nt2v4Ev();
extern void _ZN10S1682C3_nt2v5Ev();
extern void _ZN10S1682C3_nt2v6Ev();
extern void _ZN10S1682C3_nt2v7Ev();
extern void _ZN10S1682C3_nt2v8Ev();
extern void _ZN10S1682C2_nt2v9Ev();
extern void _ZN10S1682C2_nt3v10Ev();
extern void _ZN10S1682C2_nt3v11Ev();
extern void _ZN10S1682C2_nt3v12Ev();
extern void _ZN10S1682C2_nt3v13Ev();
extern void _ZN10S1682C2_nt3v14Ev();
extern void _ZN10S1682C2_nt3v15Ev();
extern void _ZN10S1682C2_nt3v16Ev();
extern void _ZN10S1682C2_nt3v17Ev();
extern void _ZN10S1682C2_nt3v18Ev();
extern void _ZN10S1682C2_nt3v19Ev();
static  VTBL_ENTRY vtc_S1682C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1682C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S1682C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1682C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S1682C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S1682C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S1682C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S1682C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S1682C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S1682C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S1682C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S1682C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S1682C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S1682C2_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S1682C2_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S1682C2_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S1682C2_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S1682C2_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S1682C2_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1682C2_nt3v19Ev,
};
extern VTBL_ENTRY _ZTI10S1682C2_nt[];
VTBL_ENTRY *P__ZTI10S1682C2_nt = _ZTI10S1682C2_nt; 
extern  VTBL_ENTRY _ZTV10S1682C2_nt[];
Class_Descriptor cd_S1682C2_nt = {  "S1682C2_nt", // class name
  bases_S1682C2_nt, 2,
  &(vtc_S1682C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI10S1682C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S1682C2_nt),20, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1682C1  : S1682C2_nt {
  void *s1682c1f0[2];
  ::S21811C2_nt s1682c1f1;
  ::S2185C10_nt s1682c1f2;
  int s1682c1f3;
  char s1682c1f4;
  virtual void  v1(); // _ZN7S1682C12v1Ev
  virtual void  v2(); // _ZN7S1682C12v2Ev
  virtual void  v3(); // _ZN7S1682C12v3Ev
  ~S1682C1(); // tgen
  S1682C1(); // tgen
};
//SIG(1 S1682C1) C1{ BC2{ BC3{ BC4{ vd m Fi} v4 v5 v6 v7 v8} v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 Fp[3] FC5{ m FC6{ m Fp Fi[2] FC7{ m}} Fp[2]}} v1 v2 v3 Fp[2] FC8{ m Fp[2]} FC9{ m Fp Fi FC10{ m}} Fi Fc}


void  S1682C1 ::v1(){vfunc_called(this, "_ZN7S1682C12v1Ev");}
void  S1682C1 ::v2(){vfunc_called(this, "_ZN7S1682C12v2Ev");}
void  S1682C1 ::v3(){vfunc_called(this, "_ZN7S1682C12v3Ev");}
S1682C1 ::~S1682C1(){ note_dtor("S1682C1", this);} // tgen
S1682C1 ::S1682C1(){ note_ctor("S1682C1", this);} // tgen

static void Test_S1682C1()
{
  extern Class_Descriptor cd_S1682C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,21)];
    init_test(&cd_S1682C1, buf);
    S1682C1 *dp, &lv = *(dp=new (buf) S1682C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,80), "sizeof(S1682C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1682C1)");
    check_base_class_offset(lv, (S6282C14_nt*)(S1682C3_nt*)(S1682C2_nt*), 0, "S1682C1");
    check_base_class_offset(lv, (S1682C3_nt*)(S1682C2_nt*), 0, "S1682C1");
    check_base_class_offset(lv, (S1682C2_nt*), 0, "S1682C1");
    check_field_offset(lv, s1682c1f0, ABISELECT(80,44), "S1682C1.s1682c1f0");
    check_field_offset(lv, s1682c1f1, ABISELECT(96,52), "S1682C1.s1682c1f1");
    check_field_offset(lv, s1682c1f2, ABISELECT(112,60), "S1682C1.s1682c1f2");
    check_field_offset(lv, s1682c1f3, ABISELECT(128,72), "S1682C1.s1682c1f3");
    check_field_offset(lv, s1682c1f4, ABISELECT(132,76), "S1682C1.s1682c1f4");
    test_class_info(&lv, &cd_S1682C1);
    dp->~S1682C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1682C1(Test_S1682C1, "S1682C1", ABISELECT(136,80));

#else // __cplusplus

extern void _ZN7S1682C1C1Ev();
extern void _ZN7S1682C1D1Ev();
Name_Map name_map_S1682C1[] = {
  NSPAIR(_ZN7S1682C1C1Ev),
  NSPAIR(_ZN7S1682C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6282C14_nt;
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
extern  VTBL_ENTRY _ZTV11S6282C14_nt[];
extern Class_Descriptor cd_S1682C3_nt;
extern VTBL_ENTRY _ZTI10S1682C3_nt[];
extern  VTBL_ENTRY _ZTV10S1682C3_nt[];
extern Class_Descriptor cd_S1682C2_nt;
extern VTBL_ENTRY _ZTI10S1682C2_nt[];
extern  VTBL_ENTRY _ZTV10S1682C2_nt[];
static Base_Class bases_S1682C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6282C14_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_S1682C3_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_S1682C2_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 _ZTI7S1682C1[];
extern void _ZN7S1682C1D1Ev();
extern void _ZN7S1682C1D0Ev();
extern void _ZN10S1682C3_nt2v4Ev();
extern void _ZN10S1682C3_nt2v5Ev();
extern void _ZN10S1682C3_nt2v6Ev();
extern void _ZN10S1682C3_nt2v7Ev();
extern void _ZN10S1682C3_nt2v8Ev();
extern void _ZN10S1682C2_nt2v9Ev();
extern void _ZN10S1682C2_nt3v10Ev();
extern void _ZN10S1682C2_nt3v11Ev();
extern void _ZN10S1682C2_nt3v12Ev();
extern void _ZN10S1682C2_nt3v13Ev();
extern void _ZN10S1682C2_nt3v14Ev();
extern void _ZN10S1682C2_nt3v15Ev();
extern void _ZN10S1682C2_nt3v16Ev();
extern void _ZN10S1682C2_nt3v17Ev();
extern void _ZN10S1682C2_nt3v18Ev();
extern void _ZN10S1682C2_nt3v19Ev();
extern void _ZN7S1682C12v1Ev();
extern void _ZN7S1682C12v2Ev();
extern void _ZN7S1682C12v3Ev();
static  VTBL_ENTRY vtc_S1682C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1682C1[0]),
  (VTBL_ENTRY)&_ZN7S1682C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1682C1D0Ev,
  (VTBL_ENTRY)&_ZN10S1682C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S1682C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S1682C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S1682C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S1682C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S1682C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S1682C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S1682C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S1682C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S1682C2_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S1682C2_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S1682C2_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S1682C2_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S1682C2_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S1682C2_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1682C2_nt3v19Ev,
  (VTBL_ENTRY)&_ZN7S1682C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1682C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1682C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S1682C1[];
extern  VTBL_ENTRY _ZTV7S1682C1[];
Class_Descriptor cd_S1682C1 = {  "S1682C1", // class name
  bases_S1682C1, 3,
  &(vtc_S1682C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,80), // object size
  NSPAIRA(_ZTI7S1682C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1682C1),23, //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  S19580C5  {
  virtual  ~S19580C5(); // _ZN8S19580C5D1Ev
  virtual void  v8(); // _ZN8S19580C52v8Ev
  virtual void  v9(); // _ZN8S19580C52v9Ev
  virtual void  v10(); // _ZN8S19580C53v10Ev
  virtual void  v11(); // _ZN8S19580C53v11Ev
  virtual void  v12(); // _ZN8S19580C53v12Ev
  S19580C5(); // tgen
};
//SIG(-1 S19580C5) C1{ vd v1 v2 v3 v4 v5}


 S19580C5 ::~S19580C5(){ note_dtor("S19580C5", this);}
void  S19580C5 ::v8(){vfunc_called(this, "_ZN8S19580C52v8Ev");}
void  S19580C5 ::v9(){vfunc_called(this, "_ZN8S19580C52v9Ev");}
void  S19580C5 ::v10(){vfunc_called(this, "_ZN8S19580C53v10Ev");}
void  S19580C5 ::v11(){vfunc_called(this, "_ZN8S19580C53v11Ev");}
void  S19580C5 ::v12(){vfunc_called(this, "_ZN8S19580C53v12Ev");}
S19580C5 ::S19580C5(){ note_ctor("S19580C5", this);} // tgen

static void Test_S19580C5()
{
  extern Class_Descriptor cd_S19580C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19580C5, buf);
    S19580C5 *dp, &lv = *(dp=new (buf) S19580C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19580C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19580C5)");
    test_class_info(&lv, &cd_S19580C5);
    dp->~S19580C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19580C5(Test_S19580C5, "S19580C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19580C5C1Ev();
extern void _ZN8S19580C5D1Ev();
Name_Map name_map_S19580C5[] = {
  NSPAIR(_ZN8S19580C5C1Ev),
  NSPAIR(_ZN8S19580C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19580C5[];
extern void _ZN8S19580C5D1Ev();
extern void _ZN8S19580C5D0Ev();
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
static  VTBL_ENTRY vtc_S19580C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19580C5[0]),
  (VTBL_ENTRY)&_ZN8S19580C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19580C5D0Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
};
extern VTBL_ENTRY _ZTI8S19580C5[];
extern  VTBL_ENTRY _ZTV8S19580C5[];
Class_Descriptor cd_S19580C5 = {  "S19580C5", // class name
  0,0,//no base classes
  &(vtc_S19580C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19580C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19580C5),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  S19580C4  : virtual S19580C5 {
  void *s19580c4f0;
  ::S19580C5 s19580c4f1;
  void *s19580c4f2;
  virtual  ~S19580C4(); // _ZN8S19580C4D2Ev
  virtual void  v13(); // _ZN8S19580C43v13Ev
  virtual void  v14(); // _ZN8S19580C43v14Ev
  virtual void  v15(); // _ZN8S19580C43v15Ev
  S19580C4(); // tgen
};
//SIG(-1 S19580C4) C1{ VBC2{ vd v4 v5 v6 v7 v8} vd v1 v2 v3 Fp FC2 Fp}


 S19580C4 ::~S19580C4(){ note_dtor("S19580C4", this);}
void  S19580C4 ::v13(){vfunc_called(this, "_ZN8S19580C43v13Ev");}
void  S19580C4 ::v14(){vfunc_called(this, "_ZN8S19580C43v14Ev");}
void  S19580C4 ::v15(){vfunc_called(this, "_ZN8S19580C43v15Ev");}
S19580C4 ::S19580C4(){ note_ctor("S19580C4", this);} // tgen

static void Test_S19580C4()
{
  extern Class_Descriptor cd_S19580C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S19580C4, buf);
    S19580C4 *dp, &lv = *(dp=new (buf) S19580C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S19580C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19580C4)");
    check_base_class_offset(lv, (S19580C5*), 0, "S19580C4");
    check_field_offset(lv, s19580c4f0, ABISELECT(8,4), "S19580C4.s19580c4f0");
    check_field_offset(lv, s19580c4f1, ABISELECT(16,8), "S19580C4.s19580c4f1");
    check_field_offset(lv, s19580c4f2, ABISELECT(24,12), "S19580C4.s19580c4f2");
    test_class_info(&lv, &cd_S19580C4);
    dp->~S19580C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19580C4(Test_S19580C4, "S19580C4", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S19580C4C1Ev();
extern void _ZN8S19580C4D2Ev();
Name_Map name_map_S19580C4[] = {
  NSPAIR(_ZN8S19580C4C1Ev),
  NSPAIR(_ZN8S19580C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19580C5;
extern VTBL_ENTRY _ZTI8S19580C5[];
extern  VTBL_ENTRY _ZTV8S19580C5[];
static Base_Class bases_S19580C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19580C5,    0, //bcp->offset
    -1, //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 _ZTI8S19580C4[];
extern void _ZN8S19580C4D1Ev();
extern void _ZN8S19580C4D0Ev();
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
static  VTBL_ENTRY vtc_S19580C4[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19580C4[0]),
  (VTBL_ENTRY)&_ZN8S19580C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19580C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
};
extern VTBL_ENTRY _ZTV8S19580C4[];
static  VTT_ENTRY vtt_S19580C4[] = {
  {&(_ZTV8S19580C4[9]),  9,19},
  {&(_ZTV8S19580C4[9]),  9,19},
};
extern VTBL_ENTRY _ZTI8S19580C4[];
extern  VTBL_ENTRY _ZTV8S19580C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19580C4[];
Class_Descriptor cd_S19580C4 = {  "S19580C4", // class name
  bases_S19580C4, 1,
  &(vtc_S19580C4[0]), // expected_vtbl_contents
  &(vtt_S19580C4[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S19580C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19580C4),19, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19580C4),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  S19580C3  : virtual S19580C4 {
  virtual  ~S19580C3(); // _ZN8S19580C3D2Ev
  virtual void  v16(); // _ZN8S19580C33v16Ev
  S19580C3(); // tgen
};
//SIG(-1 S19580C3) C1{ VBC2{ VBC3{ vd v2 v3 v4 v5 v6} vd v7 v8 v9 Fp FC3 Fp} vd v1}


 S19580C3 ::~S19580C3(){ note_dtor("S19580C3", this);}
void  S19580C3 ::v16(){vfunc_called(this, "_ZN8S19580C33v16Ev");}
S19580C3 ::S19580C3(){ note_ctor("S19580C3", this);} // tgen

static void Test_S19580C3()
{
  extern Class_Descriptor cd_S19580C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S19580C3, buf);
    S19580C3 *dp, &lv = *(dp=new (buf) S19580C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S19580C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19580C3)");
    check_base_class_offset(lv, (S19580C5*)(S19580C4*), 0, "S19580C3");
    check_base_class_offset(lv, (S19580C4*), ABISELECT(8,4), "S19580C3");
    test_class_info(&lv, &cd_S19580C3);
    dp->~S19580C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19580C3(Test_S19580C3, "S19580C3", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S19580C3C1Ev();
extern void _ZN8S19580C3D2Ev();
Name_Map name_map_S19580C3[] = {
  NSPAIR(_ZN8S19580C3C1Ev),
  NSPAIR(_ZN8S19580C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19580C5;
extern VTBL_ENTRY _ZTI8S19580C5[];
extern  VTBL_ENTRY _ZTV8S19580C5[];
extern Class_Descriptor cd_S19580C4;
extern VTBL_ENTRY _ZTI8S19580C4[];
extern  VTBL_ENTRY _ZTV8S19580C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19580C4[];
static Base_Class bases_S19580C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19580C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //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
    1, //immediately_derived
  0, 1},
  {&cd_S19580C4,    ABISELECT(8,4), //bcp->offset
    18, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19580C3[];
extern void _ZN8S19580C3D1Ev();
extern void _ZN8S19580C3D0Ev();
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C33v16Ev();
extern void ABISELECT(_ZTv0_n24_N8S19580C3D1Ev,_ZTv0_n12_N8S19580C3D1Ev)();
extern void ABISELECT(_ZThn8_N8S19580C3D1Ev,_ZThn4_N8S19580C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C3D0Ev,_ZTv0_n12_N8S19580C3D0Ev)();
extern void ABISELECT(_ZThn8_N8S19580C3D0Ev,_ZThn4_N8S19580C3D0Ev)() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
static  VTBL_ENTRY vtc_S19580C3[] = {
  0,
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19580C3[0]),
  (VTBL_ENTRY)&_ZN8S19580C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19580C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C33v16Ev,
  0,
  0,
  0,
  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)&(_ZTI8S19580C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C3D1Ev,_ZTv0_n12_N8S19580C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C3D0Ev,_ZTv0_n12_N8S19580C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
};
extern VTBL_ENTRY _ZTV8S19580C3[];
extern void ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev)();
extern void _ZN8S19580C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev)();
extern void _ZN8S19580C4D0Ev() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C4__8S19580C3[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19580C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev)();
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C5__8S19580C4__8S19580C3[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S19580C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
};
static  VTT_ENTRY vtt_S19580C3[] = {
  {&(_ZTV8S19580C3[10]),  10,40},
  {&(_ZTV8S19580C3[30]),  30,40},
  {&(_ZTV8S19580C3[10]),  10,40},
  {&(_tg__ZTV8S19580C4__8S19580C3[9]),  9,19},
  {&(_tg__ZTV8S19580C5__8S19580C4__8S19580C3[8]),  8,15},
};
extern VTBL_ENTRY _ZTI8S19580C3[];
extern  VTBL_ENTRY _ZTV8S19580C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19580C3[];
static VTBL_ENTRY alt_thunk_names13[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19580C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19580C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C3D0Ev,_ZTv0_n12_N8S19580C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19580C3D0Ev,_ZThn4_N8S19580C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C3D1Ev,_ZTv0_n12_N8S19580C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19580C3D1Ev,_ZThn4_N8S19580C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19580C3 = {  "S19580C3", // class name
  bases_S19580C3, 2,
  &(vtc_S19580C3[0]), // expected_vtbl_contents
  &(vtt_S19580C3[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S19580C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19580C3),40, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19580C3),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names13,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19580C2  : S19580C3 {
  virtual void  v17(); // _ZN8S19580C23v17Ev
  ~S19580C2(); // tgen
  S19580C2(); // tgen
};
//SIG(-1 S19580C2) C1{ BC2{ VBC3{ VBC4{ vd v2 v3 v4 v5 v6} vd v7 v8 v9 Fp FC4 Fp} vd v10} v1}


void  S19580C2 ::v17(){vfunc_called(this, "_ZN8S19580C23v17Ev");}
S19580C2 ::~S19580C2(){ note_dtor("S19580C2", this);} // tgen
S19580C2 ::S19580C2(){ note_ctor("S19580C2", this);} // tgen

static void Test_S19580C2()
{
  extern Class_Descriptor cd_S19580C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S19580C2, buf);
    S19580C2 *dp, &lv = *(dp=new (buf) S19580C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S19580C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19580C2)");
    check_base_class_offset(lv, (S19580C5*)(S19580C4*), 0, "S19580C2");
    check_base_class_offset(lv, (S19580C4*)(S19580C3*), ABISELECT(8,4), "S19580C2");
    check_base_class_offset(lv, (S19580C3*), 0, "S19580C2");
    test_class_info(&lv, &cd_S19580C2);
    dp->~S19580C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19580C2(Test_S19580C2, "S19580C2", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S19580C2C1Ev();
extern void _ZN8S19580C2D1Ev();
Name_Map name_map_S19580C2[] = {
  NSPAIR(_ZN8S19580C2C1Ev),
  NSPAIR(_ZN8S19580C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19580C5;
extern VTBL_ENTRY _ZTI8S19580C5[];
extern  VTBL_ENTRY _ZTV8S19580C5[];
extern Class_Descriptor cd_S19580C4;
extern VTBL_ENTRY _ZTI8S19580C4[];
extern  VTBL_ENTRY _ZTV8S19580C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19580C4[];
extern Class_Descriptor cd_S19580C3;
extern VTBL_ENTRY _ZTI8S19580C3[];
extern  VTBL_ENTRY _ZTV8S19580C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19580C3[];
static Base_Class bases_S19580C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19580C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //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
    1, //immediately_derived
  0, 1},
  {&cd_S19580C4,    ABISELECT(8,4), //bcp->offset
    19, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19580C3,    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
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19580C2[];
extern void _ZN8S19580C2D1Ev();
extern void _ZN8S19580C2D0Ev();
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C33v16Ev();
extern void _ZN8S19580C23v17Ev();
extern void ABISELECT(_ZTv0_n24_N8S19580C2D1Ev,_ZTv0_n12_N8S19580C2D1Ev)();
extern void ABISELECT(_ZThn8_N8S19580C2D1Ev,_ZThn4_N8S19580C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C2D0Ev,_ZTv0_n12_N8S19580C2D0Ev)();
extern void ABISELECT(_ZThn8_N8S19580C2D0Ev,_ZThn4_N8S19580C2D0Ev)() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
static  VTBL_ENTRY vtc_S19580C2[] = {
  0,
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19580C2[0]),
  (VTBL_ENTRY)&_ZN8S19580C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19580C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C33v16Ev,
  (VTBL_ENTRY)&_ZN8S19580C23v17Ev,
  0,
  0,
  0,
  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)&(_ZTI8S19580C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C2D1Ev,_ZTv0_n12_N8S19580C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C2D0Ev,_ZTv0_n12_N8S19580C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
};
extern VTBL_ENTRY _ZTV8S19580C2[];
extern void _ZN8S19580C3D1Ev();
extern void _ZN8S19580C3D0Ev();
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C33v16Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C3__8S19580C2[] = {
  0,
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19580C3[0]),
  (VTBL_ENTRY)&_ZN8S19580C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19580C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C33v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C3D1Ev,_ZTv0_n12_N8S19580C3D1Ev)();
extern void ABISELECT(_ZThn8_N8S19580C3D1Ev,_ZThn4_N8S19580C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C3D0Ev,_ZTv0_n12_N8S19580C3D0Ev)();
extern void ABISELECT(_ZThn8_N8S19580C3D0Ev,_ZThn4_N8S19580C3D0Ev)() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C4__8S19580C3__8S19580C2[] = {
  0,
  0,
  0,
  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)&(_ZTI8S19580C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C3D1Ev,_ZTv0_n12_N8S19580C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C3D0Ev,_ZTv0_n12_N8S19580C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev)();
extern void _ZN8S19580C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev)();
extern void _ZN8S19580C4D0Ev() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C4__8S19580C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19580C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev)();
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C5__8S19580C4__8S19580C2[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S19580C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
};
static  VTT_ENTRY vtt_S19580C2[] = {
  {&(_ZTV8S19580C2[10]),  10,41},
  {&(_tg__ZTV8S19580C3__8S19580C2[10]),  10,18},
  {&(_tg__ZTV8S19580C4__8S19580C3__8S19580C2[12]),  12,22},
  {&(_tg__ZTV8S19580C3__8S19580C2[10]),  10,18},
  {&(_ZTV8S19580C2[31]),  31,41},
  {&(_ZTV8S19580C2[10]),  10,41},
  {&(_tg__ZTV8S19580C4__8S19580C2[9]),  9,19},
  {&(_tg__ZTV8S19580C5__8S19580C4__8S19580C2[8]),  8,15},
};
extern VTBL_ENTRY _ZTI8S19580C2[];
extern  VTBL_ENTRY _ZTV8S19580C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19580C2[];
static VTBL_ENTRY alt_thunk_names14[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19580C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19580C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C3D0Ev,_ZTv0_n12_N8S19580C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19580C3D0Ev,_ZThn4_N8S19580C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C3D1Ev,_ZTv0_n12_N8S19580C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19580C3D1Ev,_ZThn4_N8S19580C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C2D0Ev,_ZTv0_n12_N8S19580C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19580C2D0Ev,_ZThn4_N8S19580C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C2D1Ev,_ZTv0_n12_N8S19580C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19580C2D1Ev,_ZThn4_N8S19580C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19580C2 = {  "S19580C2", // class name
  bases_S19580C2, 3,
  &(vtc_S19580C2[0]), // expected_vtbl_contents
  &(vtt_S19580C2[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S19580C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19580C2),41, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19580C2),8, //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  S19580C7  : S19580C4 {
  ::S19580C4 s19580c7f0[6];
  virtual void  v18(); // _ZN8S19580C73v18Ev
  ~S19580C7(); // tgen
  S19580C7(); // tgen
};
//SIG(-1 S19580C7) C1{ BC2{ VBC3{ vd v2 v3 v4 v5 v6} vd v7 v8 v9 Fp FC3 Fp} v1 FC2[6]}


void  S19580C7 ::v18(){vfunc_called(this, "_ZN8S19580C73v18Ev");}
S19580C7 ::~S19580C7(){ note_dtor("S19580C7", this);} // tgen
S19580C7 ::S19580C7(){ note_ctor("S19580C7", this);} // tgen

static void Test_S19580C7()
{
  extern Class_Descriptor cd_S19580C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[29];
    init_test(&cd_S19580C7, buf);
    S19580C7 *dp, &lv = *(dp=new (buf) S19580C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,112), "sizeof(S19580C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19580C7)");
    check_base_class_offset(lv, (S19580C5*)(S19580C4*), 0, "S19580C7");
    check_base_class_offset(lv, (S19580C4*), 0, "S19580C7");
    check_field_offset(lv, s19580c7f0, ABISELECT(32,16), "S19580C7.s19580c7f0");
    test_class_info(&lv, &cd_S19580C7);
    dp->~S19580C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19580C7(Test_S19580C7, "S19580C7", ABISELECT(224,112));

#else // __cplusplus

extern void _ZN8S19580C7C1Ev();
extern void _ZN8S19580C7D1Ev();
Name_Map name_map_S19580C7[] = {
  NSPAIR(_ZN8S19580C7C1Ev),
  NSPAIR(_ZN8S19580C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19580C5;
extern VTBL_ENTRY _ZTI8S19580C5[];
extern  VTBL_ENTRY _ZTV8S19580C5[];
extern Class_Descriptor cd_S19580C4;
extern VTBL_ENTRY _ZTI8S19580C4[];
extern  VTBL_ENTRY _ZTV8S19580C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19580C4[];
static Base_Class bases_S19580C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19580C5,    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
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19580C4,    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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19580C7[];
extern void _ZN8S19580C7D1Ev();
extern void _ZN8S19580C7D0Ev();
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
extern void _ZN8S19580C73v18Ev();
static  VTBL_ENTRY vtc_S19580C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19580C7[0]),
  (VTBL_ENTRY)&_ZN8S19580C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19580C7D0Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
  (VTBL_ENTRY)&_ZN8S19580C73v18Ev,
};
extern VTBL_ENTRY _ZTV8S19580C7[];
extern void _ZN8S19580C4D1Ev();
extern void _ZN8S19580C4D0Ev();
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C4__8S19580C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19580C4[0]),
  (VTBL_ENTRY)&_ZN8S19580C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19580C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
};
static  VTT_ENTRY vtt_S19580C7[] = {
  {&(_ZTV8S19580C7[9]),  9,20},
  {&(_tg__ZTV8S19580C4__8S19580C7[9]),  9,19},
  {&(_tg__ZTV8S19580C4__8S19580C7[9]),  9,19},
  {&(_ZTV8S19580C7[9]),  9,20},
};
extern VTBL_ENTRY _ZTI8S19580C7[];
extern  VTBL_ENTRY _ZTV8S19580C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19580C7[];
Class_Descriptor cd_S19580C7 = {  "S19580C7", // class name
  bases_S19580C7, 2,
  &(vtc_S19580C7[0]), // expected_vtbl_contents
  &(vtt_S19580C7[0]), // expected_vtt_contents
  ABISELECT(224,112), // object size
  NSPAIRA(_ZTI8S19580C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19580C7),20, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19580C7),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  S19580C8  : virtual S19580C7 , virtual S19580C3 {
  ::S15319C7 s19580c8f0;
  virtual  ~S19580C8(); // _ZN8S19580C8D2Ev
  virtual void  v19(); // _ZN8S19580C83v19Ev
  virtual void  v20(); // _ZN8S19580C83v20Ev
  virtual void  v21(); // _ZN8S19580C83v21Ev
  S19580C8(); // tgen
};
//SIG(-1 S19580C8) C1{ VBC2{ BC3{ VBC4{ vd v4 v5 v6 v7 v8} vd v9 v10 v11 Fp FC4 Fp} v12 FC3[6]} VBC5{ VBC3 vd v13} vd v1 v2 v3 FC6{}}


 S19580C8 ::~S19580C8(){ note_dtor("S19580C8", this);}
void  S19580C8 ::v19(){vfunc_called(this, "_ZN8S19580C83v19Ev");}
void  S19580C8 ::v20(){vfunc_called(this, "_ZN8S19580C83v20Ev");}
void  S19580C8 ::v21(){vfunc_called(this, "_ZN8S19580C83v21Ev");}
S19580C8 ::S19580C8(){ note_ctor("S19580C8", this);} // tgen

static void Test_S19580C8()
{
  extern Class_Descriptor cd_S19580C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[35];
    init_test(&cd_S19580C8, buf);
    S19580C8 *dp, &lv = *(dp=new (buf) S19580C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,136), "sizeof(S19580C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19580C8)");
    check_base_class_offset(lv, (S19580C5*)(S19580C4*)(S19580C7*), ABISELECT(16,8), "S19580C8");
    /*is_ambiguous_... S19580C8::S19580C4 */ AMB_check_base_class_offset(lv, (S19580C5*)(S19580C4*), ABISELECT(16,8), "S19580C8");
    check_base_class_offset(lv, (S19580C4*)(S19580C7*), ABISELECT(16,8), "S19580C8");
    check_base_class_offset(lv, (S19580C7*), ABISELECT(16,8), "S19580C8");
    check_base_class_offset(lv, (S19580C4*)(S19580C3*), ABISELECT(240,120), "S19580C8");
    check_base_class_offset(lv, (S19580C3*), 0, "S19580C8");
    check_field_offset(lv, s19580c8f0, ABISELECT(8,4), "S19580C8.s19580c8f0");
    test_class_info(&lv, &cd_S19580C8);
    dp->~S19580C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19580C8(Test_S19580C8, "S19580C8", ABISELECT(272,136));

#else // __cplusplus

extern void _ZN8S19580C8C1Ev();
extern void _ZN8S19580C8D2Ev();
Name_Map name_map_S19580C8[] = {
  NSPAIR(_ZN8S19580C8C1Ev),
  NSPAIR(_ZN8S19580C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19580C5;
extern VTBL_ENTRY _ZTI8S19580C5[];
extern  VTBL_ENTRY _ZTV8S19580C5[];
extern Class_Descriptor cd_S19580C4;
extern VTBL_ENTRY _ZTI8S19580C4[];
extern  VTBL_ENTRY _ZTV8S19580C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19580C4[];
extern Class_Descriptor cd_S19580C7;
extern VTBL_ENTRY _ZTI8S19580C7[];
extern  VTBL_ENTRY _ZTV8S19580C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19580C7[];
extern Class_Descriptor cd_S19580C4;
extern VTBL_ENTRY _ZTI8S19580C4[];
extern  VTBL_ENTRY _ZTV8S19580C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19580C4[];
extern Class_Descriptor cd_S19580C3;
extern VTBL_ENTRY _ZTI8S19580C3[];
extern  VTBL_ENTRY _ZTV8S19580C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19580C3[];
static Base_Class bases_S19580C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19580C5,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //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
    1, //immediately_derived
  0, 1},
  {&cd_S19580C4,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19580C7,    ABISELECT(16,8), //bcp->offset
    24, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19580C4,    ABISELECT(240,120), //bcp->offset
    48, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19580C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19580C8[];
extern void ABISELECT(_ZTv0_n24_N8S19580C8D1Ev,_ZTv0_n12_N8S19580C8D1Ev)();
extern void _ZN8S19580C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C8D0Ev,_ZTv0_n12_N8S19580C8D0Ev)();
extern void _ZN8S19580C8D0Ev() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C33v16Ev();
extern void _ZN8S19580C83v19Ev();
extern void _ZN8S19580C83v20Ev();
extern void _ZN8S19580C83v21Ev();
extern void ABISELECT(_ZTv0_n24_N8S19580C8D1Ev,_ZTv0_n12_N8S19580C8D1Ev)();
extern void ABISELECT(_ZThn16_N8S19580C8D1Ev,_ZThn8_N8S19580C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C8D0Ev,_ZTv0_n12_N8S19580C8D0Ev)();
extern void ABISELECT(_ZThn16_N8S19580C8D0Ev,_ZThn8_N8S19580C8D0Ev)() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
extern void _ZN8S19580C73v18Ev();
extern void ABISELECT(_ZTv0_n24_N8S19580C8D1Ev,_ZTv0_n12_N8S19580C8D1Ev)();
extern void ABISELECT(_ZThn240_N8S19580C8D1Ev,_ZThn120_N8S19580C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C8D0Ev,_ZTv0_n12_N8S19580C8D0Ev)();
extern void ABISELECT(_ZThn240_N8S19580C8D0Ev,_ZThn120_N8S19580C8D0Ev)() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
static  VTBL_ENTRY vtc_S19580C8[] = {
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(16,8),
  ABISELECT(240,120),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19580C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C8D1Ev,_ZTv0_n12_N8S19580C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C8D0Ev,_ZTv0_n12_N8S19580C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C33v16Ev,
  (VTBL_ENTRY)&_ZN8S19580C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19580C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19580C83v21Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19580C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C8D1Ev,_ZTv0_n12_N8S19580C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C8D0Ev,_ZTv0_n12_N8S19580C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
  (VTBL_ENTRY)&_ZN8S19580C73v18Ev,
  0,
  0,
  0,
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-240,-120),
  ABISELECT(-240,-120),
  (VTBL_ENTRY)&(_ZTI8S19580C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C8D1Ev,_ZTv0_n12_N8S19580C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C8D0Ev,_ZTv0_n12_N8S19580C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
};
extern VTBL_ENTRY _ZTV8S19580C8[];
extern void ABISELECT(_ZTv0_n24_N8S19580C7D1Ev,_ZTv0_n12_N8S19580C7D1Ev)();
extern void _ZN8S19580C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C7D0Ev,_ZTv0_n12_N8S19580C7D0Ev)();
extern void _ZN8S19580C7D0Ev() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
extern void _ZN8S19580C73v18Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C7__8S19580C8[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19580C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C7D1Ev,_ZTv0_n12_N8S19580C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C7D0Ev,_ZTv0_n12_N8S19580C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
  (VTBL_ENTRY)&_ZN8S19580C73v18Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev)();
extern void _ZN8S19580C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev)();
extern void _ZN8S19580C4D0Ev() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C48S19580C7__8S19580C8[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19580C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C3D1Ev,_ZTv0_n12_N8S19580C3D1Ev)();
extern void _ZN8S19580C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C3D0Ev,_ZTv0_n12_N8S19580C3D0Ev)();
extern void _ZN8S19580C3D0Ev() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C33v16Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C3__8S19580C8[] = {
  ABISELECT(16,8),
  ABISELECT(240,120),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19580C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C3D1Ev,_ZTv0_n12_N8S19580C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C3D0Ev,_ZTv0_n12_N8S19580C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C33v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C3D1Ev,_ZTv0_n12_N8S19580C3D1Ev)();
extern void ABISELECT(_ZThn240_N8S19580C3D1Ev,_ZThn120_N8S19580C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C3D0Ev,_ZTv0_n12_N8S19580C3D0Ev)();
extern void ABISELECT(_ZThn240_N8S19580C3D0Ev,_ZThn120_N8S19580C3D0Ev)() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C4__8S19580C3__8S19580C8[] = {
  0,
  0,
  0,
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-240,-120),
  ABISELECT(-240,-120),
  (VTBL_ENTRY)&(_ZTI8S19580C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C3D1Ev,_ZTv0_n12_N8S19580C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C3D0Ev,_ZTv0_n12_N8S19580C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C3D1Ev,_ZTv0_n12_N8S19580C3D1Ev)();
extern void ABISELECT(_ZThn16_N8S19580C3D1Ev,_ZThn8_N8S19580C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C3D0Ev,_ZTv0_n12_N8S19580C3D0Ev)();
extern void ABISELECT(_ZThn16_N8S19580C3D0Ev,_ZThn8_N8S19580C3D0Ev)() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C5__8S19580C3__8S19580C8[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19580C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C3D1Ev,_ZTv0_n12_N8S19580C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C3D0Ev,_ZTv0_n12_N8S19580C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev)();
extern void _ZN8S19580C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev)();
extern void _ZN8S19580C4D0Ev() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C4__A1__8S19580C8[] = {
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19580C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev)();
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C5__8S19580C4__A1__8S19580C8[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(224,112),
  ABISELECT(224,112),
  (VTBL_ENTRY)&(_ZTI8S19580C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
};
static  VTT_ENTRY vtt_S19580C8[] = {
  {&(_ZTV8S19580C8[13]),  13,70},
  {&(_ZTV8S19580C8[37]),  37,70},
  {&(_ZTV8S19580C8[37]),  37,70},
  {&(_ZTV8S19580C8[13]),  13,70},
  {&(_ZTV8S19580C8[60]),  60,70},
  {&(_tg__ZTV8S19580C7__8S19580C8[9]),  9,20},
  {&(_tg__ZTV8S19580C48S19580C7__8S19580C8[9]),  9,19},
  {&(_tg__ZTV8S19580C48S19580C7__8S19580C8[9]),  9,19},
  {&(_tg__ZTV8S19580C7__8S19580C8[9]),  9,20},
  {&(_tg__ZTV8S19580C3__8S19580C8[10]),  10,18},
  {&(_tg__ZTV8S19580C4__8S19580C3__8S19580C8[12]),  12,22},
  {&(_tg__ZTV8S19580C5__8S19580C3__8S19580C8[8]),  8,15},
  {&(_tg__ZTV8S19580C4__A1__8S19580C8[9]),  9,19},
  {&(_tg__ZTV8S19580C5__8S19580C4__A1__8S19580C8[8]),  8,15},
};
extern VTBL_ENTRY _ZTI8S19580C8[];
extern  VTBL_ENTRY _ZTV8S19580C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19580C8[];
static VTBL_ENTRY alt_thunk_names15[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C3D0Ev,_ZTv0_n12_N8S19580C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19580C3D0Ev,_ZThn8_N8S19580C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19580C3D0Ev,_ZThn120_N8S19580C3D0Ev),
  (VTBL_ENTRY)_ZN8S19580C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C3D1Ev,_ZTv0_n12_N8S19580C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19580C3D1Ev,_ZThn8_N8S19580C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19580C3D1Ev,_ZThn120_N8S19580C3D1Ev),
  (VTBL_ENTRY)_ZN8S19580C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19580C4D0Ev,
  (VTBL_ENTRY)_ZN8S19580C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19580C4D1Ev,
  (VTBL_ENTRY)_ZN8S19580C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C7D0Ev,_ZTv0_n12_N8S19580C7D0Ev), // 
  (VTBL_ENTRY)_ZN8S19580C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C7D1Ev,_ZTv0_n12_N8S19580C7D1Ev), // 
  (VTBL_ENTRY)_ZN8S19580C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C8D0Ev,_ZTv0_n12_N8S19580C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19580C8D0Ev,_ZThn120_N8S19580C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19580C8D0Ev,_ZThn8_N8S19580C8D0Ev),
  (VTBL_ENTRY)_ZN8S19580C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C8D1Ev,_ZTv0_n12_N8S19580C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19580C8D1Ev,_ZThn120_N8S19580C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19580C8D1Ev,_ZThn8_N8S19580C8D1Ev),
  (VTBL_ENTRY)_ZN8S19580C8D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19580C8 = {  "S19580C8", // class name
  bases_S19580C8, 5,
  &(vtc_S19580C8[0]), // expected_vtbl_contents
  &(vtt_S19580C8[0]), // expected_vtt_contents
  ABISELECT(272,136), // object size
  NSPAIRA(_ZTI8S19580C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19580C8),70, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19580C8),14, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names15,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19580C6  : virtual S19580C7 , virtual S19580C8 {
  virtual  ~S19580C6(); // _ZN8S19580C6D2Ev
  virtual void  v22(); // _ZN8S19580C63v22Ev
  S19580C6(); // tgen
};
//SIG(-1 S19580C6) C1{ VBC2{ BC3{ VBC4{ vd v2 v3 v4 v5 v6} vd v7 v8 v9 Fp FC4 Fp} v10 FC3[6]} VBC5{ VBC2 VBC6{ VBC3 vd v11} vd v12 v13 v14 FC7{}} vd v1}


 S19580C6 ::~S19580C6(){ note_dtor("S19580C6", this);}
void  S19580C6 ::v22(){vfunc_called(this, "_ZN8S19580C63v22Ev");}
S19580C6 ::S19580C6(){ note_ctor("S19580C6", this);} // tgen

static void Test_S19580C6()
{
  extern Class_Descriptor cd_S19580C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[36];
    init_test(&cd_S19580C6, buf);
    S19580C6 *dp, &lv = *(dp=new (buf) S19580C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(280,140), "sizeof(S19580C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19580C6)");
    check_base_class_offset(lv, (S19580C5*)(S19580C4*)(S19580C7*), 0, "S19580C6");
    /*is_ambiguous_... S19580C6::S19580C4 */ AMB_check_base_class_offset(lv, (S19580C5*)(S19580C4*), 0, "S19580C6");
    check_base_class_offset(lv, (S19580C4*)(S19580C7*), ABISELECT(8,4), "S19580C6");
    check_base_class_offset(lv, (S19580C7*), ABISELECT(8,4), "S19580C6");
    check_base_class_offset(lv, (S19580C7*)(S19580C8*), ABISELECT(8,4), "S19580C6");
    check_base_class_offset(lv, (S19580C4*)(S19580C3*), ABISELECT(248,124), "S19580C6");
    check_base_class_offset(lv, (S19580C3*)(S19580C8*), ABISELECT(232,116), "S19580C6");
    check_base_class_offset(lv, (S19580C8*), ABISELECT(232,116), "S19580C6");
    test_class_info(&lv, &cd_S19580C6);
    dp->~S19580C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19580C6(Test_S19580C6, "S19580C6", ABISELECT(280,140));

#else // __cplusplus

extern void _ZN8S19580C6C1Ev();
extern void _ZN8S19580C6D2Ev();
Name_Map name_map_S19580C6[] = {
  NSPAIR(_ZN8S19580C6C1Ev),
  NSPAIR(_ZN8S19580C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19580C5;
extern VTBL_ENTRY _ZTI8S19580C5[];
extern  VTBL_ENTRY _ZTV8S19580C5[];
extern Class_Descriptor cd_S19580C4;
extern VTBL_ENTRY _ZTI8S19580C4[];
extern  VTBL_ENTRY _ZTV8S19580C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19580C4[];
extern Class_Descriptor cd_S19580C7;
extern VTBL_ENTRY _ZTI8S19580C7[];
extern  VTBL_ENTRY _ZTV8S19580C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19580C7[];
extern Class_Descriptor cd_S19580C4;
extern VTBL_ENTRY _ZTI8S19580C4[];
extern  VTBL_ENTRY _ZTV8S19580C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19580C4[];
extern Class_Descriptor cd_S19580C3;
extern VTBL_ENTRY _ZTI8S19580C3[];
extern  VTBL_ENTRY _ZTV8S19580C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19580C3[];
extern Class_Descriptor cd_S19580C8;
extern VTBL_ENTRY _ZTI8S19580C8[];
extern  VTBL_ENTRY _ZTV8S19580C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19580C8[];
static Base_Class bases_S19580C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19580C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //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
    1, //immediately_derived
  0, 1},
  {&cd_S19580C4,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //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
    2, //immediately_derived
  0, 0},
  {&cd_S19580C7,    ABISELECT(8,4), //bcp->offset
    21, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19580C4,    ABISELECT(248,124), //bcp->offset
    72, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19580C3,    ABISELECT(232,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19580C8,    ABISELECT(232,116), //bcp->offset
    45, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19580C6[];
extern void _ZN8S19580C6D1Ev();
extern void _ZN8S19580C6D0Ev();
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C63v22Ev();
extern void ABISELECT(_ZTv0_n24_N8S19580C6D1Ev,_ZTv0_n12_N8S19580C6D1Ev)();
extern void ABISELECT(_ZThn8_N8S19580C6D1Ev,_ZThn4_N8S19580C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C6D0Ev,_ZTv0_n12_N8S19580C6D0Ev)();
extern void ABISELECT(_ZThn8_N8S19580C6D0Ev,_ZThn4_N8S19580C6D0Ev)() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
extern void _ZN8S19580C73v18Ev();
extern void ABISELECT(_ZTv0_n24_N8S19580C6D1Ev,_ZTv0_n12_N8S19580C6D1Ev)();
extern void ABISELECT(_ZThn232_N8S19580C6D1Ev,_ZThn116_N8S19580C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C6D0Ev,_ZTv0_n12_N8S19580C6D0Ev)();
extern void ABISELECT(_ZThn232_N8S19580C6D0Ev,_ZThn116_N8S19580C6D0Ev)() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C33v16Ev();
extern void _ZN8S19580C83v19Ev();
extern void _ZN8S19580C83v20Ev();
extern void _ZN8S19580C83v21Ev();
extern void ABISELECT(_ZTv0_n24_N8S19580C6D1Ev,_ZTv0_n12_N8S19580C6D1Ev)();
extern void ABISELECT(_ZThn248_N8S19580C6D1Ev,_ZThn124_N8S19580C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C6D0Ev,_ZTv0_n12_N8S19580C6D0Ev)();
extern void ABISELECT(_ZThn248_N8S19580C6D0Ev,_ZThn124_N8S19580C6D0Ev)() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
static  VTBL_ENTRY vtc_S19580C6[] = {
  ABISELECT(248,124),
  ABISELECT(232,116),
  ABISELECT(232,116),
  0,
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19580C6[0]),
  (VTBL_ENTRY)&_ZN8S19580C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19580C6D0Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C63v22Ev,
  0,
  0,
  0,
  0,
  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)&(_ZTI8S19580C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C6D1Ev,_ZTv0_n12_N8S19580C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C6D0Ev,_ZTv0_n12_N8S19580C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
  (VTBL_ENTRY)&_ZN8S19580C73v18Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-224,-112),
  0,
  ABISELECT(-232,-116),
  ABISELECT(16,8),
  ABISELECT(-232,-116),
  ABISELECT(-232,-116),
  ABISELECT(-232,-116),
  ABISELECT(-232,-116),
  ABISELECT(-232,-116),
  ABISELECT(-232,-116),
  ABISELECT(-232,-116),
  (VTBL_ENTRY)&(_ZTI8S19580C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C6D1Ev,_ZTv0_n12_N8S19580C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C6D0Ev,_ZTv0_n12_N8S19580C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C33v16Ev,
  (VTBL_ENTRY)&_ZN8S19580C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19580C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19580C83v21Ev,
  0,
  0,
  0,
  ABISELECT(-248,-124),
  ABISELECT(-248,-124),
  ABISELECT(-248,-124),
  ABISELECT(-248,-124),
  ABISELECT(-248,-124),
  ABISELECT(-248,-124),
  ABISELECT(-248,-124),
  ABISELECT(-248,-124),
  (VTBL_ENTRY)&(_ZTI8S19580C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C6D1Ev,_ZTv0_n12_N8S19580C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C6D0Ev,_ZTv0_n12_N8S19580C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
};
extern VTBL_ENTRY _ZTV8S19580C6[];
extern void ABISELECT(_ZTv0_n24_N8S19580C7D1Ev,_ZTv0_n12_N8S19580C7D1Ev)();
extern void _ZN8S19580C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C7D0Ev,_ZTv0_n12_N8S19580C7D0Ev)();
extern void _ZN8S19580C7D0Ev() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
extern void _ZN8S19580C73v18Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C7__8S19580C6[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19580C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C7D1Ev,_ZTv0_n12_N8S19580C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C7D0Ev,_ZTv0_n12_N8S19580C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
  (VTBL_ENTRY)&_ZN8S19580C73v18Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev)();
extern void _ZN8S19580C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev)();
extern void _ZN8S19580C4D0Ev() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C48S19580C7__8S19580C6[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19580C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev)();
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C5__8S19580C48S19580C7__8S19580C6[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S19580C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C7D1Ev,_ZTv0_n12_N8S19580C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19580C7D0Ev,_ZTv0_n12_N8S19580C7D0Ev)();
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C5__8S19580C7__8S19580C6[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S19580C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C7D1Ev,_ZTv0_n12_N8S19580C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C7D0Ev,_ZTv0_n12_N8S19580C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C8D1Ev,_ZTv0_n12_N8S19580C8D1Ev)();
extern void _ZN8S19580C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C8D0Ev,_ZTv0_n12_N8S19580C8D0Ev)();
extern void _ZN8S19580C8D0Ev() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C33v16Ev();
extern void _ZN8S19580C83v19Ev();
extern void _ZN8S19580C83v20Ev();
extern void _ZN8S19580C83v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C8__8S19580C6[] = {
  0,
  ABISELECT(-224,-112),
  0,
  ABISELECT(-232,-116),
  ABISELECT(16,8),
  ABISELECT(-232,-116),
  ABISELECT(-232,-116),
  ABISELECT(-232,-116),
  ABISELECT(-232,-116),
  ABISELECT(-232,-116),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19580C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C8D1Ev,_ZTv0_n12_N8S19580C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C8D0Ev,_ZTv0_n12_N8S19580C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C33v16Ev,
  (VTBL_ENTRY)&_ZN8S19580C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19580C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19580C83v21Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C8D1Ev,_ZTv0_n12_N8S19580C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19580C8D0Ev,_ZTv0_n12_N8S19580C8D0Ev)();
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
extern void _ZN8S19580C73v18Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C7__8S19580C8__8S19580C6[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(224,112),
  ABISELECT(224,112),
  (VTBL_ENTRY)&(_ZTI8S19580C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C8D1Ev,_ZTv0_n12_N8S19580C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C8D0Ev,_ZTv0_n12_N8S19580C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
  (VTBL_ENTRY)&_ZN8S19580C73v18Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C8D1Ev,_ZTv0_n12_N8S19580C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19580C8D0Ev,_ZTv0_n12_N8S19580C8D0Ev)();
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C5__8S19580C8__8S19580C6[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(232,116),
  ABISELECT(232,116),
  (VTBL_ENTRY)&(_ZTI8S19580C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C8D1Ev,_ZTv0_n12_N8S19580C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C8D0Ev,_ZTv0_n12_N8S19580C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C8D1Ev,_ZTv0_n12_N8S19580C8D1Ev)();
extern void ABISELECT(_ZThn16_N8S19580C8D1Ev,_ZThn8_N8S19580C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C8D0Ev,_ZTv0_n12_N8S19580C8D0Ev)();
extern void ABISELECT(_ZThn16_N8S19580C8D0Ev,_ZThn8_N8S19580C8D0Ev)() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C4__A1__8S19580C8__8S19580C6[] = {
  0,
  0,
  0,
  ABISELECT(-248,-124),
  ABISELECT(-248,-124),
  ABISELECT(-248,-124),
  ABISELECT(-248,-124),
  ABISELECT(-248,-124),
  ABISELECT(-248,-124),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19580C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C8D1Ev,_ZTv0_n12_N8S19580C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C8D0Ev,_ZTv0_n12_N8S19580C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C3D1Ev,_ZTv0_n12_N8S19580C3D1Ev)();
extern void _ZN8S19580C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C3D0Ev,_ZTv0_n12_N8S19580C3D0Ev)();
extern void _ZN8S19580C3D0Ev() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C33v16Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C3__8S19580C6[] = {
  ABISELECT(-232,-116),
  ABISELECT(16,8),
  ABISELECT(-232,-116),
  ABISELECT(-232,-116),
  ABISELECT(-232,-116),
  ABISELECT(-232,-116),
  ABISELECT(-232,-116),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19580C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C3D1Ev,_ZTv0_n12_N8S19580C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C3D0Ev,_ZTv0_n12_N8S19580C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C33v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C3D1Ev,_ZTv0_n12_N8S19580C3D1Ev)();
extern void ABISELECT(_ZThn16_N8S19580C3D1Ev,_ZThn8_N8S19580C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C3D0Ev,_ZTv0_n12_N8S19580C3D0Ev)();
extern void ABISELECT(_ZThn16_N8S19580C3D0Ev,_ZThn8_N8S19580C3D0Ev)() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C4__8S19580C3__8S19580C6[] = {
  0,
  0,
  0,
  ABISELECT(-248,-124),
  ABISELECT(-248,-124),
  ABISELECT(-248,-124),
  ABISELECT(-248,-124),
  ABISELECT(-248,-124),
  ABISELECT(-248,-124),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19580C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C3D1Ev,_ZTv0_n12_N8S19580C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C3D0Ev,_ZTv0_n12_N8S19580C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C3D1Ev,_ZTv0_n12_N8S19580C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19580C3D0Ev,_ZTv0_n12_N8S19580C3D0Ev)();
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C5__8S19580C3__8S19580C6[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(232,116),
  ABISELECT(232,116),
  (VTBL_ENTRY)&(_ZTI8S19580C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C3D1Ev,_ZTv0_n12_N8S19580C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C3D0Ev,_ZTv0_n12_N8S19580C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev)();
extern void _ZN8S19580C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev)();
extern void _ZN8S19580C4D0Ev() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C4__A1__8S19580C6[] = {
  ABISELECT(-248,-124),
  ABISELECT(-248,-124),
  ABISELECT(-248,-124),
  ABISELECT(-248,-124),
  ABISELECT(-248,-124),
  ABISELECT(-248,-124),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19580C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev)();
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C5__8S19580C4__A1__8S19580C6[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(248,124),
  ABISELECT(248,124),
  (VTBL_ENTRY)&(_ZTI8S19580C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
};
static  VTT_ENTRY vtt_S19580C6[] = {
  {&(_ZTV8S19580C6[13]),  13,94},
  {&(_ZTV8S19580C6[34]),  34,94},
  {&(_ZTV8S19580C6[13]),  13,94},
  {&(_ZTV8S19580C6[61]),  61,94},
  {&(_ZTV8S19580C6[61]),  61,94},
  {&(_ZTV8S19580C6[84]),  84,94},
  {&(_tg__ZTV8S19580C7__8S19580C6[9]),  9,20},
  {&(_tg__ZTV8S19580C48S19580C7__8S19580C6[9]),  9,19},
  {&(_tg__ZTV8S19580C5__8S19580C48S19580C7__8S19580C6[8]),  8,15},
  {&(_tg__ZTV8S19580C5__8S19580C7__8S19580C6[8]),  8,15},
  {&(_tg__ZTV8S19580C8__8S19580C6[13]),  13,24},
  {&(_tg__ZTV8S19580C7__8S19580C8__8S19580C6[13]),  13,24},
  {&(_tg__ZTV8S19580C5__8S19580C8__8S19580C6[8]),  8,15},
  {&(_tg__ZTV8S19580C8__8S19580C6[13]),  13,24},
  {&(_tg__ZTV8S19580C4__A1__8S19580C8__8S19580C6[12]),  12,22},
  {&(_tg__ZTV8S19580C3__8S19580C6[10]),  10,18},
  {&(_tg__ZTV8S19580C4__8S19580C3__8S19580C6[12]),  12,22},
  {&(_tg__ZTV8S19580C5__8S19580C3__8S19580C6[8]),  8,15},
  {&(_tg__ZTV8S19580C4__A1__8S19580C6[9]),  9,19},
  {&(_tg__ZTV8S19580C5__8S19580C4__A1__8S19580C6[8]),  8,15},
};
extern VTBL_ENTRY _ZTI8S19580C6[];
extern  VTBL_ENTRY _ZTV8S19580C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19580C6[];
static VTBL_ENTRY alt_thunk_names16[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C3D0Ev,_ZTv0_n12_N8S19580C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19580C3D0Ev,_ZThn8_N8S19580C3D0Ev),
  (VTBL_ENTRY)_ZN8S19580C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C3D1Ev,_ZTv0_n12_N8S19580C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19580C3D1Ev,_ZThn8_N8S19580C3D1Ev),
  (VTBL_ENTRY)_ZN8S19580C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C8D0Ev,_ZTv0_n12_N8S19580C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19580C8D0Ev,_ZThn8_N8S19580C8D0Ev),
  (VTBL_ENTRY)_ZN8S19580C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C8D1Ev,_ZTv0_n12_N8S19580C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19580C8D1Ev,_ZThn8_N8S19580C8D1Ev),
  (VTBL_ENTRY)_ZN8S19580C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19580C4D0Ev,
  (VTBL_ENTRY)_ZN8S19580C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19580C4D1Ev,
  (VTBL_ENTRY)_ZN8S19580C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C7D0Ev,_ZTv0_n12_N8S19580C7D0Ev), // 
  (VTBL_ENTRY)_ZN8S19580C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C7D1Ev,_ZTv0_n12_N8S19580C7D1Ev), // 
  (VTBL_ENTRY)_ZN8S19580C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C6D0Ev,_ZTv0_n12_N8S19580C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S19580C6D0Ev,_ZThn124_N8S19580C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19580C6D0Ev,_ZThn116_N8S19580C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19580C6D0Ev,_ZThn4_N8S19580C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C6D1Ev,_ZTv0_n12_N8S19580C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S19580C6D1Ev,_ZThn124_N8S19580C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19580C6D1Ev,_ZThn116_N8S19580C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19580C6D1Ev,_ZThn4_N8S19580C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19580C6 = {  "S19580C6", // class name
  bases_S19580C6, 6,
  &(vtc_S19580C6[0]), // expected_vtbl_contents
  &(vtt_S19580C6[0]), // expected_vtt_contents
  ABISELECT(280,140), // object size
  NSPAIRA(_ZTI8S19580C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19580C6),94, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19580C6),20, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names16,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19580C1  : virtual S19580C2 , virtual S19580C6 {
  char s19580c1f0;
  virtual  ~S19580C1(); // _ZN8S19580C1D2Ev
  virtual void  v1(); // _ZN8S19580C12v1Ev
  virtual void  v2(); // _ZN8S19580C12v2Ev
  virtual void  v3(); // _ZN8S19580C12v3Ev
  virtual void  v4(); // _ZN8S19580C12v4Ev
  virtual void  v5(); // _ZN8S19580C12v5Ev
  virtual void  v6(); // _ZN8S19580C12v6Ev
  virtual void  v7(); // _ZN8S19580C12v7Ev
  S19580C1(); // tgen
};
//SIG(1 S19580C1) C1{ VBC2{ BC3{ VBC4{ VBC5{ vd v8 v9 v10 v11 v12} vd v13 v14 v15 Fp FC5 Fp} vd v16} v17} VBC6{ VBC7{ BC4 v18 FC4[6]} VBC8{ VBC7 VBC3 vd v19 v20 v21 FC9{}} vd v22} vd v1 v2 v3 v4 v5 v6 v7 Fc}


 S19580C1 ::~S19580C1(){ note_dtor("S19580C1", this);}
void  S19580C1 ::v1(){vfunc_called(this, "_ZN8S19580C12v1Ev");}
void  S19580C1 ::v2(){vfunc_called(this, "_ZN8S19580C12v2Ev");}
void  S19580C1 ::v3(){vfunc_called(this, "_ZN8S19580C12v3Ev");}
void  S19580C1 ::v4(){vfunc_called(this, "_ZN8S19580C12v4Ev");}
void  S19580C1 ::v5(){vfunc_called(this, "_ZN8S19580C12v5Ev");}
void  S19580C1 ::v6(){vfunc_called(this, "_ZN8S19580C12v6Ev");}
void  S19580C1 ::v7(){vfunc_called(this, "_ZN8S19580C12v7Ev");}
S19580C1 ::S19580C1(){ note_ctor("S19580C1", this);} // tgen

static void Test_S19580C1()
{
  extern Class_Descriptor cd_S19580C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[38];
    init_test(&cd_S19580C1, buf);
    S19580C1 *dp, &lv = *(dp=new (buf) S19580C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,148), "sizeof(S19580C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19580C1)");
    /*is_ambiguous_... S19580C1::S19580C4 */ AMB_check_base_class_offset(lv, (S19580C5*)(S19580C4*), 0, "S19580C1");
    check_base_class_offset(lv, (S19580C5*)(S19580C4*)(S19580C7*), 0, "S19580C1");
    check_base_class_offset(lv, (S19580C4*)(S19580C3*)(S19580C2*), ABISELECT(16,8), "S19580C1");
    /*is_ambiguous_... S19580C1::S19580C3 */ AMB_check_base_class_offset(lv, (S19580C4*)(S19580C3*), ABISELECT(16,8), "S19580C1");
    check_base_class_offset(lv, (S19580C3*)(S19580C2*), 0, "S19580C1");
    check_base_class_offset(lv, (S19580C2*), 0, "S19580C1");
    check_base_class_offset(lv, (S19580C4*)(S19580C7*), ABISELECT(56,28), "S19580C1");
    check_base_class_offset(lv, (S19580C7*)(S19580C6*), ABISELECT(56,28), "S19580C1");
    check_base_class_offset(lv, (S19580C7*)(S19580C8*), ABISELECT(56,28), "S19580C1");
    check_base_class_offset(lv, (S19580C3*)(S19580C8*), ABISELECT(280,140), "S19580C1");
    check_base_class_offset(lv, (S19580C8*)(S19580C6*), ABISELECT(280,140), "S19580C1");
    check_base_class_offset(lv, (S19580C6*), ABISELECT(48,24), "S19580C1");
    check_field_offset(lv, s19580c1f0, ABISELECT(8,4), "S19580C1.s19580c1f0");
    test_class_info(&lv, &cd_S19580C1);
    dp->~S19580C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19580C1(Test_S19580C1, "S19580C1", ABISELECT(296,148));

#else // __cplusplus

extern void _ZN8S19580C1C1Ev();
extern void _ZN8S19580C1D2Ev();
Name_Map name_map_S19580C1[] = {
  NSPAIR(_ZN8S19580C1C1Ev),
  NSPAIR(_ZN8S19580C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19580C5;
extern VTBL_ENTRY _ZTI8S19580C5[];
extern  VTBL_ENTRY _ZTV8S19580C5[];
extern Class_Descriptor cd_S19580C4;
extern VTBL_ENTRY _ZTI8S19580C4[];
extern  VTBL_ENTRY _ZTV8S19580C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19580C4[];
extern Class_Descriptor cd_S19580C3;
extern VTBL_ENTRY _ZTI8S19580C3[];
extern  VTBL_ENTRY _ZTV8S19580C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19580C3[];
extern Class_Descriptor cd_S19580C2;
extern VTBL_ENTRY _ZTI8S19580C2[];
extern  VTBL_ENTRY _ZTV8S19580C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19580C2[];
extern Class_Descriptor cd_S19580C4;
extern VTBL_ENTRY _ZTI8S19580C4[];
extern  VTBL_ENTRY _ZTV8S19580C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19580C4[];
extern Class_Descriptor cd_S19580C7;
extern VTBL_ENTRY _ZTI8S19580C7[];
extern  VTBL_ENTRY _ZTV8S19580C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19580C7[];
extern Class_Descriptor cd_S19580C3;
extern VTBL_ENTRY _ZTI8S19580C3[];
extern  VTBL_ENTRY _ZTV8S19580C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19580C3[];
extern Class_Descriptor cd_S19580C8;
extern VTBL_ENTRY _ZTI8S19580C8[];
extern  VTBL_ENTRY _ZTV8S19580C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19580C8[];
extern Class_Descriptor cd_S19580C6;
extern VTBL_ENTRY _ZTI8S19580C6[];
extern  VTBL_ENTRY _ZTV8S19580C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19580C6[];
static Base_Class bases_S19580C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19580C5,    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
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19580C4,    ABISELECT(16,8), //bcp->offset
    33, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19580C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19580C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19580C4,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19580C7,    ABISELECT(56,28), //bcp->offset
    77, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19580C3,    ABISELECT(280,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19580C8,    ABISELECT(280,140), //bcp->offset
    101, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19580C6,    ABISELECT(48,24), //bcp->offset
    55, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19580C1[];
extern void _ZN8S19580C1D1Ev();
extern void _ZN8S19580C1D0Ev();
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C33v16Ev();
extern void _ZN8S19580C23v17Ev();
extern void _ZN8S19580C12v1Ev();
extern void _ZN8S19580C12v2Ev();
extern void _ZN8S19580C12v3Ev();
extern void _ZN8S19580C12v4Ev();
extern void _ZN8S19580C12v5Ev();
extern void _ZN8S19580C12v6Ev();
extern void _ZN8S19580C12v7Ev();
extern void ABISELECT(_ZTv0_n24_N8S19580C1D1Ev,_ZTv0_n12_N8S19580C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S19580C1D1Ev,_ZThn8_N8S19580C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C1D0Ev,_ZTv0_n12_N8S19580C1D0Ev)();
extern void ABISELECT(_ZThn16_N8S19580C1D0Ev,_ZThn8_N8S19580C1D0Ev)() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
extern void ABISELECT(_ZTv0_n24_N8S19580C1D1Ev,_ZTv0_n12_N8S19580C1D1Ev)();
extern void ABISELECT(_ZThn48_N8S19580C1D1Ev,_ZThn24_N8S19580C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C1D0Ev,_ZTv0_n12_N8S19580C1D0Ev)();
extern void ABISELECT(_ZThn48_N8S19580C1D0Ev,_ZThn24_N8S19580C1D0Ev)() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C63v22Ev();
extern void ABISELECT(_ZTv0_n24_N8S19580C1D1Ev,_ZTv0_n12_N8S19580C1D1Ev)();
extern void ABISELECT(_ZThn56_N8S19580C1D1Ev,_ZThn28_N8S19580C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C1D0Ev,_ZTv0_n12_N8S19580C1D0Ev)();
extern void ABISELECT(_ZThn56_N8S19580C1D0Ev,_ZThn28_N8S19580C1D0Ev)() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
extern void _ZN8S19580C73v18Ev();
extern void ABISELECT(_ZTv0_n24_N8S19580C1D1Ev,_ZTv0_n12_N8S19580C1D1Ev)();
extern void ABISELECT(_ZThn280_N8S19580C1D1Ev,_ZThn140_N8S19580C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C1D0Ev,_ZTv0_n12_N8S19580C1D0Ev)();
extern void ABISELECT(_ZThn280_N8S19580C1D0Ev,_ZThn140_N8S19580C1D0Ev)() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C33v16Ev();
extern void _ZN8S19580C83v19Ev();
extern void _ZN8S19580C83v20Ev();
extern void _ZN8S19580C83v21Ev();
static  VTBL_ENTRY vtc_S19580C1[] = {
  ABISELECT(280,140),
  ABISELECT(280,140),
  ABISELECT(56,28),
  ABISELECT(48,24),
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19580C1[0]),
  (VTBL_ENTRY)&_ZN8S19580C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19580C1D0Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C33v16Ev,
  (VTBL_ENTRY)&_ZN8S19580C23v17Ev,
  (VTBL_ENTRY)&_ZN8S19580C12v1Ev,
  (VTBL_ENTRY)&_ZN8S19580C12v2Ev,
  (VTBL_ENTRY)&_ZN8S19580C12v3Ev,
  (VTBL_ENTRY)&_ZN8S19580C12v4Ev,
  (VTBL_ENTRY)&_ZN8S19580C12v5Ev,
  (VTBL_ENTRY)&_ZN8S19580C12v6Ev,
  (VTBL_ENTRY)&_ZN8S19580C12v7Ev,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19580C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C1D1Ev,_ZTv0_n12_N8S19580C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C1D0Ev,_ZTv0_n12_N8S19580C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
  0,
  ABISELECT(-32,-16),
  ABISELECT(232,116),
  ABISELECT(232,116),
  ABISELECT(-48,-24),
  ABISELECT(8,4),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19580C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C1D1Ev,_ZTv0_n12_N8S19580C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C1D0Ev,_ZTv0_n12_N8S19580C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C63v22Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S19580C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C1D1Ev,_ZTv0_n12_N8S19580C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C1D0Ev,_ZTv0_n12_N8S19580C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
  (VTBL_ENTRY)&_ZN8S19580C73v18Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-224,-112),
  0,
  ABISELECT(-280,-140),
  ABISELECT(-264,-132),
  ABISELECT(-280,-140),
  ABISELECT(-280,-140),
  ABISELECT(-280,-140),
  ABISELECT(-280,-140),
  ABISELECT(-280,-140),
  ABISELECT(-280,-140),
  ABISELECT(-280,-140),
  (VTBL_ENTRY)&(_ZTI8S19580C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C1D1Ev,_ZTv0_n12_N8S19580C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C1D0Ev,_ZTv0_n12_N8S19580C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C33v16Ev,
  (VTBL_ENTRY)&_ZN8S19580C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19580C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19580C83v21Ev,
};
extern VTBL_ENTRY _ZTV8S19580C1[];
extern void ABISELECT(_ZTv0_n24_N8S19580C2D1Ev,_ZTv0_n12_N8S19580C2D1Ev)();
extern void _ZN8S19580C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C2D0Ev,_ZTv0_n12_N8S19580C2D0Ev)();
extern void _ZN8S19580C2D0Ev() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C33v16Ev();
extern void _ZN8S19580C23v17Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C2__8S19580C1[] = {
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19580C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C2D1Ev,_ZTv0_n12_N8S19580C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C2D0Ev,_ZTv0_n12_N8S19580C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C33v16Ev,
  (VTBL_ENTRY)&_ZN8S19580C23v17Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C3D1Ev,_ZTv0_n12_N8S19580C3D1Ev)();
extern void _ZN8S19580C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C3D0Ev,_ZTv0_n12_N8S19580C3D0Ev)();
extern void _ZN8S19580C3D0Ev() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C33v16Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C38S19580C2__8S19580C1[] = {
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19580C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C3D1Ev,_ZTv0_n12_N8S19580C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C3D0Ev,_ZTv0_n12_N8S19580C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C33v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C3D1Ev,_ZTv0_n12_N8S19580C3D1Ev)();
extern void ABISELECT(_ZThn16_N8S19580C3D1Ev,_ZThn8_N8S19580C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C3D0Ev,_ZTv0_n12_N8S19580C3D0Ev)();
extern void ABISELECT(_ZThn16_N8S19580C3D0Ev,_ZThn8_N8S19580C3D0Ev)() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C4__8S19580C38S19580C2__8S19580C1[] = {
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19580C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C3D1Ev,_ZTv0_n12_N8S19580C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C3D0Ev,_ZTv0_n12_N8S19580C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C2D1Ev,_ZTv0_n12_N8S19580C2D1Ev)();
extern void ABISELECT(_ZThn16_N8S19580C2D1Ev,_ZThn8_N8S19580C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C2D0Ev,_ZTv0_n12_N8S19580C2D0Ev)();
extern void ABISELECT(_ZThn16_N8S19580C2D0Ev,_ZThn8_N8S19580C2D0Ev)() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C4__8S19580C2__8S19580C1[] = {
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19580C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C2D1Ev,_ZTv0_n12_N8S19580C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C2D0Ev,_ZTv0_n12_N8S19580C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev)();
extern void _ZN8S19580C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev)();
extern void _ZN8S19580C4D0Ev() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C4__8S19580C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19580C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev)();
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C5__8S19580C4__8S19580C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S19580C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C6D1Ev,_ZTv0_n12_N8S19580C6D1Ev)();
extern void _ZN8S19580C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C6D0Ev,_ZTv0_n12_N8S19580C6D0Ev)();
extern void _ZN8S19580C6D0Ev() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C63v22Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C6__8S19580C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(232,116),
  ABISELECT(232,116),
  ABISELECT(-48,-24),
  ABISELECT(8,4),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19580C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C6D1Ev,_ZTv0_n12_N8S19580C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C6D0Ev,_ZTv0_n12_N8S19580C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C63v22Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C6D1Ev,_ZTv0_n12_N8S19580C6D1Ev)();
extern void ABISELECT(_ZThn8_N8S19580C6D1Ev,_ZThn4_N8S19580C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C6D0Ev,_ZTv0_n12_N8S19580C6D0Ev)();
extern void ABISELECT(_ZThn8_N8S19580C6D0Ev,_ZThn4_N8S19580C6D0Ev)() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
extern void _ZN8S19580C73v18Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C7__8S19580C6__8S19580C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19580C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C6D1Ev,_ZTv0_n12_N8S19580C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C6D0Ev,_ZTv0_n12_N8S19580C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
  (VTBL_ENTRY)&_ZN8S19580C73v18Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C6D1Ev,_ZTv0_n12_N8S19580C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19580C6D0Ev,_ZTv0_n12_N8S19580C6D0Ev)();
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C5__8S19580C6__8S19580C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(48,24),
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI8S19580C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C6D1Ev,_ZTv0_n12_N8S19580C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C6D0Ev,_ZTv0_n12_N8S19580C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C6D1Ev,_ZTv0_n12_N8S19580C6D1Ev)();
extern void ABISELECT(_ZThn232_N8S19580C6D1Ev,_ZThn116_N8S19580C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C6D0Ev,_ZTv0_n12_N8S19580C6D0Ev)();
extern void ABISELECT(_ZThn232_N8S19580C6D0Ev,_ZThn116_N8S19580C6D0Ev)() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C33v16Ev();
extern void _ZN8S19580C83v19Ev();
extern void _ZN8S19580C83v20Ev();
extern void _ZN8S19580C83v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C8__8S19580C6__8S19580C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-224,-112),
  0,
  ABISELECT(-280,-140),
  ABISELECT(-264,-132),
  ABISELECT(-280,-140),
  ABISELECT(-280,-140),
  ABISELECT(-280,-140),
  ABISELECT(-280,-140),
  ABISELECT(-280,-140),
  ABISELECT(-232,-116),
  ABISELECT(-232,-116),
  (VTBL_ENTRY)&(_ZTI8S19580C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C6D1Ev,_ZTv0_n12_N8S19580C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C6D0Ev,_ZTv0_n12_N8S19580C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C33v16Ev,
  (VTBL_ENTRY)&_ZN8S19580C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19580C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19580C83v21Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C6D1Ev,_ZTv0_n12_N8S19580C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19580C6D0Ev,_ZTv0_n12_N8S19580C6D0Ev)();
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C4__A1__8S19580C6__8S19580C1[] = {
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S19580C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C6D1Ev,_ZTv0_n12_N8S19580C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C6D0Ev,_ZTv0_n12_N8S19580C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C7D1Ev,_ZTv0_n12_N8S19580C7D1Ev)();
extern void _ZN8S19580C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C7D0Ev,_ZTv0_n12_N8S19580C7D0Ev)();
extern void _ZN8S19580C7D0Ev() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
extern void _ZN8S19580C73v18Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C7__8S19580C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19580C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C7D1Ev,_ZTv0_n12_N8S19580C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C7D0Ev,_ZTv0_n12_N8S19580C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
  (VTBL_ENTRY)&_ZN8S19580C73v18Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev)();
extern void _ZN8S19580C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev)();
extern void _ZN8S19580C4D0Ev() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C48S19580C7__A1__8S19580C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19580C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev)();
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C5__8S19580C48S19580C7__A1__8S19580C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(56,28),
  ABISELECT(56,28),
  (VTBL_ENTRY)&(_ZTI8S19580C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C7D1Ev,_ZTv0_n12_N8S19580C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19580C7D0Ev,_ZTv0_n12_N8S19580C7D0Ev)();
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C5__8S19580C7__8S19580C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(56,28),
  ABISELECT(56,28),
  (VTBL_ENTRY)&(_ZTI8S19580C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C7D1Ev,_ZTv0_n12_N8S19580C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C7D0Ev,_ZTv0_n12_N8S19580C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C8D1Ev,_ZTv0_n12_N8S19580C8D1Ev)();
extern void _ZN8S19580C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C8D0Ev,_ZTv0_n12_N8S19580C8D0Ev)();
extern void _ZN8S19580C8D0Ev() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C33v16Ev();
extern void _ZN8S19580C83v19Ev();
extern void _ZN8S19580C83v20Ev();
extern void _ZN8S19580C83v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C8__8S19580C1[] = {
  0,
  ABISELECT(-224,-112),
  0,
  ABISELECT(-280,-140),
  ABISELECT(-264,-132),
  ABISELECT(-280,-140),
  ABISELECT(-280,-140),
  ABISELECT(-280,-140),
  ABISELECT(-280,-140),
  ABISELECT(-280,-140),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19580C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C8D1Ev,_ZTv0_n12_N8S19580C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C8D0Ev,_ZTv0_n12_N8S19580C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C33v16Ev,
  (VTBL_ENTRY)&_ZN8S19580C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19580C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19580C83v21Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C8D1Ev,_ZTv0_n12_N8S19580C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19580C8D0Ev,_ZTv0_n12_N8S19580C8D0Ev)();
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
extern void _ZN8S19580C73v18Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C7__8S19580C8__8S19580C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(224,112),
  ABISELECT(224,112),
  (VTBL_ENTRY)&(_ZTI8S19580C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C8D1Ev,_ZTv0_n12_N8S19580C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C8D0Ev,_ZTv0_n12_N8S19580C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
  (VTBL_ENTRY)&_ZN8S19580C73v18Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C8D1Ev,_ZTv0_n12_N8S19580C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19580C8D0Ev,_ZTv0_n12_N8S19580C8D0Ev)();
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C5__8S19580C8__8S19580C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(280,140),
  ABISELECT(280,140),
  (VTBL_ENTRY)&(_ZTI8S19580C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C8D1Ev,_ZTv0_n12_N8S19580C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C8D0Ev,_ZTv0_n12_N8S19580C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C8D1Ev,_ZTv0_n12_N8S19580C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19580C8D0Ev,_ZTv0_n12_N8S19580C8D0Ev)();
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C4__A1__8S19580C8__8S19580C1[] = {
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(264,132),
  ABISELECT(264,132),
  (VTBL_ENTRY)&(_ZTI8S19580C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C8D1Ev,_ZTv0_n12_N8S19580C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C8D0Ev,_ZTv0_n12_N8S19580C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C3D1Ev,_ZTv0_n12_N8S19580C3D1Ev)();
extern void _ZN8S19580C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C3D0Ev,_ZTv0_n12_N8S19580C3D0Ev)();
extern void _ZN8S19580C3D0Ev() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C33v16Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C3__A1__8S19580C1[] = {
  ABISELECT(-280,-140),
  ABISELECT(-264,-132),
  ABISELECT(-280,-140),
  ABISELECT(-280,-140),
  ABISELECT(-280,-140),
  ABISELECT(-280,-140),
  ABISELECT(-280,-140),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19580C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C3D1Ev,_ZTv0_n12_N8S19580C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C3D0Ev,_ZTv0_n12_N8S19580C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C33v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C3D1Ev,_ZTv0_n12_N8S19580C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19580C3D0Ev,_ZTv0_n12_N8S19580C3D0Ev)();
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C4__8S19580C3__A1__8S19580C1[] = {
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(264,132),
  ABISELECT(264,132),
  (VTBL_ENTRY)&(_ZTI8S19580C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C3D1Ev,_ZTv0_n12_N8S19580C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C3D0Ev,_ZTv0_n12_N8S19580C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C3D1Ev,_ZTv0_n12_N8S19580C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19580C3D0Ev,_ZTv0_n12_N8S19580C3D0Ev)();
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C5__8S19580C3__A1__8S19580C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(280,140),
  ABISELECT(280,140),
  (VTBL_ENTRY)&(_ZTI8S19580C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C3D1Ev,_ZTv0_n12_N8S19580C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C3D0Ev,_ZTv0_n12_N8S19580C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
};
static  VTT_ENTRY vtt_S19580C1[] = {
  {&(_ZTV8S19580C1[17]),  17,128},
  {&(_ZTV8S19580C1[17]),  17,128},
  {&(_ZTV8S19580C1[45]),  45,128},
  {&(_ZTV8S19580C1[17]),  17,128},
  {&(_ZTV8S19580C1[69]),  69,128},
  {&(_ZTV8S19580C1[90]),  90,128},
  {&(_ZTV8S19580C1[117]),  117,128},
  {&(_ZTV8S19580C1[117]),  117,128},
  {&(_tg__ZTV8S19580C2__8S19580C1[10]),  10,19},
  {&(_tg__ZTV8S19580C38S19580C2__8S19580C1[10]),  10,18},
  {&(_tg__ZTV8S19580C4__8S19580C38S19580C2__8S19580C1[12]),  12,22},
  {&(_tg__ZTV8S19580C38S19580C2__8S19580C1[10]),  10,18},
  {&(_tg__ZTV8S19580C4__8S19580C2__8S19580C1[12]),  12,22},
  {&(_tg__ZTV8S19580C2__8S19580C1[10]),  10,19},
  {&(_tg__ZTV8S19580C4__8S19580C1[9]),  9,19},
  {&(_tg__ZTV8S19580C5__8S19580C4__8S19580C1[8]),  8,15},
  {&(_tg__ZTV8S19580C6__8S19580C1[13]),  13,21},
  {&(_tg__ZTV8S19580C7__8S19580C6__8S19580C1[13]),  13,24},
  {&(_tg__ZTV8S19580C5__8S19580C6__8S19580C1[8]),  8,15},
  {&(_tg__ZTV8S19580C8__8S19580C6__8S19580C1[16]),  16,27},
  {&(_tg__ZTV8S19580C8__8S19580C6__8S19580C1[16]),  16,27},
  {&(_tg__ZTV8S19580C4__A1__8S19580C6__8S19580C1[12]),  12,22},
  {&(_tg__ZTV8S19580C7__8S19580C1[9]),  9,20},
  {&(_tg__ZTV8S19580C48S19580C7__A1__8S19580C1[9]),  9,19},
  {&(_tg__ZTV8S19580C5__8S19580C48S19580C7__A1__8S19580C1[8]),  8,15},
  {&(_tg__ZTV8S19580C5__8S19580C7__8S19580C1[8]),  8,15},
  {&(_tg__ZTV8S19580C8__8S19580C1[13]),  13,24},
  {&(_tg__ZTV8S19580C7__8S19580C8__8S19580C1[13]),  13,24},
  {&(_tg__ZTV8S19580C5__8S19580C8__8S19580C1[8]),  8,15},
  {&(_tg__ZTV8S19580C8__8S19580C1[13]),  13,24},
  {&(_tg__ZTV8S19580C4__A1__8S19580C8__8S19580C1[12]),  12,22},
  {&(_tg__ZTV8S19580C3__A1__8S19580C1[10]),  10,18},
  {&(_tg__ZTV8S19580C4__8S19580C3__A1__8S19580C1[12]),  12,22},
  {&(_tg__ZTV8S19580C5__8S19580C3__A1__8S19580C1[8]),  8,15},
};
extern VTBL_ENTRY _ZTI8S19580C1[];
extern  VTBL_ENTRY _ZTV8S19580C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19580C1[];
static VTBL_ENTRY alt_thunk_names17[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C8D0Ev,_ZTv0_n12_N8S19580C8D0Ev), // 
  (VTBL_ENTRY)_ZN8S19580C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C8D1Ev,_ZTv0_n12_N8S19580C8D1Ev), // 
  (VTBL_ENTRY)_ZN8S19580C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C7D0Ev,_ZTv0_n12_N8S19580C7D0Ev), // 
  (VTBL_ENTRY)_ZN8S19580C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C7D1Ev,_ZTv0_n12_N8S19580C7D1Ev), // 
  (VTBL_ENTRY)_ZN8S19580C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C6D0Ev,_ZTv0_n12_N8S19580C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19580C6D0Ev,_ZThn116_N8S19580C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19580C6D0Ev,_ZThn4_N8S19580C6D0Ev),
  (VTBL_ENTRY)_ZN8S19580C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C6D1Ev,_ZTv0_n12_N8S19580C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19580C6D1Ev,_ZThn116_N8S19580C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19580C6D1Ev,_ZThn4_N8S19580C6D1Ev),
  (VTBL_ENTRY)_ZN8S19580C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19580C4D0Ev,
  (VTBL_ENTRY)_ZN8S19580C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19580C4D1Ev,
  (VTBL_ENTRY)_ZN8S19580C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C3D0Ev,_ZTv0_n12_N8S19580C3D0Ev), // 
  (VTBL_ENTRY)_ZN8S19580C3D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19580C3D0Ev,_ZThn8_N8S19580C3D0Ev),
  (VTBL_ENTRY)_ZN8S19580C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C3D1Ev,_ZTv0_n12_N8S19580C3D1Ev), // 
  (VTBL_ENTRY)_ZN8S19580C3D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19580C3D1Ev,_ZThn8_N8S19580C3D1Ev),
  (VTBL_ENTRY)_ZN8S19580C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C2D0Ev,_ZTv0_n12_N8S19580C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19580C2D0Ev,_ZThn8_N8S19580C2D0Ev),
  (VTBL_ENTRY)_ZN8S19580C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C2D1Ev,_ZTv0_n12_N8S19580C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19580C2D1Ev,_ZThn8_N8S19580C2D1Ev),
  (VTBL_ENTRY)_ZN8S19580C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C1D0Ev,_ZTv0_n12_N8S19580C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S19580C1D0Ev,_ZThn140_N8S19580C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19580C1D0Ev,_ZThn28_N8S19580C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19580C1D0Ev,_ZThn24_N8S19580C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19580C1D0Ev,_ZThn8_N8S19580C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C1D1Ev,_ZTv0_n12_N8S19580C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S19580C1D1Ev,_ZThn140_N8S19580C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19580C1D1Ev,_ZThn28_N8S19580C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19580C1D1Ev,_ZThn24_N8S19580C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19580C1D1Ev,_ZThn8_N8S19580C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19580C1 = {  "S19580C1", // class name
  bases_S19580C1, 9,
  &(vtc_S19580C1[0]), // expected_vtbl_contents
  &(vtt_S19580C1[0]), // expected_vtt_contents
  ABISELECT(296,148), // object size
  NSPAIRA(_ZTI8S19580C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19580C1),128, //virtual function table var
  17, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19580C1),34, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names17,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20198C2  {
  void *s20198c2f0[6];
  int s20198c2f1;
  virtual void  v4(); // _ZN8S20198C22v4Ev
  virtual void  v5(); // _ZN8S20198C22v5Ev
  virtual void  v6(); // _ZN8S20198C22v6Ev
  virtual void  v7(); // _ZN8S20198C22v7Ev
  virtual void  v8(); // _ZN8S20198C22v8Ev
  virtual void  v9(); // _ZN8S20198C22v9Ev
  ~S20198C2(); // tgen
  S20198C2(); // tgen
};
//SIG(-1 S20198C2) C1{ v1 v2 v3 v4 v5 v6 Fp[6] Fi}


void  S20198C2 ::v4(){vfunc_called(this, "_ZN8S20198C22v4Ev");}
void  S20198C2 ::v5(){vfunc_called(this, "_ZN8S20198C22v5Ev");}
void  S20198C2 ::v6(){vfunc_called(this, "_ZN8S20198C22v6Ev");}
void  S20198C2 ::v7(){vfunc_called(this, "_ZN8S20198C22v7Ev");}
void  S20198C2 ::v8(){vfunc_called(this, "_ZN8S20198C22v8Ev");}
void  S20198C2 ::v9(){vfunc_called(this, "_ZN8S20198C22v9Ev");}
S20198C2 ::~S20198C2(){ note_dtor("S20198C2", this);} // tgen
S20198C2 ::S20198C2(){ note_ctor("S20198C2", this);} // tgen

static void Test_S20198C2()
{
  extern Class_Descriptor cd_S20198C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S20198C2, buf);
    S20198C2 *dp, &lv = *(dp=new (buf) S20198C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S20198C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20198C2)");
    check_field_offset(lv, s20198c2f0, ABISELECT(8,4), "S20198C2.s20198c2f0");
    check_field_offset(lv, s20198c2f1, ABISELECT(56,28), "S20198C2.s20198c2f1");
    test_class_info(&lv, &cd_S20198C2);
    dp->~S20198C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20198C2(Test_S20198C2, "S20198C2", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN8S20198C2C1Ev();
extern void _ZN8S20198C2D1Ev();
Name_Map name_map_S20198C2[] = {
  NSPAIR(_ZN8S20198C2C1Ev),
  NSPAIR(_ZN8S20198C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20198C2[];
extern void _ZN8S20198C22v4Ev();
extern void _ZN8S20198C22v5Ev();
extern void _ZN8S20198C22v6Ev();
extern void _ZN8S20198C22v7Ev();
extern void _ZN8S20198C22v8Ev();
extern void _ZN8S20198C22v9Ev();
static  VTBL_ENTRY vtc_S20198C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20198C2[0]),
  (VTBL_ENTRY)&_ZN8S20198C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v9Ev,
};
extern VTBL_ENTRY _ZTI8S20198C2[];
extern  VTBL_ENTRY _ZTV8S20198C2[];
Class_Descriptor cd_S20198C2 = {  "S20198C2", // class name
  0,0,//no base classes
  &(vtc_S20198C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI8S20198C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20198C2),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  S20198C3  : virtual S20198C2 {
  int s20198c3f0;
  ::S20405C5_nt s20198c3f1;
  virtual  ~S20198C3(); // _ZN8S20198C3D2Ev
  virtual void  v10(); // _ZN8S20198C33v10Ev
  virtual void  v11(); // _ZN8S20198C33v11Ev
  virtual void  v12(); // _ZN8S20198C33v12Ev
  virtual void  v13(); // _ZN8S20198C33v13Ev
  virtual void  v14(); // _ZN8S20198C33v14Ev
  S20198C3(); // tgen
};
//SIG(-1 S20198C3) C1{ VBC2{ v6 v7 v8 v9 v10 v11 Fp[6] Fi} vd v1 v2 v3 v4 v5 Fi FU3{ m}}


 S20198C3 ::~S20198C3(){ note_dtor("S20198C3", this);}
void  S20198C3 ::v10(){vfunc_called(this, "_ZN8S20198C33v10Ev");}
void  S20198C3 ::v11(){vfunc_called(this, "_ZN8S20198C33v11Ev");}
void  S20198C3 ::v12(){vfunc_called(this, "_ZN8S20198C33v12Ev");}
void  S20198C3 ::v13(){vfunc_called(this, "_ZN8S20198C33v13Ev");}
void  S20198C3 ::v14(){vfunc_called(this, "_ZN8S20198C33v14Ev");}
S20198C3 ::S20198C3(){ note_ctor("S20198C3", this);} // tgen

static void Test_S20198C3()
{
  extern Class_Descriptor cd_S20198C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,12)];
    init_test(&cd_S20198C3, buf);
    S20198C3 *dp, &lv = *(dp=new (buf) S20198C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S20198C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20198C3)");
    check_base_class_offset(lv, (S20198C2*), ABISELECT(16,12), "S20198C3");
    check_field_offset(lv, s20198c3f0, ABISELECT(8,4), "S20198C3.s20198c3f0");
    check_field_offset(lv, s20198c3f1, ABISELECT(12,8), "S20198C3.s20198c3f1");
    test_class_info(&lv, &cd_S20198C3);
    dp->~S20198C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20198C3(Test_S20198C3, "S20198C3", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN8S20198C3C1Ev();
extern void _ZN8S20198C3D2Ev();
Name_Map name_map_S20198C3[] = {
  NSPAIR(_ZN8S20198C3C1Ev),
  NSPAIR(_ZN8S20198C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20198C2;
extern VTBL_ENTRY _ZTI8S20198C2[];
extern  VTBL_ENTRY _ZTV8S20198C2[];
static Base_Class bases_S20198C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20198C2,    ABISELECT(16,12), //bcp->offset
    10, //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 _ZTI8S20198C3[];
extern void _ZN8S20198C3D1Ev();
extern void _ZN8S20198C3D0Ev();
extern void _ZN8S20198C33v10Ev();
extern void _ZN8S20198C33v11Ev();
extern void _ZN8S20198C33v12Ev();
extern void _ZN8S20198C33v13Ev();
extern void _ZN8S20198C33v14Ev();
extern void _ZN8S20198C22v4Ev();
extern void _ZN8S20198C22v5Ev();
extern void _ZN8S20198C22v6Ev();
extern void _ZN8S20198C22v7Ev();
extern void _ZN8S20198C22v8Ev();
extern void _ZN8S20198C22v9Ev();
static  VTBL_ENTRY vtc_S20198C3[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20198C3[0]),
  (VTBL_ENTRY)&_ZN8S20198C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20198C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v14Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S20198C3[0]),
  (VTBL_ENTRY)&_ZN8S20198C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v9Ev,
};
extern VTBL_ENTRY _ZTV8S20198C3[];
static  VTT_ENTRY vtt_S20198C3[] = {
  {&(_ZTV8S20198C3[3]),  3,24},
  {&(_ZTV8S20198C3[18]),  18,24},
};
extern VTBL_ENTRY _ZTI8S20198C3[];
extern  VTBL_ENTRY _ZTV8S20198C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20198C3[];
Class_Descriptor cd_S20198C3 = {  "S20198C3", // class name
  bases_S20198C3, 1,
  &(vtc_S20198C3[0]), // expected_vtbl_contents
  &(vtt_S20198C3[0]), // expected_vtt_contents
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI8S20198C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20198C3),24, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20198C3),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  S20198C5  : virtual S20198C2 , virtual S20198C3 {
  virtual  ~S20198C5(); // _ZN8S20198C5D2Ev
  virtual void  v15(); // _ZN8S20198C53v15Ev
  S20198C5(); // tgen
};
//SIG(-1 S20198C5) C1{ VBC2{ v2 v3 v4 v5 v6 v7 Fp[6] Fi} VBC3{ VBC2 vd v8 v9 v10 v11 v12 Fi FU4{ m}} vd v1}


 S20198C5 ::~S20198C5(){ note_dtor("S20198C5", this);}
void  S20198C5 ::v15(){vfunc_called(this, "_ZN8S20198C53v15Ev");}
S20198C5 ::S20198C5(){ note_ctor("S20198C5", this);} // tgen

static void Test_S20198C5()
{
  extern Class_Descriptor cd_S20198C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,13)];
    init_test(&cd_S20198C5, buf);
    S20198C5 *dp, &lv = *(dp=new (buf) S20198C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,48), "sizeof(S20198C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20198C5)");
    check_base_class_offset(lv, (S20198C2*), ABISELECT(8,4), "S20198C5");
    check_base_class_offset(lv, (S20198C2*)(S20198C3*), ABISELECT(8,4), "S20198C5");
    check_base_class_offset(lv, (S20198C3*), ABISELECT(72,36), "S20198C5");
    test_class_info(&lv, &cd_S20198C5);
    dp->~S20198C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20198C5(Test_S20198C5, "S20198C5", ABISELECT(88,48));

#else // __cplusplus

extern void _ZN8S20198C5C1Ev();
extern void _ZN8S20198C5D2Ev();
Name_Map name_map_S20198C5[] = {
  NSPAIR(_ZN8S20198C5C1Ev),
  NSPAIR(_ZN8S20198C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20198C2;
extern VTBL_ENTRY _ZTI8S20198C2[];
extern  VTBL_ENTRY _ZTV8S20198C2[];
extern Class_Descriptor cd_S20198C3;
extern VTBL_ENTRY _ZTI8S20198C3[];
extern  VTBL_ENTRY _ZTV8S20198C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20198C3[];
static Base_Class bases_S20198C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20198C2,    ABISELECT(8,4), //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},
  {&cd_S20198C3,    ABISELECT(72,36), //bcp->offset
    21, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20198C5[];
extern void _ZN8S20198C5D1Ev();
extern void _ZN8S20198C5D0Ev();
extern void _ZN8S20198C53v15Ev();
extern void _ZN8S20198C22v4Ev();
extern void _ZN8S20198C22v5Ev();
extern void _ZN8S20198C22v6Ev();
extern void _ZN8S20198C22v7Ev();
extern void _ZN8S20198C22v8Ev();
extern void _ZN8S20198C22v9Ev();
extern void ABISELECT(_ZTv0_n32_N8S20198C5D1Ev,_ZTv0_n16_N8S20198C5D1Ev)();
extern void ABISELECT(_ZThn72_N8S20198C5D1Ev,_ZThn36_N8S20198C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20198C5D0Ev,_ZTv0_n16_N8S20198C5D0Ev)();
extern void ABISELECT(_ZThn72_N8S20198C5D0Ev,_ZThn36_N8S20198C5D0Ev)() __attribute__((weak));
extern void _ZN8S20198C33v10Ev();
extern void _ZN8S20198C33v11Ev();
extern void _ZN8S20198C33v12Ev();
extern void _ZN8S20198C33v13Ev();
extern void _ZN8S20198C33v14Ev();
static  VTBL_ENTRY vtc_S20198C5[] = {
  ABISELECT(72,36),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20198C5[0]),
  (VTBL_ENTRY)&_ZN8S20198C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20198C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20198C53v15Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20198C5[0]),
  (VTBL_ENTRY)&_ZN8S20198C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v9Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-36),
  ABISELECT(-64,-32),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S20198C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20198C5D1Ev,_ZTv0_n16_N8S20198C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20198C5D0Ev,_ZTv0_n16_N8S20198C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20198C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v14Ev,
};
extern VTBL_ENTRY _ZTV8S20198C5[];
extern void _ZN8S20198C3D1Ev();
extern void _ZN8S20198C3D0Ev();
extern void _ZN8S20198C33v10Ev();
extern void _ZN8S20198C33v11Ev();
extern void _ZN8S20198C33v12Ev();
extern void _ZN8S20198C33v13Ev();
extern void _ZN8S20198C33v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20198C3__8S20198C5[] = {
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S20198C3[0]),
  (VTBL_ENTRY)&_ZN8S20198C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20198C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v14Ev,
};
extern void _ZN8S20198C22v4Ev();
extern void _ZN8S20198C22v5Ev();
extern void _ZN8S20198C22v6Ev();
extern void _ZN8S20198C22v7Ev();
extern void _ZN8S20198C22v8Ev();
extern void _ZN8S20198C22v9Ev();
static  VTBL_ENTRY _tg__ZTV8S20198C2__8S20198C3__8S20198C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(64,32),
  (VTBL_ENTRY)&(_ZTI8S20198C3[0]),
  (VTBL_ENTRY)&_ZN8S20198C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v9Ev,
};
static  VTT_ENTRY vtt_S20198C5[] = {
  {&(_ZTV8S20198C5[4]),  4,37},
  {&(_ZTV8S20198C5[15]),  15,37},
  {&(_ZTV8S20198C5[30]),  30,37},
  {&(_tg__ZTV8S20198C3__8S20198C5[3]),  3,10},
  {&(_tg__ZTV8S20198C2__8S20198C3__8S20198C5[8]),  8,14},
};
extern VTBL_ENTRY _ZTI8S20198C5[];
extern  VTBL_ENTRY _ZTV8S20198C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20198C5[];
static VTBL_ENTRY alt_thunk_names18[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20198C5D0Ev,_ZTv0_n16_N8S20198C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S20198C5D0Ev,_ZThn36_N8S20198C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20198C5D1Ev,_ZTv0_n16_N8S20198C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S20198C5D1Ev,_ZThn36_N8S20198C5D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20198C5 = {  "S20198C5", // class name
  bases_S20198C5, 2,
  &(vtc_S20198C5[0]), // expected_vtbl_contents
  &(vtt_S20198C5[0]), // expected_vtt_contents
  ABISELECT(88,48), // object size
  NSPAIRA(_ZTI8S20198C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20198C5),37, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20198C5),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names18,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20198C6  : virtual S20198C2 , virtual S20198C3 {
  virtual  ~S20198C6(); // _ZN8S20198C6D2Ev
  virtual void  v16(); // _ZN8S20198C63v16Ev
  virtual void  v17(); // _ZN8S20198C63v17Ev
  virtual void  v18(); // _ZN8S20198C63v18Ev
  virtual void  v19(); // _ZN8S20198C63v19Ev
  virtual void  v20(); // _ZN8S20198C63v20Ev
  virtual void  v21(); // _ZN8S20198C63v21Ev
  virtual void  v22(); // _ZN8S20198C63v22Ev
  virtual void  v23(); // _ZN8S20198C63v23Ev
  virtual void  v24(); // _ZN8S20198C63v24Ev
  S20198C6(); // tgen
};
//SIG(-1 S20198C6) C1{ VBC2{ v10 v11 v12 v13 v14 v15 Fp[6] Fi} VBC3{ VBC2 vd v16 v17 v18 v19 v20 Fi FU4{ m}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9}


 S20198C6 ::~S20198C6(){ note_dtor("S20198C6", this);}
void  S20198C6 ::v16(){vfunc_called(this, "_ZN8S20198C63v16Ev");}
void  S20198C6 ::v17(){vfunc_called(this, "_ZN8S20198C63v17Ev");}
void  S20198C6 ::v18(){vfunc_called(this, "_ZN8S20198C63v18Ev");}
void  S20198C6 ::v19(){vfunc_called(this, "_ZN8S20198C63v19Ev");}
void  S20198C6 ::v20(){vfunc_called(this, "_ZN8S20198C63v20Ev");}
void  S20198C6 ::v21(){vfunc_called(this, "_ZN8S20198C63v21Ev");}
void  S20198C6 ::v22(){vfunc_called(this, "_ZN8S20198C63v22Ev");}
void  S20198C6 ::v23(){vfunc_called(this, "_ZN8S20198C63v23Ev");}
void  S20198C6 ::v24(){vfunc_called(this, "_ZN8S20198C63v24Ev");}
S20198C6 ::S20198C6(){ note_ctor("S20198C6", this);} // tgen

static void Test_S20198C6()
{
  extern Class_Descriptor cd_S20198C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,13)];
    init_test(&cd_S20198C6, buf);
    S20198C6 *dp, &lv = *(dp=new (buf) S20198C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,48), "sizeof(S20198C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20198C6)");
    check_base_class_offset(lv, (S20198C2*), ABISELECT(8,4), "S20198C6");
    check_base_class_offset(lv, (S20198C2*)(S20198C3*), ABISELECT(8,4), "S20198C6");
    check_base_class_offset(lv, (S20198C3*), ABISELECT(72,36), "S20198C6");
    test_class_info(&lv, &cd_S20198C6);
    dp->~S20198C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20198C6(Test_S20198C6, "S20198C6", ABISELECT(88,48));

#else // __cplusplus

extern void _ZN8S20198C6C1Ev();
extern void _ZN8S20198C6D2Ev();
Name_Map name_map_S20198C6[] = {
  NSPAIR(_ZN8S20198C6C1Ev),
  NSPAIR(_ZN8S20198C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20198C2;
extern VTBL_ENTRY _ZTI8S20198C2[];
extern  VTBL_ENTRY _ZTV8S20198C2[];
extern Class_Descriptor cd_S20198C3;
extern VTBL_ENTRY _ZTI8S20198C3[];
extern  VTBL_ENTRY _ZTV8S20198C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20198C3[];
static Base_Class bases_S20198C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20198C2,    ABISELECT(8,4), //bcp->offset
    15, //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_S20198C3,    ABISELECT(72,36), //bcp->offset
    29, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20198C6[];
extern void _ZN8S20198C6D1Ev();
extern void _ZN8S20198C6D0Ev();
extern void _ZN8S20198C63v16Ev();
extern void _ZN8S20198C63v17Ev();
extern void _ZN8S20198C63v18Ev();
extern void _ZN8S20198C63v19Ev();
extern void _ZN8S20198C63v20Ev();
extern void _ZN8S20198C63v21Ev();
extern void _ZN8S20198C63v22Ev();
extern void _ZN8S20198C63v23Ev();
extern void _ZN8S20198C63v24Ev();
extern void _ZN8S20198C22v4Ev();
extern void _ZN8S20198C22v5Ev();
extern void _ZN8S20198C22v6Ev();
extern void _ZN8S20198C22v7Ev();
extern void _ZN8S20198C22v8Ev();
extern void _ZN8S20198C22v9Ev();
extern void ABISELECT(_ZTv0_n32_N8S20198C6D1Ev,_ZTv0_n16_N8S20198C6D1Ev)();
extern void ABISELECT(_ZThn72_N8S20198C6D1Ev,_ZThn36_N8S20198C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20198C6D0Ev,_ZTv0_n16_N8S20198C6D0Ev)();
extern void ABISELECT(_ZThn72_N8S20198C6D0Ev,_ZThn36_N8S20198C6D0Ev)() __attribute__((weak));
extern void _ZN8S20198C33v10Ev();
extern void _ZN8S20198C33v11Ev();
extern void _ZN8S20198C33v12Ev();
extern void _ZN8S20198C33v13Ev();
extern void _ZN8S20198C33v14Ev();
static  VTBL_ENTRY vtc_S20198C6[] = {
  ABISELECT(72,36),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20198C6[0]),
  (VTBL_ENTRY)&_ZN8S20198C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20198C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20198C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20198C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20198C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20198C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20198C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20198C63v21Ev,
  (VTBL_ENTRY)&_ZN8S20198C63v22Ev,
  (VTBL_ENTRY)&_ZN8S20198C63v23Ev,
  (VTBL_ENTRY)&_ZN8S20198C63v24Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20198C6[0]),
  (VTBL_ENTRY)&_ZN8S20198C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v9Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-36),
  ABISELECT(-64,-32),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S20198C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20198C6D1Ev,_ZTv0_n16_N8S20198C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20198C6D0Ev,_ZTv0_n16_N8S20198C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20198C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v14Ev,
};
extern VTBL_ENTRY _ZTV8S20198C6[];
extern void _ZN8S20198C3D1Ev();
extern void _ZN8S20198C3D0Ev();
extern void _ZN8S20198C33v10Ev();
extern void _ZN8S20198C33v11Ev();
extern void _ZN8S20198C33v12Ev();
extern void _ZN8S20198C33v13Ev();
extern void _ZN8S20198C33v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20198C3__8S20198C6[] = {
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S20198C3[0]),
  (VTBL_ENTRY)&_ZN8S20198C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20198C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v14Ev,
};
extern void _ZN8S20198C22v4Ev();
extern void _ZN8S20198C22v5Ev();
extern void _ZN8S20198C22v6Ev();
extern void _ZN8S20198C22v7Ev();
extern void _ZN8S20198C22v8Ev();
extern void _ZN8S20198C22v9Ev();
static  VTBL_ENTRY _tg__ZTV8S20198C2__8S20198C3__8S20198C6[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(64,32),
  (VTBL_ENTRY)&(_ZTI8S20198C3[0]),
  (VTBL_ENTRY)&_ZN8S20198C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v9Ev,
};
static  VTT_ENTRY vtt_S20198C6[] = {
  {&(_ZTV8S20198C6[4]),  4,45},
  {&(_ZTV8S20198C6[23]),  23,45},
  {&(_ZTV8S20198C6[38]),  38,45},
  {&(_tg__ZTV8S20198C3__8S20198C6[3]),  3,10},
  {&(_tg__ZTV8S20198C2__8S20198C3__8S20198C6[8]),  8,14},
};
extern VTBL_ENTRY _ZTI8S20198C6[];
extern  VTBL_ENTRY _ZTV8S20198C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20198C6[];
static VTBL_ENTRY alt_thunk_names19[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20198C6D0Ev,_ZTv0_n16_N8S20198C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S20198C6D0Ev,_ZThn36_N8S20198C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20198C6D1Ev,_ZTv0_n16_N8S20198C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S20198C6D1Ev,_ZThn36_N8S20198C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20198C6 = {  "S20198C6", // class name
  bases_S20198C6, 2,
  &(vtc_S20198C6[0]), // expected_vtbl_contents
  &(vtt_S20198C6[0]), // expected_vtt_contents
  ABISELECT(88,48), // object size
  NSPAIRA(_ZTI8S20198C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20198C6),45, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20198C6),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names19,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20198C1  : virtual S20198C2 , virtual S20198C3 , virtual S20198C5 , S20198C6 {
  void *s20198c1f0;
  long double s20198c1f1;
  virtual  ~S20198C1(); // _ZN8S20198C1D2Ev
  virtual void  v1(); // _ZN8S20198C12v1Ev
  virtual void  v2(); // _ZN8S20198C12v2Ev
  virtual void  v3(); // _ZN8S20198C12v3Ev
  S20198C1(); // tgen
};
//SIG(1 S20198C1) C1{ VBC2{ v4 v5 v6 v7 v8 v9 Fp[6] Fi} VBC3{ VBC2 vd v10 v11 v12 v13 v14 Fi FU4{ m}} VBC5{ VBC2 VBC3 vd v15} BC6{ VBC2 VBC3 vd v16 v17 v18 v19 v20 v21 v22 v23 v24} vd v1 v2 v3 Fp FD}


 S20198C1 ::~S20198C1(){ note_dtor("S20198C1", this);}
void  S20198C1 ::v1(){vfunc_called(this, "_ZN8S20198C12v1Ev");}
void  S20198C1 ::v2(){vfunc_called(this, "_ZN8S20198C12v2Ev");}
void  S20198C1 ::v3(){vfunc_called(this, "_ZN8S20198C12v3Ev");}
S20198C1 ::S20198C1(){ note_ctor("S20198C1", this);} // tgen

static void Test_S20198C1()
{
  extern Class_Descriptor cd_S20198C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,18)];
    init_test(&cd_S20198C1, buf);
    S20198C1 *dp, &lv = *(dp=new (buf) S20198C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,68), "sizeof(S20198C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20198C1)");
    check_base_class_offset(lv, (S20198C2*), ABISELECT(32,20), "S20198C1");
    check_base_class_offset(lv, (S20198C2*)(S20198C3*), ABISELECT(32,20), "S20198C1");
    check_base_class_offset(lv, (S20198C2*)(S20198C5*), ABISELECT(32,20), "S20198C1");
    check_base_class_offset(lv, (S20198C2*)(S20198C6*), ABISELECT(32,20), "S20198C1");
    check_base_class_offset(lv, (S20198C3*), ABISELECT(96,52), "S20198C1");
    check_base_class_offset(lv, (S20198C3*)(S20198C5*), ABISELECT(96,52), "S20198C1");
    check_base_class_offset(lv, (S20198C3*)(S20198C6*), ABISELECT(96,52), "S20198C1");
    check_base_class_offset(lv, (S20198C5*), ABISELECT(112,64), "S20198C1");
    check_base_class_offset(lv, (S20198C6*), 0, "S20198C1");
    check_field_offset(lv, s20198c1f0, ABISELECT(8,4), "S20198C1.s20198c1f0");
    check_field_offset(lv, s20198c1f1, ABISELECT(16,8), "S20198C1.s20198c1f1");
    test_class_info(&lv, &cd_S20198C1);
    dp->~S20198C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20198C1(Test_S20198C1, "S20198C1", ABISELECT(128,68));

#else // __cplusplus

extern void _ZN8S20198C1C1Ev();
extern void _ZN8S20198C1D2Ev();
Name_Map name_map_S20198C1[] = {
  NSPAIR(_ZN8S20198C1C1Ev),
  NSPAIR(_ZN8S20198C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20198C2;
extern VTBL_ENTRY _ZTI8S20198C2[];
extern  VTBL_ENTRY _ZTV8S20198C2[];
extern Class_Descriptor cd_S20198C3;
extern VTBL_ENTRY _ZTI8S20198C3[];
extern  VTBL_ENTRY _ZTV8S20198C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20198C3[];
extern Class_Descriptor cd_S20198C5;
extern VTBL_ENTRY _ZTI8S20198C5[];
extern  VTBL_ENTRY _ZTV8S20198C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20198C5[];
extern Class_Descriptor cd_S20198C6;
extern VTBL_ENTRY _ZTI8S20198C6[];
extern  VTBL_ENTRY _ZTV8S20198C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20198C6[];
static Base_Class bases_S20198C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20198C2,    ABISELECT(32,20), //bcp->offset
    19, //bcp->virtual_function_table_offset
    8, //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_S20198C3,    ABISELECT(96,52), //bcp->offset
    33, //bcp->virtual_function_table_offset
    9, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S20198C5,    ABISELECT(112,64), //bcp->offset
    49, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20198C6,    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 _ZTI8S20198C1[];
extern void _ZN8S20198C1D1Ev();
extern void _ZN8S20198C1D0Ev();
extern void _ZN8S20198C63v16Ev();
extern void _ZN8S20198C63v17Ev();
extern void _ZN8S20198C63v18Ev();
extern void _ZN8S20198C63v19Ev();
extern void _ZN8S20198C63v20Ev();
extern void _ZN8S20198C63v21Ev();
extern void _ZN8S20198C63v22Ev();
extern void _ZN8S20198C63v23Ev();
extern void _ZN8S20198C63v24Ev();
extern void _ZN8S20198C12v1Ev();
extern void _ZN8S20198C12v2Ev();
extern void _ZN8S20198C12v3Ev();
extern void _ZN8S20198C22v4Ev();
extern void _ZN8S20198C22v5Ev();
extern void _ZN8S20198C22v6Ev();
extern void _ZN8S20198C22v7Ev();
extern void _ZN8S20198C22v8Ev();
extern void _ZN8S20198C22v9Ev();
extern void ABISELECT(_ZTv0_n32_N8S20198C1D1Ev,_ZTv0_n16_N8S20198C1D1Ev)();
extern void ABISELECT(_ZThn96_N8S20198C1D1Ev,_ZThn52_N8S20198C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20198C1D0Ev,_ZTv0_n16_N8S20198C1D0Ev)();
extern void ABISELECT(_ZThn96_N8S20198C1D0Ev,_ZThn52_N8S20198C1D0Ev)() __attribute__((weak));
extern void _ZN8S20198C33v10Ev();
extern void _ZN8S20198C33v11Ev();
extern void _ZN8S20198C33v12Ev();
extern void _ZN8S20198C33v13Ev();
extern void _ZN8S20198C33v14Ev();
extern void ABISELECT(_ZTv0_n40_N8S20198C1D1Ev,_ZTv0_n20_N8S20198C1D1Ev)();
extern void ABISELECT(_ZThn112_N8S20198C1D1Ev,_ZThn64_N8S20198C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20198C1D0Ev,_ZTv0_n20_N8S20198C1D0Ev)();
extern void ABISELECT(_ZThn112_N8S20198C1D0Ev,_ZThn64_N8S20198C1D0Ev)() __attribute__((weak));
extern void _ZN8S20198C53v15Ev();
static  VTBL_ENTRY vtc_S20198C1[] = {
  ABISELECT(112,64),
  ABISELECT(96,52),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20198C1[0]),
  (VTBL_ENTRY)&_ZN8S20198C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20198C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20198C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20198C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20198C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20198C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20198C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20198C63v21Ev,
  (VTBL_ENTRY)&_ZN8S20198C63v22Ev,
  (VTBL_ENTRY)&_ZN8S20198C63v23Ev,
  (VTBL_ENTRY)&_ZN8S20198C63v24Ev,
  (VTBL_ENTRY)&_ZN8S20198C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20198C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20198C12v3Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20198C1[0]),
  (VTBL_ENTRY)&_ZN8S20198C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v9Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-52),
  ABISELECT(-64,-32),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S20198C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20198C1D1Ev,_ZTv0_n16_N8S20198C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20198C1D0Ev,_ZTv0_n16_N8S20198C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20198C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v14Ev,
  0,
  ABISELECT(-112,-64),
  ABISELECT(-16,-12),
  ABISELECT(-80,-44),
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI8S20198C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20198C1D1Ev,_ZTv0_n20_N8S20198C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20198C1D0Ev,_ZTv0_n20_N8S20198C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20198C53v15Ev,
};
extern VTBL_ENTRY _ZTV8S20198C1[];
extern void _ZN8S20198C6D1Ev();
extern void _ZN8S20198C6D0Ev();
extern void _ZN8S20198C63v16Ev();
extern void _ZN8S20198C63v17Ev();
extern void _ZN8S20198C63v18Ev();
extern void _ZN8S20198C63v19Ev();
extern void _ZN8S20198C63v20Ev();
extern void _ZN8S20198C63v21Ev();
extern void _ZN8S20198C63v22Ev();
extern void _ZN8S20198C63v23Ev();
extern void _ZN8S20198C63v24Ev();
static  VTBL_ENTRY _tg__ZTV8S20198C6__8S20198C1[] = {
  ABISELECT(96,52),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20198C6[0]),
  (VTBL_ENTRY)&_ZN8S20198C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20198C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20198C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20198C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20198C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20198C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20198C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20198C63v21Ev,
  (VTBL_ENTRY)&_ZN8S20198C63v22Ev,
  (VTBL_ENTRY)&_ZN8S20198C63v23Ev,
  (VTBL_ENTRY)&_ZN8S20198C63v24Ev,
};
extern void _ZN8S20198C22v4Ev();
extern void _ZN8S20198C22v5Ev();
extern void _ZN8S20198C22v6Ev();
extern void _ZN8S20198C22v7Ev();
extern void _ZN8S20198C22v8Ev();
extern void _ZN8S20198C22v9Ev();
static  VTBL_ENTRY _tg__ZTV8S20198C2__8S20198C6__8S20198C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20198C6[0]),
  (VTBL_ENTRY)&_ZN8S20198C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v9Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S20198C6D1Ev,_ZTv0_n16_N8S20198C6D1Ev)();
extern void ABISELECT(_ZThn96_N8S20198C6D1Ev,_ZThn52_N8S20198C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20198C6D0Ev,_ZTv0_n16_N8S20198C6D0Ev)();
extern void ABISELECT(_ZThn96_N8S20198C6D0Ev,_ZThn52_N8S20198C6D0Ev)() __attribute__((weak));
extern void _ZN8S20198C33v10Ev();
extern void _ZN8S20198C33v11Ev();
extern void _ZN8S20198C33v12Ev();
extern void _ZN8S20198C33v13Ev();
extern void _ZN8S20198C33v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20198C3__8S20198C6__8S20198C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-52),
  ABISELECT(-64,-32),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S20198C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20198C6D1Ev,_ZTv0_n16_N8S20198C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20198C6D0Ev,_ZTv0_n16_N8S20198C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20198C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v14Ev,
};
extern void _ZN8S20198C3D1Ev();
extern void _ZN8S20198C3D0Ev();
extern void _ZN8S20198C33v10Ev();
extern void _ZN8S20198C33v11Ev();
extern void _ZN8S20198C33v12Ev();
extern void _ZN8S20198C33v13Ev();
extern void _ZN8S20198C33v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20198C3__8S20198C1[] = {
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S20198C3[0]),
  (VTBL_ENTRY)&_ZN8S20198C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20198C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v14Ev,
};
extern void _ZN8S20198C22v4Ev();
extern void _ZN8S20198C22v5Ev();
extern void _ZN8S20198C22v6Ev();
extern void _ZN8S20198C22v7Ev();
extern void _ZN8S20198C22v8Ev();
extern void _ZN8S20198C22v9Ev();
static  VTBL_ENTRY _tg__ZTV8S20198C2__8S20198C3__8S20198C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(64,32),
  (VTBL_ENTRY)&(_ZTI8S20198C3[0]),
  (VTBL_ENTRY)&_ZN8S20198C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v9Ev,
};
extern void _ZN8S20198C5D1Ev();
extern void _ZN8S20198C5D0Ev();
extern void _ZN8S20198C53v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20198C5__8S20198C1[] = {
  ABISELECT(-16,-12),
  ABISELECT(-80,-44),
  0,
  (VTBL_ENTRY)&(_ZTI8S20198C5[0]),
  (VTBL_ENTRY)&_ZN8S20198C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20198C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20198C53v15Ev,
};
extern void _ZN8S20198C22v4Ev();
extern void _ZN8S20198C22v5Ev();
extern void _ZN8S20198C22v6Ev();
extern void _ZN8S20198C22v7Ev();
extern void _ZN8S20198C22v8Ev();
extern void _ZN8S20198C22v9Ev();
static  VTBL_ENTRY _tg__ZTV8S20198C2__8S20198C5__8S20198C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(80,44),
  (VTBL_ENTRY)&(_ZTI8S20198C5[0]),
  (VTBL_ENTRY)&_ZN8S20198C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v9Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S20198C5D1Ev,_ZTv0_n16_N8S20198C5D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S20198C5D0Ev,_ZTv0_n16_N8S20198C5D0Ev)();
extern void _ZN8S20198C33v10Ev();
extern void _ZN8S20198C33v11Ev();
extern void _ZN8S20198C33v12Ev();
extern void _ZN8S20198C33v13Ev();
extern void _ZN8S20198C33v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20198C3__8S20198C5__8S20198C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,12),
  ABISELECT(-64,-32),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S20198C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20198C5D1Ev,_ZTv0_n16_N8S20198C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20198C5D0Ev,_ZTv0_n16_N8S20198C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20198C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v14Ev,
};
static  VTT_ENTRY vtt_S20198C1[] = {
  {&(_ZTV8S20198C1[5]),  5,58},
  {&(_tg__ZTV8S20198C6__8S20198C1[4]),  4,15},
  {&(_tg__ZTV8S20198C2__8S20198C6__8S20198C1[8]),  8,14},
  {&(_tg__ZTV8S20198C3__8S20198C6__8S20198C1[9]),  9,16},
  {&(_ZTV8S20198C1[27]),  27,58},
  {&(_ZTV8S20198C1[42]),  42,58},
  {&(_ZTV8S20198C1[55]),  55,58},
  {&(_tg__ZTV8S20198C3__8S20198C1[3]),  3,10},
  {&(_tg__ZTV8S20198C2__8S20198C3__8S20198C1[8]),  8,14},
  {&(_tg__ZTV8S20198C5__8S20198C1[4]),  4,7},
  {&(_tg__ZTV8S20198C2__8S20198C5__8S20198C1[8]),  8,14},
  {&(_tg__ZTV8S20198C3__8S20198C5__8S20198C1[9]),  9,16},
};
extern VTBL_ENTRY _ZTI8S20198C1[];
extern  VTBL_ENTRY _ZTV8S20198C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20198C1[];
static VTBL_ENTRY alt_thunk_names20[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20198C6D0Ev,_ZTv0_n16_N8S20198C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S20198C6D0Ev,_ZThn52_N8S20198C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20198C6D1Ev,_ZTv0_n16_N8S20198C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S20198C6D1Ev,_ZThn52_N8S20198C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20198C1D0Ev,_ZTv0_n20_N8S20198C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20198C1D0Ev,_ZThn64_N8S20198C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20198C1D1Ev,_ZTv0_n20_N8S20198C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20198C1D1Ev,_ZThn64_N8S20198C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20198C1D0Ev,_ZTv0_n16_N8S20198C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S20198C1D0Ev,_ZThn52_N8S20198C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20198C1D1Ev,_ZTv0_n16_N8S20198C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S20198C1D1Ev,_ZThn52_N8S20198C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20198C1 = {  "S20198C1", // class name
  bases_S20198C1, 4,
  &(vtc_S20198C1[0]), // expected_vtbl_contents
  &(vtt_S20198C1[0]), // expected_vtt_contents
  ABISELECT(128,68), // object size
  NSPAIRA(_ZTI8S20198C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20198C1),58, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20198C1),12, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names20,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S503C5_nt  {
  void *s503c5f0[2];
  ::S2121C19_nt s503c5f1;
  void *s503c5f2;
  virtual  ~S503C5_nt(); // _ZN9S503C5_ntD1Ev
  virtual void  v2(); // _ZN9S503C5_nt2v2Ev
  virtual void  v3(); // _ZN9S503C5_nt2v3Ev
  virtual void  v4(); // _ZN9S503C5_nt2v4Ev
  virtual void  v5(); // _ZN9S503C5_nt2v5Ev
  virtual void  v6(); // _ZN9S503C5_nt2v6Ev
  virtual void  v7(); // _ZN9S503C5_nt2v7Ev
  virtual void  v8(); // _ZN9S503C5_nt2v8Ev
  virtual void  v9(); // _ZN9S503C5_nt2v9Ev
  virtual void  v10(); // _ZN9S503C5_nt3v10Ev
  virtual void  v11(); // _ZN9S503C5_nt3v11Ev
  S503C5_nt(); // tgen
};
//SIG(-1 S503C5_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fp[2] FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} Fp}


 S503C5_nt ::~S503C5_nt(){ note_dtor("S503C5_nt", this);}
void  S503C5_nt ::v2(){vfunc_called(this, "_ZN9S503C5_nt2v2Ev");}
void  S503C5_nt ::v3(){vfunc_called(this, "_ZN9S503C5_nt2v3Ev");}
void  S503C5_nt ::v4(){vfunc_called(this, "_ZN9S503C5_nt2v4Ev");}
void  S503C5_nt ::v5(){vfunc_called(this, "_ZN9S503C5_nt2v5Ev");}
void  S503C5_nt ::v6(){vfunc_called(this, "_ZN9S503C5_nt2v6Ev");}
void  S503C5_nt ::v7(){vfunc_called(this, "_ZN9S503C5_nt2v7Ev");}
void  S503C5_nt ::v8(){vfunc_called(this, "_ZN9S503C5_nt2v8Ev");}
void  S503C5_nt ::v9(){vfunc_called(this, "_ZN9S503C5_nt2v9Ev");}
void  S503C5_nt ::v10(){vfunc_called(this, "_ZN9S503C5_nt3v10Ev");}
void  S503C5_nt ::v11(){vfunc_called(this, "_ZN9S503C5_nt3v11Ev");}
S503C5_nt ::S503C5_nt(){ note_ctor("S503C5_nt", this);} // tgen

//skip512 S503C5_nt

#else // __cplusplus

extern void _ZN9S503C5_ntC1Ev();
extern void _ZN9S503C5_ntD1Ev();
Name_Map name_map_S503C5_nt[] = {
  NSPAIR(_ZN9S503C5_ntC1Ev),
  NSPAIR(_ZN9S503C5_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S503C5_nt[];
extern void _ZN9S503C5_ntD1Ev();
extern void _ZN9S503C5_ntD0Ev();
extern void _ZN9S503C5_nt2v2Ev();
extern void _ZN9S503C5_nt2v3Ev();
extern void _ZN9S503C5_nt2v4Ev();
extern void _ZN9S503C5_nt2v5Ev();
extern void _ZN9S503C5_nt2v6Ev();
extern void _ZN9S503C5_nt2v7Ev();
extern void _ZN9S503C5_nt2v8Ev();
extern void _ZN9S503C5_nt2v9Ev();
extern void _ZN9S503C5_nt3v10Ev();
extern void _ZN9S503C5_nt3v11Ev();
static  VTBL_ENTRY vtc_S503C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S503C5_nt[0]),
  (VTBL_ENTRY)&_ZN9S503C5_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S503C5_ntD0Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v2Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v3Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v6Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v9Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt3v11Ev,
};
extern VTBL_ENTRY _ZTI9S503C5_nt[];
VTBL_ENTRY *P__ZTI9S503C5_nt = _ZTI9S503C5_nt; 
extern  VTBL_ENTRY _ZTV9S503C5_nt[];
Class_Descriptor cd_S503C5_nt = {  "S503C5_nt", // class name
  0,0,//no base classes
  &(vtc_S503C5_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI9S503C5_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S503C5_nt),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S503C4  : S503C5_nt {
  void *s503c4f0[2];
  ::S2121C26 s503c4f1;
  virtual  ~S503C4(); // _ZN6S503C4D1Ev
  virtual void  v12(); // _ZN6S503C43v12Ev
  virtual void  v13(); // _ZN6S503C43v13Ev
  virtual void  v14(); // _ZN6S503C43v14Ev
  virtual void  v15(); // _ZN6S503C43v15Ev
  S503C4(); // tgen
};
//SIG(-1 S503C4) C1{ BC2{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp[2] FC3{ m FC4{ m Fp Fi FC5{ m}} Fi} Fp} vd v1 v2 v3 v4 Fp[2] FC6{ m Fp Fi FC7{ m} FC8{ m}}}


 S503C4 ::~S503C4(){ note_dtor("S503C4", this);}
void  S503C4 ::v12(){vfunc_called(this, "_ZN6S503C43v12Ev");}
void  S503C4 ::v13(){vfunc_called(this, "_ZN6S503C43v13Ev");}
void  S503C4 ::v14(){vfunc_called(this, "_ZN6S503C43v14Ev");}
void  S503C4 ::v15(){vfunc_called(this, "_ZN6S503C43v15Ev");}
S503C4 ::S503C4(){ note_ctor("S503C4", this);} // tgen

static void Test_S503C4()
{
  extern Class_Descriptor cd_S503C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,14)];
    init_test(&cd_S503C4, buf);
    S503C4 *dp, &lv = *(dp=new (buf) S503C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,52), "sizeof(S503C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S503C4)");
    check_base_class_offset(lv, (S503C5_nt*), 0, "S503C4");
    check_field_offset(lv, s503c4f0, ABISELECT(56,32), "S503C4.s503c4f0");
    check_field_offset(lv, s503c4f1, ABISELECT(72,40), "S503C4.s503c4f1");
    test_class_info(&lv, &cd_S503C4);
    dp->~S503C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS503C4(Test_S503C4, "S503C4", ABISELECT(88,52));

#else // __cplusplus

extern void _ZN6S503C4C1Ev();
extern void _ZN6S503C4D1Ev();
Name_Map name_map_S503C4[] = {
  NSPAIR(_ZN6S503C4C1Ev),
  NSPAIR(_ZN6S503C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S503C5_nt;
extern VTBL_ENTRY _ZTI9S503C5_nt[];
extern  VTBL_ENTRY _ZTV9S503C5_nt[];
static Base_Class bases_S503C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S503C5_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 _ZTI6S503C4[];
extern void _ZN6S503C4D1Ev();
extern void _ZN6S503C4D0Ev();
extern void _ZN9S503C5_nt2v2Ev();
extern void _ZN9S503C5_nt2v3Ev();
extern void _ZN9S503C5_nt2v4Ev();
extern void _ZN9S503C5_nt2v5Ev();
extern void _ZN9S503C5_nt2v6Ev();
extern void _ZN9S503C5_nt2v7Ev();
extern void _ZN9S503C5_nt2v8Ev();
extern void _ZN9S503C5_nt2v9Ev();
extern void _ZN9S503C5_nt3v10Ev();
extern void _ZN9S503C5_nt3v11Ev();
extern void _ZN6S503C43v12Ev();
extern void _ZN6S503C43v13Ev();
extern void _ZN6S503C43v14Ev();
extern void _ZN6S503C43v15Ev();
static  VTBL_ENTRY vtc_S503C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S503C4[0]),
  (VTBL_ENTRY)&_ZN6S503C4D1Ev,
  (VTBL_ENTRY)&_ZN6S503C4D0Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v2Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v3Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v6Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v9Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt3v11Ev,
  (VTBL_ENTRY)&_ZN6S503C43v12Ev,
  (VTBL_ENTRY)&_ZN6S503C43v13Ev,
  (VTBL_ENTRY)&_ZN6S503C43v14Ev,
  (VTBL_ENTRY)&_ZN6S503C43v15Ev,
};
extern VTBL_ENTRY _ZTI6S503C4[];
extern  VTBL_ENTRY _ZTV6S503C4[];
Class_Descriptor cd_S503C4 = {  "S503C4", // class name
  bases_S503C4, 1,
  &(vtc_S503C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,52), // object size
  NSPAIRA(_ZTI6S503C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S503C4),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  S503C3  : S503C4 {
  virtual  ~S503C3(); // _ZN6S503C3D1Ev
  virtual void  v16(); // _ZN6S503C33v16Ev
  S503C3(); // tgen
};
//SIG(-1 S503C3) C1{ BC2{ BC3{ vd v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[2] FC4{ m FC5{ m Fp Fi FC6{ m}} Fi} Fp} vd v12 v13 v14 v15 Fp[2] FC7{ m Fp Fi FC8{ m} FC9{ m}}} vd v1}


 S503C3 ::~S503C3(){ note_dtor("S503C3", this);}
void  S503C3 ::v16(){vfunc_called(this, "_ZN6S503C33v16Ev");}
S503C3 ::S503C3(){ note_ctor("S503C3", this);} // tgen

static void Test_S503C3()
{
  extern Class_Descriptor cd_S503C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,14)];
    init_test(&cd_S503C3, buf);
    S503C3 *dp, &lv = *(dp=new (buf) S503C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,52), "sizeof(S503C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S503C3)");
    check_base_class_offset(lv, (S503C5_nt*)(S503C4*), 0, "S503C3");
    check_base_class_offset(lv, (S503C4*), 0, "S503C3");
    test_class_info(&lv, &cd_S503C3);
    dp->~S503C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS503C3(Test_S503C3, "S503C3", ABISELECT(88,52));

#else // __cplusplus

extern void _ZN6S503C3C1Ev();
extern void _ZN6S503C3D1Ev();
Name_Map name_map_S503C3[] = {
  NSPAIR(_ZN6S503C3C1Ev),
  NSPAIR(_ZN6S503C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S503C5_nt;
extern VTBL_ENTRY _ZTI9S503C5_nt[];
extern  VTBL_ENTRY _ZTV9S503C5_nt[];
extern Class_Descriptor cd_S503C4;
extern VTBL_ENTRY _ZTI6S503C4[];
extern  VTBL_ENTRY _ZTV6S503C4[];
static Base_Class bases_S503C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S503C5_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_S503C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S503C3[];
extern void _ZN6S503C3D1Ev();
extern void _ZN6S503C3D0Ev();
extern void _ZN9S503C5_nt2v2Ev();
extern void _ZN9S503C5_nt2v3Ev();
extern void _ZN9S503C5_nt2v4Ev();
extern void _ZN9S503C5_nt2v5Ev();
extern void _ZN9S503C5_nt2v6Ev();
extern void _ZN9S503C5_nt2v7Ev();
extern void _ZN9S503C5_nt2v8Ev();
extern void _ZN9S503C5_nt2v9Ev();
extern void _ZN9S503C5_nt3v10Ev();
extern void _ZN9S503C5_nt3v11Ev();
extern void _ZN6S503C43v12Ev();
extern void _ZN6S503C43v13Ev();
extern void _ZN6S503C43v14Ev();
extern void _ZN6S503C43v15Ev();
extern void _ZN6S503C33v16Ev();
static  VTBL_ENTRY vtc_S503C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S503C3[0]),
  (VTBL_ENTRY)&_ZN6S503C3D1Ev,
  (VTBL_ENTRY)&_ZN6S503C3D0Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v2Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v3Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v6Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v9Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt3v11Ev,
  (VTBL_ENTRY)&_ZN6S503C43v12Ev,
  (VTBL_ENTRY)&_ZN6S503C43v13Ev,
  (VTBL_ENTRY)&_ZN6S503C43v14Ev,
  (VTBL_ENTRY)&_ZN6S503C43v15Ev,
  (VTBL_ENTRY)&_ZN6S503C33v16Ev,
};
extern VTBL_ENTRY _ZTI6S503C3[];
extern  VTBL_ENTRY _ZTV6S503C3[];
Class_Descriptor cd_S503C3 = {  "S503C3", // class name
  bases_S503C3, 2,
  &(vtc_S503C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,52), // object size
  NSPAIRA(_ZTI6S503C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S503C3),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S503C2  : S503C3 {
  virtual  ~S503C2(); // _ZN6S503C2D1Ev
  virtual void  v17(); // _ZN6S503C23v17Ev
  S503C2(); // tgen
};
//SIG(-1 S503C2) C1{ BC2{ BC3{ BC4{ vd v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[2] FC5{ m FC6{ m Fp Fi FC7{ m}} Fi} Fp} vd v12 v13 v14 v15 Fp[2] FC8{ m Fp Fi FC9{ m} FC10{ m}}} vd v16} vd v1}


 S503C2 ::~S503C2(){ note_dtor("S503C2", this);}
void  S503C2 ::v17(){vfunc_called(this, "_ZN6S503C23v17Ev");}
S503C2 ::S503C2(){ note_ctor("S503C2", this);} // tgen

static void Test_S503C2()
{
  extern Class_Descriptor cd_S503C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,14)];
    init_test(&cd_S503C2, buf);
    S503C2 *dp, &lv = *(dp=new (buf) S503C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,52), "sizeof(S503C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S503C2)");
    check_base_class_offset(lv, (S503C5_nt*)(S503C4*)(S503C3*), 0, "S503C2");
    check_base_class_offset(lv, (S503C4*)(S503C3*), 0, "S503C2");
    check_base_class_offset(lv, (S503C3*), 0, "S503C2");
    test_class_info(&lv, &cd_S503C2);
    dp->~S503C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS503C2(Test_S503C2, "S503C2", ABISELECT(88,52));

#else // __cplusplus

extern void _ZN6S503C2C1Ev();
extern void _ZN6S503C2D1Ev();
Name_Map name_map_S503C2[] = {
  NSPAIR(_ZN6S503C2C1Ev),
  NSPAIR(_ZN6S503C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S503C5_nt;
extern VTBL_ENTRY _ZTI9S503C5_nt[];
extern  VTBL_ENTRY _ZTV9S503C5_nt[];
extern Class_Descriptor cd_S503C4;
extern VTBL_ENTRY _ZTI6S503C4[];
extern  VTBL_ENTRY _ZTV6S503C4[];
extern Class_Descriptor cd_S503C3;
extern VTBL_ENTRY _ZTI6S503C3[];
extern  VTBL_ENTRY _ZTV6S503C3[];
static Base_Class bases_S503C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S503C5_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_S503C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S503C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S503C2[];
extern void _ZN6S503C2D1Ev();
extern void _ZN6S503C2D0Ev();
extern void _ZN9S503C5_nt2v2Ev();
extern void _ZN9S503C5_nt2v3Ev();
extern void _ZN9S503C5_nt2v4Ev();
extern void _ZN9S503C5_nt2v5Ev();
extern void _ZN9S503C5_nt2v6Ev();
extern void _ZN9S503C5_nt2v7Ev();
extern void _ZN9S503C5_nt2v8Ev();
extern void _ZN9S503C5_nt2v9Ev();
extern void _ZN9S503C5_nt3v10Ev();
extern void _ZN9S503C5_nt3v11Ev();
extern void _ZN6S503C43v12Ev();
extern void _ZN6S503C43v13Ev();
extern void _ZN6S503C43v14Ev();
extern void _ZN6S503C43v15Ev();
extern void _ZN6S503C33v16Ev();
extern void _ZN6S503C23v17Ev();
static  VTBL_ENTRY vtc_S503C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S503C2[0]),
  (VTBL_ENTRY)&_ZN6S503C2D1Ev,
  (VTBL_ENTRY)&_ZN6S503C2D0Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v2Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v3Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v6Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v9Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt3v11Ev,
  (VTBL_ENTRY)&_ZN6S503C43v12Ev,
  (VTBL_ENTRY)&_ZN6S503C43v13Ev,
  (VTBL_ENTRY)&_ZN6S503C43v14Ev,
  (VTBL_ENTRY)&_ZN6S503C43v15Ev,
  (VTBL_ENTRY)&_ZN6S503C33v16Ev,
  (VTBL_ENTRY)&_ZN6S503C23v17Ev,
};
extern VTBL_ENTRY _ZTI6S503C2[];
extern  VTBL_ENTRY _ZTV6S503C2[];
Class_Descriptor cd_S503C2 = {  "S503C2", // class name
  bases_S503C2, 3,
  &(vtc_S503C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,52), // object size
  NSPAIRA(_ZTI6S503C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S503C2),20, //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  S503C1  : S503C2 {
  virtual  ~S503C1(); // _ZN6S503C1D1Ev
  virtual void  v1(); // _ZN6S503C12v1Ev
  S503C1(); // tgen
};
//SIG(1 S503C1) C1{ BC2{ BC3{ BC4{ BC5{ vd v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[2] FC6{ m FC7{ m Fp Fi FC8{ m}} Fi} Fp} vd v12 v13 v14 v15 Fp[2] FC9{ m Fp Fi FC10{ m} FC11{ m}}} vd v16} vd v17} vd v1}


 S503C1 ::~S503C1(){ note_dtor("S503C1", this);}
void  S503C1 ::v1(){vfunc_called(this, "_ZN6S503C12v1Ev");}
S503C1 ::S503C1(){ note_ctor("S503C1", this);} // tgen

static void Test_S503C1()
{
  extern Class_Descriptor cd_S503C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,14)];
    init_test(&cd_S503C1, buf);
    S503C1 *dp, &lv = *(dp=new (buf) S503C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,52), "sizeof(S503C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S503C1)");
    check_base_class_offset(lv, (S503C5_nt*)(S503C4*)(S503C3*)(S503C2*), 0, "S503C1");
    check_base_class_offset(lv, (S503C4*)(S503C3*)(S503C2*), 0, "S503C1");
    check_base_class_offset(lv, (S503C3*)(S503C2*), 0, "S503C1");
    check_base_class_offset(lv, (S503C2*), 0, "S503C1");
    test_class_info(&lv, &cd_S503C1);
    dp->~S503C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS503C1(Test_S503C1, "S503C1", ABISELECT(88,52));

#else // __cplusplus

extern void _ZN6S503C1C1Ev();
extern void _ZN6S503C1D1Ev();
Name_Map name_map_S503C1[] = {
  NSPAIR(_ZN6S503C1C1Ev),
  NSPAIR(_ZN6S503C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S503C5_nt;
extern VTBL_ENTRY _ZTI9S503C5_nt[];
extern  VTBL_ENTRY _ZTV9S503C5_nt[];
extern Class_Descriptor cd_S503C4;
extern VTBL_ENTRY _ZTI6S503C4[];
extern  VTBL_ENTRY _ZTV6S503C4[];
extern Class_Descriptor cd_S503C3;
extern VTBL_ENTRY _ZTI6S503C3[];
extern  VTBL_ENTRY _ZTV6S503C3[];
extern Class_Descriptor cd_S503C2;
extern VTBL_ENTRY _ZTI6S503C2[];
extern  VTBL_ENTRY _ZTV6S503C2[];
static Base_Class bases_S503C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S503C5_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_S503C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S503C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S503C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S503C1[];
extern void _ZN6S503C1D1Ev();
extern void _ZN6S503C1D0Ev();
extern void _ZN9S503C5_nt2v2Ev();
extern void _ZN9S503C5_nt2v3Ev();
extern void _ZN9S503C5_nt2v4Ev();
extern void _ZN9S503C5_nt2v5Ev();
extern void _ZN9S503C5_nt2v6Ev();
extern void _ZN9S503C5_nt2v7Ev();
extern void _ZN9S503C5_nt2v8Ev();
extern void _ZN9S503C5_nt2v9Ev();
extern void _ZN9S503C5_nt3v10Ev();
extern void _ZN9S503C5_nt3v11Ev();
extern void _ZN6S503C43v12Ev();
extern void _ZN6S503C43v13Ev();
extern void _ZN6S503C43v14Ev();
extern void _ZN6S503C43v15Ev();
extern void _ZN6S503C33v16Ev();
extern void _ZN6S503C23v17Ev();
extern void _ZN6S503C12v1Ev();
static  VTBL_ENTRY vtc_S503C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S503C1[0]),
  (VTBL_ENTRY)&_ZN6S503C1D1Ev,
  (VTBL_ENTRY)&_ZN6S503C1D0Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v2Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v3Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v6Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v9Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt3v11Ev,
  (VTBL_ENTRY)&_ZN6S503C43v12Ev,
  (VTBL_ENTRY)&_ZN6S503C43v13Ev,
  (VTBL_ENTRY)&_ZN6S503C43v14Ev,
  (VTBL_ENTRY)&_ZN6S503C43v15Ev,
  (VTBL_ENTRY)&_ZN6S503C33v16Ev,
  (VTBL_ENTRY)&_ZN6S503C23v17Ev,
  (VTBL_ENTRY)&_ZN6S503C12v1Ev,
};
extern VTBL_ENTRY _ZTI6S503C1[];
extern  VTBL_ENTRY _ZTV6S503C1[];
Class_Descriptor cd_S503C1 = {  "S503C1", // class name
  bases_S503C1, 4,
  &(vtc_S503C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,52), // object size
  NSPAIRA(_ZTI6S503C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S503C1),21, //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  S19434C7  {
  virtual void  v1(); // _ZN8S19434C72v1Ev
  ~S19434C7(); // tgen
  S19434C7(); // tgen
};
//SIG(-1 S19434C7) C1{ v1}


void  S19434C7 ::v1(){vfunc_called(this, "_ZN8S19434C72v1Ev");}
S19434C7 ::~S19434C7(){ note_dtor("S19434C7", this);} // tgen
S19434C7 ::S19434C7(){ note_ctor("S19434C7", this);} // tgen

static void Test_S19434C7()
{
  extern Class_Descriptor cd_S19434C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19434C7, buf);
    S19434C7 *dp, &lv = *(dp=new (buf) S19434C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19434C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19434C7)");
    test_class_info(&lv, &cd_S19434C7);
    dp->~S19434C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19434C7(Test_S19434C7, "S19434C7", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19434C7C1Ev();
extern void _ZN8S19434C7D1Ev();
Name_Map name_map_S19434C7[] = {
  NSPAIR(_ZN8S19434C7C1Ev),
  NSPAIR(_ZN8S19434C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19434C7[];
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY vtc_S19434C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19434C7[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
Class_Descriptor cd_S19434C7 = {  "S19434C7", // class name
  0,0,//no base classes
  &(vtc_S19434C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19434C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19434C7),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  S19434C6  : virtual S2121C38 , S19434C7 , virtual S2121C28 {
  ~S19434C6(); // tgen
  S19434C6(); // tgen
};
//SIG(-1 S19434C6) C1{ VBC2{ m} BC3{ v1} VBC4{ m}}


S19434C6 ::~S19434C6(){ note_dtor("S19434C6", this);} // tgen
S19434C6 ::S19434C6(){ note_ctor("S19434C6", this);} // tgen

static void Test_S19434C6()
{
  extern Class_Descriptor cd_S19434C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19434C6, buf);
    S19434C6 *dp, &lv = *(dp=new (buf) S19434C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19434C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19434C6)");
    check_base_class_offset(lv, (S2121C38*), 0, "S19434C6");
    check_base_class_offset(lv, (S19434C7*), 0, "S19434C6");
    check_base_class_offset(lv, (S2121C28*), 0, "S19434C6");
    test_class_info(&lv, &cd_S19434C6);
    dp->~S19434C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19434C6(Test_S19434C6, "S19434C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19434C6C1Ev();
extern void _ZN8S19434C6D1Ev();
Name_Map name_map_S19434C6[] = {
  NSPAIR(_ZN8S19434C6C1Ev),
  NSPAIR(_ZN8S19434C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
static Base_Class bases_S19434C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19434C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S19434C6[];
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY vtc_S19434C6[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19434C6[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern VTBL_ENTRY _ZTV8S19434C6[];
static  VTT_ENTRY vtt_S19434C6[] = {
  {&(_ZTV8S19434C6[4]),  4,5},
};
extern VTBL_ENTRY _ZTI8S19434C6[];
extern  VTBL_ENTRY _ZTV8S19434C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19434C6[];
Class_Descriptor cd_S19434C6 = {  "S19434C6", // class name
  bases_S19434C6, 3,
  &(vtc_S19434C6[0]), // expected_vtbl_contents
  &(vtt_S19434C6[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19434C6),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19434C6),5, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19434C6),1, //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  S19434C4  : S2121C38 , S19434C6 {
  virtual void  v2(); // _ZN8S19434C42v2Ev
  ~S19434C4(); // tgen
  S19434C4(); // tgen
};
//SIG(-1 S19434C4) C1{ BC2{ m} BC3{ VBC2 BC4{ v2} VBC5{ m}} v1}


void  S19434C4 ::v2(){vfunc_called(this, "_ZN8S19434C42v2Ev");}
S19434C4 ::~S19434C4(){ note_dtor("S19434C4", this);} // tgen
S19434C4 ::S19434C4(){ note_ctor("S19434C4", this);} // tgen

static void Test_S19434C4()
{
  extern Class_Descriptor cd_S19434C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19434C4, buf);
    S19434C4 *dp, &lv = *(dp=new (buf) S19434C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19434C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19434C4)");
    /*is_ambiguous_... S19434C4::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*), 0, "S19434C4");
    check_base_class_offset(lv, (S2121C38*)(S19434C6*), ABISELECT(8,4), "S19434C4");
    check_base_class_offset(lv, (S19434C7*)(S19434C6*), 0, "S19434C4");
    check_base_class_offset(lv, (S2121C28*)(S19434C6*), 0, "S19434C4");
    check_base_class_offset(lv, (S19434C6*), 0, "S19434C4");
    test_class_info(&lv, &cd_S19434C4);
    dp->~S19434C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19434C4(Test_S19434C4, "S19434C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19434C4C1Ev();
extern void _ZN8S19434C4D1Ev();
Name_Map name_map_S19434C4[] = {
  NSPAIR(_ZN8S19434C4C1Ev),
  NSPAIR(_ZN8S19434C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S19434C6;
extern VTBL_ENTRY _ZTI8S19434C6[];
extern  VTBL_ENTRY _ZTV8S19434C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19434C6[];
static Base_Class bases_S19434C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2121C38,    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, 1},
  {&cd_S19434C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19434C6,    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 _ZTI8S19434C4[];
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C42v2Ev();
static  VTBL_ENTRY vtc_S19434C4[] = {
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19434C4[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  (VTBL_ENTRY)&_ZN8S19434C42v2Ev,
};
extern VTBL_ENTRY _ZTV8S19434C4[];
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C6__8S19434C4[] = {
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19434C6[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
static  VTT_ENTRY vtt_S19434C4[] = {
  {&(_ZTV8S19434C4[4]),  4,6},
  {&(_tg__ZTV8S19434C6__8S19434C4[4]),  4,5},
};
extern VTBL_ENTRY _ZTI8S19434C4[];
extern  VTBL_ENTRY _ZTV8S19434C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19434C4[];
Class_Descriptor cd_S19434C4 = {  "S19434C4", // class name
  bases_S19434C4, 5,
  &(vtc_S19434C4[0]), // expected_vtbl_contents
  &(vtt_S19434C4[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19434C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19434C4),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19434C4),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  S19434C3  : virtual S19434C4 {
  int s19434c3f0;
  ~S19434C3(); // tgen
  S19434C3(); // tgen
};
//SIG(-1 S19434C3) C1{ VBC2{ BC3{ m} BC4{ VBC3 BC5{ v1} VBC6{ m}} v2} Fi}


S19434C3 ::~S19434C3(){ note_dtor("S19434C3", this);} // tgen
S19434C3 ::S19434C3(){ note_ctor("S19434C3", this);} // tgen

static void Test_S19434C3()
{
  extern Class_Descriptor cd_S19434C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S19434C3, buf);
    S19434C3 *dp, &lv = *(dp=new (buf) S19434C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S19434C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19434C3)");
    /*is_ambiguous_... S19434C4::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S19434C4*), 0, "S19434C3");
    check_base_class_offset(lv, (S2121C38*)(S19434C6*)(S19434C4*), ABISELECT(12,8), "S19434C3");
    check_base_class_offset(lv, (S19434C7*)(S19434C6*)(S19434C4*), 0, "S19434C3");
    check_base_class_offset(lv, (S2121C28*)(S19434C6*)(S19434C4*), 0, "S19434C3");
    check_base_class_offset(lv, (S19434C6*)(S19434C4*), 0, "S19434C3");
    check_base_class_offset(lv, (S19434C4*), 0, "S19434C3");
    check_field_offset(lv, s19434c3f0, ABISELECT(8,4), "S19434C3.s19434c3f0");
    test_class_info(&lv, &cd_S19434C3);
    dp->~S19434C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19434C3(Test_S19434C3, "S19434C3", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S19434C3C1Ev();
extern void _ZN8S19434C3D1Ev();
Name_Map name_map_S19434C3[] = {
  NSPAIR(_ZN8S19434C3C1Ev),
  NSPAIR(_ZN8S19434C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S19434C6;
extern VTBL_ENTRY _ZTI8S19434C6[];
extern  VTBL_ENTRY _ZTV8S19434C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19434C6[];
extern Class_Descriptor cd_S19434C4;
extern VTBL_ENTRY _ZTI8S19434C4[];
extern  VTBL_ENTRY _ZTV8S19434C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19434C4[];
static Base_Class bases_S19434C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2121C38,    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
    4, //immediately_derived
  0, 1},
  {&cd_S19434C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19434C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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
    5, //immediately_derived
  0, 0},
  {&cd_S19434C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //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 _ZTI8S19434C3[];
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C42v2Ev();
static  VTBL_ENTRY vtc_S19434C3[] = {
  0,
  0,
  0,
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19434C3[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  (VTBL_ENTRY)&_ZN8S19434C42v2Ev,
};
extern VTBL_ENTRY _ZTV8S19434C3[];
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C4__8S19434C3[] = {
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19434C4[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  (VTBL_ENTRY)&_ZN8S19434C42v2Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C68S19434C4__8S19434C3[] = {
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19434C6[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
static  VTT_ENTRY vtt_S19434C3[] = {
  {&(_ZTV8S19434C3[7]),  7,9},
  {&(_ZTV8S19434C3[7]),  7,9},
  {&(_tg__ZTV8S19434C4__8S19434C3[4]),  4,6},
  {&(_tg__ZTV8S19434C68S19434C4__8S19434C3[4]),  4,5},
};
extern VTBL_ENTRY _ZTI8S19434C3[];
extern  VTBL_ENTRY _ZTV8S19434C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19434C3[];
Class_Descriptor cd_S19434C3 = {  "S19434C3", // class name
  bases_S19434C3, 6,
  &(vtc_S19434C3[0]), // expected_vtbl_contents
  &(vtt_S19434C3[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S19434C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19434C3),9, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19434C3),4, //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  S19434C11  : S19434C6 , S19434C7 {
  ~S19434C11(); // tgen
  S19434C11(); // tgen
};
//SIG(-1 S19434C11) C1{ BC2{ VBC3{ m} BC4{ v1} VBC5{ m}} BC4}


S19434C11 ::~S19434C11(){ note_dtor("S19434C11", this);} // tgen
S19434C11 ::S19434C11(){ note_ctor("S19434C11", this);} // tgen

static void Test_S19434C11()
{
  extern Class_Descriptor cd_S19434C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19434C11, buf);
    S19434C11 *dp, &lv = *(dp=new (buf) S19434C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19434C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19434C11)");
    check_base_class_offset(lv, (S2121C38*)(S19434C6*), 0, "S19434C11");
    check_base_class_offset(lv, (S19434C7*)(S19434C6*), 0, "S19434C11");
    check_base_class_offset(lv, (S2121C28*)(S19434C6*), 0, "S19434C11");
    check_base_class_offset(lv, (S19434C6*), 0, "S19434C11");
    /*is_ambiguous_... S19434C11::S19434C7 */ AMB_check_base_class_offset(lv, (S19434C7*), ABISELECT(8,4), "S19434C11");
    test_class_info(&lv, &cd_S19434C11);
    dp->~S19434C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19434C11(Test_S19434C11, "S19434C11", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN9S19434C11C1Ev();
extern void _ZN9S19434C11D1Ev();
Name_Map name_map_S19434C11[] = {
  NSPAIR(_ZN9S19434C11C1Ev),
  NSPAIR(_ZN9S19434C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S19434C6;
extern VTBL_ENTRY _ZTI8S19434C6[];
extern  VTBL_ENTRY _ZTV8S19434C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19434C6[];
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
static Base_Class bases_S19434C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19434C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19434C6,    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_S19434C7,    ABISELECT(8,4), //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
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19434C11[];
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY vtc_S19434C11[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19434C11[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19434C11[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern VTBL_ENTRY _ZTV9S19434C11[];
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C6__9S19434C11[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19434C6[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
static  VTT_ENTRY vtt_S19434C11[] = {
  {&(_ZTV9S19434C11[4]),  4,8},
  {&(_tg__ZTV8S19434C6__9S19434C11[4]),  4,5},
};
extern VTBL_ENTRY _ZTI9S19434C11[];
extern  VTBL_ENTRY _ZTV9S19434C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19434C11[];
Class_Descriptor cd_S19434C11 = {  "S19434C11", // class name
  bases_S19434C11, 5,
  &(vtc_S19434C11[0]), // expected_vtbl_contents
  &(vtt_S19434C11[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S19434C11),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19434C11),8, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19434C11),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  S19434C12  : S19434C7 , S2121C28 , virtual S2121C38 {
  ~S19434C12(); // tgen
  S19434C12(); // tgen
};
//SIG(-1 S19434C12) C1{ BC2{ v1} BC3{ m} VBC4{ m}}


S19434C12 ::~S19434C12(){ note_dtor("S19434C12", this);} // tgen
S19434C12 ::S19434C12(){ note_ctor("S19434C12", this);} // tgen

static void Test_S19434C12()
{
  extern Class_Descriptor cd_S19434C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19434C12, buf);
    S19434C12 *dp, &lv = *(dp=new (buf) S19434C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19434C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19434C12)");
    check_base_class_offset(lv, (S19434C7*), 0, "S19434C12");
    check_base_class_offset(lv, (S2121C28*), 0, "S19434C12");
    check_base_class_offset(lv, (S2121C38*), 0, "S19434C12");
    test_class_info(&lv, &cd_S19434C12);
    dp->~S19434C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19434C12(Test_S19434C12, "S19434C12", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN9S19434C12C1Ev();
extern void _ZN9S19434C12D1Ev();
Name_Map name_map_S19434C12[] = {
  NSPAIR(_ZN9S19434C12C1Ev),
  NSPAIR(_ZN9S19434C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
static Base_Class bases_S19434C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19434C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI9S19434C12[];
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY vtc_S19434C12[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19434C12[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern VTBL_ENTRY _ZTV9S19434C12[];
static  VTT_ENTRY vtt_S19434C12[] = {
  {&(_ZTV9S19434C12[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S19434C12[];
extern  VTBL_ENTRY _ZTV9S19434C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19434C12[];
Class_Descriptor cd_S19434C12 = {  "S19434C12", // class name
  bases_S19434C12, 3,
  &(vtc_S19434C12[0]), // expected_vtbl_contents
  &(vtt_S19434C12[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI9S19434C12),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19434C12),4, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19434C12),1, //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  S19434C10  : virtual S2121C38 , virtual S19434C11 , virtual S19434C4 , virtual S19434C12 , S19434C7 {
  ~S19434C10(); // tgen
  S19434C10(); // tgen
};
//SIG(-1 S19434C10) C1{ VBC2{ m} VBC3{ BC4{ VBC2 BC5{ v1} VBC6{ m}} BC5} VBC7{ BC2 BC4 v2} VBC8{ BC5 BC6 VBC2} BC5}


S19434C10 ::~S19434C10(){ note_dtor("S19434C10", this);} // tgen
S19434C10 ::S19434C10(){ note_ctor("S19434C10", this);} // tgen

static void Test_S19434C10()
{
  extern Class_Descriptor cd_S19434C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S19434C10, buf);
    S19434C10 *dp, &lv = *(dp=new (buf) S19434C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S19434C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19434C10)");
    /*is_ambiguous_... S19434C10::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*), 0, "S19434C10");
    check_base_class_offset(lv, (S2121C38*)(S19434C6*)(S19434C11*), 0, "S19434C10");
    check_base_class_offset(lv, (S2121C38*)(S19434C6*)(S19434C4*), 0, "S19434C10");
    check_base_class_offset(lv, (S2121C38*)(S19434C12*), 0, "S19434C10");
    check_base_class_offset(lv, (S19434C7*)(S19434C6*)(S19434C11*), ABISELECT(8,4), "S19434C10");
    check_base_class_offset(lv, (S2121C28*)(S19434C6*)(S19434C11*), 0, "S19434C10");
    check_base_class_offset(lv, (S2121C28*)(S19434C6*)(S19434C4*), 0, "S19434C10");
    check_base_class_offset(lv, (S19434C6*)(S19434C11*), ABISELECT(8,4), "S19434C10");
    /*is_ambiguous_... S19434C11::S19434C7 */ AMB_check_base_class_offset(lv, (S19434C7*)(S19434C11*), ABISELECT(16,8), "S19434C10");
    check_base_class_offset(lv, (S19434C11*), ABISELECT(8,4), "S19434C10");
    /*is_ambiguous_... S19434C4::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S19434C4*), ABISELECT(24,12), "S19434C10");
    check_base_class_offset(lv, (S19434C7*)(S19434C6*)(S19434C4*), ABISELECT(24,12), "S19434C10");
    check_base_class_offset(lv, (S19434C6*)(S19434C4*), ABISELECT(24,12), "S19434C10");
    check_base_class_offset(lv, (S19434C4*), ABISELECT(24,12), "S19434C10");
    check_base_class_offset(lv, (S19434C7*)(S19434C12*), ABISELECT(32,16), "S19434C10");
    check_base_class_offset(lv, (S2121C28*)(S19434C12*), ABISELECT(32,16), "S19434C10");
    check_base_class_offset(lv, (S19434C12*), ABISELECT(32,16), "S19434C10");
    /*is_ambiguous_... S19434C10::S19434C7 */ AMB_check_base_class_offset(lv, (S19434C7*), 0, "S19434C10");
    test_class_info(&lv, &cd_S19434C10);
    dp->~S19434C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19434C10(Test_S19434C10, "S19434C10", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN9S19434C10C1Ev();
extern void _ZN9S19434C10D1Ev();
Name_Map name_map_S19434C10[] = {
  NSPAIR(_ZN9S19434C10C1Ev),
  NSPAIR(_ZN9S19434C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S19434C6;
extern VTBL_ENTRY _ZTI8S19434C6[];
extern  VTBL_ENTRY _ZTV8S19434C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19434C6[];
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
extern Class_Descriptor cd_S19434C11;
extern VTBL_ENTRY _ZTI9S19434C11[];
extern  VTBL_ENTRY _ZTV9S19434C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19434C11[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
extern Class_Descriptor cd_S19434C6;
extern VTBL_ENTRY _ZTI8S19434C6[];
extern  VTBL_ENTRY _ZTV8S19434C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19434C6[];
extern Class_Descriptor cd_S19434C4;
extern VTBL_ENTRY _ZTI8S19434C4[];
extern  VTBL_ENTRY _ZTV8S19434C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19434C4[];
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S19434C12;
extern VTBL_ENTRY _ZTI9S19434C12[];
extern  VTBL_ENTRY _ZTV9S19434C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19434C12[];
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
static Base_Class bases_S19434C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19434C7,    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
    3, //immediately_derived
  0, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19434C6,    ABISELECT(8,4), //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
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19434C7,    ABISELECT(16,8), //bcp->offset
    14, //bcp->virtual_function_table_offset
    2, //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
    5, //immediately_derived
  0, 0},
  {&cd_S19434C11,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2121C38,    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
    9, //immediately_derived
  0, 0},
  {&cd_S19434C7,    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
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19434C6,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19434C4,    ABISELECT(24,12), //bcp->offset
    17, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19434C7,    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
    8, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2121C28,    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
    12, //immediately_derived
  0, 0},
  {&cd_S19434C12,    ABISELECT(32,16), //bcp->offset
    25, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19434C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19434C10[];
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C42v2Ev();
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY vtc_S19434C10[] = {
  ABISELECT(32,16),
  ABISELECT(24,12),
  0,
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19434C10[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19434C10[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19434C10[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19434C10[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  (VTBL_ENTRY)&_ZN8S19434C42v2Ev,
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19434C10[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern VTBL_ENTRY _ZTV9S19434C10[];
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19434C11__9S19434C10[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19434C11[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C69S19434C11__9S19434C10[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19434C6[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C4__9S19434C10[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19434C4[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  (VTBL_ENTRY)&_ZN8S19434C42v2Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C68S19434C4__A1__9S19434C10[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19434C6[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19434C12__9S19434C10[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19434C12[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
static  VTT_ENTRY vtt_S19434C10[] = {
  {&(_ZTV9S19434C10[7]),  7,30},
  {&(_ZTV9S19434C10[13]),  13,30},
  {&(_ZTV9S19434C10[16]),  16,30},
  {&(_ZTV9S19434C10[23]),  23,30},
  {&(_ZTV9S19434C10[29]),  29,30},
  {&(_tg__ZTV9S19434C11__9S19434C10[4]),  4,5},
  {&(_tg__ZTV8S19434C69S19434C11__9S19434C10[4]),  4,5},
  {&(_tg__ZTV8S19434C4__9S19434C10[4]),  4,6},
  {&(_tg__ZTV8S19434C68S19434C4__A1__9S19434C10[4]),  4,5},
  {&(_tg__ZTV9S19434C12__9S19434C10[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S19434C10[];
extern  VTBL_ENTRY _ZTV9S19434C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19434C10[];
Class_Descriptor cd_S19434C10 = {  "S19434C10", // class name
  bases_S19434C10, 14,
  &(vtc_S19434C10[0]), // expected_vtbl_contents
  &(vtt_S19434C10[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI9S19434C10),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19434C10),30, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19434C10),10, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19434C9  : S19434C10 , virtual S2121C24 , S19434C6 , S2121C28 , S19434C12 {
  virtual  ~S19434C9(); // _ZN8S19434C9D2Ev
  S19434C9(); // tgen
};
//SIG(-1 S19434C9) C1{ BC2{ VBC3{ m} VBC4{ BC5{ VBC3 BC6{ v1} VBC7{ m}} BC6} VBC8{ BC3 BC5 v2} VBC9{ BC6 BC7 VBC3} BC6} VBC10{ m} BC5 BC7 BC9 vd}


 S19434C9 ::~S19434C9(){ note_dtor("S19434C9", this);}
S19434C9 ::S19434C9(){ note_ctor("S19434C9", this);} // tgen

static void Test_S19434C9()
{
  extern Class_Descriptor cd_S19434C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S19434C9, buf);
    S19434C9 *dp, &lv = *(dp=new (buf) S19434C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S19434C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19434C9)");
    /*is_ambiguous_... S19434C10::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S19434C10*), 0, "S19434C9");
    check_base_class_offset(lv, (S2121C38*)(S19434C6*)(S19434C11*), 0, "S19434C9");
    check_base_class_offset(lv, (S2121C38*)(S19434C6*)(S19434C4*), 0, "S19434C9");
    /*is_ambiguous_... S19434C9::S19434C12 */ AMB_check_base_class_offset(lv, (S2121C38*)(S19434C12*), 0, "S19434C9");
    /*is_ambiguous_... S19434C9::S19434C6 */ AMB_check_base_class_offset(lv, (S2121C38*)(S19434C6*), 0, "S19434C9");
    /*is_ambiguous_... S19434C9::S19434C12 */ AMB_check_base_class_offset(lv, (S2121C38*)(S19434C12*), 0, "S19434C9");
    check_base_class_offset(lv, (S19434C7*)(S19434C6*)(S19434C11*), ABISELECT(24,12), "S19434C9");
    check_base_class_offset(lv, (S2121C28*)(S19434C6*)(S19434C11*), ABISELECT(40,20), "S19434C9");
    check_base_class_offset(lv, (S2121C28*)(S19434C6*)(S19434C4*), ABISELECT(40,20), "S19434C9");
    /*is_ambiguous_... S19434C9::S19434C6 */ AMB_check_base_class_offset(lv, (S2121C28*)(S19434C6*), ABISELECT(40,20), "S19434C9");
    check_base_class_offset(lv, (S19434C6*)(S19434C11*), ABISELECT(24,12), "S19434C9");
    /*is_ambiguous_... S19434C11::S19434C7 */ AMB_check_base_class_offset(lv, (S19434C7*)(S19434C11*), ABISELECT(32,16), "S19434C9");
    check_base_class_offset(lv, (S19434C11*)(S19434C10*), ABISELECT(24,12), "S19434C9");
    /*is_ambiguous_... S19434C4::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S19434C4*), ABISELECT(40,20), "S19434C9");
    check_base_class_offset(lv, (S19434C7*)(S19434C6*)(S19434C4*), ABISELECT(40,20), "S19434C9");
    check_base_class_offset(lv, (S19434C6*)(S19434C4*), ABISELECT(40,20), "S19434C9");
    check_base_class_offset(lv, (S19434C4*)(S19434C10*), ABISELECT(40,20), "S19434C9");
    /*is_ambiguous_... S19434C9::S19434C12 */ AMB_check_base_class_offset(lv, (S19434C7*)(S19434C12*), ABISELECT(48,24), "S19434C9");
    /*is_ambiguous_... S19434C9::S19434C12 */ AMB_check_base_class_offset(lv, (S2121C28*)(S19434C12*), ABISELECT(48,24), "S19434C9");
    check_base_class_offset(lv, (S19434C12*)(S19434C10*), ABISELECT(48,24), "S19434C9");
    /*is_ambiguous_... S19434C10::S19434C7 */ AMB_check_base_class_offset(lv, (S19434C7*)(S19434C10*), 0, "S19434C9");
    check_base_class_offset(lv, (S19434C10*), 0, "S19434C9");
    check_base_class_offset(lv, (S2121C24*), 0, "S19434C9");
    /*is_ambiguous_... S19434C9::S19434C6 */ AMB_check_base_class_offset(lv, (S19434C7*)(S19434C6*), ABISELECT(8,4), "S19434C9");
    /*is_ambiguous_... S19434C9::S19434C6 */ AMB_check_base_class_offset(lv, (S19434C6*), ABISELECT(8,4), "S19434C9");
    /*is_ambiguous_... S19434C9::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*), 0, "S19434C9");
    /*is_ambiguous_... S19434C9::S19434C12 */ AMB_check_base_class_offset(lv, (S19434C7*)(S19434C12*), ABISELECT(16,8), "S19434C9");
    /*is_ambiguous_... S19434C9::S19434C12 */ AMB_check_base_class_offset(lv, (S2121C28*)(S19434C12*), ABISELECT(16,8), "S19434C9");
    /*is_ambiguous_... S19434C9::S19434C12 */ AMB_check_base_class_offset(lv, (S19434C12*), ABISELECT(16,8), "S19434C9");
    test_class_info(&lv, &cd_S19434C9);
    dp->~S19434C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19434C9(Test_S19434C9, "S19434C9", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN8S19434C9C1Ev();
extern void _ZN8S19434C9D2Ev();
Name_Map name_map_S19434C9[] = {
  NSPAIR(_ZN8S19434C9C1Ev),
  NSPAIR(_ZN8S19434C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S19434C6;
extern VTBL_ENTRY _ZTI8S19434C6[];
extern  VTBL_ENTRY _ZTV8S19434C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19434C6[];
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
extern Class_Descriptor cd_S19434C11;
extern VTBL_ENTRY _ZTI9S19434C11[];
extern  VTBL_ENTRY _ZTV9S19434C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19434C11[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
extern Class_Descriptor cd_S19434C6;
extern VTBL_ENTRY _ZTI8S19434C6[];
extern  VTBL_ENTRY _ZTV8S19434C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19434C6[];
extern Class_Descriptor cd_S19434C4;
extern VTBL_ENTRY _ZTI8S19434C4[];
extern  VTBL_ENTRY _ZTV8S19434C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19434C4[];
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S19434C12;
extern VTBL_ENTRY _ZTI9S19434C12[];
extern  VTBL_ENTRY _ZTV9S19434C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19434C12[];
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
extern Class_Descriptor cd_S19434C10;
extern VTBL_ENTRY _ZTI9S19434C10[];
extern  VTBL_ENTRY _ZTV9S19434C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19434C10[];
extern Class_Descriptor cd_S2121C24;
extern VTBL_ENTRY _ZTI8S2121C24[];
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
extern Class_Descriptor cd_S19434C6;
extern VTBL_ENTRY _ZTI8S19434C6[];
extern  VTBL_ENTRY _ZTV8S19434C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19434C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S19434C12;
extern VTBL_ENTRY _ZTI9S19434C12[];
extern  VTBL_ENTRY _ZTV9S19434C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19434C12[];
static Base_Class bases_S19434C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19434C7,    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
    3, //immediately_derived
  0, 0},
  {&cd_S2121C28,    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
    3, //immediately_derived
  0, 1},
  {&cd_S19434C6,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19434C7,    ABISELECT(32,16), //bcp->offset
    26, //bcp->virtual_function_table_offset
    2, //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
    5, //immediately_derived
  0, 0},
  {&cd_S19434C11,    ABISELECT(24,12), //bcp->offset
    20, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S2121C38,    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
    9, //immediately_derived
  0, 0},
  {&cd_S19434C7,    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
    8, //immediately_derived
  0, 0},
  {&cd_S19434C6,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19434C4,    ABISELECT(40,20), //bcp->offset
    29, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19434C7,    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
    8, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2121C28,    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
    12, //immediately_derived
  0, 0},
  {&cd_S19434C12,    ABISELECT(48,24), //bcp->offset
    37, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19434C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19434C10,    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
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19434C7,    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
    12, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19434C6,    ABISELECT(8,4), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19434C7,    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
    14, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S2121C28,    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
    21, //immediately_derived
  0, 0},
  {&cd_S19434C12,    ABISELECT(16,8), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19434C9[];
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C9D1Ev();
extern void _ZN8S19434C9D0Ev();
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C42v2Ev();
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY vtc_S19434C9[] = {
  0,
  ABISELECT(48,24),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(24,12),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19434C9[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  (VTBL_ENTRY)&_ZN8S19434C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19434C9D0Ev,
  ABISELECT(32,16),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19434C9[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19434C9[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  0,
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19434C9[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19434C9[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  0,
  0,
  0,
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S19434C9[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  (VTBL_ENTRY)&_ZN8S19434C42v2Ev,
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19434C9[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern VTBL_ENTRY _ZTV8S19434C9[];
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19434C10__8S19434C9[] = {
  ABISELECT(48,24),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(24,12),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19434C10[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19434C11__9S19434C10__8S19434C9[] = {
  0,
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19434C10[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C79S19434C11__A1__9S19434C10__8S19434C9[] = {
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19434C10[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C4__9S19434C10__8S19434C9[] = {
  0,
  0,
  0,
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S19434C10[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  (VTBL_ENTRY)&_ZN8S19434C42v2Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19434C12__9S19434C10__8S19434C9[] = {
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S19434C10[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C6__A2__8S19434C9[] = {
  ABISELECT(32,16),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19434C6[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19434C12__A__8S19434C9[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19434C12[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19434C11__8S19434C9[] = {
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19434C11[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C69S19434C11__8S19434C9[] = {
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19434C6[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C4__8S19434C9[] = {
  0,
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19434C4[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  (VTBL_ENTRY)&_ZN8S19434C42v2Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C68S19434C4__A1__8S19434C9[] = {
  0,
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19434C6[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19434C12__8S19434C9[] = {
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI9S19434C12[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
static  VTT_ENTRY vtt_S19434C9[] = {
  {&(_ZTV8S19434C9[8]),  8,42},
  {&(_tg__ZTV9S19434C10__8S19434C9[7]),  7,8},
  {&(_tg__ZTV9S19434C11__9S19434C10__8S19434C9[5]),  5,6},
  {&(_tg__ZTV8S19434C79S19434C11__A1__9S19434C10__8S19434C9[2]),  2,3},
  {&(_tg__ZTV8S19434C4__9S19434C10__8S19434C9[6]),  6,8},
  {&(_tg__ZTV9S19434C12__9S19434C10__8S19434C9[4]),  4,5},
  {&(_tg__ZTV8S19434C6__A2__8S19434C9[4]),  4,5},
  {&(_tg__ZTV9S19434C12__A__8S19434C9[3]),  3,4},
  {&(_ZTV8S19434C9[25]),  25,42},
  {&(_ZTV8S19434C9[28]),  28,42},
  {&(_ZTV8S19434C9[35]),  35,42},
  {&(_ZTV8S19434C9[41]),  41,42},
  {&(_ZTV8S19434C9[15]),  15,42},
  {&(_ZTV8S19434C9[19]),  19,42},
  {&(_tg__ZTV9S19434C11__8S19434C9[4]),  4,5},
  {&(_tg__ZTV8S19434C69S19434C11__8S19434C9[4]),  4,5},
  {&(_tg__ZTV8S19434C4__8S19434C9[4]),  4,6},
  {&(_tg__ZTV8S19434C68S19434C4__A1__8S19434C9[4]),  4,5},
  {&(_tg__ZTV9S19434C12__8S19434C9[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19434C9[];
extern  VTBL_ENTRY _ZTV8S19434C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19434C9[];
Class_Descriptor cd_S19434C9 = {  "S19434C9", // class name
  bases_S19434C9, 22,
  &(vtc_S19434C9[0]), // expected_vtbl_contents
  &(vtt_S19434C9[0]), // expected_vtt_contents
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI8S19434C9),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19434C9),42, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19434C9),19, //virtual table table var
  15, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19434C2  : S19434C3 , S19434C9 {
  int s19434c2f0;
  virtual  ~S19434C2(); // _ZN8S19434C2D2Ev
  S19434C2(); // tgen
};
//SIG(-1 S19434C2) C1{ BC2{ VBC3{ BC4{ m} BC5{ VBC4 BC6{ v1} VBC7{ m}} v2} Fi} BC8{ BC9{ VBC4 VBC10{ BC5 BC6} VBC3 VBC11{ BC6 BC7 VBC4} BC6} VBC12{ m} BC5 BC7 BC11 vd} vd Fi}


 S19434C2 ::~S19434C2(){ note_dtor("S19434C2", this);}
S19434C2 ::S19434C2(){ note_ctor("S19434C2", this);} // tgen

static void Test_S19434C2()
{
  extern Class_Descriptor cd_S19434C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S19434C2, buf);
    S19434C2 *dp, &lv = *(dp=new (buf) S19434C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S19434C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19434C2)");
    /*is_ambiguous_... S19434C4::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S19434C4*), 0, "S19434C2");
    check_base_class_offset(lv, (S2121C38*)(S19434C6*)(S19434C4*), ABISELECT(44,24), "S19434C2");
    /*is_ambiguous_... S19434C10::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S19434C10*)(S19434C9*), ABISELECT(44,24), "S19434C2");
    check_base_class_offset(lv, (S2121C38*)(S19434C6*)(S19434C11*), ABISELECT(44,24), "S19434C2");
    /*is_ambiguous_... S19434C2::S19434C12 */ AMB_check_base_class_offset(lv, (S2121C38*)(S19434C12*), ABISELECT(44,24), "S19434C2");
    /*is_ambiguous_... S19434C9::S19434C6 */ AMB_check_base_class_offset(lv, (S2121C38*)(S19434C6*)(S19434C9*), ABISELECT(44,24), "S19434C2");
    /*is_ambiguous_... S19434C9::S19434C12 */ AMB_check_base_class_offset(lv, (S2121C38*)(S19434C12*)(S19434C9*), ABISELECT(44,24), "S19434C2");
    check_base_class_offset(lv, (S19434C7*)(S19434C6*)(S19434C4*), 0, "S19434C2");
    check_base_class_offset(lv, (S2121C28*)(S19434C6*)(S19434C4*), 0, "S19434C2");
    check_base_class_offset(lv, (S2121C28*)(S19434C6*)(S19434C11*), 0, "S19434C2");
    /*is_ambiguous_... S19434C9::S19434C6 */ AMB_check_base_class_offset(lv, (S2121C28*)(S19434C6*)(S19434C9*), 0, "S19434C2");
    check_base_class_offset(lv, (S19434C6*)(S19434C4*), 0, "S19434C2");
    check_base_class_offset(lv, (S19434C4*)(S19434C3*), 0, "S19434C2");
    check_base_class_offset(lv, (S19434C4*)(S19434C10*)(S19434C9*), 0, "S19434C2");
    check_base_class_offset(lv, (S19434C3*), 0, "S19434C2");
    check_base_class_offset(lv, (S19434C7*)(S19434C6*)(S19434C11*), ABISELECT(48,24), "S19434C2");
    check_base_class_offset(lv, (S19434C6*)(S19434C11*), ABISELECT(48,24), "S19434C2");
    /*is_ambiguous_... S19434C11::S19434C7 */ AMB_check_base_class_offset(lv, (S19434C7*)(S19434C11*), ABISELECT(56,28), "S19434C2");
    check_base_class_offset(lv, (S19434C11*)(S19434C10*)(S19434C9*), ABISELECT(48,24), "S19434C2");
    /*is_ambiguous_... S19434C2::S19434C12 */ AMB_check_base_class_offset(lv, (S19434C7*)(S19434C12*), ABISELECT(64,32), "S19434C2");
    /*is_ambiguous_... S19434C2::S19434C12 */ AMB_check_base_class_offset(lv, (S2121C28*)(S19434C12*), ABISELECT(64,32), "S19434C2");
    check_base_class_offset(lv, (S19434C12*)(S19434C10*)(S19434C9*), ABISELECT(64,32), "S19434C2");
    /*is_ambiguous_... S19434C10::S19434C7 */ AMB_check_base_class_offset(lv, (S19434C7*)(S19434C10*)(S19434C9*), ABISELECT(16,8), "S19434C2");
    check_base_class_offset(lv, (S19434C10*)(S19434C9*), ABISELECT(16,8), "S19434C2");
    check_base_class_offset(lv, (S2121C24*)(S19434C9*), 0, "S19434C2");
    /*is_ambiguous_... S19434C9::S19434C6 */ AMB_check_base_class_offset(lv, (S19434C7*)(S19434C6*)(S19434C9*), ABISELECT(24,12), "S19434C2");
    /*is_ambiguous_... S19434C9::S19434C6 */ AMB_check_base_class_offset(lv, (S19434C6*)(S19434C9*), ABISELECT(24,12), "S19434C2");
    /*is_ambiguous_... S19434C9::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*)(S19434C9*), ABISELECT(16,8), "S19434C2");
    /*is_ambiguous_... S19434C9::S19434C12 */ AMB_check_base_class_offset(lv, (S19434C7*)(S19434C12*)(S19434C9*), ABISELECT(32,16), "S19434C2");
    /*is_ambiguous_... S19434C9::S19434C12 */ AMB_check_base_class_offset(lv, (S2121C28*)(S19434C12*)(S19434C9*), ABISELECT(32,16), "S19434C2");
    /*is_ambiguous_... S19434C9::S19434C12 */ AMB_check_base_class_offset(lv, (S19434C12*)(S19434C9*), ABISELECT(32,16), "S19434C2");
    check_base_class_offset(lv, (S19434C9*), ABISELECT(16,8), "S19434C2");
    check_field_offset(lv, s19434c2f0, ABISELECT(40,20), "S19434C2.s19434c2f0");
    test_class_info(&lv, &cd_S19434C2);
    dp->~S19434C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19434C2(Test_S19434C2, "S19434C2", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN8S19434C2C1Ev();
extern void _ZN8S19434C2D2Ev();
Name_Map name_map_S19434C2[] = {
  NSPAIR(_ZN8S19434C2C1Ev),
  NSPAIR(_ZN8S19434C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S19434C6;
extern VTBL_ENTRY _ZTI8S19434C6[];
extern  VTBL_ENTRY _ZTV8S19434C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19434C6[];
extern Class_Descriptor cd_S19434C4;
extern VTBL_ENTRY _ZTI8S19434C4[];
extern  VTBL_ENTRY _ZTV8S19434C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19434C4[];
extern Class_Descriptor cd_S19434C3;
extern VTBL_ENTRY _ZTI8S19434C3[];
extern  VTBL_ENTRY _ZTV8S19434C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19434C3[];
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
extern Class_Descriptor cd_S19434C6;
extern VTBL_ENTRY _ZTI8S19434C6[];
extern  VTBL_ENTRY _ZTV8S19434C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19434C6[];
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
extern Class_Descriptor cd_S19434C11;
extern VTBL_ENTRY _ZTI9S19434C11[];
extern  VTBL_ENTRY _ZTV9S19434C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19434C11[];
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S19434C12;
extern VTBL_ENTRY _ZTI9S19434C12[];
extern  VTBL_ENTRY _ZTV9S19434C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19434C12[];
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
extern Class_Descriptor cd_S19434C10;
extern VTBL_ENTRY _ZTI9S19434C10[];
extern  VTBL_ENTRY _ZTV9S19434C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19434C10[];
extern Class_Descriptor cd_S2121C24;
extern VTBL_ENTRY _ZTI8S2121C24[];
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
extern Class_Descriptor cd_S19434C6;
extern VTBL_ENTRY _ZTI8S19434C6[];
extern  VTBL_ENTRY _ZTV8S19434C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19434C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S19434C12;
extern VTBL_ENTRY _ZTI9S19434C12[];
extern  VTBL_ENTRY _ZTV9S19434C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19434C12[];
extern Class_Descriptor cd_S19434C9;
extern VTBL_ENTRY _ZTI8S19434C9[];
extern  VTBL_ENTRY _ZTV8S19434C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19434C9[];
static Base_Class bases_S19434C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2121C38,    ABISELECT(44,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, 1},
  {&cd_S19434C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19434C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19434C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19434C3,    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
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19434C7,    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
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19434C6,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19434C7,    ABISELECT(56,28), //bcp->offset
    40, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19434C11,    ABISELECT(48,24), //bcp->offset
    34, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S19434C7,    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
    8, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S2121C28,    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
    13, //immediately_derived
  0, 0},
  {&cd_S19434C12,    ABISELECT(64,32), //bcp->offset
    43, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S19434C7,    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
    11, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19434C10,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S2121C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19434C7,    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
    13, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19434C6,    ABISELECT(24,12), //bcp->offset
    25, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S2121C28,    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
    23, //immediately_derived
  0, 0},
  {&cd_S19434C7,    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
    15, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S2121C28,    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
    22, //immediately_derived
  0, 0},
  {&cd_S19434C12,    ABISELECT(32,16), //bcp->offset
    30, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S19434C9,    ABISELECT(16,8), //bcp->offset
    14, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19434C2[];
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C42v2Ev();
extern void _ZN8S19434C2D1Ev();
extern void _ZN8S19434C2D0Ev();
extern void _ZN8S19434C72v1Ev();
extern void ABISELECT(_ZThn16_N8S19434C2D1Ev,_ZThn8_N8S19434C2D1Ev)();
extern void ABISELECT(_ZThn16_N8S19434C2D0Ev,_ZThn8_N8S19434C2D0Ev)();
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY vtc_S19434C2[] = {
  0,
  ABISELECT(64,32),
  ABISELECT(48,24),
  0,
  0,
  0,
  0,
  ABISELECT(44,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19434C2[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  (VTBL_ENTRY)&_ZN8S19434C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19434C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19434C2D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(28,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19434C2[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19434C2D1Ev,_ZThn8_N8S19434C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19434C2D0Ev,_ZThn8_N8S19434C2D0Ev),
  ABISELECT(-24,-12),
  ABISELECT(20,12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19434C2[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  ABISELECT(12,8),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19434C2[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  0,
  ABISELECT(-48,-24),
  ABISELECT(-4,0),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19434C2[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S19434C2[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  0,
  ABISELECT(-20,-8),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S19434C2[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern VTBL_ENTRY _ZTV8S19434C2[];
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C3__8S19434C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(44,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19434C3[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  (VTBL_ENTRY)&_ZN8S19434C42v2Ev,
};
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C9D1Ev();
extern void _ZN8S19434C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C9__8S19434C2[] = {
  ABISELECT(-16,-8),
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(28,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19434C9[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  (VTBL_ENTRY)&_ZN8S19434C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19434C9D0Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19434C108S19434C9__8S19434C2[] = {
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(28,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19434C10[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19434C11__9S19434C108S19434C9__8S19434C2[] = {
  0,
  ABISELECT(-48,-24),
  ABISELECT(-4,0),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19434C10[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C79S19434C11__A1__9S19434C108S19434C9__8S19434C2[] = {
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S19434C10[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C4__9S19434C108S19434C9__8S19434C2[] = {
  0,
  0,
  0,
  ABISELECT(44,24),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S19434C10[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  (VTBL_ENTRY)&_ZN8S19434C42v2Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19434C12__9S19434C108S19434C9__8S19434C2[] = {
  0,
  ABISELECT(-20,-8),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S19434C10[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C68S19434C9__A2__8S19434C2[] = {
  ABISELECT(-24,-12),
  ABISELECT(20,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19434C6[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19434C128S19434C9__A1__8S19434C2[] = {
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19434C12[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19434C11__8S19434C9__8S19434C2[] = {
  0,
  ABISELECT(-48,-24),
  ABISELECT(-4,0),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19434C9[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C79S19434C11__A1__8S19434C9__8S19434C2[] = {
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S19434C9[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C4__8S19434C9__8S19434C2[] = {
  0,
  0,
  0,
  ABISELECT(44,24),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S19434C9[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  (VTBL_ENTRY)&_ZN8S19434C42v2Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19434C12__8S19434C9__8S19434C2[] = {
  0,
  ABISELECT(-20,-8),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19434C9[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C6__A2__8S19434C9__8S19434C2[] = {
  ABISELECT(-24,-12),
  ABISELECT(20,12),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19434C9[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19434C12__A__8S19434C9__8S19434C2[] = {
  ABISELECT(12,8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19434C9[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C4__8S19434C2[] = {
  0,
  ABISELECT(44,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19434C4[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  (VTBL_ENTRY)&_ZN8S19434C42v2Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C68S19434C4__8S19434C2[] = {
  0,
  ABISELECT(44,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19434C6[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19434C11__8S19434C2[] = {
  ABISELECT(-48,-24),
  ABISELECT(-4,0),
  0,
  (VTBL_ENTRY)&(_ZTI9S19434C11[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C69S19434C11__A1__8S19434C2[] = {
  ABISELECT(-48,-24),
  ABISELECT(-4,0),
  0,
  (VTBL_ENTRY)&(_ZTI8S19434C6[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19434C12__8S19434C2[] = {
  ABISELECT(-20,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19434C12[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
static  VTT_ENTRY vtt_S19434C2[] = {
  {&(_ZTV8S19434C2[10]),  10,48},
  {&(_tg__ZTV8S19434C3__8S19434C2[7]),  7,9},
  {&(_tg__ZTV8S19434C3__8S19434C2[7]),  7,9},
  {&(_tg__ZTV8S19434C9__8S19434C2[8]),  8,11},
  {&(_tg__ZTV9S19434C108S19434C9__8S19434C2[7]),  7,8},
  {&(_tg__ZTV9S19434C11__9S19434C108S19434C9__8S19434C2[5]),  5,6},
  {&(_tg__ZTV8S19434C79S19434C11__A1__9S19434C108S19434C9__8S19434C2[2]),  2,3},
  {&(_tg__ZTV8S19434C4__9S19434C108S19434C9__8S19434C2[6]),  6,8},
  {&(_tg__ZTV9S19434C12__9S19434C108S19434C9__8S19434C2[4]),  4,5},
  {&(_tg__ZTV8S19434C68S19434C9__A2__8S19434C2[4]),  4,5},
  {&(_tg__ZTV9S19434C128S19434C9__A1__8S19434C2[3]),  3,4},
  {&(_tg__ZTV9S19434C11__8S19434C9__8S19434C2[5]),  5,6},
  {&(_tg__ZTV8S19434C79S19434C11__A1__8S19434C9__8S19434C2[2]),  2,3},
  {&(_tg__ZTV8S19434C4__8S19434C9__8S19434C2[6]),  6,8},
  {&(_tg__ZTV9S19434C12__8S19434C9__8S19434C2[4]),  4,5},
  {&(_tg__ZTV8S19434C6__A2__8S19434C9__8S19434C2[4]),  4,5},
  {&(_tg__ZTV9S19434C12__A__8S19434C9__8S19434C2[3]),  3,4},
  {&(_ZTV8S19434C2[10]),  10,48},
  {&(_ZTV8S19434C2[22]),  22,48},
  {&(_ZTV8S19434C2[39]),  39,48},
  {&(_ZTV8S19434C2[42]),  42,48},
  {&(_ZTV8S19434C2[47]),  47,48},
  {&(_ZTV8S19434C2[29]),  29,48},
  {&(_ZTV8S19434C2[33]),  33,48},
  {&(_tg__ZTV8S19434C4__8S19434C2[4]),  4,6},
  {&(_tg__ZTV8S19434C68S19434C4__8S19434C2[4]),  4,5},
  {&(_tg__ZTV9S19434C11__8S19434C2[4]),  4,5},
  {&(_tg__ZTV8S19434C69S19434C11__A1__8S19434C2[4]),  4,5},
  {&(_tg__ZTV9S19434C12__8S19434C2[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19434C2[];
extern  VTBL_ENTRY _ZTV8S19434C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19434C2[];
Class_Descriptor cd_S19434C2 = {  "S19434C2", // class name
  bases_S19434C2, 24,
  &(vtc_S19434C2[0]), // expected_vtbl_contents
  &(vtt_S19434C2[0]), // expected_vtt_contents
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI8S19434C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19434C2),48, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19434C2),29, //virtual table table var
  17, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19434C1  : virtual S19434C2 , S19434C10 , S6282C14_nt , S19434C6 {
  long double s19434c1f0;
  ~S19434C1(); // tgen
  S19434C1(); // tgen
};
//SIG(1 S19434C1) C1{ VBC2{ BC3{ VBC4{ BC5{ m} BC6{ VBC5 BC7{ v1} VBC8{ m}} v2} Fi} BC9{ BC10{ VBC5 VBC11{ BC6 BC7} VBC4 VBC12{ BC7 BC8 VBC5} BC7} VBC13{ m} BC6 BC8 BC12 vd} vd Fi} BC10 BC14{ vd m Fi} BC6 FD}


S19434C1 ::~S19434C1(){ note_dtor("S19434C1", this);} // tgen
S19434C1 ::S19434C1(){ note_ctor("S19434C1", this);} // tgen

static void Test_S19434C1()
{
  extern Class_Descriptor cd_S19434C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,17)];
    init_test(&cd_S19434C1, buf);
    S19434C1 *dp, &lv = *(dp=new (buf) S19434C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,64), "sizeof(S19434C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19434C1)");
    /*is_ambiguous_... S19434C4::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S19434C4*), ABISELECT(48,28), "S19434C1");
    check_base_class_offset(lv, (S2121C38*)(S19434C6*)(S19434C4*), 0, "S19434C1");
    /*is_ambiguous_... S19434C10::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S19434C10*)(S19434C9*)(S19434C2*), 0, "S19434C1");
    check_base_class_offset(lv, (S2121C38*)(S19434C6*)(S19434C11*), 0, "S19434C1");
    /*is_ambiguous_... S19434C1::S19434C12 */ AMB_check_base_class_offset(lv, (S2121C38*)(S19434C12*), 0, "S19434C1");
    /*is_ambiguous_... S19434C9::S19434C6 */ AMB_check_base_class_offset(lv, (S2121C38*)(S19434C6*)(S19434C9*)(S19434C2*), 0, "S19434C1");
    /*is_ambiguous_... S19434C9::S19434C12 */ AMB_check_base_class_offset(lv, (S2121C38*)(S19434C12*)(S19434C9*)(S19434C2*), 0, "S19434C1");
    /*is_ambiguous_... S19434C1::S19434C10 */ AMB_check_base_class_offset(lv, (S2121C38*)(S19434C10*), 0, "S19434C1");
    /*is_ambiguous_... S19434C1::S19434C6 */ AMB_check_base_class_offset(lv, (S2121C38*)(S19434C6*), 0, "S19434C1");
    check_base_class_offset(lv, (S19434C7*)(S19434C6*)(S19434C4*), ABISELECT(48,28), "S19434C1");
    check_base_class_offset(lv, (S2121C28*)(S19434C6*)(S19434C4*), 0, "S19434C1");
    check_base_class_offset(lv, (S2121C28*)(S19434C6*)(S19434C11*), 0, "S19434C1");
    /*is_ambiguous_... S19434C9::S19434C6 */ AMB_check_base_class_offset(lv, (S2121C28*)(S19434C6*)(S19434C9*)(S19434C2*), 0, "S19434C1");
    /*is_ambiguous_... S19434C1::S19434C6 */ AMB_check_base_class_offset(lv, (S2121C28*)(S19434C6*), 0, "S19434C1");
    check_base_class_offset(lv, (S19434C6*)(S19434C4*), ABISELECT(48,28), "S19434C1");
    check_base_class_offset(lv, (S19434C4*)(S19434C3*)(S19434C2*), ABISELECT(48,28), "S19434C1");
    check_base_class_offset(lv, (S19434C4*)(S19434C10*)(S19434C9*)(S19434C2*), ABISELECT(48,28), "S19434C1");
    /*is_ambiguous_... S19434C1::S19434C10 */ AMB_check_base_class_offset(lv, (S19434C4*)(S19434C10*), ABISELECT(48,28), "S19434C1");
    check_base_class_offset(lv, (S19434C3*)(S19434C2*), ABISELECT(48,28), "S19434C1");
    check_base_class_offset(lv, (S19434C7*)(S19434C6*)(S19434C11*), ABISELECT(96,52), "S19434C1");
    check_base_class_offset(lv, (S19434C6*)(S19434C11*), ABISELECT(96,52), "S19434C1");
    /*is_ambiguous_... S19434C11::S19434C7 */ AMB_check_base_class_offset(lv, (S19434C7*)(S19434C11*), ABISELECT(104,56), "S19434C1");
    check_base_class_offset(lv, (S19434C11*)(S19434C10*)(S19434C9*)(S19434C2*), ABISELECT(96,52), "S19434C1");
    /*is_ambiguous_... S19434C1::S19434C10 */ AMB_check_base_class_offset(lv, (S19434C11*)(S19434C10*), ABISELECT(96,52), "S19434C1");
    /*is_ambiguous_... S19434C1::S19434C12 */ AMB_check_base_class_offset(lv, (S19434C7*)(S19434C12*), ABISELECT(112,60), "S19434C1");
    /*is_ambiguous_... S19434C1::S19434C12 */ AMB_check_base_class_offset(lv, (S2121C28*)(S19434C12*), ABISELECT(112,60), "S19434C1");
    check_base_class_offset(lv, (S19434C12*)(S19434C10*)(S19434C9*)(S19434C2*), ABISELECT(112,60), "S19434C1");
    /*is_ambiguous_... S19434C1::S19434C10 */ AMB_check_base_class_offset(lv, (S19434C12*)(S19434C10*), ABISELECT(112,60), "S19434C1");
    /*is_ambiguous_... S19434C10::S19434C7 */ AMB_check_base_class_offset(lv, (S19434C7*)(S19434C10*)(S19434C9*)(S19434C2*), ABISELECT(64,36), "S19434C1");
    check_base_class_offset(lv, (S19434C10*)(S19434C9*)(S19434C2*), ABISELECT(64,36), "S19434C1");
    check_base_class_offset(lv, (S2121C24*)(S19434C9*)(S19434C2*), 0, "S19434C1");
    /*is_ambiguous_... S19434C9::S19434C6 */ AMB_check_base_class_offset(lv, (S19434C7*)(S19434C6*)(S19434C9*)(S19434C2*), ABISELECT(72,40), "S19434C1");
    /*is_ambiguous_... S19434C9::S19434C6 */ AMB_check_base_class_offset(lv, (S19434C6*)(S19434C9*)(S19434C2*), ABISELECT(72,40), "S19434C1");
    /*is_ambiguous_... S19434C9::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*)(S19434C9*)(S19434C2*), ABISELECT(64,36), "S19434C1");
    /*is_ambiguous_... S19434C9::S19434C12 */ AMB_check_base_class_offset(lv, (S19434C7*)(S19434C12*)(S19434C9*)(S19434C2*), ABISELECT(80,44), "S19434C1");
    /*is_ambiguous_... S19434C9::S19434C12 */ AMB_check_base_class_offset(lv, (S2121C28*)(S19434C12*)(S19434C9*)(S19434C2*), ABISELECT(80,44), "S19434C1");
    /*is_ambiguous_... S19434C9::S19434C12 */ AMB_check_base_class_offset(lv, (S19434C12*)(S19434C9*)(S19434C2*), ABISELECT(80,44), "S19434C1");
    check_base_class_offset(lv, (S19434C9*)(S19434C2*), ABISELECT(64,36), "S19434C1");
    check_base_class_offset(lv, (S19434C2*), ABISELECT(48,28), "S19434C1");
    /*is_ambiguous_... S19434C1::S19434C10 */ AMB_check_base_class_offset(lv, (S19434C7*)(S19434C10*), 0, "S19434C1");
    /*is_ambiguous_... S19434C1::S19434C10 */ AMB_check_base_class_offset(lv, (S19434C10*), 0, "S19434C1");
    check_base_class_offset(lv, (S6282C14_nt*), ABISELECT(8,4), "S19434C1");
    /*is_ambiguous_... S19434C1::S19434C6 */ AMB_check_base_class_offset(lv, (S19434C7*)(S19434C6*), ABISELECT(24,12), "S19434C1");
    /*is_ambiguous_... S19434C1::S19434C6 */ AMB_check_base_class_offset(lv, (S19434C6*), ABISELECT(24,12), "S19434C1");
    check_field_offset(lv, s19434c1f0, ABISELECT(32,16), "S19434C1.s19434c1f0");
    test_class_info(&lv, &cd_S19434C1);
    dp->~S19434C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19434C1(Test_S19434C1, "S19434C1", ABISELECT(128,64));

#else // __cplusplus

extern void _ZN8S19434C1C1Ev();
extern void _ZN8S19434C1D1Ev();
Name_Map name_map_S19434C1[] = {
  NSPAIR(_ZN8S19434C1C1Ev),
  NSPAIR(_ZN8S19434C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S19434C6;
extern VTBL_ENTRY _ZTI8S19434C6[];
extern  VTBL_ENTRY _ZTV8S19434C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19434C6[];
extern Class_Descriptor cd_S19434C4;
extern VTBL_ENTRY _ZTI8S19434C4[];
extern  VTBL_ENTRY _ZTV8S19434C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19434C4[];
extern Class_Descriptor cd_S19434C3;
extern VTBL_ENTRY _ZTI8S19434C3[];
extern  VTBL_ENTRY _ZTV8S19434C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19434C3[];
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
extern Class_Descriptor cd_S19434C6;
extern VTBL_ENTRY _ZTI8S19434C6[];
extern  VTBL_ENTRY _ZTV8S19434C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19434C6[];
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
extern Class_Descriptor cd_S19434C11;
extern VTBL_ENTRY _ZTI9S19434C11[];
extern  VTBL_ENTRY _ZTV9S19434C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19434C11[];
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S19434C12;
extern VTBL_ENTRY _ZTI9S19434C12[];
extern  VTBL_ENTRY _ZTV9S19434C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19434C12[];
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
extern Class_Descriptor cd_S19434C10;
extern VTBL_ENTRY _ZTI9S19434C10[];
extern  VTBL_ENTRY _ZTV9S19434C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19434C10[];
extern Class_Descriptor cd_S2121C24;
extern VTBL_ENTRY _ZTI8S2121C24[];
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
extern Class_Descriptor cd_S19434C6;
extern VTBL_ENTRY _ZTI8S19434C6[];
extern  VTBL_ENTRY _ZTV8S19434C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19434C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S19434C12;
extern VTBL_ENTRY _ZTI9S19434C12[];
extern  VTBL_ENTRY _ZTV9S19434C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19434C12[];
extern Class_Descriptor cd_S19434C9;
extern VTBL_ENTRY _ZTI8S19434C9[];
extern  VTBL_ENTRY _ZTV8S19434C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19434C9[];
extern Class_Descriptor cd_S19434C2;
extern VTBL_ENTRY _ZTI8S19434C2[];
extern  VTBL_ENTRY _ZTV8S19434C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19434C2[];
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
extern Class_Descriptor cd_S19434C10;
extern VTBL_ENTRY _ZTI9S19434C10[];
extern  VTBL_ENTRY _ZTV9S19434C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19434C10[];
extern Class_Descriptor cd_S6282C14_nt;
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
extern  VTBL_ENTRY _ZTV11S6282C14_nt[];
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
extern Class_Descriptor cd_S19434C6;
extern VTBL_ENTRY _ZTI8S19434C6[];
extern  VTBL_ENTRY _ZTV8S19434C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19434C6[];
static Base_Class bases_S19434C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    ABISELECT(48,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
    5, //immediately_derived
  0, 0},
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19434C7,    ABISELECT(48,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
    4, //immediately_derived
  0, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19434C6,    ABISELECT(48,28), //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
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19434C4,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19434C3,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19434C7,    ABISELECT(96,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
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19434C6,    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
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19434C7,    ABISELECT(104,56), //bcp->offset
    62, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19434C11,    ABISELECT(96,52), //bcp->offset
    56, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S19434C7,    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
    8, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S2121C28,    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
    13, //immediately_derived
  0, 0},
  {&cd_S19434C12,    ABISELECT(112,60), //bcp->offset
    65, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S19434C7,    ABISELECT(64,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
    11, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19434C10,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S2121C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19434C7,    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
    13, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19434C6,    ABISELECT(72,40), //bcp->offset
    47, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S2121C28,    ABISELECT(64,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
    23, //immediately_derived
  0, 0},
  {&cd_S19434C7,    ABISELECT(80,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
    15, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S2121C28,    ABISELECT(80,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
    22, //immediately_derived
  0, 0},
  {&cd_S19434C12,    ABISELECT(80,44), //bcp->offset
    52, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S19434C9,    ABISELECT(64,36), //bcp->offset
    36, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19434C2,    ABISELECT(48,28), //bcp->offset
    21, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19434C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S19434C10,    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
    20, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6282C14_nt,    ABISELECT(8,4), //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
    21, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19434C7,    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
    22, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S19434C6,    ABISELECT(24,12), //bcp->offset
    16, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19434C1[];
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C1D1Ev();
extern void _ZN8S19434C1D0Ev();
extern void ABISELECT(_ZThn8_N8S19434C1D1Ev,_ZThn4_N8S19434C1D1Ev)();
extern void ABISELECT(_ZThn8_N8S19434C1D0Ev,_ZThn4_N8S19434C1D0Ev)();
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C42v2Ev();
extern void ABISELECT(_ZTv0_n88_N8S19434C1D1Ev,_ZTv0_n44_N8S19434C1D1Ev)();
extern void ABISELECT(_ZThn48_N8S19434C1D1Ev,_ZThn28_N8S19434C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S19434C1D0Ev,_ZTv0_n44_N8S19434C1D0Ev)();
extern void ABISELECT(_ZThn48_N8S19434C1D0Ev,_ZThn28_N8S19434C1D0Ev)() __attribute__((weak));
extern void _ZN8S19434C72v1Ev();
extern void ABISELECT(_ZTvn16_n88_N8S19434C1D1Ev,_ZTvn8_n44_N8S19434C1D1Ev)();
extern void ABISELECT(_ZTvn16_n88_N8S19434C1D0Ev,_ZTvn8_n44_N8S19434C1D0Ev)();
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY vtc_S19434C1[] = {
  0,
  ABISELECT(48,28),
  ABISELECT(112,60),
  ABISELECT(48,28),
  0,
  ABISELECT(96,52),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19434C1[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  (VTBL_ENTRY)&_ZN8S19434C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19434C1D0Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19434C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19434C1D1Ev,_ZThn4_N8S19434C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19434C1D0Ev,_ZThn4_N8S19434C1D0Ev),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19434C1[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(64,32),
  ABISELECT(48,24),
  0,
  0,
  0,
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S19434C1[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  (VTBL_ENTRY)&_ZN8S19434C42v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S19434C1D1Ev,_ZTv0_n44_N8S19434C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S19434C1D0Ev,_ZTv0_n44_N8S19434C1D0Ev),
  ABISELECT(-64,-36),
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  ABISELECT(-64,-36),
  ABISELECT(32,16),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S19434C1[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n88_N8S19434C1D1Ev,_ZTvn8_n44_N8S19434C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n88_N8S19434C1D0Ev,_ZTvn8_n44_N8S19434C1D0Ev),
  ABISELECT(-72,-40),
  ABISELECT(-72,-40),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI8S19434C1[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  ABISELECT(-80,-44),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI8S19434C1[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  0,
  ABISELECT(-96,-52),
  ABISELECT(-96,-52),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S19434C1[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI8S19434C1[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  0,
  ABISELECT(-112,-60),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI8S19434C1[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern VTBL_ENTRY _ZTV8S19434C1[];
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19434C10__A1__8S19434C1[] = {
  ABISELECT(112,60),
  ABISELECT(48,28),
  0,
  ABISELECT(96,52),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19434C10[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19434C11__9S19434C10__A1__8S19434C1[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-96,-52),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI9S19434C10[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C79S19434C11__A1__9S19434C10__A1__8S19434C1[] = {
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI9S19434C10[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C4__9S19434C10__A1__8S19434C1[] = {
  0,
  0,
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI9S19434C10[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  (VTBL_ENTRY)&_ZN8S19434C42v2Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19434C12__9S19434C10__A1__8S19434C1[] = {
  0,
  ABISELECT(-112,-60),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI9S19434C10[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C6__A3__8S19434C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19434C6[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C42v2Ev();
extern void _ZN8S19434C2D1Ev();
extern void _ZN8S19434C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C2__8S19434C1[] = {
  ABISELECT(-48,-28),
  ABISELECT(64,32),
  ABISELECT(48,24),
  0,
  0,
  0,
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S19434C2[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  (VTBL_ENTRY)&_ZN8S19434C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19434C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19434C2D0Ev,
};
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C38S19434C2__8S19434C1[] = {
  0,
  0,
  0,
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S19434C3[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  (VTBL_ENTRY)&_ZN8S19434C42v2Ev,
};
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C9D1Ev();
extern void _ZN8S19434C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C98S19434C2__8S19434C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  ABISELECT(-64,-36),
  ABISELECT(32,16),
  ABISELECT(-64,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S19434C9[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  (VTBL_ENTRY)&_ZN8S19434C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19434C9D0Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19434C108S19434C98S19434C2__8S19434C1[] = {
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  ABISELECT(-64,-36),
  ABISELECT(32,16),
  ABISELECT(-64,-36),
  0,
  (VTBL_ENTRY)&(_ZTI9S19434C10[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19434C11__9S19434C108S19434C98S19434C2__8S19434C1[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-96,-52),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19434C10[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C79S19434C11__A1__9S19434C108S19434C98S19434C2__8S19434C1[] = {
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S19434C10[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C4__9S19434C108S19434C98S19434C2__8S19434C1[] = {
  0,
  0,
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S19434C10[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  (VTBL_ENTRY)&_ZN8S19434C42v2Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19434C12__9S19434C108S19434C98S19434C2__8S19434C1[] = {
  0,
  ABISELECT(-112,-60),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S19434C10[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C68S19434C98S19434C2__A2__8S19434C1[] = {
  ABISELECT(-72,-40),
  ABISELECT(-72,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19434C6[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19434C128S19434C98S19434C2__A1__8S19434C1[] = {
  ABISELECT(-80,-44),
  0,
  (VTBL_ENTRY)&(_ZTI9S19434C12[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19434C11__8S19434C98S19434C2__8S19434C1[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-96,-52),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19434C9[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C79S19434C11__A1__8S19434C98S19434C2__8S19434C1[] = {
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S19434C9[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C4__8S19434C98S19434C2__8S19434C1[] = {
  0,
  0,
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S19434C9[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  (VTBL_ENTRY)&_ZN8S19434C42v2Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19434C12__8S19434C98S19434C2__8S19434C1[] = {
  0,
  ABISELECT(-112,-60),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19434C9[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C6__A2__8S19434C98S19434C2__8S19434C1[] = {
  ABISELECT(-72,-40),
  ABISELECT(-72,-40),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19434C9[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19434C12__A__8S19434C98S19434C2__8S19434C1[] = {
  ABISELECT(-80,-44),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19434C9[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
extern void ABISELECT(_ZThn16_N8S19434C2D1Ev,_ZThn8_N8S19434C2D1Ev)();
extern void ABISELECT(_ZThn16_N8S19434C2D0Ev,_ZThn8_N8S19434C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19434C9__8S19434C2__8S19434C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  ABISELECT(-64,-36),
  ABISELECT(32,16),
  ABISELECT(-64,-36),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19434C2[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19434C2D1Ev,_ZThn8_N8S19434C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19434C2D0Ev,_ZThn8_N8S19434C2D0Ev),
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19434C11__8S19434C2__8S19434C1[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-96,-52),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19434C2[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C79S19434C11__A2__8S19434C2__8S19434C1[] = {
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S19434C2[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19434C12__8S19434C2__8S19434C1[] = {
  0,
  ABISELECT(-112,-60),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S19434C2[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C68S19434C9__A2__8S19434C2__8S19434C1[] = {
  ABISELECT(-72,-40),
  ABISELECT(-72,-40),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19434C2[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19434C128S19434C9__A1__8S19434C2__8S19434C1[] = {
  ABISELECT(-80,-44),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19434C2[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C4__8S19434C1[] = {
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S19434C4[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  (VTBL_ENTRY)&_ZN8S19434C42v2Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C68S19434C4__8S19434C1[] = {
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S19434C6[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19434C11__8S19434C1[] = {
  ABISELECT(-96,-52),
  ABISELECT(-96,-52),
  0,
  (VTBL_ENTRY)&(_ZTI9S19434C11[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C69S19434C11__A1__8S19434C1[] = {
  ABISELECT(-96,-52),
  ABISELECT(-96,-52),
  0,
  (VTBL_ENTRY)&(_ZTI8S19434C6[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19434C12__8S19434C1[] = {
  ABISELECT(-112,-60),
  0,
  (VTBL_ENTRY)&(_ZTI9S19434C12[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
static  VTT_ENTRY vtt_S19434C1[] = {
  {&(_ZTV8S19434C1[9]),  9,70},
  {&(_tg__ZTV9S19434C10__A1__8S19434C1[7]),  7,8},
  {&(_tg__ZTV9S19434C11__9S19434C10__A1__8S19434C1[5]),  5,6},
  {&(_tg__ZTV8S19434C79S19434C11__A1__9S19434C10__A1__8S19434C1[2]),  2,3},
  {&(_tg__ZTV8S19434C4__9S19434C10__A1__8S19434C1[6]),  6,8},
  {&(_tg__ZTV9S19434C12__9S19434C10__A1__8S19434C1[4]),  4,5},
  {&(_tg__ZTV8S19434C6__A3__8S19434C1[4]),  4,5},
  {&(_ZTV8S19434C1[32]),  32,70},
  {&(_ZTV8S19434C1[32]),  32,70},
  {&(_ZTV8S19434C1[44]),  44,70},
  {&(_ZTV8S19434C1[61]),  61,70},
  {&(_ZTV8S19434C1[64]),  64,70},
  {&(_ZTV8S19434C1[69]),  69,70},
  {&(_ZTV8S19434C1[51]),  51,70},
  {&(_ZTV8S19434C1[55]),  55,70},
  {&(_ZTV8S19434C1[20]),  20,70},
  {&(_tg__ZTV8S19434C2__8S19434C1[10]),  10,14},
  {&(_tg__ZTV8S19434C38S19434C2__8S19434C1[7]),  7,9},
  {&(_tg__ZTV8S19434C38S19434C2__8S19434C1[7]),  7,9},
  {&(_tg__ZTV8S19434C98S19434C2__8S19434C1[8]),  8,11},
  {&(_tg__ZTV9S19434C108S19434C98S19434C2__8S19434C1[7]),  7,8},
  {&(_tg__ZTV9S19434C11__9S19434C108S19434C98S19434C2__8S19434C1[5]),  5,6},
  {&(_tg__ZTV8S19434C79S19434C11__A1__9S19434C108S19434C98S19434C2__8S19434C1[2]),  2,3},
  {&(_tg__ZTV8S19434C4__9S19434C108S19434C98S19434C2__8S19434C1[6]),  6,8},
  {&(_tg__ZTV9S19434C12__9S19434C108S19434C98S19434C2__8S19434C1[4]),  4,5},
  {&(_tg__ZTV8S19434C68S19434C98S19434C2__A2__8S19434C1[4]),  4,5},
  {&(_tg__ZTV9S19434C128S19434C98S19434C2__A1__8S19434C1[3]),  3,4},
  {&(_tg__ZTV9S19434C11__8S19434C98S19434C2__8S19434C1[5]),  5,6},
  {&(_tg__ZTV8S19434C79S19434C11__A1__8S19434C98S19434C2__8S19434C1[2]),  2,3},
  {&(_tg__ZTV8S19434C4__8S19434C98S19434C2__8S19434C1[6]),  6,8},
  {&(_tg__ZTV9S19434C12__8S19434C98S19434C2__8S19434C1[4]),  4,5},
  {&(_tg__ZTV8S19434C6__A2__8S19434C98S19434C2__8S19434C1[4]),  4,5},
  {&(_tg__ZTV9S19434C12__A__8S19434C98S19434C2__8S19434C1[3]),  3,4},
  {&(_tg__ZTV8S19434C2__8S19434C1[10]),  10,14},
  {&(_tg__ZTV8S19434C9__8S19434C2__8S19434C1[8]),  8,11},
  {&(_tg__ZTV9S19434C11__8S19434C2__8S19434C1[5]),  5,6},
  {&(_tg__ZTV8S19434C79S19434C11__A2__8S19434C2__8S19434C1[2]),  2,3},
  {&(_tg__ZTV9S19434C12__8S19434C2__8S19434C1[4]),  4,5},
  {&(_tg__ZTV8S19434C68S19434C9__A2__8S19434C2__8S19434C1[4]),  4,5},
  {&(_tg__ZTV9S19434C128S19434C9__A1__8S19434C2__8S19434C1[3]),  3,4},
  {&(_tg__ZTV8S19434C4__8S19434C1[4]),  4,6},
  {&(_tg__ZTV8S19434C68S19434C4__8S19434C1[4]),  4,5},
  {&(_tg__ZTV9S19434C11__8S19434C1[4]),  4,5},
  {&(_tg__ZTV8S19434C69S19434C11__A1__8S19434C1[4]),  4,5},
  {&(_tg__ZTV9S19434C12__8S19434C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19434C1[];
extern  VTBL_ENTRY _ZTV8S19434C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19434C1[];
static VTBL_ENTRY alt_thunk_names21[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S19434C1D0Ev,_ZTv0_n44_N8S19434C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19434C1D0Ev,_ZThn28_N8S19434C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S19434C1D1Ev,_ZTv0_n44_N8S19434C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19434C1D1Ev,_ZThn28_N8S19434C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19434C1 = {  "S19434C1", // class name
  bases_S19434C1, 30,
  &(vtc_S19434C1[0]), // expected_vtbl_contents
  &(vtt_S19434C1[0]), // expected_vtt_contents
  ABISELECT(128,64), // object size
  NSPAIRA(_ZTI8S19434C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19434C1),70, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19434C1),45, //virtual table table var
  23, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names21,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21535C2  {
  char s21535c2f0[3];
  short s21535c2f1[2];
  int s21535c2f2[4];
  ::S2121C13_nt s21535c2f3;
  void  mf21535c2(); // _ZN8S21535C29mf21535c2Ev
  virtual  ~S21535C2(); // _ZN8S21535C2D1Ev
  S21535C2(); // tgen
};
//SIG(-1 S21535C2) C1{ vd m Fc[3] Fs[2] Fi[4] FC2{ m FC3{ m FL[2]}}}


void  S21535C2 ::mf21535c2(){}
 S21535C2 ::~S21535C2(){ note_dtor("S21535C2", this);}
S21535C2 ::S21535C2(){ note_ctor("S21535C2", this);} // tgen

static void Test_S21535C2()
{
  extern Class_Descriptor cd_S21535C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,12)];
    init_test(&cd_S21535C2, buf);
    S21535C2 *dp, &lv = *(dp=new (buf) S21535C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,44), "sizeof(S21535C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21535C2)");
    check_field_offset(lv, s21535c2f0, ABISELECT(8,4), "S21535C2.s21535c2f0");
    check_field_offset(lv, s21535c2f1, ABISELECT(12,8), "S21535C2.s21535c2f1");
    check_field_offset(lv, s21535c2f2, ABISELECT(16,12), "S21535C2.s21535c2f2");
    check_field_offset(lv, s21535c2f3, ABISELECT(32,28), "S21535C2.s21535c2f3");
    test_class_info(&lv, &cd_S21535C2);
    dp->~S21535C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21535C2(Test_S21535C2, "S21535C2", ABISELECT(48,44));

#else // __cplusplus

extern void _ZN8S21535C2C1Ev();
extern void _ZN8S21535C2D1Ev();
Name_Map name_map_S21535C2[] = {
  NSPAIR(_ZN8S21535C2C1Ev),
  NSPAIR(_ZN8S21535C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21535C2[];
extern void _ZN8S21535C2D1Ev();
extern void _ZN8S21535C2D0Ev();
static  VTBL_ENTRY vtc_S21535C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21535C2[0]),
  (VTBL_ENTRY)&_ZN8S21535C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21535C2D0Ev,
};
extern VTBL_ENTRY _ZTI8S21535C2[];
extern  VTBL_ENTRY _ZTV8S21535C2[];
Class_Descriptor cd_S21535C2 = {  "S21535C2", // class name
  0,0,//no base classes
  &(vtc_S21535C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,44), // object size
  NSPAIRA(_ZTI8S21535C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21535C2),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  S21535C5  {
  ::S2185C10_nt s21535c5f0;
  ::S2121C26 s21535c5f1;
  void  mf21535c5(); // _ZN8S21535C59mf21535c5Ev
  virtual  ~S21535C5(); // _ZN8S21535C5D1Ev
  S21535C5(); // tgen
};
//SIG(-1 S21535C5) C1{ vd m FC2{ m Fp Fi FC3{ m}} FC4{ m Fp Fi FC5{ m} FC6{ m}}}


void  S21535C5 ::mf21535c5(){}
 S21535C5 ::~S21535C5(){ note_dtor("S21535C5", this);}
S21535C5 ::S21535C5(){ note_ctor("S21535C5", this);} // tgen

static void Test_S21535C5()
{
  extern Class_Descriptor cd_S21535C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S21535C5, buf);
    S21535C5 *dp, &lv = *(dp=new (buf) S21535C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S21535C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21535C5)");
    check_field_offset(lv, s21535c5f0, ABISELECT(8,4), "S21535C5.s21535c5f0");
    check_field_offset(lv, s21535c5f1, ABISELECT(24,16), "S21535C5.s21535c5f1");
    test_class_info(&lv, &cd_S21535C5);
    dp->~S21535C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21535C5(Test_S21535C5, "S21535C5", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN8S21535C5C1Ev();
extern void _ZN8S21535C5D1Ev();
Name_Map name_map_S21535C5[] = {
  NSPAIR(_ZN8S21535C5C1Ev),
  NSPAIR(_ZN8S21535C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21535C5[];
extern void _ZN8S21535C5D1Ev();
extern void _ZN8S21535C5D0Ev();
static  VTBL_ENTRY vtc_S21535C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21535C5[0]),
  (VTBL_ENTRY)&_ZN8S21535C5D1Ev,
  (VTBL_ENTRY)&_ZN8S21535C5D0Ev,
};
extern VTBL_ENTRY _ZTI8S21535C5[];
extern  VTBL_ENTRY _ZTV8S21535C5[];
Class_Descriptor cd_S21535C5 = {  "S21535C5", // class name
  0,0,//no base classes
  &(vtc_S21535C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI8S21535C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21535C5),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  S21535C1  {
  ::S21535C2 s21535c1f0;
  ::S21535C5 s21535c1f1;
  void *s21535c1f2[2];
  int s21535c1f3[5];
  short s21535c1f4;
  void *s21535c1f5;
  int s21535c1f6;
  ::S21811C16 s21535c1f7;
  void *s21535c1f8;
  void  mf21535c1(); // _ZN8S21535C19mf21535c1Ev
  virtual  ~S21535C1(); // _ZN8S21535C1D1Ev
  S21535C1(); // tgen
};
//SIG(1 S21535C1) C1{ vd m FC2{ vd m Fc[3] Fs[2] Fi[4] FC3{ m FC4{ m FL[2]}}} FC5{ vd m FC6{ m Fp Fi FC7{ m}} FC8{ m Fp Fi FC9{ m} FC10{ m}}} Fp[2] Fi[5] Fs Fp Fi FC11{ m Fp Fi[2] FC10} Fp}


void  S21535C1 ::mf21535c1(){}
 S21535C1 ::~S21535C1(){ note_dtor("S21535C1", this);}
S21535C1 ::S21535C1(){ note_ctor("S21535C1", this);} // tgen

static void Test_S21535C1()
{
  extern Class_Descriptor cd_S21535C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,35)];
    init_test(&cd_S21535C1, buf);
    S21535C1 *dp, &lv = *(dp=new (buf) S21535C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,136), "sizeof(S21535C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21535C1)");
    check_field_offset(lv, s21535c1f0, ABISELECT(8,4), "S21535C1.s21535c1f0");
    check_field_offset(lv, s21535c1f1, ABISELECT(56,48), "S21535C1.s21535c1f1");
    check_field_offset(lv, s21535c1f2, ABISELECT(96,76), "S21535C1.s21535c1f2");
    check_field_offset(lv, s21535c1f3, ABISELECT(112,84), "S21535C1.s21535c1f3");
    check_field_offset(lv, s21535c1f4, ABISELECT(132,104), "S21535C1.s21535c1f4");
    check_field_offset(lv, s21535c1f5, ABISELECT(136,108), "S21535C1.s21535c1f5");
    check_field_offset(lv, s21535c1f6, ABISELECT(144,112), "S21535C1.s21535c1f6");
    check_field_offset(lv, s21535c1f7, ABISELECT(152,116), "S21535C1.s21535c1f7");
    check_field_offset(lv, s21535c1f8, ABISELECT(176,132), "S21535C1.s21535c1f8");
    test_class_info(&lv, &cd_S21535C1);
    dp->~S21535C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21535C1(Test_S21535C1, "S21535C1", ABISELECT(184,136));

#else // __cplusplus

extern void _ZN8S21535C1C1Ev();
extern void _ZN8S21535C1D1Ev();
Name_Map name_map_S21535C1[] = {
  NSPAIR(_ZN8S21535C1C1Ev),
  NSPAIR(_ZN8S21535C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21535C1[];
extern void _ZN8S21535C1D1Ev();
extern void _ZN8S21535C1D0Ev();
static  VTBL_ENTRY vtc_S21535C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21535C1[0]),
  (VTBL_ENTRY)&_ZN8S21535C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21535C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21535C1[];
extern  VTBL_ENTRY _ZTV8S21535C1[];
Class_Descriptor cd_S21535C1 = {  "S21535C1", // class name
  0,0,//no base classes
  &(vtc_S21535C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,136), // object size
  NSPAIRA(_ZTI8S21535C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21535C1),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  S19577C5  {
  virtual  ~S19577C5(); // _ZN8S19577C5D1Ev
  virtual void  v6(); // _ZN8S19577C52v6Ev
  virtual void  v7(); // _ZN8S19577C52v7Ev
  virtual void  v8(); // _ZN8S19577C52v8Ev
  virtual void  v9(); // _ZN8S19577C52v9Ev
  virtual void  v10(); // _ZN8S19577C53v10Ev
  S19577C5(); // tgen
};
//SIG(-1 S19577C5) C1{ vd v1 v2 v3 v4 v5}


 S19577C5 ::~S19577C5(){ note_dtor("S19577C5", this);}
void  S19577C5 ::v6(){vfunc_called(this, "_ZN8S19577C52v6Ev");}
void  S19577C5 ::v7(){vfunc_called(this, "_ZN8S19577C52v7Ev");}
void  S19577C5 ::v8(){vfunc_called(this, "_ZN8S19577C52v8Ev");}
void  S19577C5 ::v9(){vfunc_called(this, "_ZN8S19577C52v9Ev");}
void  S19577C5 ::v10(){vfunc_called(this, "_ZN8S19577C53v10Ev");}
S19577C5 ::S19577C5(){ note_ctor("S19577C5", this);} // tgen

static void Test_S19577C5()
{
  extern Class_Descriptor cd_S19577C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19577C5, buf);
    S19577C5 *dp, &lv = *(dp=new (buf) S19577C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19577C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19577C5)");
    test_class_info(&lv, &cd_S19577C5);
    dp->~S19577C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19577C5(Test_S19577C5, "S19577C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19577C5C1Ev();
extern void _ZN8S19577C5D1Ev();
Name_Map name_map_S19577C5[] = {
  NSPAIR(_ZN8S19577C5C1Ev),
  NSPAIR(_ZN8S19577C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19577C5[];
extern void _ZN8S19577C5D1Ev();
extern void _ZN8S19577C5D0Ev();
extern void _ZN8S19577C52v6Ev();
extern void _ZN8S19577C52v7Ev();
extern void _ZN8S19577C52v8Ev();
extern void _ZN8S19577C52v9Ev();
extern void _ZN8S19577C53v10Ev();
static  VTBL_ENTRY vtc_S19577C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19577C5[0]),
  (VTBL_ENTRY)&_ZN8S19577C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19577C5D0Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19577C53v10Ev,
};
extern VTBL_ENTRY _ZTI8S19577C5[];
extern  VTBL_ENTRY _ZTV8S19577C5[];
Class_Descriptor cd_S19577C5 = {  "S19577C5", // class name
  0,0,//no base classes
  &(vtc_S19577C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19577C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19577C5),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  S19577C4  : virtual S19577C5 {
  void *s19577c4f0;
  ::S19577C5 s19577c4f1;
  void *s19577c4f2;
  virtual  ~S19577C4(); // _ZN8S19577C4D2Ev
  virtual void  v11(); // _ZN8S19577C43v11Ev
  virtual void  v12(); // _ZN8S19577C43v12Ev
  virtual void  v13(); // _ZN8S19577C43v13Ev
  S19577C4(); // tgen
};
//SIG(-1 S19577C4) C1{ VBC2{ vd v4 v5 v6 v7 v8} vd v1 v2 v3 Fp FC2 Fp}


 S19577C4 ::~S19577C4(){ note_dtor("S19577C4", this);}
void  S19577C4 ::v11(){vfunc_called(this, "_ZN8S19577C43v11Ev");}
void  S19577C4 ::v12(){vfunc_called(this, "_ZN8S19577C43v12Ev");}
void  S19577C4 ::v13(){vfunc_called(this, "_ZN8S19577C43v13Ev");}
S19577C4 ::S19577C4(){ note_ctor("S19577C4", this);} // tgen

static void Test_S19577C4()
{
  extern Class_Descriptor cd_S19577C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S19577C4, buf);
    S19577C4 *dp, &lv = *(dp=new (buf) S19577C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S19577C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19577C4)");
    check_base_class_offset(lv, (S19577C5*), 0, "S19577C4");
    check_field_offset(lv, s19577c4f0, ABISELECT(8,4), "S19577C4.s19577c4f0");
    check_field_offset(lv, s19577c4f1, ABISELECT(16,8), "S19577C4.s19577c4f1");
    check_field_offset(lv, s19577c4f2, ABISELECT(24,12), "S19577C4.s19577c4f2");
    test_class_info(&lv, &cd_S19577C4);
    dp->~S19577C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19577C4(Test_S19577C4, "S19577C4", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S19577C4C1Ev();
extern void _ZN8S19577C4D2Ev();
Name_Map name_map_S19577C4[] = {
  NSPAIR(_ZN8S19577C4C1Ev),
  NSPAIR(_ZN8S19577C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19577C5;
extern VTBL_ENTRY _ZTI8S19577C5[];
extern  VTBL_ENTRY _ZTV8S19577C5[];
static Base_Class bases_S19577C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19577C5,    0, //bcp->offset
    -1, //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 _ZTI8S19577C4[];
extern void _ZN8S19577C4D1Ev();
extern void _ZN8S19577C4D0Ev();
extern void _ZN8S19577C52v6Ev();
extern void _ZN8S19577C52v7Ev();
extern void _ZN8S19577C52v8Ev();
extern void _ZN8S19577C52v9Ev();
extern void _ZN8S19577C53v10Ev();
extern void _ZN8S19577C43v11Ev();
extern void _ZN8S19577C43v12Ev();
extern void _ZN8S19577C43v13Ev();
static  VTBL_ENTRY vtc_S19577C4[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19577C4[0]),
  (VTBL_ENTRY)&_ZN8S19577C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19577C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19577C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19577C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19577C43v12Ev,
  (VTBL_ENTRY)&_ZN8S19577C43v13Ev,
};
extern VTBL_ENTRY _ZTV8S19577C4[];
static  VTT_ENTRY vtt_S19577C4[] = {
  {&(_ZTV8S19577C4[9]),  9,19},
  {&(_ZTV8S19577C4[9]),  9,19},
};
extern VTBL_ENTRY _ZTI8S19577C4[];
extern  VTBL_ENTRY _ZTV8S19577C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19577C4[];
Class_Descriptor cd_S19577C4 = {  "S19577C4", // class name
  bases_S19577C4, 1,
  &(vtc_S19577C4[0]), // expected_vtbl_contents
  &(vtt_S19577C4[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S19577C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19577C4),19, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19577C4),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  S19577C3  : virtual S19577C4 {
  virtual  ~S19577C3(); // _ZN8S19577C3D2Ev
  virtual void  v14(); // _ZN8S19577C33v14Ev
  S19577C3(); // tgen
};
//SIG(-1 S19577C3) C1{ VBC2{ VBC3{ vd v2 v3 v4 v5 v6} vd v7 v8 v9 Fp FC3 Fp} vd v1}


 S19577C3 ::~S19577C3(){ note_dtor("S19577C3", this);}
void  S19577C3 ::v14(){vfunc_called(this, "_ZN8S19577C33v14Ev");}
S19577C3 ::S19577C3(){ note_ctor("S19577C3", this);} // tgen

static void Test_S19577C3()
{
  extern Class_Descriptor cd_S19577C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S19577C3, buf);
    S19577C3 *dp, &lv = *(dp=new (buf) S19577C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S19577C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19577C3)");
    check_base_class_offset(lv, (S19577C5*)(S19577C4*), 0, "S19577C3");
    check_base_class_offset(lv, (S19577C4*), ABISELECT(8,4), "S19577C3");
    test_class_info(&lv, &cd_S19577C3);
    dp->~S19577C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19577C3(Test_S19577C3, "S19577C3", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S19577C3C1Ev();
extern void _ZN8S19577C3D2Ev();
Name_Map name_map_S19577C3[] = {
  NSPAIR(_ZN8S19577C3C1Ev),
  NSPAIR(_ZN8S19577C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19577C5;
extern VTBL_ENTRY _ZTI8S19577C5[];
extern  VTBL_ENTRY _ZTV8S19577C5[];
extern Class_Descriptor cd_S19577C4;
extern VTBL_ENTRY _ZTI8S19577C4[];
extern  VTBL_ENTRY _ZTV8S19577C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19577C4[];
static Base_Class bases_S19577C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19577C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //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
    1, //immediately_derived
  0, 1},
  {&cd_S19577C4,    ABISELECT(8,4), //bcp->offset
    18, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19577C3[];
extern void _ZN8S19577C3D1Ev();
extern void _ZN8S19577C3D0Ev();
extern void _ZN8S19577C52v6Ev();
extern void _ZN8S19577C52v7Ev();
extern void _ZN8S19577C52v8Ev();
extern void _ZN8S19577C52v9Ev();
extern void _ZN8S19577C53v10Ev();
extern void _ZN8S19577C33v14Ev();
extern void ABISELECT(_ZTv0_n24_N8S19577C3D1Ev,_ZTv0_n12_N8S19577C3D1Ev)();
extern void ABISELECT(_ZThn8_N8S19577C3D1Ev,_ZThn4_N8S19577C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19577C3D0Ev,_ZTv0_n12_N8S19577C3D0Ev)();
extern void ABISELECT(_ZThn8_N8S19577C3D0Ev,_ZThn4_N8S19577C3D0Ev)() __attribute__((weak));
extern void _ZN8S19577C52v6Ev();
extern void _ZN8S19577C52v7Ev();
extern void _ZN8S19577C52v8Ev();
extern void _ZN8S19577C52v9Ev();
extern void _ZN8S19577C53v10Ev();
extern void _ZN8S19577C43v11Ev();
extern void _ZN8S19577C43v12Ev();
extern void _ZN8S19577C43v13Ev();
static  VTBL_ENTRY vtc_S19577C3[] = {
  0,
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19577C3[0]),
  (VTBL_ENTRY)&_ZN8S19577C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19577C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19577C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19577C33v14Ev,
  0,
  0,
  0,
  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)&(_ZTI8S19577C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19577C3D1Ev,_ZTv0_n12_N8S19577C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19577C3D0Ev,_ZTv0_n12_N8S19577C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19577C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19577C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19577C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19577C43v12Ev,
  (VTBL_ENTRY)&_ZN8S19577C43v13Ev,
};
extern VTBL_ENTRY _ZTV8S19577C3[];
extern void ABISELECT(_ZTv0_n24_N8S19577C4D1Ev,_ZTv0_n12_N8S19577C4D1Ev)();
extern void _ZN8S19577C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19577C4D0Ev,_ZTv0_n12_N8S19577C4D0Ev)();
extern void _ZN8S19577C4D0Ev() __attribute__((weak));
extern void _ZN8S19577C52v6Ev();
extern void _ZN8S19577C52v7Ev();
extern void _ZN8S19577C52v8Ev();
extern void _ZN8S19577C52v9Ev();
extern void _ZN8S19577C53v10Ev();
extern void _ZN8S19577C43v11Ev();
extern void _ZN8S19577C43v12Ev();
extern void _ZN8S19577C43v13Ev();
static  VTBL_ENTRY _tg__ZTV8S19577C4__8S19577C3[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19577C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19577C4D1Ev,_ZTv0_n12_N8S19577C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19577C4D0Ev,_ZTv0_n12_N8S19577C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19577C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19577C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19577C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19577C43v12Ev,
  (VTBL_ENTRY)&_ZN8S19577C43v13Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19577C4D1Ev,_ZTv0_n12_N8S19577C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19577C4D0Ev,_ZTv0_n12_N8S19577C4D0Ev)();
extern void _ZN8S19577C52v6Ev();
extern void _ZN8S19577C52v7Ev();
extern void _ZN8S19577C52v8Ev();
extern void _ZN8S19577C52v9Ev();
extern void _ZN8S19577C53v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19577C5__8S19577C4__8S19577C3[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S19577C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19577C4D1Ev,_ZTv0_n12_N8S19577C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19577C4D0Ev,_ZTv0_n12_N8S19577C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19577C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19577C53v10Ev,
};
static  VTT_ENTRY vtt_S19577C3[] = {
  {&(_ZTV8S19577C3[10]),  10,40},
  {&(_ZTV8S19577C3[30]),  30,40},
  {&(_ZTV8S19577C3[10]),  10,40},
  {&(_tg__ZTV8S19577C4__8S19577C3[9]),  9,19},
  {&(_tg__ZTV8S19577C5__8S19577C4__8S19577C3[8]),  8,15},
};
extern VTBL_ENTRY _ZTI8S19577C3[];
extern  VTBL_ENTRY _ZTV8S19577C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19577C3[];
static VTBL_ENTRY alt_thunk_names22[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19577C4D0Ev,_ZTv0_n12_N8S19577C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19577C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19577C4D1Ev,_ZTv0_n12_N8S19577C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19577C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19577C3D0Ev,_ZTv0_n12_N8S19577C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19577C3D0Ev,_ZThn4_N8S19577C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19577C3D1Ev,_ZTv0_n12_N8S19577C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19577C3D1Ev,_ZThn4_N8S19577C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19577C3 = {  "S19577C3", // class name
  bases_S19577C3, 2,
  &(vtc_S19577C3[0]), // expected_vtbl_contents
  &(vtt_S19577C3[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S19577C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19577C3),40, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19577C3),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names22,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19577C2  : S19577C3 {
  int s19577c2f0;
  virtual  ~S19577C2(); // _ZN8S19577C2D2Ev
  virtual void  v15(); // _ZN8S19577C23v15Ev
  virtual void  v16(); // _ZN8S19577C23v16Ev
  S19577C2(); // tgen
};
//SIG(-1 S19577C2) C1{ BC2{ VBC3{ VBC4{ vd v3 v4 v5 v6 v7} vd v8 v9 v10 Fp FC4 Fp} vd v11} vd v1 v2 Fi}


 S19577C2 ::~S19577C2(){ note_dtor("S19577C2", this);}
void  S19577C2 ::v15(){vfunc_called(this, "_ZN8S19577C23v15Ev");}
void  S19577C2 ::v16(){vfunc_called(this, "_ZN8S19577C23v16Ev");}
S19577C2 ::S19577C2(){ note_ctor("S19577C2", this);} // tgen

static void Test_S19577C2()
{
  extern Class_Descriptor cd_S19577C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S19577C2, buf);
    S19577C2 *dp, &lv = *(dp=new (buf) S19577C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S19577C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19577C2)");
    check_base_class_offset(lv, (S19577C5*)(S19577C4*), 0, "S19577C2");
    check_base_class_offset(lv, (S19577C4*)(S19577C3*), ABISELECT(16,8), "S19577C2");
    check_base_class_offset(lv, (S19577C3*), 0, "S19577C2");
    check_field_offset(lv, s19577c2f0, ABISELECT(8,4), "S19577C2.s19577c2f0");
    test_class_info(&lv, &cd_S19577C2);
    dp->~S19577C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19577C2(Test_S19577C2, "S19577C2", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S19577C2C1Ev();
extern void _ZN8S19577C2D2Ev();
Name_Map name_map_S19577C2[] = {
  NSPAIR(_ZN8S19577C2C1Ev),
  NSPAIR(_ZN8S19577C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19577C5;
extern VTBL_ENTRY _ZTI8S19577C5[];
extern  VTBL_ENTRY _ZTV8S19577C5[];
extern Class_Descriptor cd_S19577C4;
extern VTBL_ENTRY _ZTI8S19577C4[];
extern  VTBL_ENTRY _ZTV8S19577C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19577C4[];
extern Class_Descriptor cd_S19577C3;
extern VTBL_ENTRY _ZTI8S19577C3[];
extern  VTBL_ENTRY _ZTV8S19577C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19577C3[];
static Base_Class bases_S19577C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19577C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //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
    1, //immediately_derived
  0, 1},
  {&cd_S19577C4,    ABISELECT(16,8), //bcp->offset
    20, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19577C3,    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
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19577C2[];
extern void _ZN8S19577C2D1Ev();
extern void _ZN8S19577C2D0Ev();
extern void _ZN8S19577C52v6Ev();
extern void _ZN8S19577C52v7Ev();
extern void _ZN8S19577C52v8Ev();
extern void _ZN8S19577C52v9Ev();
extern void _ZN8S19577C53v10Ev();
extern void _ZN8S19577C33v14Ev();
extern void _ZN8S19577C23v15Ev();
extern void _ZN8S19577C23v16Ev();
extern void ABISELECT(_ZTv0_n24_N8S19577C2D1Ev,_ZTv0_n12_N8S19577C2D1Ev)();
extern void ABISELECT(_ZThn16_N8S19577C2D1Ev,_ZThn8_N8S19577C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19577C2D0Ev,_ZTv0_n12_N8S19577C2D0Ev)();
extern void ABISELECT(_ZThn16_N8S19577C2D0Ev,_ZThn8_N8S19577C2D0Ev)() __attribute__((weak));
extern void _ZN8S19577C52v6Ev();
extern void _ZN8S19577C52v7Ev();
extern void _ZN8S19577C52v8Ev();
extern void _ZN8S19577C52v9Ev();
extern void _ZN8S19577C53v10Ev();
extern void _ZN8S19577C43v11Ev();
extern void _ZN8S19577C43v12Ev();
extern void _ZN8S19577C43v13Ev();
static  VTBL_ENTRY vtc_S19577C2[] = {
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19577C2[0]),
  (VTBL_ENTRY)&_ZN8S19577C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19577C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19577C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19577C33v14Ev,
  (VTBL_ENTRY)&_ZN8S19577C23v15Ev,
  (VTBL_ENTRY)&_ZN8S19577C23v16Ev,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19577C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19577C2D1Ev,_ZTv0_n12_N8S19577C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19577C2D0Ev,_ZTv0_n12_N8S19577C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19577C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19577C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19577C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19577C43v12Ev,
  (VTBL_ENTRY)&_ZN8S19577C43v13Ev,
};
extern VTBL_ENTRY _ZTV8S19577C2[];
extern void _ZN8S19577C3D1Ev();
extern void _ZN8S19577C3D0Ev();
extern void _ZN8S19577C52v6Ev();
extern void _ZN8S19577C52v7Ev();
extern void _ZN8S19577C52v8Ev();
extern void _ZN8S19577C52v9Ev();
extern void _ZN8S19577C53v10Ev();
extern void _ZN8S19577C33v14Ev();
static  VTBL_ENTRY _tg__ZTV8S19577C3__8S19577C2[] = {
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19577C3[0]),
  (VTBL_ENTRY)&_ZN8S19577C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19577C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19577C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19577C33v14Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19577C3D1Ev,_ZTv0_n12_N8S19577C3D1Ev)();
extern void ABISELECT(_ZThn16_N8S19577C3D1Ev,_ZThn8_N8S19577C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19577C3D0Ev,_ZTv0_n12_N8S19577C3D0Ev)();
extern void ABISELECT(_ZThn16_N8S19577C3D0Ev,_ZThn8_N8S19577C3D0Ev)() __attribute__((weak));
extern void _ZN8S19577C52v6Ev();
extern void _ZN8S19577C52v7Ev();
extern void _ZN8S19577C52v8Ev();
extern void _ZN8S19577C52v9Ev();
extern void _ZN8S19577C53v10Ev();
extern void _ZN8S19577C43v11Ev();
extern void _ZN8S19577C43v12Ev();
extern void _ZN8S19577C43v13Ev();
static  VTBL_ENTRY _tg__ZTV8S19577C4__8S19577C3__8S19577C2[] = {
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19577C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19577C3D1Ev,_ZTv0_n12_N8S19577C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19577C3D0Ev,_ZTv0_n12_N8S19577C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19577C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19577C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19577C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19577C43v12Ev,
  (VTBL_ENTRY)&_ZN8S19577C43v13Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19577C4D1Ev,_ZTv0_n12_N8S19577C4D1Ev)();
extern void _ZN8S19577C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19577C4D0Ev,_ZTv0_n12_N8S19577C4D0Ev)();
extern void _ZN8S19577C4D0Ev() __attribute__((weak));
extern void _ZN8S19577C52v6Ev();
extern void _ZN8S19577C52v7Ev();
extern void _ZN8S19577C52v8Ev();
extern void _ZN8S19577C52v9Ev();
extern void _ZN8S19577C53v10Ev();
extern void _ZN8S19577C43v11Ev();
extern void _ZN8S19577C43v12Ev();
extern void _ZN8S19577C43v13Ev();
static  VTBL_ENTRY _tg__ZTV8S19577C4__8S19577C2[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19577C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19577C4D1Ev,_ZTv0_n12_N8S19577C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19577C4D0Ev,_ZTv0_n12_N8S19577C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19577C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19577C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19577C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19577C43v12Ev,
  (VTBL_ENTRY)&_ZN8S19577C43v13Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19577C4D1Ev,_ZTv0_n12_N8S19577C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19577C4D0Ev,_ZTv0_n12_N8S19577C4D0Ev)();
extern void _ZN8S19577C52v6Ev();
extern void _ZN8S19577C52v7Ev();
extern void _ZN8S19577C52v8Ev();
extern void _ZN8S19577C52v9Ev();
extern void _ZN8S19577C53v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19577C5__8S19577C4__8S19577C2[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S19577C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19577C4D1Ev,_ZTv0_n12_N8S19577C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19577C4D0Ev,_ZTv0_n12_N8S19577C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19577C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19577C53v10Ev,
};
static  VTT_ENTRY vtt_S19577C2[] = {
  {&(_ZTV8S19577C2[10]),  10,42},
  {&(_tg__ZTV8S19577C3__8S19577C2[10]),  10,18},
  {&(_tg__ZTV8S19577C4__8S19577C3__8S19577C2[12]),  12,22},
  {&(_tg__ZTV8S19577C3__8S19577C2[10]),  10,18},
  {&(_ZTV8S19577C2[32]),  32,42},
  {&(_ZTV8S19577C2[10]),  10,42},
  {&(_tg__ZTV8S19577C4__8S19577C2[9]),  9,19},
  {&(_tg__ZTV8S19577C5__8S19577C4__8S19577C2[8]),  8,15},
};
extern VTBL_ENTRY _ZTI8S19577C2[];
extern  VTBL_ENTRY _ZTV8S19577C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19577C2[];
static VTBL_ENTRY alt_thunk_names23[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19577C4D0Ev,_ZTv0_n12_N8S19577C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19577C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19577C4D1Ev,_ZTv0_n12_N8S19577C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19577C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19577C3D0Ev,_ZTv0_n12_N8S19577C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19577C3D0Ev,_ZThn8_N8S19577C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19577C3D1Ev,_ZTv0_n12_N8S19577C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19577C3D1Ev,_ZThn8_N8S19577C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19577C2D0Ev,_ZTv0_n12_N8S19577C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19577C2D0Ev,_ZThn8_N8S19577C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19577C2D1Ev,_ZTv0_n12_N8S19577C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19577C2D1Ev,_ZThn8_N8S19577C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19577C2 = {  "S19577C2", // class name
  bases_S19577C2, 3,
  &(vtc_S19577C2[0]), // expected_vtbl_contents
  &(vtt_S19577C2[0]), // expected_vtt_contents
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S19577C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19577C2),42, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19577C2),8, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names23,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19577C6  : S19577C5 {
  ::S19577C5 s19577c6f0;
  virtual  ~S19577C6(); // _ZN8S19577C6D1Ev
  virtual void  v17(); // _ZN8S19577C63v17Ev
  virtual void  v18(); // _ZN8S19577C63v18Ev
  virtual void  v19(); // _ZN8S19577C63v19Ev
  virtual void  v20(); // _ZN8S19577C63v20Ev
  virtual void  v21(); // _ZN8S19577C63v21Ev
  S19577C6(); // tgen
};
//SIG(-1 S19577C6) C1{ BC2{ vd v6 v7 v8 v9 v10} vd v1 v2 v3 v4 v5 FC2}


 S19577C6 ::~S19577C6(){ note_dtor("S19577C6", this);}
void  S19577C6 ::v17(){vfunc_called(this, "_ZN8S19577C63v17Ev");}
void  S19577C6 ::v18(){vfunc_called(this, "_ZN8S19577C63v18Ev");}
void  S19577C6 ::v19(){vfunc_called(this, "_ZN8S19577C63v19Ev");}
void  S19577C6 ::v20(){vfunc_called(this, "_ZN8S19577C63v20Ev");}
void  S19577C6 ::v21(){vfunc_called(this, "_ZN8S19577C63v21Ev");}
S19577C6 ::S19577C6(){ note_ctor("S19577C6", this);} // tgen

static void Test_S19577C6()
{
  extern Class_Descriptor cd_S19577C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19577C6, buf);
    S19577C6 *dp, &lv = *(dp=new (buf) S19577C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19577C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19577C6)");
    check_base_class_offset(lv, (S19577C5*), 0, "S19577C6");
    check_field_offset(lv, s19577c6f0, ABISELECT(8,4), "S19577C6.s19577c6f0");
    test_class_info(&lv, &cd_S19577C6);
    dp->~S19577C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19577C6(Test_S19577C6, "S19577C6", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19577C6C1Ev();
extern void _ZN8S19577C6D1Ev();
Name_Map name_map_S19577C6[] = {
  NSPAIR(_ZN8S19577C6C1Ev),
  NSPAIR(_ZN8S19577C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19577C5;
extern VTBL_ENTRY _ZTI8S19577C5[];
extern  VTBL_ENTRY _ZTV8S19577C5[];
static Base_Class bases_S19577C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19577C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S19577C6[];
extern void _ZN8S19577C6D1Ev();
extern void _ZN8S19577C6D0Ev();
extern void _ZN8S19577C52v6Ev();
extern void _ZN8S19577C52v7Ev();
extern void _ZN8S19577C52v8Ev();
extern void _ZN8S19577C52v9Ev();
extern void _ZN8S19577C53v10Ev();
extern void _ZN8S19577C63v17Ev();
extern void _ZN8S19577C63v18Ev();
extern void _ZN8S19577C63v19Ev();
extern void _ZN8S19577C63v20Ev();
extern void _ZN8S19577C63v21Ev();
static  VTBL_ENTRY vtc_S19577C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19577C6[0]),
  (VTBL_ENTRY)&_ZN8S19577C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19577C6D0Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19577C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19577C63v17Ev,
  (VTBL_ENTRY)&_ZN8S19577C63v18Ev,
  (VTBL_ENTRY)&_ZN8S19577C63v19Ev,
  (VTBL_ENTRY)&_ZN8S19577C63v20Ev,
  (VTBL_ENTRY)&_ZN8S19577C63v21Ev,
};
extern VTBL_ENTRY _ZTI8S19577C6[];
extern  VTBL_ENTRY _ZTV8S19577C6[];
Class_Descriptor cd_S19577C6 = {  "S19577C6", // class name
  bases_S19577C6, 1,
  &(vtc_S19577C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19577C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19577C6),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  S19577C1  : virtual S19577C2 , S19577C6 {
  void *s19577c1f0[7];
  long double s19577c1f1;
  char  :0;
  virtual  ~S19577C1(); // _ZN8S19577C1D2Ev
  virtual void  v1(); // _ZN8S19577C12v1Ev
  virtual void  v2(); // _ZN8S19577C12v2Ev
  virtual void  v3(); // _ZN8S19577C12v3Ev
  virtual void  v4(); // _ZN8S19577C12v4Ev
  virtual void  v5(); // _ZN8S19577C12v5Ev
  S19577C1(); // tgen
};
//SIG(1 S19577C1) C1{ VBC2{ BC3{ VBC4{ VBC5{ vd v6 v7 v8 v9 v10} vd v11 v12 v13 Fp FC5 Fp} vd v14} vd v15 v16 Fi} BC6{ BC5 vd v17 v18 v19 v20 v21 FC5} vd v1 v2 v3 v4 v5 Fp[7] FD Fc:0}


 S19577C1 ::~S19577C1(){ note_dtor("S19577C1", this);}
void  S19577C1 ::v1(){vfunc_called(this, "_ZN8S19577C12v1Ev");}
void  S19577C1 ::v2(){vfunc_called(this, "_ZN8S19577C12v2Ev");}
void  S19577C1 ::v3(){vfunc_called(this, "_ZN8S19577C12v3Ev");}
void  S19577C1 ::v4(){vfunc_called(this, "_ZN8S19577C12v4Ev");}
void  S19577C1 ::v5(){vfunc_called(this, "_ZN8S19577C12v5Ev");}
S19577C1 ::S19577C1(){ note_ctor("S19577C1", this);} // tgen

static void Test_S19577C1()
{
  extern Class_Descriptor cd_S19577C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(10,19)];
    init_test(&cd_S19577C1, buf);
    S19577C1 *dp, &lv = *(dp=new (buf) S19577C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,72), "sizeof(S19577C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19577C1)");
    check_base_class_offset(lv, (S19577C5*)(S19577C4*), ABISELECT(96,48), "S19577C1");
    check_base_class_offset(lv, (S19577C4*)(S19577C3*)(S19577C2*), ABISELECT(112,56), "S19577C1");
    check_base_class_offset(lv, (S19577C3*)(S19577C2*), ABISELECT(96,48), "S19577C1");
    check_base_class_offset(lv, (S19577C2*), ABISELECT(96,48), "S19577C1");
    check_base_class_offset(lv, (S19577C5*)(S19577C6*), 0, "S19577C1");
    check_base_class_offset(lv, (S19577C6*), 0, "S19577C1");
    check_field_offset(lv, s19577c1f0, ABISELECT(16,8), "S19577C1.s19577c1f0");
    check_field_offset(lv, s19577c1f1, ABISELECT(80,36), "S19577C1.s19577c1f1");
    test_class_info(&lv, &cd_S19577C1);
    dp->~S19577C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19577C1(Test_S19577C1, "S19577C1", ABISELECT(144,72));

#else // __cplusplus

extern void _ZN8S19577C1C1Ev();
extern void _ZN8S19577C1D2Ev();
Name_Map name_map_S19577C1[] = {
  NSPAIR(_ZN8S19577C1C1Ev),
  NSPAIR(_ZN8S19577C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19577C5;
extern VTBL_ENTRY _ZTI8S19577C5[];
extern  VTBL_ENTRY _ZTV8S19577C5[];
extern Class_Descriptor cd_S19577C4;
extern VTBL_ENTRY _ZTI8S19577C4[];
extern  VTBL_ENTRY _ZTV8S19577C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19577C4[];
extern Class_Descriptor cd_S19577C3;
extern VTBL_ENTRY _ZTI8S19577C3[];
extern  VTBL_ENTRY _ZTV8S19577C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19577C3[];
extern Class_Descriptor cd_S19577C2;
extern VTBL_ENTRY _ZTI8S19577C2[];
extern  VTBL_ENTRY _ZTV8S19577C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19577C2[];
extern Class_Descriptor cd_S19577C5;
extern VTBL_ENTRY _ZTI8S19577C5[];
extern  VTBL_ENTRY _ZTV8S19577C5[];
extern Class_Descriptor cd_S19577C6;
extern VTBL_ENTRY _ZTI8S19577C6[];
extern  VTBL_ENTRY _ZTV8S19577C6[];
static Base_Class bases_S19577C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19577C5,    ABISELECT(96,48), //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
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19577C4,    ABISELECT(112,56), //bcp->offset
    45, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19577C3,    ABISELECT(96,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19577C2,    ABISELECT(96,48), //bcp->offset
    22, //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},
  {&cd_S19577C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19577C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S19577C1[];
extern void _ZN8S19577C1D1Ev();
extern void _ZN8S19577C1D0Ev();
extern void _ZN8S19577C52v6Ev();
extern void _ZN8S19577C52v7Ev();
extern void _ZN8S19577C52v8Ev();
extern void _ZN8S19577C52v9Ev();
extern void _ZN8S19577C53v10Ev();
extern void _ZN8S19577C63v17Ev();
extern void _ZN8S19577C63v18Ev();
extern void _ZN8S19577C63v19Ev();
extern void _ZN8S19577C63v20Ev();
extern void _ZN8S19577C63v21Ev();
extern void _ZN8S19577C12v1Ev();
extern void _ZN8S19577C12v2Ev();
extern void _ZN8S19577C12v3Ev();
extern void _ZN8S19577C12v4Ev();
extern void _ZN8S19577C12v5Ev();
extern void ABISELECT(_ZTv0_n24_N8S19577C1D1Ev,_ZTv0_n12_N8S19577C1D1Ev)();
extern void ABISELECT(_ZThn96_N8S19577C1D1Ev,_ZThn48_N8S19577C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19577C1D0Ev,_ZTv0_n12_N8S19577C1D0Ev)();
extern void ABISELECT(_ZThn96_N8S19577C1D0Ev,_ZThn48_N8S19577C1D0Ev)() __attribute__((weak));
extern void _ZN8S19577C52v6Ev();
extern void _ZN8S19577C52v7Ev();
extern void _ZN8S19577C52v8Ev();
extern void _ZN8S19577C52v9Ev();
extern void _ZN8S19577C53v10Ev();
extern void _ZN8S19577C33v14Ev();
extern void _ZN8S19577C23v15Ev();
extern void _ZN8S19577C23v16Ev();
extern void ABISELECT(_ZTv0_n24_N8S19577C1D1Ev,_ZTv0_n12_N8S19577C1D1Ev)();
extern void ABISELECT(_ZThn112_N8S19577C1D1Ev,_ZThn56_N8S19577C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19577C1D0Ev,_ZTv0_n12_N8S19577C1D0Ev)();
extern void ABISELECT(_ZThn112_N8S19577C1D0Ev,_ZThn56_N8S19577C1D0Ev)() __attribute__((weak));
extern void _ZN8S19577C52v6Ev();
extern void _ZN8S19577C52v7Ev();
extern void _ZN8S19577C52v8Ev();
extern void _ZN8S19577C52v9Ev();
extern void _ZN8S19577C53v10Ev();
extern void _ZN8S19577C43v11Ev();
extern void _ZN8S19577C43v12Ev();
extern void _ZN8S19577C43v13Ev();
static  VTBL_ENTRY vtc_S19577C1[] = {
  ABISELECT(96,48),
  ABISELECT(112,56),
  ABISELECT(96,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19577C1[0]),
  (VTBL_ENTRY)&_ZN8S19577C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19577C1D0Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19577C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19577C63v17Ev,
  (VTBL_ENTRY)&_ZN8S19577C63v18Ev,
  (VTBL_ENTRY)&_ZN8S19577C63v19Ev,
  (VTBL_ENTRY)&_ZN8S19577C63v20Ev,
  (VTBL_ENTRY)&_ZN8S19577C63v21Ev,
  (VTBL_ENTRY)&_ZN8S19577C12v1Ev,
  (VTBL_ENTRY)&_ZN8S19577C12v2Ev,
  (VTBL_ENTRY)&_ZN8S19577C12v3Ev,
  (VTBL_ENTRY)&_ZN8S19577C12v4Ev,
  (VTBL_ENTRY)&_ZN8S19577C12v5Ev,
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI8S19577C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19577C1D1Ev,_ZTv0_n12_N8S19577C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19577C1D0Ev,_ZTv0_n12_N8S19577C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19577C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19577C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19577C33v14Ev,
  (VTBL_ENTRY)&_ZN8S19577C23v15Ev,
  (VTBL_ENTRY)&_ZN8S19577C23v16Ev,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI8S19577C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19577C1D1Ev,_ZTv0_n12_N8S19577C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19577C1D0Ev,_ZTv0_n12_N8S19577C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19577C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19577C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19577C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19577C43v12Ev,
  (VTBL_ENTRY)&_ZN8S19577C43v13Ev,
};
extern VTBL_ENTRY _ZTV8S19577C1[];
extern void ABISELECT(_ZTv0_n24_N8S19577C2D1Ev,_ZTv0_n12_N8S19577C2D1Ev)();
extern void _ZN8S19577C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19577C2D0Ev,_ZTv0_n12_N8S19577C2D0Ev)();
extern void _ZN8S19577C2D0Ev() __attribute__((weak));
extern void _ZN8S19577C52v6Ev();
extern void _ZN8S19577C52v7Ev();
extern void _ZN8S19577C52v8Ev();
extern void _ZN8S19577C52v9Ev();
extern void _ZN8S19577C53v10Ev();
extern void _ZN8S19577C33v14Ev();
extern void _ZN8S19577C23v15Ev();
extern void _ZN8S19577C23v16Ev();
static  VTBL_ENTRY _tg__ZTV8S19577C2__8S19577C1[] = {
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19577C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19577C2D1Ev,_ZTv0_n12_N8S19577C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19577C2D0Ev,_ZTv0_n12_N8S19577C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19577C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19577C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19577C33v14Ev,
  (VTBL_ENTRY)&_ZN8S19577C23v15Ev,
  (VTBL_ENTRY)&_ZN8S19577C23v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19577C3D1Ev,_ZTv0_n12_N8S19577C3D1Ev)();
extern void _ZN8S19577C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19577C3D0Ev,_ZTv0_n12_N8S19577C3D0Ev)();
extern void _ZN8S19577C3D0Ev() __attribute__((weak));
extern void _ZN8S19577C52v6Ev();
extern void _ZN8S19577C52v7Ev();
extern void _ZN8S19577C52v8Ev();
extern void _ZN8S19577C52v9Ev();
extern void _ZN8S19577C53v10Ev();
extern void _ZN8S19577C33v14Ev();
static  VTBL_ENTRY _tg__ZTV8S19577C38S19577C2__8S19577C1[] = {
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19577C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19577C3D1Ev,_ZTv0_n12_N8S19577C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19577C3D0Ev,_ZTv0_n12_N8S19577C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19577C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19577C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19577C33v14Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19577C3D1Ev,_ZTv0_n12_N8S19577C3D1Ev)();
extern void ABISELECT(_ZThn16_N8S19577C3D1Ev,_ZThn8_N8S19577C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19577C3D0Ev,_ZTv0_n12_N8S19577C3D0Ev)();
extern void ABISELECT(_ZThn16_N8S19577C3D0Ev,_ZThn8_N8S19577C3D0Ev)() __attribute__((weak));
extern void _ZN8S19577C52v6Ev();
extern void _ZN8S19577C52v7Ev();
extern void _ZN8S19577C52v8Ev();
extern void _ZN8S19577C52v9Ev();
extern void _ZN8S19577C53v10Ev();
extern void _ZN8S19577C43v11Ev();
extern void _ZN8S19577C43v12Ev();
extern void _ZN8S19577C43v13Ev();
static  VTBL_ENTRY _tg__ZTV8S19577C4__8S19577C38S19577C2__8S19577C1[] = {
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19577C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19577C3D1Ev,_ZTv0_n12_N8S19577C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19577C3D0Ev,_ZTv0_n12_N8S19577C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19577C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19577C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19577C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19577C43v12Ev,
  (VTBL_ENTRY)&_ZN8S19577C43v13Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19577C2D1Ev,_ZTv0_n12_N8S19577C2D1Ev)();
extern void ABISELECT(_ZThn16_N8S19577C2D1Ev,_ZThn8_N8S19577C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19577C2D0Ev,_ZTv0_n12_N8S19577C2D0Ev)();
extern void ABISELECT(_ZThn16_N8S19577C2D0Ev,_ZThn8_N8S19577C2D0Ev)() __attribute__((weak));
extern void _ZN8S19577C52v6Ev();
extern void _ZN8S19577C52v7Ev();
extern void _ZN8S19577C52v8Ev();
extern void _ZN8S19577C52v9Ev();
extern void _ZN8S19577C53v10Ev();
extern void _ZN8S19577C43v11Ev();
extern void _ZN8S19577C43v12Ev();
extern void _ZN8S19577C43v13Ev();
static  VTBL_ENTRY _tg__ZTV8S19577C4__8S19577C2__8S19577C1[] = {
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19577C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19577C2D1Ev,_ZTv0_n12_N8S19577C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19577C2D0Ev,_ZTv0_n12_N8S19577C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19577C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19577C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19577C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19577C43v12Ev,
  (VTBL_ENTRY)&_ZN8S19577C43v13Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19577C4D1Ev,_ZTv0_n12_N8S19577C4D1Ev)();
extern void _ZN8S19577C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19577C4D0Ev,_ZTv0_n12_N8S19577C4D0Ev)();
extern void _ZN8S19577C4D0Ev() __attribute__((weak));
extern void _ZN8S19577C52v6Ev();
extern void _ZN8S19577C52v7Ev();
extern void _ZN8S19577C52v8Ev();
extern void _ZN8S19577C52v9Ev();
extern void _ZN8S19577C53v10Ev();
extern void _ZN8S19577C43v11Ev();
extern void _ZN8S19577C43v12Ev();
extern void _ZN8S19577C43v13Ev();
static  VTBL_ENTRY _tg__ZTV8S19577C4__8S19577C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19577C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19577C4D1Ev,_ZTv0_n12_N8S19577C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19577C4D0Ev,_ZTv0_n12_N8S19577C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19577C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19577C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19577C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19577C43v12Ev,
  (VTBL_ENTRY)&_ZN8S19577C43v13Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19577C4D1Ev,_ZTv0_n12_N8S19577C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19577C4D0Ev,_ZTv0_n12_N8S19577C4D0Ev)();
extern void _ZN8S19577C52v6Ev();
extern void _ZN8S19577C52v7Ev();
extern void _ZN8S19577C52v8Ev();
extern void _ZN8S19577C52v9Ev();
extern void _ZN8S19577C53v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19577C5__8S19577C4__8S19577C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S19577C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19577C4D1Ev,_ZTv0_n12_N8S19577C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19577C4D0Ev,_ZTv0_n12_N8S19577C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19577C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19577C53v10Ev,
};
static  VTT_ENTRY vtt_S19577C1[] = {
  {&(_ZTV8S19577C1[5]),  5,67},
  {&(_ZTV8S19577C1[35]),  35,67},
  {&(_ZTV8S19577C1[57]),  57,67},
  {&(_ZTV8S19577C1[35]),  35,67},
  {&(_tg__ZTV8S19577C2__8S19577C1[10]),  10,20},
  {&(_tg__ZTV8S19577C38S19577C2__8S19577C1[10]),  10,18},
  {&(_tg__ZTV8S19577C4__8S19577C38S19577C2__8S19577C1[12]),  12,22},
  {&(_tg__ZTV8S19577C38S19577C2__8S19577C1[10]),  10,18},
  {&(_tg__ZTV8S19577C4__8S19577C2__8S19577C1[12]),  12,22},
  {&(_tg__ZTV8S19577C2__8S19577C1[10]),  10,20},
  {&(_tg__ZTV8S19577C4__8S19577C1[9]),  9,19},
  {&(_tg__ZTV8S19577C5__8S19577C4__8S19577C1[8]),  8,15},
};
extern VTBL_ENTRY _ZTI8S19577C1[];
extern  VTBL_ENTRY _ZTV8S19577C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19577C1[];
static VTBL_ENTRY alt_thunk_names24[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19577C4D0Ev,_ZTv0_n12_N8S19577C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19577C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19577C4D1Ev,_ZTv0_n12_N8S19577C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19577C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19577C3D0Ev,_ZTv0_n12_N8S19577C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19577C3D0Ev,_ZThn8_N8S19577C3D0Ev),
  (VTBL_ENTRY)_ZN8S19577C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19577C3D1Ev,_ZTv0_n12_N8S19577C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19577C3D1Ev,_ZThn8_N8S19577C3D1Ev),
  (VTBL_ENTRY)_ZN8S19577C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19577C2D0Ev,_ZTv0_n12_N8S19577C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19577C2D0Ev,_ZThn8_N8S19577C2D0Ev),
  (VTBL_ENTRY)_ZN8S19577C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19577C2D1Ev,_ZTv0_n12_N8S19577C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19577C2D1Ev,_ZThn8_N8S19577C2D1Ev),
  (VTBL_ENTRY)_ZN8S19577C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19577C1D0Ev,_ZTv0_n12_N8S19577C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19577C1D0Ev,_ZThn56_N8S19577C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S19577C1D0Ev,_ZThn48_N8S19577C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19577C1D1Ev,_ZTv0_n12_N8S19577C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19577C1D1Ev,_ZThn56_N8S19577C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S19577C1D1Ev,_ZThn48_N8S19577C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19577C1 = {  "S19577C1", // class name
  bases_S19577C1, 6,
  &(vtc_S19577C1[0]), // expected_vtbl_contents
  &(vtt_S19577C1[0]), // expected_vtt_contents
  ABISELECT(144,72), // object size
  NSPAIRA(_ZTI8S19577C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19577C1),67, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19577C1),12, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names24,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16827C11_nt  {
  void *s16827c11f0;
  void  mf16827c11(); // _ZN12S16827C11_nt10mf16827c11Ev
};
//SIG(-1 S16827C11_nt) C1{ m Fp}


void  S16827C11_nt ::mf16827c11(){}

//skip512 S16827C11_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16827C1  {
  int s16827c1f0;
  ::S21811C13_nt s16827c1f1;
  int s16827c1f2;
  ::S21811C16 s16827c1f3;
  ::S21811C7_nt s16827c1f4;
  ::S21811C16 s16827c1f5;
  ::S21811C7_nt s16827c1f6;
  ::S2121C37 s16827c1f7;
  ::S2185C10_nt s16827c1f8;
  ::S2185C10_nt s16827c1f9;
  ::S2185C10_nt s16827c1f10;
  int s16827c1f11;
  ::S2185C10_nt s16827c1f12;
  ::S2185C10_nt s16827c1f13;
  ::S2185C10_nt s16827c1f14;
  int s16827c1f15;
  ::S16827C11_nt s16827c1f16;
  void  mf16827c1(); // _ZN8S16827C19mf16827c1Ev
};
//SIG(1 S16827C1) C1{ m Fi FC2{ m Fp} Fi FC3{ m Fp Fi[2] FC4{ m}} FC5{ m Fp Fi[2] FC6{ m}} FC3 FC5 FC7{ m Fp Fi[2] FC6} FC8{ m Fp Fi FC6} FC8 FC8 Fi FC8 FC8 FC8 Fi FC9{ m Fp}}


void  S16827C1 ::mf16827c1(){}

static void Test_S16827C1()
{
  {
    init_simple_test("S16827C1");
    S16827C1 lv;
    check2(sizeof(lv), ABISELECT(264,176), "sizeof(S16827C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16827C1)");
    check_field_offset(lv, s16827c1f0, 0, "S16827C1.s16827c1f0");
    check_field_offset(lv, s16827c1f1, ABISELECT(8,4), "S16827C1.s16827c1f1");
    check_field_offset(lv, s16827c1f2, ABISELECT(16,8), "S16827C1.s16827c1f2");
    check_field_offset(lv, s16827c1f3, ABISELECT(24,12), "S16827C1.s16827c1f3");
    check_field_offset(lv, s16827c1f4, ABISELECT(48,28), "S16827C1.s16827c1f4");
    check_field_offset(lv, s16827c1f5, ABISELECT(72,44), "S16827C1.s16827c1f5");
    check_field_offset(lv, s16827c1f6, ABISELECT(96,60), "S16827C1.s16827c1f6");
    check_field_offset(lv, s16827c1f7, ABISELECT(120,76), "S16827C1.s16827c1f7");
    check_field_offset(lv, s16827c1f8, ABISELECT(144,92), "S16827C1.s16827c1f8");
    check_field_offset(lv, s16827c1f9, ABISELECT(160,104), "S16827C1.s16827c1f9");
    check_field_offset(lv, s16827c1f10, ABISELECT(176,116), "S16827C1.s16827c1f10");
    check_field_offset(lv, s16827c1f11, ABISELECT(192,128), "S16827C1.s16827c1f11");
    check_field_offset(lv, s16827c1f12, ABISELECT(200,132), "S16827C1.s16827c1f12");
    check_field_offset(lv, s16827c1f13, ABISELECT(216,144), "S16827C1.s16827c1f13");
    check_field_offset(lv, s16827c1f14, ABISELECT(232,156), "S16827C1.s16827c1f14");
    check_field_offset(lv, s16827c1f15, ABISELECT(248,168), "S16827C1.s16827c1f15");
    check_field_offset(lv, s16827c1f16, ABISELECT(256,172), "S16827C1.s16827c1f16");
  }
}
static Arrange_To_Call_Me vS16827C1(Test_S16827C1, "S16827C1", ABISELECT(264,176));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8480C3_nt  {
  void *s8480c3f0[3];
  void  mf8480c3(); // _ZN10S8480C3_nt8mf8480c3Ev
};
//SIG(-1 S8480C3_nt) C1{ m Fp[3]}


void  S8480C3_nt ::mf8480c3(){}

//skip512 S8480C3_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8480C2_nt  {
  ::S8480C3_nt s8480c2f0;
  unsigned int s8480c2f1:1;
  virtual  ~S8480C2_nt(); // _ZN10S8480C2_ntD1Ev
  virtual void  v1(); // _ZN10S8480C2_nt2v1Ev
  virtual void  v2(); // _ZN10S8480C2_nt2v2Ev
  virtual void  v3(); // _ZN10S8480C2_nt2v3Ev
  virtual void  v4(); // _ZN10S8480C2_nt2v4Ev
  virtual void  v5(); // _ZN10S8480C2_nt2v5Ev
  virtual void  v6(); // _ZN10S8480C2_nt2v6Ev
  virtual void  v7(); // _ZN10S8480C2_nt2v7Ev
  S8480C2_nt(); // tgen
};
//SIG(-1 S8480C2_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7 FC2{ m Fp[3]} Fi:1}


 S8480C2_nt ::~S8480C2_nt(){ note_dtor("S8480C2_nt", this);}
void  S8480C2_nt ::v1(){vfunc_called(this, "_ZN10S8480C2_nt2v1Ev");}
void  S8480C2_nt ::v2(){vfunc_called(this, "_ZN10S8480C2_nt2v2Ev");}
void  S8480C2_nt ::v3(){vfunc_called(this, "_ZN10S8480C2_nt2v3Ev");}
void  S8480C2_nt ::v4(){vfunc_called(this, "_ZN10S8480C2_nt2v4Ev");}
void  S8480C2_nt ::v5(){vfunc_called(this, "_ZN10S8480C2_nt2v5Ev");}
void  S8480C2_nt ::v6(){vfunc_called(this, "_ZN10S8480C2_nt2v6Ev");}
void  S8480C2_nt ::v7(){vfunc_called(this, "_ZN10S8480C2_nt2v7Ev");}
S8480C2_nt ::S8480C2_nt(){ note_ctor("S8480C2_nt", this);} // tgen

//skip512 S8480C2_nt

#else // __cplusplus

extern void _ZN10S8480C2_ntC1Ev();
extern void _ZN10S8480C2_ntD1Ev();
Name_Map name_map_S8480C2_nt[] = {
  NSPAIR(_ZN10S8480C2_ntC1Ev),
  NSPAIR(_ZN10S8480C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S8480C2_nt[];
extern void _ZN10S8480C2_ntD1Ev();
extern void _ZN10S8480C2_ntD0Ev();
extern void _ZN10S8480C2_nt2v1Ev();
extern void _ZN10S8480C2_nt2v2Ev();
extern void _ZN10S8480C2_nt2v3Ev();
extern void _ZN10S8480C2_nt2v4Ev();
extern void _ZN10S8480C2_nt2v5Ev();
extern void _ZN10S8480C2_nt2v6Ev();
extern void _ZN10S8480C2_nt2v7Ev();
static  VTBL_ENTRY vtc_S8480C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S8480C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S8480C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S8480C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S8480C2_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S8480C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S8480C2_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S8480C2_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S8480C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S8480C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S8480C2_nt2v7Ev,
};
extern VTBL_ENTRY _ZTI10S8480C2_nt[];
VTBL_ENTRY *P__ZTI10S8480C2_nt = _ZTI10S8480C2_nt; 
extern  VTBL_ENTRY _ZTV10S8480C2_nt[];
Class_Descriptor cd_S8480C2_nt = {  "S8480C2_nt", // class name
  0,0,//no base classes
  &(vtc_S8480C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI10S8480C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S8480C2_nt),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8480C5  {
  char s8480c5f0[4];
  int s8480c5f1;
  short s8480c5f2[3];
  char s8480c5f3[2];
  int s8480c5f4[2];
};
//SIG(-1 S8480C5) C1{ Fc[4] Fi Fs[3] Fc[2] Fi[2]}



static void Test_S8480C5()
{
  {
    init_simple_test("S8480C5");
    S8480C5 lv;
    check2(sizeof(lv), 24, "sizeof(S8480C5)");
    check2(__alignof__(lv), 4, "__alignof__(S8480C5)");
    check_field_offset(lv, s8480c5f0, 0, "S8480C5.s8480c5f0");
    check_field_offset(lv, s8480c5f1, 4, "S8480C5.s8480c5f1");
    check_field_offset(lv, s8480c5f2, 8, "S8480C5.s8480c5f2");
    check_field_offset(lv, s8480c5f3, 14, "S8480C5.s8480c5f3");
    check_field_offset(lv, s8480c5f4, 16, "S8480C5.s8480c5f4");
  }
}
static Arrange_To_Call_Me vS8480C5(Test_S8480C5, "S8480C5", 24);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8480C4  {
  ::S8480C5 s8480c4f0;
  ::S8480C5 s8480c4f1;
  ::S8480C5 s8480c4f2;
  ::S8480C5 s8480c4f3;
  int s8480c4f4[5];
};
//SIG(1 S8480C4) C1{ FC2{ Fc[4] Fi Fs[3] Fc[2] Fi[2]} FC2 FC2 FC2 Fi[5]}



static void Test_S8480C4()
{
  {
    init_simple_test("S8480C4");
    S8480C4 lv;
    check2(sizeof(lv), 116, "sizeof(S8480C4)");
    check2(__alignof__(lv), 4, "__alignof__(S8480C4)");
    check_field_offset(lv, s8480c4f0, 0, "S8480C4.s8480c4f0");
    check_field_offset(lv, s8480c4f1, 24, "S8480C4.s8480c4f1");
    check_field_offset(lv, s8480c4f2, 48, "S8480C4.s8480c4f2");
    check_field_offset(lv, s8480c4f3, 72, "S8480C4.s8480c4f3");
    check_field_offset(lv, s8480c4f4, 96, "S8480C4.s8480c4f4");
  }
}
static Arrange_To_Call_Me vS8480C4(Test_S8480C4, "S8480C4", 116);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8480C8_nt  {
  int s8480c8f0;
  void *s8480c8f1;
  int s8480c8f2;
};
//SIG(-1 S8480C8_nt) C1{ Fi Fp Fi}



//skip512 S8480C8_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI10S8480C8_nt[];
VTBL_ENTRY *P__ZTI10S8480C8_nt = _ZTI10S8480C8_nt; 
Class_Descriptor cd_S8480C8_nt = {  "S8480C8_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI10S8480C8_nt),ABISELECT(16,8), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8480C7  {
  ::S8480C8_nt s8480c7f0;
  ::S8480C8_nt s8480c7f1;
  ::S8480C8_nt s8480c7f2;
  ::S8480C8_nt s8480c7f3;
};
//SIG(1 S8480C7) C1{ FC2{ Fi Fp Fi} FC2 FC2 FC2}



static void Test_S8480C7()
{
  {
    init_simple_test("S8480C7");
    S8480C7 lv;
    check2(sizeof(lv), ABISELECT(96,48), "sizeof(S8480C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8480C7)");
    check_field_offset(lv, s8480c7f0, 0, "S8480C7.s8480c7f0");
    check_field_offset(lv, s8480c7f1, ABISELECT(24,12), "S8480C7.s8480c7f1");
    check_field_offset(lv, s8480c7f2, ABISELECT(48,24), "S8480C7.s8480c7f2");
    check_field_offset(lv, s8480c7f3, ABISELECT(72,36), "S8480C7.s8480c7f3");
  }
}
static Arrange_To_Call_Me vS8480C7(Test_S8480C7, "S8480C7", ABISELECT(96,48));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8480C6  {
  int s8480c6f0[6];
  ::S8480C7 s8480c6f1[2];
};
//SIG(-1 S8480C6) C1{ Fi[6] FC2{ FC3{ Fi Fp Fi} FC3 FC3 FC3}[2]}



static void Test_S8480C6()
{
  {
    init_simple_test("S8480C6");
    S8480C6 lv;
    check2(sizeof(lv), ABISELECT(216,120), "sizeof(S8480C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8480C6)");
    check_field_offset(lv, s8480c6f0, 0, "S8480C6.s8480c6f0");
    check_field_offset(lv, s8480c6f1, 24, "S8480C6.s8480c6f1");
  }
}
static Arrange_To_Call_Me vS8480C6(Test_S8480C6, "S8480C6", ABISELECT(216,120));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8480C1  : S8480C2_nt {
  ::S8480C4 s8480c1f0[2];
  ::S8480C6 s8480c1f1;
  ~S8480C1(); // tgen
  S8480C1(); // tgen
};
//SIG(1 S8480C1) C1{ BC2{ vd v1 v2 v3 v4 v5 v6 v7 FC3{ m Fp[3]} Fi:1} FC4{ FC5{ Fc[4] Fi Fs[3] Fc[2] Fi[2]} FC5 FC5 FC5 Fi[5]}[2] FC6{ Fi[6] FC7{ FC8{ Fi Fp Fi} FC8 FC8 FC8}[2]}}


S8480C1 ::~S8480C1(){ note_dtor("S8480C1", this);} // tgen
S8480C1 ::S8480C1(){ note_ctor("S8480C1", this);} // tgen

static void Test_S8480C1()
{
  extern Class_Descriptor cd_S8480C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(62,94)];
    init_test(&cd_S8480C1, buf);
    S8480C1 *dp, &lv = *(dp=new (buf) S8480C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(488,372), "sizeof(S8480C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8480C1)");
    check_base_class_offset(lv, (S8480C2_nt*), 0, "S8480C1");
    check_field_offset(lv, s8480c1f0, ABISELECT(36,20), "S8480C1.s8480c1f0");
    check_field_offset(lv, s8480c1f1, ABISELECT(272,252), "S8480C1.s8480c1f1");
    test_class_info(&lv, &cd_S8480C1);
    dp->~S8480C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8480C1(Test_S8480C1, "S8480C1", ABISELECT(488,372));

#else // __cplusplus

extern void _ZN7S8480C1C1Ev();
extern void _ZN7S8480C1D1Ev();
Name_Map name_map_S8480C1[] = {
  NSPAIR(_ZN7S8480C1C1Ev),
  NSPAIR(_ZN7S8480C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8480C2_nt;
extern VTBL_ENTRY _ZTI10S8480C2_nt[];
extern  VTBL_ENTRY _ZTV10S8480C2_nt[];
static Base_Class bases_S8480C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8480C2_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 _ZTI7S8480C1[];
extern void _ZN7S8480C1D1Ev();
extern void _ZN7S8480C1D0Ev();
extern void _ZN10S8480C2_nt2v1Ev();
extern void _ZN10S8480C2_nt2v2Ev();
extern void _ZN10S8480C2_nt2v3Ev();
extern void _ZN10S8480C2_nt2v4Ev();
extern void _ZN10S8480C2_nt2v5Ev();
extern void _ZN10S8480C2_nt2v6Ev();
extern void _ZN10S8480C2_nt2v7Ev();
static  VTBL_ENTRY vtc_S8480C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8480C1[0]),
  (VTBL_ENTRY)&_ZN7S8480C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8480C1D0Ev,
  (VTBL_ENTRY)&_ZN10S8480C2_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S8480C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S8480C2_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S8480C2_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S8480C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S8480C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S8480C2_nt2v7Ev,
};
extern VTBL_ENTRY _ZTI7S8480C1[];
extern  VTBL_ENTRY _ZTV7S8480C1[];
Class_Descriptor cd_S8480C1 = {  "S8480C1", // class name
  bases_S8480C1, 1,
  &(vtc_S8480C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(488,372), // object size
  NSPAIRA(_ZTI7S8480C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8480C1),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3502C7  {
  virtual void  v1(); // _ZN7S3502C72v1Ev
  ~S3502C7(); // tgen
  S3502C7(); // tgen
};
//SIG(-1 S3502C7) C1{ v1}


void  S3502C7 ::v1(){vfunc_called(this, "_ZN7S3502C72v1Ev");}
S3502C7 ::~S3502C7(){ note_dtor("S3502C7", this);} // tgen
S3502C7 ::S3502C7(){ note_ctor("S3502C7", this);} // tgen

static void Test_S3502C7()
{
  extern Class_Descriptor cd_S3502C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3502C7, buf);
    S3502C7 *dp, &lv = *(dp=new (buf) S3502C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3502C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3502C7)");
    test_class_info(&lv, &cd_S3502C7);
    dp->~S3502C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3502C7(Test_S3502C7, "S3502C7", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3502C7C1Ev();
extern void _ZN7S3502C7D1Ev();
Name_Map name_map_S3502C7[] = {
  NSPAIR(_ZN7S3502C7C1Ev),
  NSPAIR(_ZN7S3502C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3502C7[];
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY vtc_S3502C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3502C7[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern VTBL_ENTRY _ZTI7S3502C7[];
extern  VTBL_ENTRY _ZTV7S3502C7[];
Class_Descriptor cd_S3502C7 = {  "S3502C7", // class name
  0,0,//no base classes
  &(vtc_S3502C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3502C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3502C7),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  S3502C6  : virtual S2121C38 , S3502C7 , virtual S2121C28 {
  ~S3502C6(); // tgen
  S3502C6(); // tgen
};
//SIG(-1 S3502C6) C1{ VBC2{ m} BC3{ v1} VBC4{ m}}


S3502C6 ::~S3502C6(){ note_dtor("S3502C6", this);} // tgen
S3502C6 ::S3502C6(){ note_ctor("S3502C6", this);} // tgen

static void Test_S3502C6()
{
  extern Class_Descriptor cd_S3502C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3502C6, buf);
    S3502C6 *dp, &lv = *(dp=new (buf) S3502C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3502C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3502C6)");
    check_base_class_offset(lv, (S2121C38*), 0, "S3502C6");
    check_base_class_offset(lv, (S3502C7*), 0, "S3502C6");
    check_base_class_offset(lv, (S2121C28*), 0, "S3502C6");
    test_class_info(&lv, &cd_S3502C6);
    dp->~S3502C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3502C6(Test_S3502C6, "S3502C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3502C6C1Ev();
extern void _ZN7S3502C6D1Ev();
Name_Map name_map_S3502C6[] = {
  NSPAIR(_ZN7S3502C6C1Ev),
  NSPAIR(_ZN7S3502C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S3502C7;
extern VTBL_ENTRY _ZTI7S3502C7[];
extern  VTBL_ENTRY _ZTV7S3502C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
static Base_Class bases_S3502C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S3502C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S3502C6[];
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY vtc_S3502C6[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3502C6[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern VTBL_ENTRY _ZTV7S3502C6[];
static  VTT_ENTRY vtt_S3502C6[] = {
  {&(_ZTV7S3502C6[4]),  4,5},
};
extern VTBL_ENTRY _ZTI7S3502C6[];
extern  VTBL_ENTRY _ZTV7S3502C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3502C6[];
Class_Descriptor cd_S3502C6 = {  "S3502C6", // class name
  bases_S3502C6, 3,
  &(vtc_S3502C6[0]), // expected_vtbl_contents
  &(vtt_S3502C6[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3502C6),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S3502C6),5, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3502C6),1, //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  S3502C5  : S3502C6 , S3502C7 {
  ~S3502C5(); // tgen
  S3502C5(); // tgen
};
//SIG(-1 S3502C5) C1{ BC2{ VBC3{ m} BC4{ v1} VBC5{ m}} BC4}


S3502C5 ::~S3502C5(){ note_dtor("S3502C5", this);} // tgen
S3502C5 ::S3502C5(){ note_ctor("S3502C5", this);} // tgen

static void Test_S3502C5()
{
  extern Class_Descriptor cd_S3502C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3502C5, buf);
    S3502C5 *dp, &lv = *(dp=new (buf) S3502C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3502C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3502C5)");
    check_base_class_offset(lv, (S2121C38*)(S3502C6*), 0, "S3502C5");
    check_base_class_offset(lv, (S3502C7*)(S3502C6*), 0, "S3502C5");
    check_base_class_offset(lv, (S2121C28*)(S3502C6*), 0, "S3502C5");
    check_base_class_offset(lv, (S3502C6*), 0, "S3502C5");
    /*is_ambiguous_... S3502C5::S3502C7 */ AMB_check_base_class_offset(lv, (S3502C7*), ABISELECT(8,4), "S3502C5");
    test_class_info(&lv, &cd_S3502C5);
    dp->~S3502C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3502C5(Test_S3502C5, "S3502C5", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3502C5C1Ev();
extern void _ZN7S3502C5D1Ev();
Name_Map name_map_S3502C5[] = {
  NSPAIR(_ZN7S3502C5C1Ev),
  NSPAIR(_ZN7S3502C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S3502C7;
extern VTBL_ENTRY _ZTI7S3502C7[];
extern  VTBL_ENTRY _ZTV7S3502C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S3502C6;
extern VTBL_ENTRY _ZTI7S3502C6[];
extern  VTBL_ENTRY _ZTV7S3502C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3502C6[];
extern Class_Descriptor cd_S3502C7;
extern VTBL_ENTRY _ZTI7S3502C7[];
extern  VTBL_ENTRY _ZTV7S3502C7[];
static Base_Class bases_S3502C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3502C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3502C6,    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_S3502C7,    ABISELECT(8,4), //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
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3502C5[];
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY vtc_S3502C5[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3502C5[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3502C5[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern VTBL_ENTRY _ZTV7S3502C5[];
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C6__7S3502C5[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3502C6[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
static  VTT_ENTRY vtt_S3502C5[] = {
  {&(_ZTV7S3502C5[4]),  4,8},
  {&(_tg__ZTV7S3502C6__7S3502C5[4]),  4,5},
};
extern VTBL_ENTRY _ZTI7S3502C5[];
extern  VTBL_ENTRY _ZTV7S3502C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3502C5[];
Class_Descriptor cd_S3502C5 = {  "S3502C5", // class name
  bases_S3502C5, 5,
  &(vtc_S3502C5[0]), // expected_vtbl_contents
  &(vtt_S3502C5[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3502C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3502C5),8, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3502C5),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  S3502C9  : S2121C38 , S3502C6 {
  virtual void  v2(); // _ZN7S3502C92v2Ev
  ~S3502C9(); // tgen
  S3502C9(); // tgen
};
//SIG(-1 S3502C9) C1{ BC2{ m} BC3{ VBC2 BC4{ v2} VBC5{ m}} v1}


void  S3502C9 ::v2(){vfunc_called(this, "_ZN7S3502C92v2Ev");}
S3502C9 ::~S3502C9(){ note_dtor("S3502C9", this);} // tgen
S3502C9 ::S3502C9(){ note_ctor("S3502C9", this);} // tgen

static void Test_S3502C9()
{
  extern Class_Descriptor cd_S3502C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3502C9, buf);
    S3502C9 *dp, &lv = *(dp=new (buf) S3502C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3502C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3502C9)");
    /*is_ambiguous_... S3502C9::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*), 0, "S3502C9");
    check_base_class_offset(lv, (S2121C38*)(S3502C6*), ABISELECT(8,4), "S3502C9");
    check_base_class_offset(lv, (S3502C7*)(S3502C6*), 0, "S3502C9");
    check_base_class_offset(lv, (S2121C28*)(S3502C6*), 0, "S3502C9");
    check_base_class_offset(lv, (S3502C6*), 0, "S3502C9");
    test_class_info(&lv, &cd_S3502C9);
    dp->~S3502C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3502C9(Test_S3502C9, "S3502C9", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3502C9C1Ev();
extern void _ZN7S3502C9D1Ev();
Name_Map name_map_S3502C9[] = {
  NSPAIR(_ZN7S3502C9C1Ev),
  NSPAIR(_ZN7S3502C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S3502C7;
extern VTBL_ENTRY _ZTI7S3502C7[];
extern  VTBL_ENTRY _ZTV7S3502C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S3502C6;
extern VTBL_ENTRY _ZTI7S3502C6[];
extern  VTBL_ENTRY _ZTV7S3502C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3502C6[];
static Base_Class bases_S3502C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2121C38,    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, 1},
  {&cd_S3502C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3502C6,    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 _ZTI7S3502C9[];
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C92v2Ev();
static  VTBL_ENTRY vtc_S3502C9[] = {
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3502C9[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3502C92v2Ev,
};
extern VTBL_ENTRY _ZTV7S3502C9[];
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C6__7S3502C9[] = {
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3502C6[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
static  VTT_ENTRY vtt_S3502C9[] = {
  {&(_ZTV7S3502C9[4]),  4,6},
  {&(_tg__ZTV7S3502C6__7S3502C9[4]),  4,5},
};
extern VTBL_ENTRY _ZTI7S3502C9[];
extern  VTBL_ENTRY _ZTV7S3502C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3502C9[];
Class_Descriptor cd_S3502C9 = {  "S3502C9", // class name
  bases_S3502C9, 5,
  &(vtc_S3502C9[0]), // expected_vtbl_contents
  &(vtt_S3502C9[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3502C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3502C9),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3502C9),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  S3502C10  : S3502C7 , S2121C28 , virtual S2121C38 {
  ~S3502C10(); // tgen
  S3502C10(); // tgen
};
//SIG(-1 S3502C10) C1{ BC2{ v1} BC3{ m} VBC4{ m}}


S3502C10 ::~S3502C10(){ note_dtor("S3502C10", this);} // tgen
S3502C10 ::S3502C10(){ note_ctor("S3502C10", this);} // tgen

static void Test_S3502C10()
{
  extern Class_Descriptor cd_S3502C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3502C10, buf);
    S3502C10 *dp, &lv = *(dp=new (buf) S3502C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3502C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3502C10)");
    check_base_class_offset(lv, (S3502C7*), 0, "S3502C10");
    check_base_class_offset(lv, (S2121C28*), 0, "S3502C10");
    check_base_class_offset(lv, (S2121C38*), 0, "S3502C10");
    test_class_info(&lv, &cd_S3502C10);
    dp->~S3502C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3502C10(Test_S3502C10, "S3502C10", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S3502C10C1Ev();
extern void _ZN8S3502C10D1Ev();
Name_Map name_map_S3502C10[] = {
  NSPAIR(_ZN8S3502C10C1Ev),
  NSPAIR(_ZN8S3502C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3502C7;
extern VTBL_ENTRY _ZTI7S3502C7[];
extern  VTBL_ENTRY _ZTV7S3502C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
static Base_Class bases_S3502C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3502C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S3502C10[];
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY vtc_S3502C10[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S3502C10[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern VTBL_ENTRY _ZTV8S3502C10[];
static  VTT_ENTRY vtt_S3502C10[] = {
  {&(_ZTV8S3502C10[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S3502C10[];
extern  VTBL_ENTRY _ZTV8S3502C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3502C10[];
Class_Descriptor cd_S3502C10 = {  "S3502C10", // class name
  bases_S3502C10, 3,
  &(vtc_S3502C10[0]), // expected_vtbl_contents
  &(vtt_S3502C10[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S3502C10),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S3502C10),4, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3502C10),1, //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  S3502C3  : virtual S2121C38 , virtual S3502C5 , virtual S3502C9 , virtual S3502C10 , S3502C7 {
  ~S3502C3(); // tgen
  S3502C3(); // tgen
};
//SIG(-1 S3502C3) C1{ VBC2{ m} VBC3{ BC4{ VBC2 BC5{ v1} VBC6{ m}} BC5} VBC7{ BC2 BC4 v2} VBC8{ BC5 BC6 VBC2} BC5}


S3502C3 ::~S3502C3(){ note_dtor("S3502C3", this);} // tgen
S3502C3 ::S3502C3(){ note_ctor("S3502C3", this);} // tgen

static void Test_S3502C3()
{
  extern Class_Descriptor cd_S3502C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S3502C3, buf);
    S3502C3 *dp, &lv = *(dp=new (buf) S3502C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S3502C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3502C3)");
    /*is_ambiguous_... S3502C3::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*), 0, "S3502C3");
    check_base_class_offset(lv, (S2121C38*)(S3502C6*)(S3502C5*), 0, "S3502C3");
    check_base_class_offset(lv, (S2121C38*)(S3502C6*)(S3502C9*), 0, "S3502C3");
    check_base_class_offset(lv, (S2121C38*)(S3502C10*), 0, "S3502C3");
    check_base_class_offset(lv, (S3502C7*)(S3502C6*)(S3502C5*), ABISELECT(8,4), "S3502C3");
    check_base_class_offset(lv, (S2121C28*)(S3502C6*)(S3502C5*), 0, "S3502C3");
    check_base_class_offset(lv, (S2121C28*)(S3502C6*)(S3502C9*), 0, "S3502C3");
    check_base_class_offset(lv, (S3502C6*)(S3502C5*), ABISELECT(8,4), "S3502C3");
    /*is_ambiguous_... S3502C5::S3502C7 */ AMB_check_base_class_offset(lv, (S3502C7*)(S3502C5*), ABISELECT(16,8), "S3502C3");
    check_base_class_offset(lv, (S3502C5*), ABISELECT(8,4), "S3502C3");
    /*is_ambiguous_... S3502C9::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S3502C9*), ABISELECT(24,12), "S3502C3");
    check_base_class_offset(lv, (S3502C7*)(S3502C6*)(S3502C9*), ABISELECT(24,12), "S3502C3");
    check_base_class_offset(lv, (S3502C6*)(S3502C9*), ABISELECT(24,12), "S3502C3");
    check_base_class_offset(lv, (S3502C9*), ABISELECT(24,12), "S3502C3");
    check_base_class_offset(lv, (S3502C7*)(S3502C10*), ABISELECT(32,16), "S3502C3");
    check_base_class_offset(lv, (S2121C28*)(S3502C10*), ABISELECT(32,16), "S3502C3");
    check_base_class_offset(lv, (S3502C10*), ABISELECT(32,16), "S3502C3");
    /*is_ambiguous_... S3502C3::S3502C7 */ AMB_check_base_class_offset(lv, (S3502C7*), 0, "S3502C3");
    test_class_info(&lv, &cd_S3502C3);
    dp->~S3502C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3502C3(Test_S3502C3, "S3502C3", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S3502C3C1Ev();
extern void _ZN7S3502C3D1Ev();
Name_Map name_map_S3502C3[] = {
  NSPAIR(_ZN7S3502C3C1Ev),
  NSPAIR(_ZN7S3502C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S3502C7;
extern VTBL_ENTRY _ZTI7S3502C7[];
extern  VTBL_ENTRY _ZTV7S3502C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S3502C6;
extern VTBL_ENTRY _ZTI7S3502C6[];
extern  VTBL_ENTRY _ZTV7S3502C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3502C6[];
extern Class_Descriptor cd_S3502C7;
extern VTBL_ENTRY _ZTI7S3502C7[];
extern  VTBL_ENTRY _ZTV7S3502C7[];
extern Class_Descriptor cd_S3502C5;
extern VTBL_ENTRY _ZTI7S3502C5[];
extern  VTBL_ENTRY _ZTV7S3502C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3502C5[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S3502C7;
extern VTBL_ENTRY _ZTI7S3502C7[];
extern  VTBL_ENTRY _ZTV7S3502C7[];
extern Class_Descriptor cd_S3502C6;
extern VTBL_ENTRY _ZTI7S3502C6[];
extern  VTBL_ENTRY _ZTV7S3502C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3502C6[];
extern Class_Descriptor cd_S3502C9;
extern VTBL_ENTRY _ZTI7S3502C9[];
extern  VTBL_ENTRY _ZTV7S3502C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3502C9[];
extern Class_Descriptor cd_S3502C7;
extern VTBL_ENTRY _ZTI7S3502C7[];
extern  VTBL_ENTRY _ZTV7S3502C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S3502C10;
extern VTBL_ENTRY _ZTI8S3502C10[];
extern  VTBL_ENTRY _ZTV8S3502C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3502C10[];
extern Class_Descriptor cd_S3502C7;
extern VTBL_ENTRY _ZTI7S3502C7[];
extern  VTBL_ENTRY _ZTV7S3502C7[];
static Base_Class bases_S3502C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S3502C7,    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
    3, //immediately_derived
  0, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3502C6,    ABISELECT(8,4), //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
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3502C7,    ABISELECT(16,8), //bcp->offset
    14, //bcp->virtual_function_table_offset
    2, //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
    5, //immediately_derived
  0, 0},
  {&cd_S3502C5,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2121C38,    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
    9, //immediately_derived
  0, 0},
  {&cd_S3502C7,    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
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3502C6,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3502C9,    ABISELECT(24,12), //bcp->offset
    17, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3502C7,    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
    8, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2121C28,    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
    12, //immediately_derived
  0, 0},
  {&cd_S3502C10,    ABISELECT(32,16), //bcp->offset
    25, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3502C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3502C3[];
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C92v2Ev();
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY vtc_S3502C3[] = {
  ABISELECT(32,16),
  ABISELECT(24,12),
  0,
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3502C3[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3502C3[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3502C3[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S3502C3[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3502C92v2Ev,
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3502C3[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern VTBL_ENTRY _ZTV7S3502C3[];
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C5__7S3502C3[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3502C5[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C67S3502C5__7S3502C3[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3502C6[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C9__7S3502C3[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S3502C9[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3502C92v2Ev,
};
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C67S3502C9__A1__7S3502C3[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S3502C6[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S3502C10__7S3502C3[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S3502C10[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
static  VTT_ENTRY vtt_S3502C3[] = {
  {&(_ZTV7S3502C3[7]),  7,30},
  {&(_ZTV7S3502C3[13]),  13,30},
  {&(_ZTV7S3502C3[16]),  16,30},
  {&(_ZTV7S3502C3[23]),  23,30},
  {&(_ZTV7S3502C3[29]),  29,30},
  {&(_tg__ZTV7S3502C5__7S3502C3[4]),  4,5},
  {&(_tg__ZTV7S3502C67S3502C5__7S3502C3[4]),  4,5},
  {&(_tg__ZTV7S3502C9__7S3502C3[4]),  4,6},
  {&(_tg__ZTV7S3502C67S3502C9__A1__7S3502C3[4]),  4,5},
  {&(_tg__ZTV8S3502C10__7S3502C3[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S3502C3[];
extern  VTBL_ENTRY _ZTV7S3502C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3502C3[];
Class_Descriptor cd_S3502C3 = {  "S3502C3", // class name
  bases_S3502C3, 14,
  &(vtc_S3502C3[0]), // expected_vtbl_contents
  &(vtt_S3502C3[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S3502C3),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S3502C3),30, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3502C3),10, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3502C2  : S3502C3 , virtual S2121C24 , S3502C6 , S2121C28 , S3502C10 {
  virtual  ~S3502C2(); // _ZN7S3502C2D2Ev
  S3502C2(); // tgen
};
//SIG(-1 S3502C2) C1{ BC2{ VBC3{ m} VBC4{ BC5{ VBC3 BC6{ v1} VBC7{ m}} BC6} VBC8{ BC3 BC5 v2} VBC9{ BC6 BC7 VBC3} BC6} VBC10{ m} BC5 BC7 BC9 vd}


 S3502C2 ::~S3502C2(){ note_dtor("S3502C2", this);}
S3502C2 ::S3502C2(){ note_ctor("S3502C2", this);} // tgen

static void Test_S3502C2()
{
  extern Class_Descriptor cd_S3502C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S3502C2, buf);
    S3502C2 *dp, &lv = *(dp=new (buf) S3502C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S3502C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3502C2)");
    /*is_ambiguous_... S3502C3::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S3502C3*), 0, "S3502C2");
    check_base_class_offset(lv, (S2121C38*)(S3502C6*)(S3502C5*), 0, "S3502C2");
    check_base_class_offset(lv, (S2121C38*)(S3502C6*)(S3502C9*), 0, "S3502C2");
    /*is_ambiguous_... S3502C2::S3502C10 */ AMB_check_base_class_offset(lv, (S2121C38*)(S3502C10*), 0, "S3502C2");
    /*is_ambiguous_... S3502C2::S3502C6 */ AMB_check_base_class_offset(lv, (S2121C38*)(S3502C6*), 0, "S3502C2");
    /*is_ambiguous_... S3502C2::S3502C10 */ AMB_check_base_class_offset(lv, (S2121C38*)(S3502C10*), 0, "S3502C2");
    check_base_class_offset(lv, (S3502C7*)(S3502C6*)(S3502C5*), ABISELECT(24,12), "S3502C2");
    check_base_class_offset(lv, (S2121C28*)(S3502C6*)(S3502C5*), ABISELECT(40,20), "S3502C2");
    check_base_class_offset(lv, (S2121C28*)(S3502C6*)(S3502C9*), ABISELECT(40,20), "S3502C2");
    /*is_ambiguous_... S3502C2::S3502C6 */ AMB_check_base_class_offset(lv, (S2121C28*)(S3502C6*), ABISELECT(40,20), "S3502C2");
    check_base_class_offset(lv, (S3502C6*)(S3502C5*), ABISELECT(24,12), "S3502C2");
    /*is_ambiguous_... S3502C5::S3502C7 */ AMB_check_base_class_offset(lv, (S3502C7*)(S3502C5*), ABISELECT(32,16), "S3502C2");
    check_base_class_offset(lv, (S3502C5*)(S3502C3*), ABISELECT(24,12), "S3502C2");
    /*is_ambiguous_... S3502C9::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S3502C9*), ABISELECT(40,20), "S3502C2");
    check_base_class_offset(lv, (S3502C7*)(S3502C6*)(S3502C9*), ABISELECT(40,20), "S3502C2");
    check_base_class_offset(lv, (S3502C6*)(S3502C9*), ABISELECT(40,20), "S3502C2");
    check_base_class_offset(lv, (S3502C9*)(S3502C3*), ABISELECT(40,20), "S3502C2");
    /*is_ambiguous_... S3502C2::S3502C10 */ AMB_check_base_class_offset(lv, (S3502C7*)(S3502C10*), ABISELECT(48,24), "S3502C2");
    /*is_ambiguous_... S3502C2::S3502C10 */ AMB_check_base_class_offset(lv, (S2121C28*)(S3502C10*), ABISELECT(48,24), "S3502C2");
    check_base_class_offset(lv, (S3502C10*)(S3502C3*), ABISELECT(48,24), "S3502C2");
    /*is_ambiguous_... S3502C3::S3502C7 */ AMB_check_base_class_offset(lv, (S3502C7*)(S3502C3*), 0, "S3502C2");
    check_base_class_offset(lv, (S3502C3*), 0, "S3502C2");
    check_base_class_offset(lv, (S2121C24*), 0, "S3502C2");
    /*is_ambiguous_... S3502C2::S3502C6 */ AMB_check_base_class_offset(lv, (S3502C7*)(S3502C6*), ABISELECT(8,4), "S3502C2");
    /*is_ambiguous_... S3502C2::S3502C6 */ AMB_check_base_class_offset(lv, (S3502C6*), ABISELECT(8,4), "S3502C2");
    /*is_ambiguous_... S3502C2::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*), 0, "S3502C2");
    /*is_ambiguous_... S3502C2::S3502C10 */ AMB_check_base_class_offset(lv, (S3502C7*)(S3502C10*), ABISELECT(16,8), "S3502C2");
    /*is_ambiguous_... S3502C2::S3502C10 */ AMB_check_base_class_offset(lv, (S2121C28*)(S3502C10*), ABISELECT(16,8), "S3502C2");
    /*is_ambiguous_... S3502C2::S3502C10 */ AMB_check_base_class_offset(lv, (S3502C10*), ABISELECT(16,8), "S3502C2");
    test_class_info(&lv, &cd_S3502C2);
    dp->~S3502C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3502C2(Test_S3502C2, "S3502C2", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN7S3502C2C1Ev();
extern void _ZN7S3502C2D2Ev();
Name_Map name_map_S3502C2[] = {
  NSPAIR(_ZN7S3502C2C1Ev),
  NSPAIR(_ZN7S3502C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S3502C7;
extern VTBL_ENTRY _ZTI7S3502C7[];
extern  VTBL_ENTRY _ZTV7S3502C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S3502C6;
extern VTBL_ENTRY _ZTI7S3502C6[];
extern  VTBL_ENTRY _ZTV7S3502C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3502C6[];
extern Class_Descriptor cd_S3502C7;
extern VTBL_ENTRY _ZTI7S3502C7[];
extern  VTBL_ENTRY _ZTV7S3502C7[];
extern Class_Descriptor cd_S3502C5;
extern VTBL_ENTRY _ZTI7S3502C5[];
extern  VTBL_ENTRY _ZTV7S3502C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3502C5[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S3502C7;
extern VTBL_ENTRY _ZTI7S3502C7[];
extern  VTBL_ENTRY _ZTV7S3502C7[];
extern Class_Descriptor cd_S3502C6;
extern VTBL_ENTRY _ZTI7S3502C6[];
extern  VTBL_ENTRY _ZTV7S3502C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3502C6[];
extern Class_Descriptor cd_S3502C9;
extern VTBL_ENTRY _ZTI7S3502C9[];
extern  VTBL_ENTRY _ZTV7S3502C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3502C9[];
extern Class_Descriptor cd_S3502C7;
extern VTBL_ENTRY _ZTI7S3502C7[];
extern  VTBL_ENTRY _ZTV7S3502C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S3502C10;
extern VTBL_ENTRY _ZTI8S3502C10[];
extern  VTBL_ENTRY _ZTV8S3502C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3502C10[];
extern Class_Descriptor cd_S3502C7;
extern VTBL_ENTRY _ZTI7S3502C7[];
extern  VTBL_ENTRY _ZTV7S3502C7[];
extern Class_Descriptor cd_S3502C3;
extern VTBL_ENTRY _ZTI7S3502C3[];
extern  VTBL_ENTRY _ZTV7S3502C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3502C3[];
extern Class_Descriptor cd_S2121C24;
extern VTBL_ENTRY _ZTI8S2121C24[];
extern Class_Descriptor cd_S3502C7;
extern VTBL_ENTRY _ZTI7S3502C7[];
extern  VTBL_ENTRY _ZTV7S3502C7[];
extern Class_Descriptor cd_S3502C6;
extern VTBL_ENTRY _ZTI7S3502C6[];
extern  VTBL_ENTRY _ZTV7S3502C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3502C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S3502C7;
extern VTBL_ENTRY _ZTI7S3502C7[];
extern  VTBL_ENTRY _ZTV7S3502C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S3502C10;
extern VTBL_ENTRY _ZTI8S3502C10[];
extern  VTBL_ENTRY _ZTV8S3502C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3502C10[];
static Base_Class bases_S3502C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3502C7,    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
    3, //immediately_derived
  0, 0},
  {&cd_S2121C28,    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
    3, //immediately_derived
  0, 1},
  {&cd_S3502C6,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3502C7,    ABISELECT(32,16), //bcp->offset
    26, //bcp->virtual_function_table_offset
    2, //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
    5, //immediately_derived
  0, 0},
  {&cd_S3502C5,    ABISELECT(24,12), //bcp->offset
    20, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S2121C38,    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
    9, //immediately_derived
  0, 0},
  {&cd_S3502C7,    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
    8, //immediately_derived
  0, 0},
  {&cd_S3502C6,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3502C9,    ABISELECT(40,20), //bcp->offset
    29, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S3502C7,    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
    8, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2121C28,    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
    12, //immediately_derived
  0, 0},
  {&cd_S3502C10,    ABISELECT(48,24), //bcp->offset
    37, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S3502C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S3502C3,    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
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S3502C7,    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
    12, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S3502C6,    ABISELECT(8,4), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3502C7,    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
    14, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S2121C28,    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
    21, //immediately_derived
  0, 0},
  {&cd_S3502C10,    ABISELECT(16,8), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3502C2[];
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C2D1Ev();
extern void _ZN7S3502C2D0Ev();
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C92v2Ev();
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY vtc_S3502C2[] = {
  0,
  ABISELECT(48,24),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(24,12),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3502C2[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3502C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3502C2D0Ev,
  ABISELECT(32,16),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3502C2[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3502C2[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  0,
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S3502C2[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3502C2[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  0,
  0,
  0,
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S3502C2[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3502C92v2Ev,
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S3502C2[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern VTBL_ENTRY _ZTV7S3502C2[];
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C3__7S3502C2[] = {
  ABISELECT(48,24),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(24,12),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3502C3[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C5__7S3502C3__7S3502C2[] = {
  0,
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S3502C3[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C77S3502C5__A1__7S3502C3__7S3502C2[] = {
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3502C3[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C9__7S3502C3__7S3502C2[] = {
  0,
  0,
  0,
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S3502C3[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3502C92v2Ev,
};
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S3502C10__7S3502C3__7S3502C2[] = {
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S3502C3[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C6__A2__7S3502C2[] = {
  ABISELECT(32,16),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3502C6[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S3502C10__A__7S3502C2[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S3502C10[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C5__7S3502C2[] = {
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S3502C5[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C67S3502C5__7S3502C2[] = {
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S3502C6[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C9__7S3502C2[] = {
  0,
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI7S3502C9[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3502C92v2Ev,
};
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C67S3502C9__A1__7S3502C2[] = {
  0,
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI7S3502C6[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S3502C10__7S3502C2[] = {
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S3502C10[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
static  VTT_ENTRY vtt_S3502C2[] = {
  {&(_ZTV7S3502C2[8]),  8,42},
  {&(_tg__ZTV7S3502C3__7S3502C2[7]),  7,8},
  {&(_tg__ZTV7S3502C5__7S3502C3__7S3502C2[5]),  5,6},
  {&(_tg__ZTV7S3502C77S3502C5__A1__7S3502C3__7S3502C2[2]),  2,3},
  {&(_tg__ZTV7S3502C9__7S3502C3__7S3502C2[6]),  6,8},
  {&(_tg__ZTV8S3502C10__7S3502C3__7S3502C2[4]),  4,5},
  {&(_tg__ZTV7S3502C6__A2__7S3502C2[4]),  4,5},
  {&(_tg__ZTV8S3502C10__A__7S3502C2[3]),  3,4},
  {&(_ZTV7S3502C2[25]),  25,42},
  {&(_ZTV7S3502C2[28]),  28,42},
  {&(_ZTV7S3502C2[35]),  35,42},
  {&(_ZTV7S3502C2[41]),  41,42},
  {&(_ZTV7S3502C2[15]),  15,42},
  {&(_ZTV7S3502C2[19]),  19,42},
  {&(_tg__ZTV7S3502C5__7S3502C2[4]),  4,5},
  {&(_tg__ZTV7S3502C67S3502C5__7S3502C2[4]),  4,5},
  {&(_tg__ZTV7S3502C9__7S3502C2[4]),  4,6},
  {&(_tg__ZTV7S3502C67S3502C9__A1__7S3502C2[4]),  4,5},
  {&(_tg__ZTV8S3502C10__7S3502C2[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S3502C2[];
extern  VTBL_ENTRY _ZTV7S3502C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3502C2[];
Class_Descriptor cd_S3502C2 = {  "S3502C2", // class name
  bases_S3502C2, 22,
  &(vtc_S3502C2[0]), // expected_vtbl_contents
  &(vtt_S3502C2[0]), // expected_vtt_contents
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI7S3502C2),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S3502C2),42, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3502C2),19, //virtual table table var
  15, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3502C13  : virtual S3502C9 {
  int s3502c13f0;
  ~S3502C13(); // tgen
  S3502C13(); // tgen
};
//SIG(-1 S3502C13) C1{ VBC2{ BC3{ m} BC4{ VBC3 BC5{ v1} VBC6{ m}} v2} Fi}


S3502C13 ::~S3502C13(){ note_dtor("S3502C13", this);} // tgen
S3502C13 ::S3502C13(){ note_ctor("S3502C13", this);} // tgen

static void Test_S3502C13()
{
  extern Class_Descriptor cd_S3502C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S3502C13, buf);
    S3502C13 *dp, &lv = *(dp=new (buf) S3502C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S3502C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3502C13)");
    /*is_ambiguous_... S3502C9::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S3502C9*), 0, "S3502C13");
    check_base_class_offset(lv, (S2121C38*)(S3502C6*)(S3502C9*), ABISELECT(12,8), "S3502C13");
    check_base_class_offset(lv, (S3502C7*)(S3502C6*)(S3502C9*), 0, "S3502C13");
    check_base_class_offset(lv, (S2121C28*)(S3502C6*)(S3502C9*), 0, "S3502C13");
    check_base_class_offset(lv, (S3502C6*)(S3502C9*), 0, "S3502C13");
    check_base_class_offset(lv, (S3502C9*), 0, "S3502C13");
    check_field_offset(lv, s3502c13f0, ABISELECT(8,4), "S3502C13.s3502c13f0");
    test_class_info(&lv, &cd_S3502C13);
    dp->~S3502C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3502C13(Test_S3502C13, "S3502C13", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S3502C13C1Ev();
extern void _ZN8S3502C13D1Ev();
Name_Map name_map_S3502C13[] = {
  NSPAIR(_ZN8S3502C13C1Ev),
  NSPAIR(_ZN8S3502C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S3502C7;
extern VTBL_ENTRY _ZTI7S3502C7[];
extern  VTBL_ENTRY _ZTV7S3502C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S3502C6;
extern VTBL_ENTRY _ZTI7S3502C6[];
extern  VTBL_ENTRY _ZTV7S3502C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3502C6[];
extern Class_Descriptor cd_S3502C9;
extern VTBL_ENTRY _ZTI7S3502C9[];
extern  VTBL_ENTRY _ZTV7S3502C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3502C9[];
static Base_Class bases_S3502C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2121C38,    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
    4, //immediately_derived
  0, 1},
  {&cd_S3502C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3502C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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
    5, //immediately_derived
  0, 0},
  {&cd_S3502C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //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 _ZTI8S3502C13[];
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C92v2Ev();
static  VTBL_ENTRY vtc_S3502C13[] = {
  0,
  0,
  0,
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S3502C13[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3502C92v2Ev,
};
extern VTBL_ENTRY _ZTV8S3502C13[];
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C9__8S3502C13[] = {
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S3502C9[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3502C92v2Ev,
};
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C67S3502C9__8S3502C13[] = {
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S3502C6[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
static  VTT_ENTRY vtt_S3502C13[] = {
  {&(_ZTV8S3502C13[7]),  7,9},
  {&(_ZTV8S3502C13[7]),  7,9},
  {&(_tg__ZTV7S3502C9__8S3502C13[4]),  4,6},
  {&(_tg__ZTV7S3502C67S3502C9__8S3502C13[4]),  4,5},
};
extern VTBL_ENTRY _ZTI8S3502C13[];
extern  VTBL_ENTRY _ZTV8S3502C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3502C13[];
Class_Descriptor cd_S3502C13 = {  "S3502C13", // class name
  bases_S3502C13, 6,
  &(vtc_S3502C13[0]), // expected_vtbl_contents
  &(vtt_S3502C13[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S3502C13),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S3502C13),9, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3502C13),4, //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  S3502C12  : S3502C13 , virtual S3502C7 {
  __tsu64 s3502c12f0:1;
  ~S3502C12(); // tgen
  S3502C12(); // tgen
};
//SIG(-1 S3502C12) C1{ BC2{ VBC3{ BC4{ m} BC5{ VBC4 BC6{ v1} VBC7{ m}} v2} Fi} VBC6 FL:1}


S3502C12 ::~S3502C12(){ note_dtor("S3502C12", this);} // tgen
S3502C12 ::S3502C12(){ note_ctor("S3502C12", this);} // tgen

static void Test_S3502C12()
{
  extern Class_Descriptor cd_S3502C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S3502C12, buf);
    S3502C12 *dp, &lv = *(dp=new (buf) S3502C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S3502C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3502C12)");
    /*is_ambiguous_... S3502C9::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S3502C9*), 0, "S3502C12");
    check_base_class_offset(lv, (S2121C38*)(S3502C6*)(S3502C9*), ABISELECT(13,9), "S3502C12");
    check_base_class_offset(lv, (S3502C7*)(S3502C6*)(S3502C9*), 0, "S3502C12");
    check_base_class_offset(lv, (S2121C28*)(S3502C6*)(S3502C9*), 0, "S3502C12");
    check_base_class_offset(lv, (S3502C6*)(S3502C9*), 0, "S3502C12");
    check_base_class_offset(lv, (S3502C9*)(S3502C13*), 0, "S3502C12");
    check_base_class_offset(lv, (S3502C13*), 0, "S3502C12");
    /*is_ambiguous_... S3502C12::S3502C7 */ AMB_check_base_class_offset(lv, (S3502C7*), ABISELECT(16,12), "S3502C12");
    set_bf_and_test(lv, s3502c12f0, ABISELECT(12,8), 0, 1, 1, "S3502C12");
    test_class_info(&lv, &cd_S3502C12);
    dp->~S3502C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3502C12(Test_S3502C12, "S3502C12", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S3502C12C1Ev();
extern void _ZN8S3502C12D1Ev();
Name_Map name_map_S3502C12[] = {
  NSPAIR(_ZN8S3502C12C1Ev),
  NSPAIR(_ZN8S3502C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S3502C7;
extern VTBL_ENTRY _ZTI7S3502C7[];
extern  VTBL_ENTRY _ZTV7S3502C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S3502C6;
extern VTBL_ENTRY _ZTI7S3502C6[];
extern  VTBL_ENTRY _ZTV7S3502C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3502C6[];
extern Class_Descriptor cd_S3502C9;
extern VTBL_ENTRY _ZTI7S3502C9[];
extern  VTBL_ENTRY _ZTV7S3502C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3502C9[];
extern Class_Descriptor cd_S3502C13;
extern VTBL_ENTRY _ZTI8S3502C13[];
extern  VTBL_ENTRY _ZTV8S3502C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3502C13[];
extern Class_Descriptor cd_S3502C7;
extern VTBL_ENTRY _ZTI7S3502C7[];
extern  VTBL_ENTRY _ZTV7S3502C7[];
static Base_Class bases_S3502C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2121C38,    ABISELECT(13,9), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3502C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3502C6,    0, //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
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3502C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3502C13,    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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3502C7,    ABISELECT(16,12), //bcp->offset
    10, //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
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S3502C12[];
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C92v2Ev();
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY vtc_S3502C12[] = {
  ABISELECT(16,12),
  0,
  0,
  0,
  0,
  ABISELECT(13,9),
  0,
  (VTBL_ENTRY)&(_ZTI8S3502C12[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3502C92v2Ev,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S3502C12[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern VTBL_ENTRY _ZTV8S3502C12[];
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S3502C13__8S3502C12[] = {
  0,
  0,
  0,
  0,
  ABISELECT(13,9),
  0,
  (VTBL_ENTRY)&(_ZTI8S3502C13[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3502C92v2Ev,
};
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C9__8S3502C12[] = {
  0,
  ABISELECT(13,9),
  0,
  (VTBL_ENTRY)&(_ZTI7S3502C9[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3502C92v2Ev,
};
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C67S3502C9__8S3502C12[] = {
  0,
  ABISELECT(13,9),
  0,
  (VTBL_ENTRY)&(_ZTI7S3502C6[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
static  VTT_ENTRY vtt_S3502C12[] = {
  {&(_ZTV8S3502C12[8]),  8,14},
  {&(_tg__ZTV8S3502C13__8S3502C12[7]),  7,9},
  {&(_tg__ZTV8S3502C13__8S3502C12[7]),  7,9},
  {&(_ZTV8S3502C12[8]),  8,14},
  {&(_ZTV8S3502C12[13]),  13,14},
  {&(_tg__ZTV7S3502C9__8S3502C12[4]),  4,6},
  {&(_tg__ZTV7S3502C67S3502C9__8S3502C12[4]),  4,5},
};
extern VTBL_ENTRY _ZTI8S3502C12[];
extern  VTBL_ENTRY _ZTV8S3502C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3502C12[];
Class_Descriptor cd_S3502C12 = {  "S3502C12", // class name
  bases_S3502C12, 8,
  &(vtc_S3502C12[0]), // expected_vtbl_contents
  &(vtt_S3502C12[0]), // expected_vtt_contents
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S3502C12),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S3502C12),14, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3502C12),7, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3502C1  : S3502C2 , S3502C12 , virtual S3502C13 {
  ~S3502C1(); // tgen
  S3502C1(); // tgen
};
//SIG(1 S3502C1) C1{ BC2{ BC3{ VBC4{ m} VBC5{ BC6{ VBC4 BC7{ v1} VBC8{ m}} BC7} VBC9{ BC4 BC6 v2} VBC10{ BC7 BC8 VBC4} BC7} VBC11{ m} BC6 BC8 BC10 vd} BC12{ BC13{ VBC9 Fi} VBC7 FL:1} VBC13}


S3502C1 ::~S3502C1(){ note_dtor("S3502C1", this);} // tgen
S3502C1 ::S3502C1(){ note_ctor("S3502C1", this);} // tgen

static void Test_S3502C1()
{
  extern Class_Descriptor cd_S3502C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,14)];
    init_test(&cd_S3502C1, buf);
    S3502C1 *dp, &lv = *(dp=new (buf) S3502C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,52), "sizeof(S3502C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3502C1)");
    /*is_ambiguous_... S3502C3::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S3502C3*)(S3502C2*), 0, "S3502C1");
    check_base_class_offset(lv, (S2121C38*)(S3502C6*)(S3502C5*), 0, "S3502C1");
    check_base_class_offset(lv, (S2121C38*)(S3502C6*)(S3502C9*), 0, "S3502C1");
    /*is_ambiguous_... S3502C1::S3502C10 */ AMB_check_base_class_offset(lv, (S2121C38*)(S3502C10*), 0, "S3502C1");
    /*is_ambiguous_... S3502C2::S3502C6 */ AMB_check_base_class_offset(lv, (S2121C38*)(S3502C6*)(S3502C2*), 0, "S3502C1");
    /*is_ambiguous_... S3502C2::S3502C10 */ AMB_check_base_class_offset(lv, (S2121C38*)(S3502C10*)(S3502C2*), 0, "S3502C1");
    check_base_class_offset(lv, (S3502C7*)(S3502C6*)(S3502C5*), ABISELECT(40,24), "S3502C1");
    check_base_class_offset(lv, (S2121C28*)(S3502C6*)(S3502C5*), ABISELECT(56,32), "S3502C1");
    check_base_class_offset(lv, (S2121C28*)(S3502C6*)(S3502C9*), ABISELECT(56,32), "S3502C1");
    /*is_ambiguous_... S3502C2::S3502C6 */ AMB_check_base_class_offset(lv, (S2121C28*)(S3502C6*)(S3502C2*), ABISELECT(56,32), "S3502C1");
    check_base_class_offset(lv, (S3502C6*)(S3502C5*), ABISELECT(40,24), "S3502C1");
    /*is_ambiguous_... S3502C5::S3502C7 */ AMB_check_base_class_offset(lv, (S3502C7*)(S3502C5*), ABISELECT(48,28), "S3502C1");
    check_base_class_offset(lv, (S3502C5*)(S3502C3*)(S3502C2*), ABISELECT(40,24), "S3502C1");
    /*is_ambiguous_... S3502C9::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S3502C9*), ABISELECT(24,12), "S3502C1");
    check_base_class_offset(lv, (S3502C7*)(S3502C6*)(S3502C9*), ABISELECT(24,12), "S3502C1");
    check_base_class_offset(lv, (S3502C6*)(S3502C9*), ABISELECT(24,12), "S3502C1");
    check_base_class_offset(lv, (S3502C9*)(S3502C3*)(S3502C2*), ABISELECT(24,12), "S3502C1");
    check_base_class_offset(lv, (S3502C9*)(S3502C13*)(S3502C12*), ABISELECT(24,12), "S3502C1");
    /*is_ambiguous_... S3502C1::S3502C13 */ AMB_check_base_class_offset(lv, (S3502C9*)(S3502C13*), ABISELECT(24,12), "S3502C1");
    /*is_ambiguous_... S3502C1::S3502C10 */ AMB_check_base_class_offset(lv, (S3502C7*)(S3502C10*), ABISELECT(64,36), "S3502C1");
    /*is_ambiguous_... S3502C1::S3502C10 */ AMB_check_base_class_offset(lv, (S2121C28*)(S3502C10*), ABISELECT(64,36), "S3502C1");
    check_base_class_offset(lv, (S3502C10*)(S3502C3*)(S3502C2*), ABISELECT(64,36), "S3502C1");
    /*is_ambiguous_... S3502C3::S3502C7 */ AMB_check_base_class_offset(lv, (S3502C7*)(S3502C3*)(S3502C2*), 0, "S3502C1");
    check_base_class_offset(lv, (S3502C3*)(S3502C2*), 0, "S3502C1");
    check_base_class_offset(lv, (S2121C24*)(S3502C2*), 0, "S3502C1");
    /*is_ambiguous_... S3502C2::S3502C6 */ AMB_check_base_class_offset(lv, (S3502C7*)(S3502C6*)(S3502C2*), ABISELECT(8,4), "S3502C1");
    /*is_ambiguous_... S3502C2::S3502C6 */ AMB_check_base_class_offset(lv, (S3502C6*)(S3502C2*), ABISELECT(8,4), "S3502C1");
    /*is_ambiguous_... S3502C2::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*)(S3502C2*), 0, "S3502C1");
    /*is_ambiguous_... S3502C2::S3502C10 */ AMB_check_base_class_offset(lv, (S3502C7*)(S3502C10*)(S3502C2*), ABISELECT(16,8), "S3502C1");
    /*is_ambiguous_... S3502C2::S3502C10 */ AMB_check_base_class_offset(lv, (S2121C28*)(S3502C10*)(S3502C2*), ABISELECT(16,8), "S3502C1");
    /*is_ambiguous_... S3502C2::S3502C10 */ AMB_check_base_class_offset(lv, (S3502C10*)(S3502C2*), ABISELECT(16,8), "S3502C1");
    check_base_class_offset(lv, (S3502C2*), 0, "S3502C1");
    check_base_class_offset(lv, (S3502C13*)(S3502C12*), ABISELECT(24,12), "S3502C1");
    /*is_ambiguous_... S3502C12::S3502C7 */ AMB_check_base_class_offset(lv, (S3502C7*)(S3502C12*), ABISELECT(72,40), "S3502C1");
    check_base_class_offset(lv, (S3502C12*), ABISELECT(24,12), "S3502C1");
    /*is_ambiguous_... S3502C1::S3502C13 */ AMB_check_base_class_offset(lv, (S3502C13*), ABISELECT(80,44), "S3502C1");
    test_class_info(&lv, &cd_S3502C1);
    dp->~S3502C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3502C1(Test_S3502C1, "S3502C1", ABISELECT(96,52));

#else // __cplusplus

extern void _ZN7S3502C1C1Ev();
extern void _ZN7S3502C1D1Ev();
Name_Map name_map_S3502C1[] = {
  NSPAIR(_ZN7S3502C1C1Ev),
  NSPAIR(_ZN7S3502C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S3502C7;
extern VTBL_ENTRY _ZTI7S3502C7[];
extern  VTBL_ENTRY _ZTV7S3502C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S3502C6;
extern VTBL_ENTRY _ZTI7S3502C6[];
extern  VTBL_ENTRY _ZTV7S3502C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3502C6[];
extern Class_Descriptor cd_S3502C7;
extern VTBL_ENTRY _ZTI7S3502C7[];
extern  VTBL_ENTRY _ZTV7S3502C7[];
extern Class_Descriptor cd_S3502C5;
extern VTBL_ENTRY _ZTI7S3502C5[];
extern  VTBL_ENTRY _ZTV7S3502C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3502C5[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S3502C7;
extern VTBL_ENTRY _ZTI7S3502C7[];
extern  VTBL_ENTRY _ZTV7S3502C7[];
extern Class_Descriptor cd_S3502C6;
extern VTBL_ENTRY _ZTI7S3502C6[];
extern  VTBL_ENTRY _ZTV7S3502C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3502C6[];
extern Class_Descriptor cd_S3502C9;
extern VTBL_ENTRY _ZTI7S3502C9[];
extern  VTBL_ENTRY _ZTV7S3502C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3502C9[];
extern Class_Descriptor cd_S3502C7;
extern VTBL_ENTRY _ZTI7S3502C7[];
extern  VTBL_ENTRY _ZTV7S3502C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S3502C10;
extern VTBL_ENTRY _ZTI8S3502C10[];
extern  VTBL_ENTRY _ZTV8S3502C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3502C10[];
extern Class_Descriptor cd_S3502C7;
extern VTBL_ENTRY _ZTI7S3502C7[];
extern  VTBL_ENTRY _ZTV7S3502C7[];
extern Class_Descriptor cd_S3502C3;
extern VTBL_ENTRY _ZTI7S3502C3[];
extern  VTBL_ENTRY _ZTV7S3502C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3502C3[];
extern Class_Descriptor cd_S2121C24;
extern VTBL_ENTRY _ZTI8S2121C24[];
extern Class_Descriptor cd_S3502C7;
extern VTBL_ENTRY _ZTI7S3502C7[];
extern  VTBL_ENTRY _ZTV7S3502C7[];
extern Class_Descriptor cd_S3502C6;
extern VTBL_ENTRY _ZTI7S3502C6[];
extern  VTBL_ENTRY _ZTV7S3502C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3502C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S3502C7;
extern VTBL_ENTRY _ZTI7S3502C7[];
extern  VTBL_ENTRY _ZTV7S3502C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S3502C10;
extern VTBL_ENTRY _ZTI8S3502C10[];
extern  VTBL_ENTRY _ZTV8S3502C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3502C10[];
extern Class_Descriptor cd_S3502C2;
extern VTBL_ENTRY _ZTI7S3502C2[];
extern  VTBL_ENTRY _ZTV7S3502C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3502C2[];
extern Class_Descriptor cd_S3502C13;
extern VTBL_ENTRY _ZTI8S3502C13[];
extern  VTBL_ENTRY _ZTV8S3502C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3502C13[];
extern Class_Descriptor cd_S3502C7;
extern VTBL_ENTRY _ZTI7S3502C7[];
extern  VTBL_ENTRY _ZTV7S3502C7[];
extern Class_Descriptor cd_S3502C12;
extern VTBL_ENTRY _ZTI8S3502C12[];
extern  VTBL_ENTRY _ZTV8S3502C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3502C12[];
extern Class_Descriptor cd_S3502C13;
extern VTBL_ENTRY _ZTI8S3502C13[];
extern  VTBL_ENTRY _ZTV8S3502C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3502C13[];
static Base_Class bases_S3502C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3502C7,    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
    3, //immediately_derived
  0, 0},
  {&cd_S2121C28,    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
    3, //immediately_derived
  0, 1},
  {&cd_S3502C6,    ABISELECT(40,24), //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
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3502C7,    ABISELECT(48,28), //bcp->offset
    38, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3502C5,    ABISELECT(40,24), //bcp->offset
    32, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S2121C38,    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
    9, //immediately_derived
  0, 0},
  {&cd_S3502C7,    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
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3502C6,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3502C9,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S3502C7,    ABISELECT(64,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
    8, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2121C28,    ABISELECT(64,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
    12, //immediately_derived
  0, 0},
  {&cd_S3502C10,    ABISELECT(64,36), //bcp->offset
    41, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S3502C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S3502C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S2121C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S3502C7,    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
    14, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S3502C6,    ABISELECT(8,4), //bcp->offset
    13, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3502C7,    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
    16, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S2121C28,    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
    21, //immediately_derived
  0, 0},
  {&cd_S3502C10,    ABISELECT(16,8), //bcp->offset
    18, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S3502C2,    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
    18, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3502C13,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S3502C7,    ABISELECT(72,40), //bcp->offset
    46, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S3502C12,    ABISELECT(24,12), //bcp->offset
    22, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3502C13,    ABISELECT(80,44), //bcp->offset
    50, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3502C1[];
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C1D1Ev();
extern void _ZN7S3502C1D0Ev();
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C92v2Ev();
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C92v2Ev();
static  VTBL_ENTRY vtc_S3502C1[] = {
  ABISELECT(80,44),
  ABISELECT(72,40),
  0,
  ABISELECT(64,36),
  ABISELECT(24,12),
  ABISELECT(56,32),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3502C1[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3502C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3502C1D0Ev,
  ABISELECT(48,28),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3502C1[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3502C1[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  ABISELECT(48,28),
  0,
  0,
  0,
  ABISELECT(32,20),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S3502C1[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3502C92v2Ev,
  0,
  ABISELECT(16,8),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S3502C1[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S3502C1[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  0,
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S3502C1[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  0,
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI7S3502C1[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  ABISELECT(-24,-12),
  ABISELECT(-80,-44),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI7S3502C1[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3502C92v2Ev,
};
extern VTBL_ENTRY _ZTV7S3502C1[];
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C2D1Ev();
extern void _ZN7S3502C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C2__7S3502C1[] = {
  0,
  ABISELECT(64,36),
  ABISELECT(24,12),
  ABISELECT(56,32),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3502C2[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3502C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3502C2D0Ev,
};
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C37S3502C2__7S3502C1[] = {
  ABISELECT(64,36),
  ABISELECT(24,12),
  ABISELECT(56,32),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3502C3[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C5__7S3502C37S3502C2__7S3502C1[] = {
  0,
  ABISELECT(16,8),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S3502C3[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C77S3502C5__A1__7S3502C37S3502C2__7S3502C1[] = {
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S3502C3[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C9__7S3502C37S3502C2__7S3502C1[] = {
  0,
  0,
  ABISELECT(32,20),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S3502C3[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3502C92v2Ev,
};
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S3502C10__7S3502C37S3502C2__7S3502C1[] = {
  0,
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S3502C3[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C67S3502C2__A2__7S3502C1[] = {
  ABISELECT(48,28),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3502C6[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S3502C107S3502C2__A1__7S3502C1[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S3502C10[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C5__7S3502C2__7S3502C1[] = {
  0,
  ABISELECT(16,8),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S3502C2[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C77S3502C5__A1__7S3502C2__7S3502C1[] = {
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S3502C2[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C9__7S3502C2__7S3502C1[] = {
  0,
  0,
  ABISELECT(32,20),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S3502C2[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3502C92v2Ev,
};
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S3502C10__7S3502C2__7S3502C1[] = {
  0,
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S3502C2[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C6__A2__7S3502C2__7S3502C1[] = {
  ABISELECT(48,28),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3502C2[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S3502C10__A__7S3502C2__7S3502C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3502C2[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S3502C12__7S3502C1[] = {
  ABISELECT(48,28),
  0,
  0,
  0,
  ABISELECT(32,20),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S3502C12[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3502C92v2Ev,
};
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S3502C138S3502C12__7S3502C1[] = {
  0,
  0,
  0,
  ABISELECT(32,20),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S3502C13[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3502C92v2Ev,
};
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C7__A1__8S3502C12__7S3502C1[] = {
  0,
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S3502C12[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C5__7S3502C1[] = {
  ABISELECT(16,8),
  ABISELECT(-40,-24),
  0,
  (VTBL_ENTRY)&(_ZTI7S3502C5[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C67S3502C5__7S3502C1[] = {
  ABISELECT(16,8),
  ABISELECT(-40,-24),
  0,
  (VTBL_ENTRY)&(_ZTI7S3502C6[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C9__7S3502C1[] = {
  ABISELECT(32,20),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S3502C9[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3502C92v2Ev,
};
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C67S3502C9__A1__7S3502C1[] = {
  ABISELECT(32,20),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S3502C6[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S3502C10__7S3502C1[] = {
  ABISELECT(-64,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S3502C10[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S3502C13__A1__7S3502C1[] = {
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  ABISELECT(-24,-12),
  ABISELECT(-80,-44),
  0,
  (VTBL_ENTRY)&(_ZTI8S3502C13[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3502C92v2Ev,
};
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C9__8S3502C13__A1__7S3502C1[] = {
  0,
  0,
  ABISELECT(32,20),
  ABISELECT(-24,-12),
  ABISELECT(56,32),
  (VTBL_ENTRY)&(_ZTI8S3502C13[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3502C92v2Ev,
};
static  VTT_ENTRY vtt_S3502C1[] = {
  {&(_ZTV7S3502C1[10]),  10,59},
  {&(_tg__ZTV7S3502C2__7S3502C1[8]),  8,11},
  {&(_tg__ZTV7S3502C37S3502C2__7S3502C1[7]),  7,8},
  {&(_tg__ZTV7S3502C5__7S3502C37S3502C2__7S3502C1[5]),  5,6},
  {&(_tg__ZTV7S3502C77S3502C5__A1__7S3502C37S3502C2__7S3502C1[2]),  2,3},
  {&(_tg__ZTV7S3502C9__7S3502C37S3502C2__7S3502C1[6]),  6,8},
  {&(_tg__ZTV8S3502C10__7S3502C37S3502C2__7S3502C1[4]),  4,5},
  {&(_tg__ZTV7S3502C67S3502C2__A2__7S3502C1[4]),  4,5},
  {&(_tg__ZTV8S3502C107S3502C2__A1__7S3502C1[3]),  3,4},
  {&(_tg__ZTV7S3502C5__7S3502C2__7S3502C1[5]),  5,6},
  {&(_tg__ZTV7S3502C77S3502C5__A1__7S3502C2__7S3502C1[2]),  2,3},
  {&(_tg__ZTV7S3502C9__7S3502C2__7S3502C1[6]),  6,8},
  {&(_tg__ZTV8S3502C10__7S3502C2__7S3502C1[4]),  4,5},
  {&(_tg__ZTV7S3502C6__A2__7S3502C2__7S3502C1[4]),  4,5},
  {&(_tg__ZTV8S3502C10__A__7S3502C2__7S3502C1[3]),  3,4},
  {&(_tg__ZTV8S3502C12__7S3502C1[8]),  8,10},
  {&(_tg__ZTV8S3502C138S3502C12__7S3502C1[7]),  7,9},
  {&(_tg__ZTV8S3502C138S3502C12__7S3502C1[7]),  7,9},
  {&(_tg__ZTV8S3502C12__7S3502C1[8]),  8,10},
  {&(_tg__ZTV7S3502C7__A1__8S3502C12__7S3502C1[3]),  3,4},
  {&(_ZTV7S3502C1[37]),  37,59},
  {&(_ZTV7S3502C1[40]),  40,59},
  {&(_ZTV7S3502C1[30]),  30,59},
  {&(_ZTV7S3502C1[45]),  45,59},
  {&(_ZTV7S3502C1[17]),  17,59},
  {&(_ZTV7S3502C1[21]),  21,59},
  {&(_ZTV7S3502C1[30]),  30,59},
  {&(_ZTV7S3502C1[49]),  49,59},
  {&(_ZTV7S3502C1[57]),  57,59},
  {&(_tg__ZTV7S3502C5__7S3502C1[4]),  4,5},
  {&(_tg__ZTV7S3502C67S3502C5__7S3502C1[4]),  4,5},
  {&(_tg__ZTV7S3502C9__7S3502C1[4]),  4,6},
  {&(_tg__ZTV7S3502C67S3502C9__A1__7S3502C1[4]),  4,5},
  {&(_tg__ZTV8S3502C10__7S3502C1[3]),  3,4},
  {&(_tg__ZTV8S3502C13__A1__7S3502C1[7]),  7,9},
  {&(_tg__ZTV7S3502C9__8S3502C13__A1__7S3502C1[6]),  6,8},
};
extern VTBL_ENTRY _ZTI7S3502C1[];
extern  VTBL_ENTRY _ZTV7S3502C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3502C1[];
Class_Descriptor cd_S3502C1 = {  "S3502C1", // class name
  bases_S3502C1, 27,
  &(vtc_S3502C1[0]), // expected_vtbl_contents
  &(vtt_S3502C1[0]), // expected_vtt_contents
  ABISELECT(96,52), // object size
  NSPAIRA(_ZTI7S3502C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S3502C1),59, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3502C1),36, //virtual table table var
  20, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7686C3  {
  virtual  ~S7686C3(); // _ZN7S7686C3D1Ev
  virtual void  v8(); // _ZN7S7686C32v8Ev
  virtual void  v9(); // _ZN7S7686C32v9Ev
  virtual void  v10(); // _ZN7S7686C33v10Ev
  virtual void  v11(); // _ZN7S7686C33v11Ev
  virtual void  v12(); // _ZN7S7686C33v12Ev
  S7686C3(); // tgen
};
//SIG(-1 S7686C3) C1{ vd v1 v2 v3 v4 v5}


 S7686C3 ::~S7686C3(){ note_dtor("S7686C3", this);}
void  S7686C3 ::v8(){vfunc_called(this, "_ZN7S7686C32v8Ev");}
void  S7686C3 ::v9(){vfunc_called(this, "_ZN7S7686C32v9Ev");}
void  S7686C3 ::v10(){vfunc_called(this, "_ZN7S7686C33v10Ev");}
void  S7686C3 ::v11(){vfunc_called(this, "_ZN7S7686C33v11Ev");}
void  S7686C3 ::v12(){vfunc_called(this, "_ZN7S7686C33v12Ev");}
S7686C3 ::S7686C3(){ note_ctor("S7686C3", this);} // tgen

static void Test_S7686C3()
{
  extern Class_Descriptor cd_S7686C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7686C3, buf);
    S7686C3 *dp, &lv = *(dp=new (buf) S7686C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7686C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7686C3)");
    test_class_info(&lv, &cd_S7686C3);
    dp->~S7686C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7686C3(Test_S7686C3, "S7686C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7686C3C1Ev();
extern void _ZN7S7686C3D1Ev();
Name_Map name_map_S7686C3[] = {
  NSPAIR(_ZN7S7686C3C1Ev),
  NSPAIR(_ZN7S7686C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7686C3[];
extern void _ZN7S7686C3D1Ev();
extern void _ZN7S7686C3D0Ev();
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
static  VTBL_ENTRY vtc_S7686C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7686C3[0]),
  (VTBL_ENTRY)&_ZN7S7686C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7686C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
};
extern VTBL_ENTRY _ZTI7S7686C3[];
extern  VTBL_ENTRY _ZTV7S7686C3[];
Class_Descriptor cd_S7686C3 = {  "S7686C3", // class name
  0,0,//no base classes
  &(vtc_S7686C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7686C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7686C3),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  S7686C2  : virtual S7686C3 {
  void *s7686c2f0;
  ::S7686C3 s7686c2f1;
  void *s7686c2f2;
  virtual  ~S7686C2(); // _ZN7S7686C2D2Ev
  virtual void  v13(); // _ZN7S7686C23v13Ev
  virtual void  v14(); // _ZN7S7686C23v14Ev
  virtual void  v15(); // _ZN7S7686C23v15Ev
  S7686C2(); // tgen
};
//SIG(-1 S7686C2) C1{ VBC2{ vd v4 v5 v6 v7 v8} vd v1 v2 v3 Fp FC2 Fp}


 S7686C2 ::~S7686C2(){ note_dtor("S7686C2", this);}
void  S7686C2 ::v13(){vfunc_called(this, "_ZN7S7686C23v13Ev");}
void  S7686C2 ::v14(){vfunc_called(this, "_ZN7S7686C23v14Ev");}
void  S7686C2 ::v15(){vfunc_called(this, "_ZN7S7686C23v15Ev");}
S7686C2 ::S7686C2(){ note_ctor("S7686C2", this);} // tgen

static void Test_S7686C2()
{
  extern Class_Descriptor cd_S7686C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S7686C2, buf);
    S7686C2 *dp, &lv = *(dp=new (buf) S7686C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S7686C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7686C2)");
    check_base_class_offset(lv, (S7686C3*), 0, "S7686C2");
    check_field_offset(lv, s7686c2f0, ABISELECT(8,4), "S7686C2.s7686c2f0");
    check_field_offset(lv, s7686c2f1, ABISELECT(16,8), "S7686C2.s7686c2f1");
    check_field_offset(lv, s7686c2f2, ABISELECT(24,12), "S7686C2.s7686c2f2");
    test_class_info(&lv, &cd_S7686C2);
    dp->~S7686C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7686C2(Test_S7686C2, "S7686C2", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S7686C2C1Ev();
extern void _ZN7S7686C2D2Ev();
Name_Map name_map_S7686C2[] = {
  NSPAIR(_ZN7S7686C2C1Ev),
  NSPAIR(_ZN7S7686C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7686C3;
extern VTBL_ENTRY _ZTI7S7686C3[];
extern  VTBL_ENTRY _ZTV7S7686C3[];
static Base_Class bases_S7686C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7686C3,    0, //bcp->offset
    -1, //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 _ZTI7S7686C2[];
extern void _ZN7S7686C2D1Ev();
extern void _ZN7S7686C2D0Ev();
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
extern void _ZN7S7686C23v13Ev();
extern void _ZN7S7686C23v14Ev();
extern void _ZN7S7686C23v15Ev();
static  VTBL_ENTRY vtc_S7686C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7686C2[0]),
  (VTBL_ENTRY)&_ZN7S7686C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7686C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v15Ev,
};
extern VTBL_ENTRY _ZTV7S7686C2[];
static  VTT_ENTRY vtt_S7686C2[] = {
  {&(_ZTV7S7686C2[9]),  9,19},
  {&(_ZTV7S7686C2[9]),  9,19},
};
extern VTBL_ENTRY _ZTI7S7686C2[];
extern  VTBL_ENTRY _ZTV7S7686C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7686C2[];
Class_Descriptor cd_S7686C2 = {  "S7686C2", // class name
  bases_S7686C2, 1,
  &(vtc_S7686C2[0]), // expected_vtbl_contents
  &(vtt_S7686C2[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S7686C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7686C2),19, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7686C2),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  S7686C5  : S7686C2 {
  ::S7686C2 s7686c5f0[6];
  virtual void  v16(); // _ZN7S7686C53v16Ev
  ~S7686C5(); // tgen
  S7686C5(); // tgen
};
//SIG(-1 S7686C5) C1{ BC2{ VBC3{ vd v2 v3 v4 v5 v6} vd v7 v8 v9 Fp FC3 Fp} v1 FC2[6]}


void  S7686C5 ::v16(){vfunc_called(this, "_ZN7S7686C53v16Ev");}
S7686C5 ::~S7686C5(){ note_dtor("S7686C5", this);} // tgen
S7686C5 ::S7686C5(){ note_ctor("S7686C5", this);} // tgen

static void Test_S7686C5()
{
  extern Class_Descriptor cd_S7686C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[29];
    init_test(&cd_S7686C5, buf);
    S7686C5 *dp, &lv = *(dp=new (buf) S7686C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,112), "sizeof(S7686C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7686C5)");
    check_base_class_offset(lv, (S7686C3*)(S7686C2*), 0, "S7686C5");
    check_base_class_offset(lv, (S7686C2*), 0, "S7686C5");
    check_field_offset(lv, s7686c5f0, ABISELECT(32,16), "S7686C5.s7686c5f0");
    test_class_info(&lv, &cd_S7686C5);
    dp->~S7686C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7686C5(Test_S7686C5, "S7686C5", ABISELECT(224,112));

#else // __cplusplus

extern void _ZN7S7686C5C1Ev();
extern void _ZN7S7686C5D1Ev();
Name_Map name_map_S7686C5[] = {
  NSPAIR(_ZN7S7686C5C1Ev),
  NSPAIR(_ZN7S7686C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7686C3;
extern VTBL_ENTRY _ZTI7S7686C3[];
extern  VTBL_ENTRY _ZTV7S7686C3[];
extern Class_Descriptor cd_S7686C2;
extern VTBL_ENTRY _ZTI7S7686C2[];
extern  VTBL_ENTRY _ZTV7S7686C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7686C2[];
static Base_Class bases_S7686C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7686C3,    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
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7686C2,    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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7686C5[];
extern void _ZN7S7686C5D1Ev();
extern void _ZN7S7686C5D0Ev();
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
extern void _ZN7S7686C23v13Ev();
extern void _ZN7S7686C23v14Ev();
extern void _ZN7S7686C23v15Ev();
extern void _ZN7S7686C53v16Ev();
static  VTBL_ENTRY vtc_S7686C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7686C5[0]),
  (VTBL_ENTRY)&_ZN7S7686C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7686C5D0Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7686C53v16Ev,
};
extern VTBL_ENTRY _ZTV7S7686C5[];
extern void _ZN7S7686C2D1Ev();
extern void _ZN7S7686C2D0Ev();
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
extern void _ZN7S7686C23v13Ev();
extern void _ZN7S7686C23v14Ev();
extern void _ZN7S7686C23v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7686C2__7S7686C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7686C2[0]),
  (VTBL_ENTRY)&_ZN7S7686C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7686C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v15Ev,
};
static  VTT_ENTRY vtt_S7686C5[] = {
  {&(_ZTV7S7686C5[9]),  9,20},
  {&(_tg__ZTV7S7686C2__7S7686C5[9]),  9,19},
  {&(_tg__ZTV7S7686C2__7S7686C5[9]),  9,19},
  {&(_ZTV7S7686C5[9]),  9,20},
};
extern VTBL_ENTRY _ZTI7S7686C5[];
extern  VTBL_ENTRY _ZTV7S7686C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7686C5[];
Class_Descriptor cd_S7686C5 = {  "S7686C5", // class name
  bases_S7686C5, 2,
  &(vtc_S7686C5[0]), // expected_vtbl_contents
  &(vtt_S7686C5[0]), // expected_vtt_contents
  ABISELECT(224,112), // object size
  NSPAIRA(_ZTI7S7686C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7686C5),20, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7686C5),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  S7686C6  : virtual S7686C2 {
  virtual  ~S7686C6(); // _ZN7S7686C6D2Ev
  virtual void  v17(); // _ZN7S7686C63v17Ev
  S7686C6(); // tgen
};
//SIG(-1 S7686C6) C1{ VBC2{ VBC3{ vd v2 v3 v4 v5 v6} vd v7 v8 v9 Fp FC3 Fp} vd v1}


 S7686C6 ::~S7686C6(){ note_dtor("S7686C6", this);}
void  S7686C6 ::v17(){vfunc_called(this, "_ZN7S7686C63v17Ev");}
S7686C6 ::S7686C6(){ note_ctor("S7686C6", this);} // tgen

static void Test_S7686C6()
{
  extern Class_Descriptor cd_S7686C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S7686C6, buf);
    S7686C6 *dp, &lv = *(dp=new (buf) S7686C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S7686C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7686C6)");
    check_base_class_offset(lv, (S7686C3*)(S7686C2*), 0, "S7686C6");
    check_base_class_offset(lv, (S7686C2*), ABISELECT(8,4), "S7686C6");
    test_class_info(&lv, &cd_S7686C6);
    dp->~S7686C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7686C6(Test_S7686C6, "S7686C6", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S7686C6C1Ev();
extern void _ZN7S7686C6D2Ev();
Name_Map name_map_S7686C6[] = {
  NSPAIR(_ZN7S7686C6C1Ev),
  NSPAIR(_ZN7S7686C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7686C3;
extern VTBL_ENTRY _ZTI7S7686C3[];
extern  VTBL_ENTRY _ZTV7S7686C3[];
extern Class_Descriptor cd_S7686C2;
extern VTBL_ENTRY _ZTI7S7686C2[];
extern  VTBL_ENTRY _ZTV7S7686C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7686C2[];
static Base_Class bases_S7686C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7686C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //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
    1, //immediately_derived
  0, 1},
  {&cd_S7686C2,    ABISELECT(8,4), //bcp->offset
    18, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7686C6[];
extern void _ZN7S7686C6D1Ev();
extern void _ZN7S7686C6D0Ev();
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
extern void _ZN7S7686C63v17Ev();
extern void ABISELECT(_ZTv0_n24_N7S7686C6D1Ev,_ZTv0_n12_N7S7686C6D1Ev)();
extern void ABISELECT(_ZThn8_N7S7686C6D1Ev,_ZThn4_N7S7686C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7686C6D0Ev,_ZTv0_n12_N7S7686C6D0Ev)();
extern void ABISELECT(_ZThn8_N7S7686C6D0Ev,_ZThn4_N7S7686C6D0Ev)() __attribute__((weak));
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
extern void _ZN7S7686C23v13Ev();
extern void _ZN7S7686C23v14Ev();
extern void _ZN7S7686C23v15Ev();
static  VTBL_ENTRY vtc_S7686C6[] = {
  0,
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7686C6[0]),
  (VTBL_ENTRY)&_ZN7S7686C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7686C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7686C63v17Ev,
  0,
  0,
  0,
  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)&(_ZTI7S7686C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C6D1Ev,_ZTv0_n12_N7S7686C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C6D0Ev,_ZTv0_n12_N7S7686C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v15Ev,
};
extern VTBL_ENTRY _ZTV7S7686C6[];
extern void ABISELECT(_ZTv0_n24_N7S7686C2D1Ev,_ZTv0_n12_N7S7686C2D1Ev)();
extern void _ZN7S7686C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7686C2D0Ev,_ZTv0_n12_N7S7686C2D0Ev)();
extern void _ZN7S7686C2D0Ev() __attribute__((weak));
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
extern void _ZN7S7686C23v13Ev();
extern void _ZN7S7686C23v14Ev();
extern void _ZN7S7686C23v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7686C2__7S7686C6[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7686C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C2D1Ev,_ZTv0_n12_N7S7686C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C2D0Ev,_ZTv0_n12_N7S7686C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7686C2D1Ev,_ZTv0_n12_N7S7686C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7686C2D0Ev,_ZTv0_n12_N7S7686C2D0Ev)();
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7686C3__7S7686C2__7S7686C6[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S7686C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C2D1Ev,_ZTv0_n12_N7S7686C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C2D0Ev,_ZTv0_n12_N7S7686C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
};
static  VTT_ENTRY vtt_S7686C6[] = {
  {&(_ZTV7S7686C6[10]),  10,40},
  {&(_ZTV7S7686C6[30]),  30,40},
  {&(_ZTV7S7686C6[10]),  10,40},
  {&(_tg__ZTV7S7686C2__7S7686C6[9]),  9,19},
  {&(_tg__ZTV7S7686C3__7S7686C2__7S7686C6[8]),  8,15},
};
extern VTBL_ENTRY _ZTI7S7686C6[];
extern  VTBL_ENTRY _ZTV7S7686C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7686C6[];
static VTBL_ENTRY alt_thunk_names25[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7686C2D0Ev,_ZTv0_n12_N7S7686C2D0Ev), // 
  (VTBL_ENTRY)_ZN7S7686C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7686C2D1Ev,_ZTv0_n12_N7S7686C2D1Ev), // 
  (VTBL_ENTRY)_ZN7S7686C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7686C6D0Ev,_ZTv0_n12_N7S7686C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7686C6D0Ev,_ZThn4_N7S7686C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7686C6D1Ev,_ZTv0_n12_N7S7686C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7686C6D1Ev,_ZThn4_N7S7686C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7686C6 = {  "S7686C6", // class name
  bases_S7686C6, 2,
  &(vtc_S7686C6[0]), // expected_vtbl_contents
  &(vtt_S7686C6[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S7686C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7686C6),40, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7686C6),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names25,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7686C4  : virtual S7686C5 , virtual S7686C6 {
  ::S15319C7 s7686c4f0;
  virtual  ~S7686C4(); // _ZN7S7686C4D2Ev
  virtual void  v18(); // _ZN7S7686C43v18Ev
  virtual void  v19(); // _ZN7S7686C43v19Ev
  virtual void  v20(); // _ZN7S7686C43v20Ev
  S7686C4(); // tgen
};
//SIG(-1 S7686C4) C1{ VBC2{ BC3{ VBC4{ vd v4 v5 v6 v7 v8} vd v9 v10 v11 Fp FC4 Fp} v12 FC3[6]} VBC5{ VBC3 vd v13} vd v1 v2 v3 FC6{}}


 S7686C4 ::~S7686C4(){ note_dtor("S7686C4", this);}
void  S7686C4 ::v18(){vfunc_called(this, "_ZN7S7686C43v18Ev");}
void  S7686C4 ::v19(){vfunc_called(this, "_ZN7S7686C43v19Ev");}
void  S7686C4 ::v20(){vfunc_called(this, "_ZN7S7686C43v20Ev");}
S7686C4 ::S7686C4(){ note_ctor("S7686C4", this);} // tgen

static void Test_S7686C4()
{
  extern Class_Descriptor cd_S7686C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[35];
    init_test(&cd_S7686C4, buf);
    S7686C4 *dp, &lv = *(dp=new (buf) S7686C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,136), "sizeof(S7686C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7686C4)");
    check_base_class_offset(lv, (S7686C3*)(S7686C2*)(S7686C5*), ABISELECT(16,8), "S7686C4");
    /*is_ambiguous_... S7686C4::S7686C2 */ AMB_check_base_class_offset(lv, (S7686C3*)(S7686C2*), ABISELECT(16,8), "S7686C4");
    check_base_class_offset(lv, (S7686C2*)(S7686C5*), ABISELECT(16,8), "S7686C4");
    check_base_class_offset(lv, (S7686C5*), ABISELECT(16,8), "S7686C4");
    check_base_class_offset(lv, (S7686C2*)(S7686C6*), ABISELECT(240,120), "S7686C4");
    check_base_class_offset(lv, (S7686C6*), 0, "S7686C4");
    check_field_offset(lv, s7686c4f0, ABISELECT(8,4), "S7686C4.s7686c4f0");
    test_class_info(&lv, &cd_S7686C4);
    dp->~S7686C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7686C4(Test_S7686C4, "S7686C4", ABISELECT(272,136));

#else // __cplusplus

extern void _ZN7S7686C4C1Ev();
extern void _ZN7S7686C4D2Ev();
Name_Map name_map_S7686C4[] = {
  NSPAIR(_ZN7S7686C4C1Ev),
  NSPAIR(_ZN7S7686C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7686C3;
extern VTBL_ENTRY _ZTI7S7686C3[];
extern  VTBL_ENTRY _ZTV7S7686C3[];
extern Class_Descriptor cd_S7686C2;
extern VTBL_ENTRY _ZTI7S7686C2[];
extern  VTBL_ENTRY _ZTV7S7686C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7686C2[];
extern Class_Descriptor cd_S7686C5;
extern VTBL_ENTRY _ZTI7S7686C5[];
extern  VTBL_ENTRY _ZTV7S7686C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7686C5[];
extern Class_Descriptor cd_S7686C2;
extern VTBL_ENTRY _ZTI7S7686C2[];
extern  VTBL_ENTRY _ZTV7S7686C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7686C2[];
extern Class_Descriptor cd_S7686C6;
extern VTBL_ENTRY _ZTI7S7686C6[];
extern  VTBL_ENTRY _ZTV7S7686C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7686C6[];
static Base_Class bases_S7686C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7686C3,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //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
    1, //immediately_derived
  0, 1},
  {&cd_S7686C2,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7686C5,    ABISELECT(16,8), //bcp->offset
    24, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7686C2,    ABISELECT(240,120), //bcp->offset
    48, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7686C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7686C4[];
extern void ABISELECT(_ZTv0_n24_N7S7686C4D1Ev,_ZTv0_n12_N7S7686C4D1Ev)();
extern void _ZN7S7686C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7686C4D0Ev,_ZTv0_n12_N7S7686C4D0Ev)();
extern void _ZN7S7686C4D0Ev() __attribute__((weak));
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
extern void _ZN7S7686C63v17Ev();
extern void _ZN7S7686C43v18Ev();
extern void _ZN7S7686C43v19Ev();
extern void _ZN7S7686C43v20Ev();
extern void ABISELECT(_ZTv0_n24_N7S7686C4D1Ev,_ZTv0_n12_N7S7686C4D1Ev)();
extern void ABISELECT(_ZThn16_N7S7686C4D1Ev,_ZThn8_N7S7686C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7686C4D0Ev,_ZTv0_n12_N7S7686C4D0Ev)();
extern void ABISELECT(_ZThn16_N7S7686C4D0Ev,_ZThn8_N7S7686C4D0Ev)() __attribute__((weak));
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
extern void _ZN7S7686C23v13Ev();
extern void _ZN7S7686C23v14Ev();
extern void _ZN7S7686C23v15Ev();
extern void _ZN7S7686C53v16Ev();
extern void ABISELECT(_ZTv0_n24_N7S7686C4D1Ev,_ZTv0_n12_N7S7686C4D1Ev)();
extern void ABISELECT(_ZThn240_N7S7686C4D1Ev,_ZThn120_N7S7686C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7686C4D0Ev,_ZTv0_n12_N7S7686C4D0Ev)();
extern void ABISELECT(_ZThn240_N7S7686C4D0Ev,_ZThn120_N7S7686C4D0Ev)() __attribute__((weak));
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
extern void _ZN7S7686C23v13Ev();
extern void _ZN7S7686C23v14Ev();
extern void _ZN7S7686C23v15Ev();
static  VTBL_ENTRY vtc_S7686C4[] = {
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(16,8),
  ABISELECT(240,120),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7686C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C4D1Ev,_ZTv0_n12_N7S7686C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C4D0Ev,_ZTv0_n12_N7S7686C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7686C63v17Ev,
  (VTBL_ENTRY)&_ZN7S7686C43v18Ev,
  (VTBL_ENTRY)&_ZN7S7686C43v19Ev,
  (VTBL_ENTRY)&_ZN7S7686C43v20Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7686C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C4D1Ev,_ZTv0_n12_N7S7686C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C4D0Ev,_ZTv0_n12_N7S7686C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7686C53v16Ev,
  0,
  0,
  0,
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-240,-120),
  ABISELECT(-240,-120),
  (VTBL_ENTRY)&(_ZTI7S7686C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C4D1Ev,_ZTv0_n12_N7S7686C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C4D0Ev,_ZTv0_n12_N7S7686C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v15Ev,
};
extern VTBL_ENTRY _ZTV7S7686C4[];
extern void ABISELECT(_ZTv0_n24_N7S7686C5D1Ev,_ZTv0_n12_N7S7686C5D1Ev)();
extern void _ZN7S7686C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7686C5D0Ev,_ZTv0_n12_N7S7686C5D0Ev)();
extern void _ZN7S7686C5D0Ev() __attribute__((weak));
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
extern void _ZN7S7686C23v13Ev();
extern void _ZN7S7686C23v14Ev();
extern void _ZN7S7686C23v15Ev();
extern void _ZN7S7686C53v16Ev();
static  VTBL_ENTRY _tg__ZTV7S7686C5__7S7686C4[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7686C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C5D1Ev,_ZTv0_n12_N7S7686C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C5D0Ev,_ZTv0_n12_N7S7686C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7686C53v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7686C2D1Ev,_ZTv0_n12_N7S7686C2D1Ev)();
extern void _ZN7S7686C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7686C2D0Ev,_ZTv0_n12_N7S7686C2D0Ev)();
extern void _ZN7S7686C2D0Ev() __attribute__((weak));
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
extern void _ZN7S7686C23v13Ev();
extern void _ZN7S7686C23v14Ev();
extern void _ZN7S7686C23v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7686C27S7686C5__7S7686C4[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7686C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C2D1Ev,_ZTv0_n12_N7S7686C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C2D0Ev,_ZTv0_n12_N7S7686C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7686C6D1Ev,_ZTv0_n12_N7S7686C6D1Ev)();
extern void _ZN7S7686C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7686C6D0Ev,_ZTv0_n12_N7S7686C6D0Ev)();
extern void _ZN7S7686C6D0Ev() __attribute__((weak));
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
extern void _ZN7S7686C63v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7686C6__7S7686C4[] = {
  ABISELECT(16,8),
  ABISELECT(240,120),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7686C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C6D1Ev,_ZTv0_n12_N7S7686C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C6D0Ev,_ZTv0_n12_N7S7686C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7686C63v17Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7686C6D1Ev,_ZTv0_n12_N7S7686C6D1Ev)();
extern void ABISELECT(_ZThn240_N7S7686C6D1Ev,_ZThn120_N7S7686C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7686C6D0Ev,_ZTv0_n12_N7S7686C6D0Ev)();
extern void ABISELECT(_ZThn240_N7S7686C6D0Ev,_ZThn120_N7S7686C6D0Ev)() __attribute__((weak));
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
extern void _ZN7S7686C23v13Ev();
extern void _ZN7S7686C23v14Ev();
extern void _ZN7S7686C23v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7686C2__7S7686C6__7S7686C4[] = {
  0,
  0,
  0,
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-240,-120),
  ABISELECT(-240,-120),
  (VTBL_ENTRY)&(_ZTI7S7686C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C6D1Ev,_ZTv0_n12_N7S7686C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C6D0Ev,_ZTv0_n12_N7S7686C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7686C6D1Ev,_ZTv0_n12_N7S7686C6D1Ev)();
extern void ABISELECT(_ZThn16_N7S7686C6D1Ev,_ZThn8_N7S7686C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7686C6D0Ev,_ZTv0_n12_N7S7686C6D0Ev)();
extern void ABISELECT(_ZThn16_N7S7686C6D0Ev,_ZThn8_N7S7686C6D0Ev)() __attribute__((weak));
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7686C3__7S7686C6__7S7686C4[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7686C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C6D1Ev,_ZTv0_n12_N7S7686C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C6D0Ev,_ZTv0_n12_N7S7686C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7686C2D1Ev,_ZTv0_n12_N7S7686C2D1Ev)();
extern void _ZN7S7686C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7686C2D0Ev,_ZTv0_n12_N7S7686C2D0Ev)();
extern void _ZN7S7686C2D0Ev() __attribute__((weak));
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
extern void _ZN7S7686C23v13Ev();
extern void _ZN7S7686C23v14Ev();
extern void _ZN7S7686C23v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7686C2__A1__7S7686C4[] = {
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7686C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C2D1Ev,_ZTv0_n12_N7S7686C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C2D0Ev,_ZTv0_n12_N7S7686C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7686C2D1Ev,_ZTv0_n12_N7S7686C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7686C2D0Ev,_ZTv0_n12_N7S7686C2D0Ev)();
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7686C3__7S7686C2__A1__7S7686C4[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(224,112),
  ABISELECT(224,112),
  (VTBL_ENTRY)&(_ZTI7S7686C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C2D1Ev,_ZTv0_n12_N7S7686C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C2D0Ev,_ZTv0_n12_N7S7686C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
};
static  VTT_ENTRY vtt_S7686C4[] = {
  {&(_ZTV7S7686C4[13]),  13,70},
  {&(_ZTV7S7686C4[37]),  37,70},
  {&(_ZTV7S7686C4[37]),  37,70},
  {&(_ZTV7S7686C4[13]),  13,70},
  {&(_ZTV7S7686C4[60]),  60,70},
  {&(_tg__ZTV7S7686C5__7S7686C4[9]),  9,20},
  {&(_tg__ZTV7S7686C27S7686C5__7S7686C4[9]),  9,19},
  {&(_tg__ZTV7S7686C27S7686C5__7S7686C4[9]),  9,19},
  {&(_tg__ZTV7S7686C5__7S7686C4[9]),  9,20},
  {&(_tg__ZTV7S7686C6__7S7686C4[10]),  10,18},
  {&(_tg__ZTV7S7686C2__7S7686C6__7S7686C4[12]),  12,22},
  {&(_tg__ZTV7S7686C3__7S7686C6__7S7686C4[8]),  8,15},
  {&(_tg__ZTV7S7686C2__A1__7S7686C4[9]),  9,19},
  {&(_tg__ZTV7S7686C3__7S7686C2__A1__7S7686C4[8]),  8,15},
};
extern VTBL_ENTRY _ZTI7S7686C4[];
extern  VTBL_ENTRY _ZTV7S7686C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7686C4[];
static VTBL_ENTRY alt_thunk_names26[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7686C6D0Ev,_ZTv0_n12_N7S7686C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7686C6D0Ev,_ZThn8_N7S7686C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S7686C6D0Ev,_ZThn120_N7S7686C6D0Ev),
  (VTBL_ENTRY)_ZN7S7686C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7686C6D1Ev,_ZTv0_n12_N7S7686C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7686C6D1Ev,_ZThn8_N7S7686C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S7686C6D1Ev,_ZThn120_N7S7686C6D1Ev),
  (VTBL_ENTRY)_ZN7S7686C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7686C2D0Ev,_ZTv0_n12_N7S7686C2D0Ev), // 
  (VTBL_ENTRY)_ZN7S7686C2D0Ev,
  (VTBL_ENTRY)_ZN7S7686C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7686C2D1Ev,_ZTv0_n12_N7S7686C2D1Ev), // 
  (VTBL_ENTRY)_ZN7S7686C2D1Ev,
  (VTBL_ENTRY)_ZN7S7686C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7686C5D0Ev,_ZTv0_n12_N7S7686C5D0Ev), // 
  (VTBL_ENTRY)_ZN7S7686C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7686C5D1Ev,_ZTv0_n12_N7S7686C5D1Ev), // 
  (VTBL_ENTRY)_ZN7S7686C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7686C4D0Ev,_ZTv0_n12_N7S7686C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S7686C4D0Ev,_ZThn120_N7S7686C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7686C4D0Ev,_ZThn8_N7S7686C4D0Ev),
  (VTBL_ENTRY)_ZN7S7686C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7686C4D1Ev,_ZTv0_n12_N7S7686C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S7686C4D1Ev,_ZThn120_N7S7686C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7686C4D1Ev,_ZThn8_N7S7686C4D1Ev),
  (VTBL_ENTRY)_ZN7S7686C4D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7686C4 = {  "S7686C4", // class name
  bases_S7686C4, 5,
  &(vtc_S7686C4[0]), // expected_vtbl_contents
  &(vtt_S7686C4[0]), // expected_vtt_contents
  ABISELECT(272,136), // object size
  NSPAIRA(_ZTI7S7686C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7686C4),70, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7686C4),14, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names26,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7686C1  : S7686C2 , S7686C4 {
  int s7686c1f0;
  virtual  ~S7686C1(); // _ZN7S7686C1D2Ev
  virtual void  v1(); // _ZN7S7686C12v1Ev
  virtual void  v2(); // _ZN7S7686C12v2Ev
  virtual void  v3(); // _ZN7S7686C12v3Ev
  virtual void  v4(); // _ZN7S7686C12v4Ev
  virtual void  v5(); // _ZN7S7686C12v5Ev
  virtual void  v6(); // _ZN7S7686C12v6Ev
  virtual void  v7(); // _ZN7S7686C12v7Ev
  S7686C1(); // tgen
};
//SIG(1 S7686C1) C1{ BC2{ VBC3{ vd v8 v9 v10 v11 v12} vd v13 v14 v15 Fp FC3 Fp} BC4{ VBC5{ BC2 v16 FC2[6]} VBC6{ VBC2 vd v17} vd v18 v19 v20 FC7{}} vd v1 v2 v3 v4 v5 v6 v7 Fi}


 S7686C1 ::~S7686C1(){ note_dtor("S7686C1", this);}
void  S7686C1 ::v1(){vfunc_called(this, "_ZN7S7686C12v1Ev");}
void  S7686C1 ::v2(){vfunc_called(this, "_ZN7S7686C12v2Ev");}
void  S7686C1 ::v3(){vfunc_called(this, "_ZN7S7686C12v3Ev");}
void  S7686C1 ::v4(){vfunc_called(this, "_ZN7S7686C12v4Ev");}
void  S7686C1 ::v5(){vfunc_called(this, "_ZN7S7686C12v5Ev");}
void  S7686C1 ::v6(){vfunc_called(this, "_ZN7S7686C12v6Ev");}
void  S7686C1 ::v7(){vfunc_called(this, "_ZN7S7686C12v7Ev");}
S7686C1 ::S7686C1(){ note_ctor("S7686C1", this);} // tgen

static void Test_S7686C1()
{
  extern Class_Descriptor cd_S7686C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(39,40)];
    init_test(&cd_S7686C1, buf);
    S7686C1 *dp, &lv = *(dp=new (buf) S7686C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,156), "sizeof(S7686C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7686C1)");
    /*is_ambiguous_... S7686C1::S7686C2 */ AMB_check_base_class_offset(lv, (S7686C3*)(S7686C2*), 0, "S7686C1");
    check_base_class_offset(lv, (S7686C3*)(S7686C2*)(S7686C5*), 0, "S7686C1");
    /*is_ambiguous_... S7686C1::S7686C2 */ AMB_check_base_class_offset(lv, (S7686C3*)(S7686C2*), 0, "S7686C1");
    /*is_ambiguous_... S7686C1::S7686C2 */ AMB_check_base_class_offset(lv, (S7686C2*), 0, "S7686C1");
    check_base_class_offset(lv, (S7686C2*)(S7686C5*), ABISELECT(48,28), "S7686C1");
    check_base_class_offset(lv, (S7686C5*)(S7686C4*), ABISELECT(48,28), "S7686C1");
    check_base_class_offset(lv, (S7686C2*)(S7686C6*), ABISELECT(272,140), "S7686C1");
    check_base_class_offset(lv, (S7686C6*)(S7686C4*), ABISELECT(32,16), "S7686C1");
    check_base_class_offset(lv, (S7686C4*), ABISELECT(32,16), "S7686C1");
    check_field_offset(lv, s7686c1f0, ABISELECT(44,24), "S7686C1.s7686c1f0");
    test_class_info(&lv, &cd_S7686C1);
    dp->~S7686C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7686C1(Test_S7686C1, "S7686C1", ABISELECT(304,156));

#else // __cplusplus

extern void _ZN7S7686C1C1Ev();
extern void _ZN7S7686C1D2Ev();
Name_Map name_map_S7686C1[] = {
  NSPAIR(_ZN7S7686C1C1Ev),
  NSPAIR(_ZN7S7686C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7686C3;
extern VTBL_ENTRY _ZTI7S7686C3[];
extern  VTBL_ENTRY _ZTV7S7686C3[];
extern Class_Descriptor cd_S7686C2;
extern VTBL_ENTRY _ZTI7S7686C2[];
extern  VTBL_ENTRY _ZTV7S7686C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7686C2[];
extern Class_Descriptor cd_S7686C2;
extern VTBL_ENTRY _ZTI7S7686C2[];
extern  VTBL_ENTRY _ZTV7S7686C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7686C2[];
extern Class_Descriptor cd_S7686C5;
extern VTBL_ENTRY _ZTI7S7686C5[];
extern  VTBL_ENTRY _ZTV7S7686C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7686C5[];
extern Class_Descriptor cd_S7686C2;
extern VTBL_ENTRY _ZTI7S7686C2[];
extern  VTBL_ENTRY _ZTV7S7686C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7686C2[];
extern Class_Descriptor cd_S7686C6;
extern VTBL_ENTRY _ZTI7S7686C6[];
extern  VTBL_ENTRY _ZTV7S7686C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7686C6[];
extern Class_Descriptor cd_S7686C4;
extern VTBL_ENTRY _ZTI7S7686C4[];
extern  VTBL_ENTRY _ZTV7S7686C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7686C4[];
static Base_Class bases_S7686C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7686C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //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
    1, //immediately_derived
  0, 1},
  {&cd_S7686C2,    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_S7686C2,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //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
    3, //immediately_derived
  0, 0},
  {&cd_S7686C5,    ABISELECT(48,28), //bcp->offset
    53, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7686C2,    ABISELECT(272,140), //bcp->offset
    77, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7686C6,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7686C4,    ABISELECT(32,16), //bcp->offset
    29, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7686C1[];
extern void _ZN7S7686C1D1Ev();
extern void _ZN7S7686C1D0Ev();
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
extern void _ZN7S7686C23v13Ev();
extern void _ZN7S7686C23v14Ev();
extern void _ZN7S7686C23v15Ev();
extern void _ZN7S7686C12v1Ev();
extern void _ZN7S7686C12v2Ev();
extern void _ZN7S7686C12v3Ev();
extern void _ZN7S7686C12v4Ev();
extern void _ZN7S7686C12v5Ev();
extern void _ZN7S7686C12v6Ev();
extern void _ZN7S7686C12v7Ev();
extern void ABISELECT(_ZThn32_N7S7686C1D1Ev,_ZThn16_N7S7686C1D1Ev)();
extern void ABISELECT(_ZThn32_N7S7686C1D0Ev,_ZThn16_N7S7686C1D0Ev)();
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
extern void _ZN7S7686C63v17Ev();
extern void _ZN7S7686C43v18Ev();
extern void _ZN7S7686C43v19Ev();
extern void _ZN7S7686C43v20Ev();
extern void ABISELECT(_ZTv0_n24_N7S7686C1D1Ev,_ZTv0_n12_N7S7686C1D1Ev)();
extern void ABISELECT(_ZThn48_N7S7686C1D1Ev,_ZThn28_N7S7686C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7686C1D0Ev,_ZTv0_n12_N7S7686C1D0Ev)();
extern void ABISELECT(_ZThn48_N7S7686C1D0Ev,_ZThn28_N7S7686C1D0Ev)() __attribute__((weak));
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
extern void _ZN7S7686C23v13Ev();
extern void _ZN7S7686C23v14Ev();
extern void _ZN7S7686C23v15Ev();
extern void _ZN7S7686C53v16Ev();
extern void ABISELECT(_ZTv0_n24_N7S7686C1D1Ev,_ZTv0_n12_N7S7686C1D1Ev)();
extern void ABISELECT(_ZThn272_N7S7686C1D1Ev,_ZThn140_N7S7686C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7686C1D0Ev,_ZTv0_n12_N7S7686C1D0Ev)();
extern void ABISELECT(_ZThn272_N7S7686C1D0Ev,_ZThn140_N7S7686C1D0Ev)() __attribute__((weak));
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
extern void _ZN7S7686C23v13Ev();
extern void _ZN7S7686C23v14Ev();
extern void _ZN7S7686C23v15Ev();
static  VTBL_ENTRY vtc_S7686C1[] = {
  ABISELECT(272,140),
  ABISELECT(32,16),
  ABISELECT(48,28),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7686C1[0]),
  (VTBL_ENTRY)&_ZN7S7686C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7686C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7686C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7686C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7686C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7686C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7686C12v5Ev,
  (VTBL_ENTRY)&_ZN7S7686C12v6Ev,
  (VTBL_ENTRY)&_ZN7S7686C12v7Ev,
  0,
  ABISELECT(16,12),
  0,
  ABISELECT(-32,-16),
  ABISELECT(240,124),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7686C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N7S7686C1D1Ev,_ZThn16_N7S7686C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N7S7686C1D0Ev,_ZThn16_N7S7686C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7686C63v17Ev,
  (VTBL_ENTRY)&_ZN7S7686C43v18Ev,
  (VTBL_ENTRY)&_ZN7S7686C43v19Ev,
  (VTBL_ENTRY)&_ZN7S7686C43v20Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S7686C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C1D1Ev,_ZTv0_n12_N7S7686C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C1D0Ev,_ZTv0_n12_N7S7686C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7686C53v16Ev,
  0,
  0,
  0,
  ABISELECT(-272,-140),
  ABISELECT(-272,-140),
  ABISELECT(-272,-140),
  ABISELECT(-272,-140),
  ABISELECT(-272,-140),
  ABISELECT(-272,-140),
  ABISELECT(-272,-140),
  ABISELECT(-272,-140),
  (VTBL_ENTRY)&(_ZTI7S7686C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C1D1Ev,_ZTv0_n12_N7S7686C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C1D0Ev,_ZTv0_n12_N7S7686C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v15Ev,
};
extern VTBL_ENTRY _ZTV7S7686C1[];
extern void _ZN7S7686C2D1Ev();
extern void _ZN7S7686C2D0Ev();
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
extern void _ZN7S7686C23v13Ev();
extern void _ZN7S7686C23v14Ev();
extern void _ZN7S7686C23v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7686C2__A__7S7686C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7686C2[0]),
  (VTBL_ENTRY)&_ZN7S7686C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7686C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v15Ev,
};
extern void _ZN7S7686C4D1Ev();
extern void _ZN7S7686C4D0Ev();
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
extern void _ZN7S7686C63v17Ev();
extern void _ZN7S7686C43v18Ev();
extern void _ZN7S7686C43v19Ev();
extern void _ZN7S7686C43v20Ev();
static  VTBL_ENTRY _tg__ZTV7S7686C4__7S7686C1[] = {
  0,
  ABISELECT(16,12),
  0,
  ABISELECT(-32,-16),
  ABISELECT(240,124),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7686C4[0]),
  (VTBL_ENTRY)&_ZN7S7686C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7686C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7686C63v17Ev,
  (VTBL_ENTRY)&_ZN7S7686C43v18Ev,
  (VTBL_ENTRY)&_ZN7S7686C43v19Ev,
  (VTBL_ENTRY)&_ZN7S7686C43v20Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7686C4D1Ev,_ZTv0_n12_N7S7686C4D1Ev)();
extern void ABISELECT(_ZThn16_N7S7686C4D1Ev,_ZThn12_N7S7686C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7686C4D0Ev,_ZTv0_n12_N7S7686C4D0Ev)();
extern void ABISELECT(_ZThn16_N7S7686C4D0Ev,_ZThn12_N7S7686C4D0Ev)() __attribute__((weak));
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
extern void _ZN7S7686C23v13Ev();
extern void _ZN7S7686C23v14Ev();
extern void _ZN7S7686C23v15Ev();
extern void _ZN7S7686C53v16Ev();
static  VTBL_ENTRY _tg__ZTV7S7686C5__7S7686C4__7S7686C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S7686C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C4D1Ev,_ZTv0_n12_N7S7686C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C4D0Ev,_ZTv0_n12_N7S7686C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7686C53v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7686C4D1Ev,_ZTv0_n12_N7S7686C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7686C4D0Ev,_ZTv0_n12_N7S7686C4D0Ev)();
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7686C3__7S7686C4__7S7686C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,16),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI7S7686C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C4D1Ev,_ZTv0_n12_N7S7686C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C4D0Ev,_ZTv0_n12_N7S7686C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7686C4D1Ev,_ZTv0_n12_N7S7686C4D1Ev)();
extern void ABISELECT(_ZThn240_N7S7686C4D1Ev,_ZThn124_N7S7686C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7686C4D0Ev,_ZTv0_n12_N7S7686C4D0Ev)();
extern void ABISELECT(_ZThn240_N7S7686C4D0Ev,_ZThn124_N7S7686C4D0Ev)() __attribute__((weak));
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
extern void _ZN7S7686C23v13Ev();
extern void _ZN7S7686C23v14Ev();
extern void _ZN7S7686C23v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7686C2__A1__7S7686C4__7S7686C1[] = {
  0,
  0,
  0,
  ABISELECT(-272,-140),
  ABISELECT(-272,-140),
  ABISELECT(-272,-140),
  ABISELECT(-272,-140),
  ABISELECT(-272,-140),
  ABISELECT(-272,-140),
  ABISELECT(-240,-124),
  ABISELECT(-240,-124),
  (VTBL_ENTRY)&(_ZTI7S7686C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C4D1Ev,_ZTv0_n12_N7S7686C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C4D0Ev,_ZTv0_n12_N7S7686C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7686C5D1Ev,_ZTv0_n12_N7S7686C5D1Ev)();
extern void _ZN7S7686C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7686C5D0Ev,_ZTv0_n12_N7S7686C5D0Ev)();
extern void _ZN7S7686C5D0Ev() __attribute__((weak));
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
extern void _ZN7S7686C23v13Ev();
extern void _ZN7S7686C23v14Ev();
extern void _ZN7S7686C23v15Ev();
extern void _ZN7S7686C53v16Ev();
static  VTBL_ENTRY _tg__ZTV7S7686C5__7S7686C1[] = {
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7686C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C5D1Ev,_ZTv0_n12_N7S7686C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C5D0Ev,_ZTv0_n12_N7S7686C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7686C53v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7686C2D1Ev,_ZTv0_n12_N7S7686C2D1Ev)();
extern void _ZN7S7686C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7686C2D0Ev,_ZTv0_n12_N7S7686C2D0Ev)();
extern void _ZN7S7686C2D0Ev() __attribute__((weak));
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
extern void _ZN7S7686C23v13Ev();
extern void _ZN7S7686C23v14Ev();
extern void _ZN7S7686C23v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7686C27S7686C5__A1__7S7686C1[] = {
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7686C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C2D1Ev,_ZTv0_n12_N7S7686C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C2D0Ev,_ZTv0_n12_N7S7686C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7686C2D1Ev,_ZTv0_n12_N7S7686C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7686C2D0Ev,_ZTv0_n12_N7S7686C2D0Ev)();
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7686C3__7S7686C27S7686C5__A1__7S7686C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI7S7686C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C2D1Ev,_ZTv0_n12_N7S7686C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C2D0Ev,_ZTv0_n12_N7S7686C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7686C5D1Ev,_ZTv0_n12_N7S7686C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7686C5D0Ev,_ZTv0_n12_N7S7686C5D0Ev)();
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7686C3__7S7686C5__7S7686C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI7S7686C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C5D1Ev,_ZTv0_n12_N7S7686C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C5D0Ev,_ZTv0_n12_N7S7686C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7686C6D1Ev,_ZTv0_n12_N7S7686C6D1Ev)();
extern void _ZN7S7686C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7686C6D0Ev,_ZTv0_n12_N7S7686C6D0Ev)();
extern void _ZN7S7686C6D0Ev() __attribute__((weak));
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
extern void _ZN7S7686C63v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7686C6__7S7686C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(240,124),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7686C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C6D1Ev,_ZTv0_n12_N7S7686C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C6D0Ev,_ZTv0_n12_N7S7686C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7686C63v17Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7686C6D1Ev,_ZTv0_n12_N7S7686C6D1Ev)();
extern void ABISELECT(_ZThn240_N7S7686C6D1Ev,_ZThn124_N7S7686C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7686C6D0Ev,_ZTv0_n12_N7S7686C6D0Ev)();
extern void ABISELECT(_ZThn240_N7S7686C6D0Ev,_ZThn124_N7S7686C6D0Ev)() __attribute__((weak));
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
extern void _ZN7S7686C23v13Ev();
extern void _ZN7S7686C23v14Ev();
extern void _ZN7S7686C23v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7686C2__7S7686C6__7S7686C1[] = {
  0,
  0,
  0,
  ABISELECT(-272,-140),
  ABISELECT(-272,-140),
  ABISELECT(-272,-140),
  ABISELECT(-272,-140),
  ABISELECT(-272,-140),
  ABISELECT(-272,-140),
  ABISELECT(-240,-124),
  ABISELECT(-240,-124),
  (VTBL_ENTRY)&(_ZTI7S7686C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C6D1Ev,_ZTv0_n12_N7S7686C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C6D0Ev,_ZTv0_n12_N7S7686C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7686C6D1Ev,_ZTv0_n12_N7S7686C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7686C6D0Ev,_ZTv0_n12_N7S7686C6D0Ev)();
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7686C3__7S7686C6__7S7686C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,16),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI7S7686C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C6D1Ev,_ZTv0_n12_N7S7686C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C6D0Ev,_ZTv0_n12_N7S7686C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7686C2D1Ev,_ZTv0_n12_N7S7686C2D1Ev)();
extern void _ZN7S7686C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7686C2D0Ev,_ZTv0_n12_N7S7686C2D0Ev)();
extern void _ZN7S7686C2D0Ev() __attribute__((weak));
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
extern void _ZN7S7686C23v13Ev();
extern void _ZN7S7686C23v14Ev();
extern void _ZN7S7686C23v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7686C2__A2__7S7686C1[] = {
  ABISELECT(-272,-140),
  ABISELECT(-272,-140),
  ABISELECT(-272,-140),
  ABISELECT(-272,-140),
  ABISELECT(-272,-140),
  ABISELECT(-272,-140),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7686C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C2D1Ev,_ZTv0_n12_N7S7686C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C2D0Ev,_ZTv0_n12_N7S7686C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7686C2D1Ev,_ZTv0_n12_N7S7686C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7686C2D0Ev,_ZTv0_n12_N7S7686C2D0Ev)();
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7686C3__7S7686C2__A2__7S7686C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(272,140),
  ABISELECT(272,140),
  (VTBL_ENTRY)&(_ZTI7S7686C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C2D1Ev,_ZTv0_n12_N7S7686C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C2D0Ev,_ZTv0_n12_N7S7686C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
};
static  VTT_ENTRY vtt_S7686C1[] = {
  {&(_ZTV7S7686C1[12]),  12,99},
  {&(_tg__ZTV7S7686C2__A__7S7686C1[9]),  9,19},
  {&(_tg__ZTV7S7686C2__A__7S7686C1[9]),  9,19},
  {&(_tg__ZTV7S7686C4__7S7686C1[13]),  13,24},
  {&(_tg__ZTV7S7686C5__7S7686C4__7S7686C1[13]),  13,24},
  {&(_tg__ZTV7S7686C3__7S7686C4__7S7686C1[8]),  8,15},
  {&(_tg__ZTV7S7686C4__7S7686C1[13]),  13,24},
  {&(_tg__ZTV7S7686C2__A1__7S7686C4__7S7686C1[12]),  12,22},
  {&(_ZTV7S7686C1[12]),  12,99},
  {&(_ZTV7S7686C1[42]),  42,99},
  {&(_ZTV7S7686C1[66]),  66,99},
  {&(_ZTV7S7686C1[42]),  42,99},
  {&(_ZTV7S7686C1[89]),  89,99},
  {&(_tg__ZTV7S7686C5__7S7686C1[9]),  9,20},
  {&(_tg__ZTV7S7686C27S7686C5__A1__7S7686C1[9]),  9,19},
  {&(_tg__ZTV7S7686C3__7S7686C27S7686C5__A1__7S7686C1[8]),  8,15},
  {&(_tg__ZTV7S7686C3__7S7686C5__7S7686C1[8]),  8,15},
  {&(_tg__ZTV7S7686C6__7S7686C1[10]),  10,18},
  {&(_tg__ZTV7S7686C2__7S7686C6__7S7686C1[12]),  12,22},
  {&(_tg__ZTV7S7686C3__7S7686C6__7S7686C1[8]),  8,15},
  {&(_tg__ZTV7S7686C2__A2__7S7686C1[9]),  9,19},
  {&(_tg__ZTV7S7686C3__7S7686C2__A2__7S7686C1[8]),  8,15},
};
extern VTBL_ENTRY _ZTI7S7686C1[];
extern  VTBL_ENTRY _ZTV7S7686C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7686C1[];
static VTBL_ENTRY alt_thunk_names27[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7686C6D0Ev,_ZTv0_n12_N7S7686C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S7686C6D0Ev,_ZThn124_N7S7686C6D0Ev),
  (VTBL_ENTRY)_ZN7S7686C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7686C6D1Ev,_ZTv0_n12_N7S7686C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S7686C6D1Ev,_ZThn124_N7S7686C6D1Ev),
  (VTBL_ENTRY)_ZN7S7686C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7686C2D0Ev,_ZTv0_n12_N7S7686C2D0Ev), // 
  (VTBL_ENTRY)_ZN7S7686C2D0Ev,
  (VTBL_ENTRY)_ZN7S7686C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7686C2D1Ev,_ZTv0_n12_N7S7686C2D1Ev), // 
  (VTBL_ENTRY)_ZN7S7686C2D1Ev,
  (VTBL_ENTRY)_ZN7S7686C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7686C5D0Ev,_ZTv0_n12_N7S7686C5D0Ev), // 
  (VTBL_ENTRY)_ZN7S7686C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7686C5D1Ev,_ZTv0_n12_N7S7686C5D1Ev), // 
  (VTBL_ENTRY)_ZN7S7686C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7686C4D0Ev,_ZTv0_n12_N7S7686C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S7686C4D0Ev,_ZThn124_N7S7686C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7686C4D0Ev,_ZThn12_N7S7686C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7686C4D1Ev,_ZTv0_n12_N7S7686C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S7686C4D1Ev,_ZThn124_N7S7686C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7686C4D1Ev,_ZThn12_N7S7686C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7686C1D0Ev,_ZTv0_n12_N7S7686C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N7S7686C1D0Ev,_ZThn140_N7S7686C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7686C1D0Ev,_ZThn28_N7S7686C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7686C1D1Ev,_ZTv0_n12_N7S7686C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N7S7686C1D1Ev,_ZThn140_N7S7686C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7686C1D1Ev,_ZThn28_N7S7686C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7686C1 = {  "S7686C1", // class name
  bases_S7686C1, 7,
  &(vtc_S7686C1[0]), // expected_vtbl_contents
  &(vtt_S7686C1[0]), // expected_vtt_contents
  ABISELECT(304,156), // object size
  NSPAIRA(_ZTI7S7686C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7686C1),99, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7686C1),22, //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  S20841C3_nt  {
  virtual void  v3(); // _ZN11S20841C3_nt2v3Ev
  virtual void  v4(); // _ZN11S20841C3_nt2v4Ev
  virtual void  v5(); // _ZN11S20841C3_nt2v5Ev
  virtual void  v6(); // _ZN11S20841C3_nt2v6Ev
  ~S20841C3_nt(); // tgen
  S20841C3_nt(); // tgen
};
//SIG(-1 S20841C3_nt) C1{ v1 v2 v3 v4}


void  S20841C3_nt ::v3(){vfunc_called(this, "_ZN11S20841C3_nt2v3Ev");}
void  S20841C3_nt ::v4(){vfunc_called(this, "_ZN11S20841C3_nt2v4Ev");}
void  S20841C3_nt ::v5(){vfunc_called(this, "_ZN11S20841C3_nt2v5Ev");}
void  S20841C3_nt ::v6(){vfunc_called(this, "_ZN11S20841C3_nt2v6Ev");}
S20841C3_nt ::~S20841C3_nt(){ note_dtor("S20841C3_nt", this);} // tgen
S20841C3_nt ::S20841C3_nt(){ note_ctor("S20841C3_nt", this);} // tgen

//skip512 S20841C3_nt

#else // __cplusplus

extern void _ZN11S20841C3_ntC1Ev();
extern void _ZN11S20841C3_ntD1Ev();
Name_Map name_map_S20841C3_nt[] = {
  NSPAIR(_ZN11S20841C3_ntC1Ev),
  NSPAIR(_ZN11S20841C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S20841C3_nt[];
extern void _ZN11S20841C3_nt2v3Ev();
extern void _ZN11S20841C3_nt2v4Ev();
extern void _ZN11S20841C3_nt2v5Ev();
extern void _ZN11S20841C3_nt2v6Ev();
static  VTBL_ENTRY vtc_S20841C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S20841C3_nt[0]),
  (VTBL_ENTRY)&_ZN11S20841C3_nt2v3Ev,
  (VTBL_ENTRY)&_ZN11S20841C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN11S20841C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S20841C3_nt2v6Ev,
};
extern VTBL_ENTRY _ZTI11S20841C3_nt[];
VTBL_ENTRY *P__ZTI11S20841C3_nt = _ZTI11S20841C3_nt; 
extern  VTBL_ENTRY _ZTV11S20841C3_nt[];
Class_Descriptor cd_S20841C3_nt = {  "S20841C3_nt", // class name
  0,0,//no base classes
  &(vtc_S20841C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S20841C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S20841C3_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  S20841C5_nt  {
  long double s20841c5f0[2];
  virtual void  v19(); // _ZN11S20841C5_nt3v19Ev
  ~S20841C5_nt(); // tgen
  S20841C5_nt(); // tgen
};
//SIG(-1 S20841C5_nt) C1{ v1 FD[2]}


void  S20841C5_nt ::v19(){vfunc_called(this, "_ZN11S20841C5_nt3v19Ev");}
S20841C5_nt ::~S20841C5_nt(){ note_dtor("S20841C5_nt", this);} // tgen
S20841C5_nt ::S20841C5_nt(){ note_ctor("S20841C5_nt", this);} // tgen

//skip512 S20841C5_nt

#else // __cplusplus

extern void _ZN11S20841C5_ntC1Ev();
extern void _ZN11S20841C5_ntD1Ev();
Name_Map name_map_S20841C5_nt[] = {
  NSPAIR(_ZN11S20841C5_ntC1Ev),
  NSPAIR(_ZN11S20841C5_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S20841C5_nt[];
extern void _ZN11S20841C5_nt3v19Ev();
static  VTBL_ENTRY vtc_S20841C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S20841C5_nt[0]),
  (VTBL_ENTRY)&_ZN11S20841C5_nt3v19Ev,
};
extern VTBL_ENTRY _ZTI11S20841C5_nt[];
VTBL_ENTRY *P__ZTI11S20841C5_nt = _ZTI11S20841C5_nt; 
extern  VTBL_ENTRY _ZTV11S20841C5_nt[];
Class_Descriptor cd_S20841C5_nt = {  "S20841C5_nt", // class name
  0,0,//no base classes
  &(vtc_S20841C5_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI11S20841C5_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S20841C5_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  S20841C2  : virtual S20841C3_nt {
  ::S15319C7 s20841c2f0;
  long double s20841c2f1;
  ::S20841C5_nt s20841c2f2;
  ::S15319C7 s20841c2f3;
  virtual  ~S20841C2(); // _ZN8S20841C2D2Ev
  virtual void  v7(); // _ZN8S20841C22v7Ev
  virtual void  v8(); // _ZN8S20841C22v8Ev
  virtual void  v9(); // _ZN8S20841C22v9Ev
  virtual void  v10(); // _ZN8S20841C23v10Ev
  virtual void  v11(); // _ZN8S20841C23v11Ev
  virtual void  v12(); // _ZN8S20841C23v12Ev
  S20841C2(); // tgen
};
//SIG(-1 S20841C2) C1{ VBC2{ v7 v8 v9 v10} vd v1 v2 v3 v4 v5 v6 FC3{} FD FC4{ v11 FD[2]} FC3}


 S20841C2 ::~S20841C2(){ note_dtor("S20841C2", this);}
void  S20841C2 ::v7(){vfunc_called(this, "_ZN8S20841C22v7Ev");}
void  S20841C2 ::v8(){vfunc_called(this, "_ZN8S20841C22v8Ev");}
void  S20841C2 ::v9(){vfunc_called(this, "_ZN8S20841C22v9Ev");}
void  S20841C2 ::v10(){vfunc_called(this, "_ZN8S20841C23v10Ev");}
void  S20841C2 ::v11(){vfunc_called(this, "_ZN8S20841C23v11Ev");}
void  S20841C2 ::v12(){vfunc_called(this, "_ZN8S20841C23v12Ev");}
S20841C2 ::S20841C2(){ note_ctor("S20841C2", this);} // tgen

static void Test_S20841C2()
{
  extern Class_Descriptor cd_S20841C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,14)];
    init_test(&cd_S20841C2, buf);
    S20841C2 *dp, &lv = *(dp=new (buf) S20841C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,52), "sizeof(S20841C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20841C2)");
    check_base_class_offset(lv, (S20841C3_nt*), 0, "S20841C2");
    check_field_offset(lv, s20841c2f0, ABISELECT(8,4), "S20841C2.s20841c2f0");
    check_field_offset(lv, s20841c2f1, ABISELECT(16,8), "S20841C2.s20841c2f1");
    check_field_offset(lv, s20841c2f2, ABISELECT(32,20), "S20841C2.s20841c2f2");
    check_field_offset(lv, s20841c2f3, ABISELECT(80,48), "S20841C2.s20841c2f3");
    test_class_info(&lv, &cd_S20841C2);
    dp->~S20841C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20841C2(Test_S20841C2, "S20841C2", ABISELECT(96,52));

#else // __cplusplus

extern void _ZN8S20841C2C1Ev();
extern void _ZN8S20841C2D2Ev();
Name_Map name_map_S20841C2[] = {
  NSPAIR(_ZN8S20841C2C1Ev),
  NSPAIR(_ZN8S20841C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20841C3_nt;
extern VTBL_ENTRY _ZTI11S20841C3_nt[];
extern  VTBL_ENTRY _ZTV11S20841C3_nt[];
static Base_Class bases_S20841C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20841C3_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 _ZTI8S20841C2[];
extern void _ZN11S20841C3_nt2v3Ev();
extern void _ZN11S20841C3_nt2v4Ev();
extern void _ZN11S20841C3_nt2v5Ev();
extern void _ZN11S20841C3_nt2v6Ev();
extern void _ZN8S20841C2D1Ev();
extern void _ZN8S20841C2D0Ev();
extern void _ZN8S20841C22v7Ev();
extern void _ZN8S20841C22v8Ev();
extern void _ZN8S20841C22v9Ev();
extern void _ZN8S20841C23v10Ev();
extern void _ZN8S20841C23v11Ev();
extern void _ZN8S20841C23v12Ev();
static  VTBL_ENTRY vtc_S20841C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20841C2[0]),
  (VTBL_ENTRY)&_ZN11S20841C3_nt2v3Ev,
  (VTBL_ENTRY)&_ZN11S20841C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN11S20841C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S20841C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN8S20841C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20841C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20841C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20841C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20841C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20841C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20841C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20841C23v12Ev,
};
extern VTBL_ENTRY _ZTV8S20841C2[];
static  VTT_ENTRY vtt_S20841C2[] = {
  {&(_ZTV8S20841C2[7]),  7,19},
  {&(_ZTV8S20841C2[7]),  7,19},
};
extern VTBL_ENTRY _ZTI8S20841C2[];
extern  VTBL_ENTRY _ZTV8S20841C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20841C2[];
Class_Descriptor cd_S20841C2 = {  "S20841C2", // class name
  bases_S20841C2, 1,
  &(vtc_S20841C2[0]), // expected_vtbl_contents
  &(vtt_S20841C2[0]), // expected_vtt_contents
  ABISELECT(96,52), // object size
  NSPAIRA(_ZTI8S20841C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20841C2),19, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20841C2),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  S20841C7  {
  virtual void  v15(); // _ZN8S20841C73v15Ev
  virtual void  v16(); // _ZN8S20841C73v16Ev
  virtual void  v17(); // _ZN8S20841C73v17Ev
  virtual void  v18(); // _ZN8S20841C73v18Ev
  ~S20841C7(); // tgen
  S20841C7(); // tgen
};
//SIG(-1 S20841C7) C1{ v1 v2 v3 v4}


void  S20841C7 ::v15(){vfunc_called(this, "_ZN8S20841C73v15Ev");}
void  S20841C7 ::v16(){vfunc_called(this, "_ZN8S20841C73v16Ev");}
void  S20841C7 ::v17(){vfunc_called(this, "_ZN8S20841C73v17Ev");}
void  S20841C7 ::v18(){vfunc_called(this, "_ZN8S20841C73v18Ev");}
S20841C7 ::~S20841C7(){ note_dtor("S20841C7", this);} // tgen
S20841C7 ::S20841C7(){ note_ctor("S20841C7", this);} // tgen

static void Test_S20841C7()
{
  extern Class_Descriptor cd_S20841C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20841C7, buf);
    S20841C7 *dp, &lv = *(dp=new (buf) S20841C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20841C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20841C7)");
    test_class_info(&lv, &cd_S20841C7);
    dp->~S20841C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20841C7(Test_S20841C7, "S20841C7", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20841C7C1Ev();
extern void _ZN8S20841C7D1Ev();
Name_Map name_map_S20841C7[] = {
  NSPAIR(_ZN8S20841C7C1Ev),
  NSPAIR(_ZN8S20841C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20841C7[];
extern void _ZN8S20841C73v15Ev();
extern void _ZN8S20841C73v16Ev();
extern void _ZN8S20841C73v17Ev();
extern void _ZN8S20841C73v18Ev();
static  VTBL_ENTRY vtc_S20841C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20841C7[0]),
  (VTBL_ENTRY)&_ZN8S20841C73v15Ev,
  (VTBL_ENTRY)&_ZN8S20841C73v16Ev,
  (VTBL_ENTRY)&_ZN8S20841C73v17Ev,
  (VTBL_ENTRY)&_ZN8S20841C73v18Ev,
};
extern VTBL_ENTRY _ZTI8S20841C7[];
extern  VTBL_ENTRY _ZTV8S20841C7[];
Class_Descriptor cd_S20841C7 = {  "S20841C7", // class name
  0,0,//no base classes
  &(vtc_S20841C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20841C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20841C7),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  S20841C8  : S20841C5_nt {
  ::S15319C7 s20841c8f0;
  ~S20841C8(); // tgen
  S20841C8(); // tgen
};
//SIG(1 S20841C8) C1{ BC2{ v1 FD[2]} FC3{}}


S20841C8 ::~S20841C8(){ note_dtor("S20841C8", this);} // tgen
S20841C8 ::S20841C8(){ note_ctor("S20841C8", this);} // tgen

static void Test_S20841C8()
{
  extern Class_Descriptor cd_S20841C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5,9)];
    init_test(&cd_S20841C8, buf);
    S20841C8 *dp, &lv = *(dp=new (buf) S20841C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S20841C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20841C8)");
    check_base_class_offset(lv, (S20841C5_nt*), 0, "S20841C8");
    check_field_offset(lv, s20841c8f0, ABISELECT(48,28), "S20841C8.s20841c8f0");
    test_class_info(&lv, &cd_S20841C8);
    dp->~S20841C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20841C8(Test_S20841C8, "S20841C8", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN8S20841C8C1Ev();
extern void _ZN8S20841C8D1Ev();
Name_Map name_map_S20841C8[] = {
  NSPAIR(_ZN8S20841C8C1Ev),
  NSPAIR(_ZN8S20841C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20841C5_nt;
extern VTBL_ENTRY _ZTI11S20841C5_nt[];
extern  VTBL_ENTRY _ZTV11S20841C5_nt[];
static Base_Class bases_S20841C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20841C5_nt,    0, //bcp->offset
    0, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S20841C8[];
extern void _ZN11S20841C5_nt3v19Ev();
static  VTBL_ENTRY vtc_S20841C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20841C8[0]),
  (VTBL_ENTRY)&_ZN11S20841C5_nt3v19Ev,
};
extern VTBL_ENTRY _ZTI8S20841C8[];
extern  VTBL_ENTRY _ZTV8S20841C8[];
Class_Descriptor cd_S20841C8 = {  "S20841C8", // class name
  bases_S20841C8, 1,
  &(vtc_S20841C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI8S20841C8),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20841C8),3, //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  S20841C6  : virtual S20841C7 , virtual S20841C5_nt {
  int s20841c6f0;
  ::S20841C8 s20841c6f1[4];
  virtual void  v13(); // _ZN8S20841C63v13Ev
  virtual void  v14(); // _ZN8S20841C63v14Ev
  ~S20841C6(); // tgen
  S20841C6(); // tgen
};
//SIG(-1 S20841C6) C1{ VBC2{ v3 v4 v5 v6} VBC3{ v7 FD[2]} v1 v2 Fi FC4{ BC3 FC5{}}[4]}


void  S20841C6 ::v13(){vfunc_called(this, "_ZN8S20841C63v13Ev");}
void  S20841C6 ::v14(){vfunc_called(this, "_ZN8S20841C63v14Ev");}
S20841C6 ::~S20841C6(){ note_dtor("S20841C6", this);} // tgen
S20841C6 ::S20841C6(){ note_ctor("S20841C6", this);} // tgen

static void Test_S20841C6()
{
  extern Class_Descriptor cd_S20841C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(21,42)];
    init_test(&cd_S20841C6, buf);
    S20841C6 *dp, &lv = *(dp=new (buf) S20841C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,164), "sizeof(S20841C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20841C6)");
    check_base_class_offset(lv, (S20841C7*), 0, "S20841C6");
    check_base_class_offset(lv, (S20841C5_nt*), ABISELECT(272,136), "S20841C6");
    check_field_offset(lv, s20841c6f0, ABISELECT(8,4), "S20841C6.s20841c6f0");
    check_field_offset(lv, s20841c6f1, ABISELECT(16,8), "S20841C6.s20841c6f1");
    test_class_info(&lv, &cd_S20841C6);
    dp->~S20841C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20841C6(Test_S20841C6, "S20841C6", ABISELECT(320,164));

#else // __cplusplus

extern void _ZN8S20841C6C1Ev();
extern void _ZN8S20841C6D1Ev();
Name_Map name_map_S20841C6[] = {
  NSPAIR(_ZN8S20841C6C1Ev),
  NSPAIR(_ZN8S20841C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20841C7;
extern VTBL_ENTRY _ZTI8S20841C7[];
extern  VTBL_ENTRY _ZTV8S20841C7[];
extern Class_Descriptor cd_S20841C5_nt;
extern VTBL_ENTRY _ZTI11S20841C5_nt[];
extern  VTBL_ENTRY _ZTV11S20841C5_nt[];
static Base_Class bases_S20841C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20841C7,    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},
  {&cd_S20841C5_nt,    ABISELECT(272,136), //bcp->offset
    14, //bcp->virtual_function_table_offset
    3, //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
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20841C6[];
extern void _ZN8S20841C73v15Ev();
extern void _ZN8S20841C73v16Ev();
extern void _ZN8S20841C73v17Ev();
extern void _ZN8S20841C73v18Ev();
extern void _ZN8S20841C63v13Ev();
extern void _ZN8S20841C63v14Ev();
extern void _ZN11S20841C5_nt3v19Ev();
static  VTBL_ENTRY vtc_S20841C6[] = {
  ABISELECT(272,136),
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20841C6[0]),
  (VTBL_ENTRY)&_ZN8S20841C73v15Ev,
  (VTBL_ENTRY)&_ZN8S20841C73v16Ev,
  (VTBL_ENTRY)&_ZN8S20841C73v17Ev,
  (VTBL_ENTRY)&_ZN8S20841C73v18Ev,
  (VTBL_ENTRY)&_ZN8S20841C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20841C63v14Ev,
  0,
  ABISELECT(-272,-136),
  (VTBL_ENTRY)&(_ZTI8S20841C6[0]),
  (VTBL_ENTRY)&_ZN11S20841C5_nt3v19Ev,
};
extern VTBL_ENTRY _ZTV8S20841C6[];
static  VTT_ENTRY vtt_S20841C6[] = {
  {&(_ZTV8S20841C6[8]),  8,18},
  {&(_ZTV8S20841C6[8]),  8,18},
  {&(_ZTV8S20841C6[17]),  17,18},
};
extern VTBL_ENTRY _ZTI8S20841C6[];
extern  VTBL_ENTRY _ZTV8S20841C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20841C6[];
Class_Descriptor cd_S20841C6 = {  "S20841C6", // class name
  bases_S20841C6, 2,
  &(vtc_S20841C6[0]), // expected_vtbl_contents
  &(vtt_S20841C6[0]), // expected_vtt_contents
  ABISELECT(320,164), // object size
  NSPAIRA(_ZTI8S20841C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20841C6),18, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20841C6),3, //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  S20841C1  : virtual S20841C2 {
  ::S20841C6 s20841c1f0;
  virtual  ~S20841C1(); // _ZN8S20841C1D2Ev
  virtual void  v1(); // _ZN8S20841C12v1Ev
  virtual void  v2(); // _ZN8S20841C12v2Ev
  S20841C1(); // tgen
};
//SIG(1 S20841C1) C1{ VBC2{ VBC3{ v3 v4 v5 v6} vd v7 v8 v9 v10 v11 v12 FC4{} FD FC5{ v19 FD[2]} FC4} vd v1 v2 FC6{ VBC7{ v15 v16 v17 v18} VBC5 v13 v14 Fi FC8{ BC5 FC4}[4]}}


 S20841C1 ::~S20841C1(){ note_dtor("S20841C1", this);}
void  S20841C1 ::v1(){vfunc_called(this, "_ZN8S20841C12v1Ev");}
void  S20841C1 ::v2(){vfunc_called(this, "_ZN8S20841C12v2Ev");}
S20841C1 ::S20841C1(){ note_ctor("S20841C1", this);} // tgen

static void Test_S20841C1()
{
  extern Class_Descriptor cd_S20841C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(28,56)];
    init_test(&cd_S20841C1, buf);
    S20841C1 *dp, &lv = *(dp=new (buf) S20841C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,220), "sizeof(S20841C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20841C1)");
    check_base_class_offset(lv, (S20841C3_nt*)(S20841C2*), 0, "S20841C1");
    check_base_class_offset(lv, (S20841C2*), ABISELECT(336,168), "S20841C1");
    check_field_offset(lv, s20841c1f0, ABISELECT(16,4), "S20841C1.s20841c1f0");
    test_class_info(&lv, &cd_S20841C1);
    dp->~S20841C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20841C1(Test_S20841C1, "S20841C1", ABISELECT(432,220));

#else // __cplusplus

extern void _ZN8S20841C1C1Ev();
extern void _ZN8S20841C1D2Ev();
Name_Map name_map_S20841C1[] = {
  NSPAIR(_ZN8S20841C1C1Ev),
  NSPAIR(_ZN8S20841C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20841C3_nt;
extern VTBL_ENTRY _ZTI11S20841C3_nt[];
extern  VTBL_ENTRY _ZTV11S20841C3_nt[];
extern Class_Descriptor cd_S20841C2;
extern VTBL_ENTRY _ZTI8S20841C2[];
extern  VTBL_ENTRY _ZTV8S20841C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20841C2[];
static Base_Class bases_S20841C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20841C3_nt,    0, //bcp->offset
    -1, //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
    1, //immediately_derived
  0, 1},
  {&cd_S20841C2,    ABISELECT(336,168), //bcp->offset
    16, //bcp->virtual_function_table_offset
    14, //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},
  {0}};
extern VTBL_ENTRY _ZTI8S20841C1[];
extern void _ZN11S20841C3_nt2v3Ev();
extern void _ZN11S20841C3_nt2v4Ev();
extern void _ZN11S20841C3_nt2v5Ev();
extern void _ZN11S20841C3_nt2v6Ev();
extern void _ZN8S20841C1D1Ev();
extern void _ZN8S20841C1D0Ev();
extern void _ZN8S20841C12v1Ev();
extern void _ZN8S20841C12v2Ev();
extern void _ZN11S20841C3_nt2v3Ev();
extern void _ZN11S20841C3_nt2v4Ev();
extern void _ZN11S20841C3_nt2v5Ev();
extern void _ZN11S20841C3_nt2v6Ev();
extern void ABISELECT(_ZTv0_n64_N8S20841C1D1Ev,_ZTv0_n32_N8S20841C1D1Ev)();
extern void ABISELECT(_ZThn336_N8S20841C1D1Ev,_ZThn168_N8S20841C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S20841C1D0Ev,_ZTv0_n32_N8S20841C1D0Ev)();
extern void ABISELECT(_ZThn336_N8S20841C1D0Ev,_ZThn168_N8S20841C1D0Ev)() __attribute__((weak));
extern void _ZN8S20841C22v7Ev();
extern void _ZN8S20841C22v8Ev();
extern void _ZN8S20841C22v9Ev();
extern void _ZN8S20841C23v10Ev();
extern void _ZN8S20841C23v11Ev();
extern void _ZN8S20841C23v12Ev();
static  VTBL_ENTRY vtc_S20841C1[] = {
  0,
  ABISELECT(336,168),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20841C1[0]),
  (VTBL_ENTRY)&_ZN11S20841C3_nt2v3Ev,
  (VTBL_ENTRY)&_ZN11S20841C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN11S20841C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S20841C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN8S20841C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20841C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20841C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20841C12v2Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-336,-168),
  ABISELECT(-336,-168),
  ABISELECT(-336,-168),
  ABISELECT(-336,-168),
  ABISELECT(-336,-168),
  ABISELECT(-336,-168),
  ABISELECT(-336,-168),
  (VTBL_ENTRY)&(_ZTI8S20841C1[0]),
  (VTBL_ENTRY)&_ZN11S20841C3_nt2v3Ev,
  (VTBL_ENTRY)&_ZN11S20841C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN11S20841C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S20841C3_nt2v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20841C1D1Ev,_ZTv0_n32_N8S20841C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20841C1D0Ev,_ZTv0_n32_N8S20841C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20841C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20841C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20841C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20841C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20841C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20841C23v12Ev,
};
extern VTBL_ENTRY _ZTV8S20841C1[];
extern void _ZN11S20841C3_nt2v3Ev();
extern void _ZN11S20841C3_nt2v4Ev();
extern void _ZN11S20841C3_nt2v5Ev();
extern void _ZN11S20841C3_nt2v6Ev();
extern void _ZN8S20841C2D1Ev();
extern void _ZN8S20841C2D0Ev();
extern void _ZN8S20841C22v7Ev();
extern void _ZN8S20841C22v8Ev();
extern void _ZN8S20841C22v9Ev();
extern void _ZN8S20841C23v10Ev();
extern void _ZN8S20841C23v11Ev();
extern void _ZN8S20841C23v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20841C2__8S20841C1[] = {
  ABISELECT(-336,-168),
  ABISELECT(-336,-168),
  ABISELECT(-336,-168),
  ABISELECT(-336,-168),
  ABISELECT(-336,-168),
  0,
  (VTBL_ENTRY)&(_ZTI8S20841C2[0]),
  (VTBL_ENTRY)&_ZN11S20841C3_nt2v3Ev,
  (VTBL_ENTRY)&_ZN11S20841C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN11S20841C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S20841C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN8S20841C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20841C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20841C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20841C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20841C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20841C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20841C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20841C23v12Ev,
};
extern void _ZN11S20841C3_nt2v3Ev();
extern void _ZN11S20841C3_nt2v4Ev();
extern void _ZN11S20841C3_nt2v5Ev();
extern void _ZN11S20841C3_nt2v6Ev();
static  VTBL_ENTRY _tg__ZTV11S20841C3_nt__8S20841C2__8S20841C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(336,168),
  (VTBL_ENTRY)&(_ZTI8S20841C2[0]),
  (VTBL_ENTRY)&_ZN11S20841C3_nt2v3Ev,
  (VTBL_ENTRY)&_ZN11S20841C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN11S20841C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S20841C3_nt2v6Ev,
};
static  VTT_ENTRY vtt_S20841C1[] = {
  {&(_ZTV8S20841C1[8]),  8,42},
  {&(_ZTV8S20841C1[30]),  30,42},
  {&(_ZTV8S20841C1[8]),  8,42},
  {&(_tg__ZTV8S20841C2__8S20841C1[7]),  7,19},
  {&(_tg__ZTV11S20841C3_nt__8S20841C2__8S20841C1[6]),  6,10},
};
extern VTBL_ENTRY _ZTI8S20841C1[];
extern  VTBL_ENTRY _ZTV8S20841C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20841C1[];
static VTBL_ENTRY alt_thunk_names28[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S20841C1D0Ev,_ZTv0_n32_N8S20841C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N8S20841C1D0Ev,_ZThn168_N8S20841C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S20841C1D1Ev,_ZTv0_n32_N8S20841C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N8S20841C1D1Ev,_ZThn168_N8S20841C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20841C1 = {  "S20841C1", // class name
  bases_S20841C1, 2,
  &(vtc_S20841C1[0]), // expected_vtbl_contents
  &(vtt_S20841C1[0]), // expected_vtt_contents
  ABISELECT(432,220), // object size
  NSPAIRA(_ZTI8S20841C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20841C1),42, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20841C1),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names28,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19961C2_nt  {
  virtual void  v1(); // _ZN11S19961C2_nt2v1Ev
  virtual void  v2(); // _ZN11S19961C2_nt2v2Ev
  virtual void  v3(); // _ZN11S19961C2_nt2v3Ev
  virtual void  v4(); // _ZN11S19961C2_nt2v4Ev
  virtual void  v5(); // _ZN11S19961C2_nt2v5Ev
  virtual void  v6(); // _ZN11S19961C2_nt2v6Ev
  ~S19961C2_nt(); // tgen
  S19961C2_nt(); // tgen
};
//SIG(-1 S19961C2_nt) C1{ v1 v2 v3 v4 v5 v6}


void  S19961C2_nt ::v1(){vfunc_called(this, "_ZN11S19961C2_nt2v1Ev");}
void  S19961C2_nt ::v2(){vfunc_called(this, "_ZN11S19961C2_nt2v2Ev");}
void  S19961C2_nt ::v3(){vfunc_called(this, "_ZN11S19961C2_nt2v3Ev");}
void  S19961C2_nt ::v4(){vfunc_called(this, "_ZN11S19961C2_nt2v4Ev");}
void  S19961C2_nt ::v5(){vfunc_called(this, "_ZN11S19961C2_nt2v5Ev");}
void  S19961C2_nt ::v6(){vfunc_called(this, "_ZN11S19961C2_nt2v6Ev");}
S19961C2_nt ::~S19961C2_nt(){ note_dtor("S19961C2_nt", this);} // tgen
S19961C2_nt ::S19961C2_nt(){ note_ctor("S19961C2_nt", this);} // tgen

//skip512 S19961C2_nt

#else // __cplusplus

extern void _ZN11S19961C2_ntC1Ev();
extern void _ZN11S19961C2_ntD1Ev();
Name_Map name_map_S19961C2_nt[] = {
  NSPAIR(_ZN11S19961C2_ntC1Ev),
  NSPAIR(_ZN11S19961C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S19961C2_nt[];
extern void _ZN11S19961C2_nt2v1Ev();
extern void _ZN11S19961C2_nt2v2Ev();
extern void _ZN11S19961C2_nt2v3Ev();
extern void _ZN11S19961C2_nt2v4Ev();
extern void _ZN11S19961C2_nt2v5Ev();
extern void _ZN11S19961C2_nt2v6Ev();
static  VTBL_ENTRY vtc_S19961C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S19961C2_nt[0]),
  (VTBL_ENTRY)&_ZN11S19961C2_nt2v1Ev,
  (VTBL_ENTRY)&_ZN11S19961C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN11S19961C2_nt2v3Ev,
  (VTBL_ENTRY)&_ZN11S19961C2_nt2v4Ev,
  (VTBL_ENTRY)&_ZN11S19961C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S19961C2_nt2v6Ev,
};
extern VTBL_ENTRY _ZTI11S19961C2_nt[];
VTBL_ENTRY *P__ZTI11S19961C2_nt = _ZTI11S19961C2_nt; 
extern  VTBL_ENTRY _ZTV11S19961C2_nt[];
Class_Descriptor cd_S19961C2_nt = {  "S19961C2_nt", // class name
  0,0,//no base classes
  &(vtc_S19961C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S19961C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S19961C2_nt),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19961C4_nt  {
  void *s19961c4f0;
  long s19961c4f1[6];
  char s19961c4f2:5;
  virtual void  v7(); // _ZN11S19961C4_nt2v7Ev
  virtual void  v8(); // _ZN11S19961C4_nt2v8Ev
  virtual void  v9(); // _ZN11S19961C4_nt2v9Ev
  virtual void  v10(); // _ZN11S19961C4_nt3v10Ev
  ~S19961C4_nt(); // tgen
  S19961C4_nt(); // tgen
};
//SIG(-1 S19961C4_nt) C1{ v1 v2 v3 v4 Fp Fl[6] Fc:5}


void  S19961C4_nt ::v7(){vfunc_called(this, "_ZN11S19961C4_nt2v7Ev");}
void  S19961C4_nt ::v8(){vfunc_called(this, "_ZN11S19961C4_nt2v8Ev");}
void  S19961C4_nt ::v9(){vfunc_called(this, "_ZN11S19961C4_nt2v9Ev");}
void  S19961C4_nt ::v10(){vfunc_called(this, "_ZN11S19961C4_nt3v10Ev");}
S19961C4_nt ::~S19961C4_nt(){ note_dtor("S19961C4_nt", this);} // tgen
S19961C4_nt ::S19961C4_nt(){ note_ctor("S19961C4_nt", this);} // tgen

//skip512 S19961C4_nt

#else // __cplusplus

extern void _ZN11S19961C4_ntC1Ev();
extern void _ZN11S19961C4_ntD1Ev();
Name_Map name_map_S19961C4_nt[] = {
  NSPAIR(_ZN11S19961C4_ntC1Ev),
  NSPAIR(_ZN11S19961C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S19961C4_nt[];
extern void _ZN11S19961C4_nt2v7Ev();
extern void _ZN11S19961C4_nt2v8Ev();
extern void _ZN11S19961C4_nt2v9Ev();
extern void _ZN11S19961C4_nt3v10Ev();
static  VTBL_ENTRY vtc_S19961C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S19961C4_nt[0]),
  (VTBL_ENTRY)&_ZN11S19961C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19961C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S19961C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S19961C4_nt3v10Ev,
};
extern VTBL_ENTRY _ZTI11S19961C4_nt[];
VTBL_ENTRY *P__ZTI11S19961C4_nt = _ZTI11S19961C4_nt; 
extern  VTBL_ENTRY _ZTV11S19961C4_nt[];
Class_Descriptor cd_S19961C4_nt = {  "S19961C4_nt", // class name
  0,0,//no base classes
  &(vtc_S19961C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI11S19961C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S19961C4_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  S19961C3  : S19961C4_nt {
  int s19961c3f0;
  virtual  ~S19961C3(); // _ZN8S19961C3D1Ev
  virtual void  v11(); // _ZN8S19961C33v11Ev
  virtual void  v12(); // _ZN8S19961C33v12Ev
  S19961C3(); // tgen
};
//SIG(-1 S19961C3) C1{ BC2{ v3 v4 v5 v6 Fp Fl[6] Fc:5} vd v1 v2 Fi}


 S19961C3 ::~S19961C3(){ note_dtor("S19961C3", this);}
void  S19961C3 ::v11(){vfunc_called(this, "_ZN8S19961C33v11Ev");}
void  S19961C3 ::v12(){vfunc_called(this, "_ZN8S19961C33v12Ev");}
S19961C3 ::S19961C3(){ note_ctor("S19961C3", this);} // tgen

static void Test_S19961C3()
{
  extern Class_Descriptor cd_S19961C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,11)];
    init_test(&cd_S19961C3, buf);
    S19961C3 *dp, &lv = *(dp=new (buf) S19961C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,40), "sizeof(S19961C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19961C3)");
    check_base_class_offset(lv, (S19961C4_nt*), 0, "S19961C3");
    check_field_offset(lv, s19961c3f0, ABISELECT(68,36), "S19961C3.s19961c3f0");
    test_class_info(&lv, &cd_S19961C3);
    dp->~S19961C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19961C3(Test_S19961C3, "S19961C3", ABISELECT(72,40));

#else // __cplusplus

extern void _ZN8S19961C3C1Ev();
extern void _ZN8S19961C3D1Ev();
Name_Map name_map_S19961C3[] = {
  NSPAIR(_ZN8S19961C3C1Ev),
  NSPAIR(_ZN8S19961C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19961C4_nt;
extern VTBL_ENTRY _ZTI11S19961C4_nt[];
extern  VTBL_ENTRY _ZTV11S19961C4_nt[];
static Base_Class bases_S19961C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19961C4_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 _ZTI8S19961C3[];
extern void _ZN11S19961C4_nt2v7Ev();
extern void _ZN11S19961C4_nt2v8Ev();
extern void _ZN11S19961C4_nt2v9Ev();
extern void _ZN11S19961C4_nt3v10Ev();
extern void _ZN8S19961C3D1Ev();
extern void _ZN8S19961C3D0Ev();
extern void _ZN8S19961C33v11Ev();
extern void _ZN8S19961C33v12Ev();
static  VTBL_ENTRY vtc_S19961C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19961C3[0]),
  (VTBL_ENTRY)&_ZN11S19961C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19961C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S19961C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S19961C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN8S19961C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19961C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19961C33v11Ev,
  (VTBL_ENTRY)&_ZN8S19961C33v12Ev,
};
extern VTBL_ENTRY _ZTI8S19961C3[];
extern  VTBL_ENTRY _ZTV8S19961C3[];
Class_Descriptor cd_S19961C3 = {  "S19961C3", // class name
  bases_S19961C3, 1,
  &(vtc_S19961C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,40), // object size
  NSPAIRA(_ZTI8S19961C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19961C3),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  S19961C6  {
  char s19961c6f0[8];
  virtual void  v15(); // _ZN8S19961C63v15Ev
  ~S19961C6(); // tgen
  S19961C6(); // tgen
};
//SIG(-1 S19961C6) C1{ v1 Fc[8]}


void  S19961C6 ::v15(){vfunc_called(this, "_ZN8S19961C63v15Ev");}
S19961C6 ::~S19961C6(){ note_dtor("S19961C6", this);} // tgen
S19961C6 ::S19961C6(){ note_ctor("S19961C6", this);} // tgen

static void Test_S19961C6()
{
  extern Class_Descriptor cd_S19961C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S19961C6, buf);
    S19961C6 *dp, &lv = *(dp=new (buf) S19961C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S19961C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19961C6)");
    check_field_offset(lv, s19961c6f0, ABISELECT(8,4), "S19961C6.s19961c6f0");
    test_class_info(&lv, &cd_S19961C6);
    dp->~S19961C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19961C6(Test_S19961C6, "S19961C6", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S19961C6C1Ev();
extern void _ZN8S19961C6D1Ev();
Name_Map name_map_S19961C6[] = {
  NSPAIR(_ZN8S19961C6C1Ev),
  NSPAIR(_ZN8S19961C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19961C6[];
extern void _ZN8S19961C63v15Ev();
static  VTBL_ENTRY vtc_S19961C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19961C6[0]),
  (VTBL_ENTRY)&_ZN8S19961C63v15Ev,
};
extern VTBL_ENTRY _ZTI8S19961C6[];
extern  VTBL_ENTRY _ZTV8S19961C6[];
Class_Descriptor cd_S19961C6 = {  "S19961C6", // class name
  0,0,//no base classes
  &(vtc_S19961C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S19961C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19961C6),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  S19961C8  {
  virtual void  v16(); // _ZN8S19961C83v16Ev
  virtual void  v17(); // _ZN8S19961C83v17Ev
  virtual void  v18(); // _ZN8S19961C83v18Ev
  virtual void  v19(); // _ZN8S19961C83v19Ev
  ~S19961C8(); // tgen
  S19961C8(); // tgen
};
//SIG(-1 S19961C8) C1{ v1 v2 v3 v4}


void  S19961C8 ::v16(){vfunc_called(this, "_ZN8S19961C83v16Ev");}
void  S19961C8 ::v17(){vfunc_called(this, "_ZN8S19961C83v17Ev");}
void  S19961C8 ::v18(){vfunc_called(this, "_ZN8S19961C83v18Ev");}
void  S19961C8 ::v19(){vfunc_called(this, "_ZN8S19961C83v19Ev");}
S19961C8 ::~S19961C8(){ note_dtor("S19961C8", this);} // tgen
S19961C8 ::S19961C8(){ note_ctor("S19961C8", this);} // tgen

static void Test_S19961C8()
{
  extern Class_Descriptor cd_S19961C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19961C8, buf);
    S19961C8 *dp, &lv = *(dp=new (buf) S19961C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19961C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19961C8)");
    test_class_info(&lv, &cd_S19961C8);
    dp->~S19961C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19961C8(Test_S19961C8, "S19961C8", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19961C8C1Ev();
extern void _ZN8S19961C8D1Ev();
Name_Map name_map_S19961C8[] = {
  NSPAIR(_ZN8S19961C8C1Ev),
  NSPAIR(_ZN8S19961C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19961C8[];
extern void _ZN8S19961C83v16Ev();
extern void _ZN8S19961C83v17Ev();
extern void _ZN8S19961C83v18Ev();
extern void _ZN8S19961C83v19Ev();
static  VTBL_ENTRY vtc_S19961C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19961C8[0]),
  (VTBL_ENTRY)&_ZN8S19961C83v16Ev,
  (VTBL_ENTRY)&_ZN8S19961C83v17Ev,
  (VTBL_ENTRY)&_ZN8S19961C83v18Ev,
  (VTBL_ENTRY)&_ZN8S19961C83v19Ev,
};
extern VTBL_ENTRY _ZTI8S19961C8[];
extern  VTBL_ENTRY _ZTV8S19961C8[];
Class_Descriptor cd_S19961C8 = {  "S19961C8", // class name
  0,0,//no base classes
  &(vtc_S19961C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19961C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19961C8),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  S19961C7  : S19961C8 {
  int s19961c7f0;
  ~S19961C7(); // tgen
  S19961C7(); // tgen
};
//SIG(-1 S19961C7) C1{ BC2{ v1 v2 v3 v4} Fi}


S19961C7 ::~S19961C7(){ note_dtor("S19961C7", this);} // tgen
S19961C7 ::S19961C7(){ note_ctor("S19961C7", this);} // tgen

static void Test_S19961C7()
{
  extern Class_Descriptor cd_S19961C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19961C7, buf);
    S19961C7 *dp, &lv = *(dp=new (buf) S19961C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19961C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19961C7)");
    check_base_class_offset(lv, (S19961C8*), 0, "S19961C7");
    check_field_offset(lv, s19961c7f0, ABISELECT(8,4), "S19961C7.s19961c7f0");
    test_class_info(&lv, &cd_S19961C7);
    dp->~S19961C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19961C7(Test_S19961C7, "S19961C7", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19961C7C1Ev();
extern void _ZN8S19961C7D1Ev();
Name_Map name_map_S19961C7[] = {
  NSPAIR(_ZN8S19961C7C1Ev),
  NSPAIR(_ZN8S19961C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19961C8;
extern VTBL_ENTRY _ZTI8S19961C8[];
extern  VTBL_ENTRY _ZTV8S19961C8[];
static Base_Class bases_S19961C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19961C8,    0, //bcp->offset
    0, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S19961C7[];
extern void _ZN8S19961C83v16Ev();
extern void _ZN8S19961C83v17Ev();
extern void _ZN8S19961C83v18Ev();
extern void _ZN8S19961C83v19Ev();
static  VTBL_ENTRY vtc_S19961C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19961C7[0]),
  (VTBL_ENTRY)&_ZN8S19961C83v16Ev,
  (VTBL_ENTRY)&_ZN8S19961C83v17Ev,
  (VTBL_ENTRY)&_ZN8S19961C83v18Ev,
  (VTBL_ENTRY)&_ZN8S19961C83v19Ev,
};
extern VTBL_ENTRY _ZTI8S19961C7[];
extern  VTBL_ENTRY _ZTV8S19961C7[];
Class_Descriptor cd_S19961C7 = {  "S19961C7", // class name
  bases_S19961C7, 1,
  &(vtc_S19961C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19961C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19961C7),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  S19961C5  : S19961C6 {
  int s19961c5f0;
  ::S19961C7 s19961c5f1;
  virtual void  v13(); // _ZN8S19961C53v13Ev
  virtual void  v14(); // _ZN8S19961C53v14Ev
  ~S19961C5(); // tgen
  S19961C5(); // tgen
};
//SIG(-1 S19961C5) C1{ BC2{ v3 Fc[8]} v1 v2 Fi FC3{ BC4{ v4 v5 v6 v7} Fi}}


void  S19961C5 ::v13(){vfunc_called(this, "_ZN8S19961C53v13Ev");}
void  S19961C5 ::v14(){vfunc_called(this, "_ZN8S19961C53v14Ev");}
S19961C5 ::~S19961C5(){ note_dtor("S19961C5", this);} // tgen
S19961C5 ::S19961C5(){ note_ctor("S19961C5", this);} // tgen

static void Test_S19961C5()
{
  extern Class_Descriptor cd_S19961C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S19961C5, buf);
    S19961C5 *dp, &lv = *(dp=new (buf) S19961C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S19961C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19961C5)");
    check_base_class_offset(lv, (S19961C6*), 0, "S19961C5");
    check_field_offset(lv, s19961c5f0, ABISELECT(16,12), "S19961C5.s19961c5f0");
    check_field_offset(lv, s19961c5f1, ABISELECT(24,16), "S19961C5.s19961c5f1");
    test_class_info(&lv, &cd_S19961C5);
    dp->~S19961C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19961C5(Test_S19961C5, "S19961C5", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN8S19961C5C1Ev();
extern void _ZN8S19961C5D1Ev();
Name_Map name_map_S19961C5[] = {
  NSPAIR(_ZN8S19961C5C1Ev),
  NSPAIR(_ZN8S19961C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19961C6;
extern VTBL_ENTRY _ZTI8S19961C6[];
extern  VTBL_ENTRY _ZTV8S19961C6[];
static Base_Class bases_S19961C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19961C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S19961C5[];
extern void _ZN8S19961C63v15Ev();
extern void _ZN8S19961C53v13Ev();
extern void _ZN8S19961C53v14Ev();
static  VTBL_ENTRY vtc_S19961C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19961C5[0]),
  (VTBL_ENTRY)&_ZN8S19961C63v15Ev,
  (VTBL_ENTRY)&_ZN8S19961C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19961C53v14Ev,
};
extern VTBL_ENTRY _ZTI8S19961C5[];
extern  VTBL_ENTRY _ZTV8S19961C5[];
Class_Descriptor cd_S19961C5 = {  "S19961C5", // class name
  bases_S19961C5, 1,
  &(vtc_S19961C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI8S19961C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19961C5),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  S19961C1  : virtual S19961C2_nt , virtual S19961C3 {
  ::S19961C5 s19961c1f0;
  ::S19961C2_nt s19961c1f1;
  virtual  ~S19961C1(); // _ZN8S19961C1D2Ev
  S19961C1(); // tgen
};
//SIG(1 S19961C1) C1{ VBC2{ v1 v2 v3 v4 v5 v6} VBC3{ BC4{ v7 v8 v9 v10 Fp Fl[6] Fc:5} vd v11 v12 Fi} vd FC5{ BC6{ v15 Fc[8]} v13 v14 Fi FC7{ BC8{ v16 v17 v18 v19} Fi}} FC2}


 S19961C1 ::~S19961C1(){ note_dtor("S19961C1", this);}
S19961C1 ::S19961C1(){ note_ctor("S19961C1", this);} // tgen

static void Test_S19961C1()
{
  extern Class_Descriptor cd_S19961C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,19)];
    init_test(&cd_S19961C1, buf);
    S19961C1 *dp, &lv = *(dp=new (buf) S19961C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,72), "sizeof(S19961C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19961C1)");
    check_base_class_offset(lv, (S19961C2_nt*), 0, "S19961C1");
    check_base_class_offset(lv, (S19961C4_nt*)(S19961C3*), ABISELECT(56,32), "S19961C1");
    check_base_class_offset(lv, (S19961C3*), ABISELECT(56,32), "S19961C1");
    check_field_offset(lv, s19961c1f0, ABISELECT(8,4), "S19961C1.s19961c1f0");
    check_field_offset(lv, s19961c1f1, ABISELECT(48,28), "S19961C1.s19961c1f1");
    test_class_info(&lv, &cd_S19961C1);
    dp->~S19961C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19961C1(Test_S19961C1, "S19961C1", ABISELECT(128,72));

#else // __cplusplus

extern void _ZN8S19961C1C1Ev();
extern void _ZN8S19961C1D2Ev();
Name_Map name_map_S19961C1[] = {
  NSPAIR(_ZN8S19961C1C1Ev),
  NSPAIR(_ZN8S19961C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19961C2_nt;
extern VTBL_ENTRY _ZTI11S19961C2_nt[];
extern  VTBL_ENTRY _ZTV11S19961C2_nt[];
extern Class_Descriptor cd_S19961C4_nt;
extern VTBL_ENTRY _ZTI11S19961C4_nt[];
extern  VTBL_ENTRY _ZTV11S19961C4_nt[];
extern Class_Descriptor cd_S19961C3;
extern VTBL_ENTRY _ZTI8S19961C3[];
extern  VTBL_ENTRY _ZTV8S19961C3[];
static Base_Class bases_S19961C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19961C2_nt,    0, //bcp->offset
    -1, //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_S19961C4_nt,    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
    2, //immediately_derived
  0, 0},
  {&cd_S19961C3,    ABISELECT(56,32), //bcp->offset
    18, //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
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19961C1[];
extern void _ZN11S19961C2_nt2v1Ev();
extern void _ZN11S19961C2_nt2v2Ev();
extern void _ZN11S19961C2_nt2v3Ev();
extern void _ZN11S19961C2_nt2v4Ev();
extern void _ZN11S19961C2_nt2v5Ev();
extern void _ZN11S19961C2_nt2v6Ev();
extern void _ZN8S19961C1D1Ev();
extern void _ZN8S19961C1D0Ev();
extern void _ZN11S19961C4_nt2v7Ev();
extern void _ZN11S19961C4_nt2v8Ev();
extern void _ZN11S19961C4_nt2v9Ev();
extern void _ZN11S19961C4_nt3v10Ev();
extern void ABISELECT(_ZTv0_n56_N8S19961C1D1Ev,_ZTv0_n28_N8S19961C1D1Ev)();
extern void ABISELECT(_ZThn56_N8S19961C1D1Ev,_ZThn32_N8S19961C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19961C1D0Ev,_ZTv0_n28_N8S19961C1D0Ev)();
extern void ABISELECT(_ZThn56_N8S19961C1D0Ev,_ZThn32_N8S19961C1D0Ev)() __attribute__((weak));
extern void _ZN8S19961C33v11Ev();
extern void _ZN8S19961C33v12Ev();
static  VTBL_ENTRY vtc_S19961C1[] = {
  ABISELECT(56,32),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19961C1[0]),
  (VTBL_ENTRY)&_ZN11S19961C2_nt2v1Ev,
  (VTBL_ENTRY)&_ZN11S19961C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN11S19961C2_nt2v3Ev,
  (VTBL_ENTRY)&_ZN11S19961C2_nt2v4Ev,
  (VTBL_ENTRY)&_ZN11S19961C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S19961C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN8S19961C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19961C1D0Ev,
  0,
  0,
  ABISELECT(-56,-32),
  0,
  0,
  0,
  0,
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S19961C1[0]),
  (VTBL_ENTRY)&_ZN11S19961C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19961C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S19961C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S19961C4_nt3v10Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19961C1D1Ev,_ZTv0_n28_N8S19961C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19961C1D0Ev,_ZTv0_n28_N8S19961C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19961C33v11Ev,
  (VTBL_ENTRY)&_ZN8S19961C33v12Ev,
};
extern VTBL_ENTRY _ZTV8S19961C1[];
static  VTT_ENTRY vtt_S19961C1[] = {
  {&(_ZTV8S19961C1[10]),  10,35},
  {&(_ZTV8S19961C1[10]),  10,35},
  {&(_ZTV8S19961C1[27]),  27,35},
};
extern VTBL_ENTRY _ZTI8S19961C1[];
extern  VTBL_ENTRY _ZTV8S19961C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19961C1[];
static VTBL_ENTRY alt_thunk_names29[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19961C1D0Ev,_ZTv0_n28_N8S19961C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19961C1D0Ev,_ZThn32_N8S19961C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19961C1D1Ev,_ZTv0_n28_N8S19961C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19961C1D1Ev,_ZThn32_N8S19961C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19961C1 = {  "S19961C1", // class name
  bases_S19961C1, 3,
  &(vtc_S19961C1[0]), // expected_vtbl_contents
  &(vtt_S19961C1[0]), // expected_vtt_contents
  ABISELECT(128,72), // object size
  NSPAIRA(_ZTI8S19961C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19961C1),35, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19961C1),3, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names29,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4253C3  {
  int s4253c3f0;
  void *s4253c3f1[2];
  virtual  ~S4253C3(); // _ZN7S4253C3D1Ev
  virtual void  v14(); // _ZN7S4253C33v14Ev
  virtual void  v15(); // _ZN7S4253C33v15Ev
  virtual void  v16(); // _ZN7S4253C33v16Ev
  virtual void  v17(); // _ZN7S4253C33v17Ev
  virtual void  v18(); // _ZN7S4253C33v18Ev
  virtual void  v19(); // _ZN7S4253C33v19Ev
  virtual void  v20(); // _ZN7S4253C33v20Ev
  virtual void  v21(); // _ZN7S4253C33v21Ev
  virtual void  v22(); // _ZN7S4253C33v22Ev
  virtual void  v23(); // _ZN7S4253C33v23Ev
  virtual void  v24(); // _ZN7S4253C33v24Ev
  S4253C3(); // tgen
};
//SIG(-1 S4253C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fi Fp[2]}


 S4253C3 ::~S4253C3(){ note_dtor("S4253C3", this);}
void  S4253C3 ::v14(){vfunc_called(this, "_ZN7S4253C33v14Ev");}
void  S4253C3 ::v15(){vfunc_called(this, "_ZN7S4253C33v15Ev");}
void  S4253C3 ::v16(){vfunc_called(this, "_ZN7S4253C33v16Ev");}
void  S4253C3 ::v17(){vfunc_called(this, "_ZN7S4253C33v17Ev");}
void  S4253C3 ::v18(){vfunc_called(this, "_ZN7S4253C33v18Ev");}
void  S4253C3 ::v19(){vfunc_called(this, "_ZN7S4253C33v19Ev");}
void  S4253C3 ::v20(){vfunc_called(this, "_ZN7S4253C33v20Ev");}
void  S4253C3 ::v21(){vfunc_called(this, "_ZN7S4253C33v21Ev");}
void  S4253C3 ::v22(){vfunc_called(this, "_ZN7S4253C33v22Ev");}
void  S4253C3 ::v23(){vfunc_called(this, "_ZN7S4253C33v23Ev");}
void  S4253C3 ::v24(){vfunc_called(this, "_ZN7S4253C33v24Ev");}
S4253C3 ::S4253C3(){ note_ctor("S4253C3", this);} // tgen

static void Test_S4253C3()
{
  extern Class_Descriptor cd_S4253C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S4253C3, buf);
    S4253C3 *dp, &lv = *(dp=new (buf) S4253C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S4253C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4253C3)");
    check_field_offset(lv, s4253c3f0, ABISELECT(8,4), "S4253C3.s4253c3f0");
    check_field_offset(lv, s4253c3f1, ABISELECT(16,8), "S4253C3.s4253c3f1");
    test_class_info(&lv, &cd_S4253C3);
    dp->~S4253C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4253C3(Test_S4253C3, "S4253C3", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S4253C3C1Ev();
extern void _ZN7S4253C3D1Ev();
Name_Map name_map_S4253C3[] = {
  NSPAIR(_ZN7S4253C3C1Ev),
  NSPAIR(_ZN7S4253C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4253C3[];
extern void _ZN7S4253C3D1Ev();
extern void _ZN7S4253C3D0Ev();
extern void _ZN7S4253C33v14Ev();
extern void _ZN7S4253C33v15Ev();
extern void _ZN7S4253C33v16Ev();
extern void _ZN7S4253C33v17Ev();
extern void _ZN7S4253C33v18Ev();
extern void _ZN7S4253C33v19Ev();
extern void _ZN7S4253C33v20Ev();
extern void _ZN7S4253C33v21Ev();
extern void _ZN7S4253C33v22Ev();
extern void _ZN7S4253C33v23Ev();
extern void _ZN7S4253C33v24Ev();
static  VTBL_ENTRY vtc_S4253C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4253C3[0]),
  (VTBL_ENTRY)&_ZN7S4253C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4253C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4253C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4253C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4253C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4253C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4253C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4253C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4253C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4253C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4253C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4253C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4253C33v24Ev,
};
extern VTBL_ENTRY _ZTI7S4253C3[];
extern  VTBL_ENTRY _ZTV7S4253C3[];
Class_Descriptor cd_S4253C3 = {  "S4253C3", // class name
  0,0,//no base classes
  &(vtc_S4253C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S4253C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4253C3),15, //virtual function table var
  2, // 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  S4253C2  : S4253C3 {
  int s4253c2f0;
  virtual  ~S4253C2(); // _ZN7S4253C2D1Ev
  virtual void  v25(); // _ZN7S4253C23v25Ev
  virtual void  v26(); // _ZN7S4253C23v26Ev
  S4253C2(); // tgen
};
//SIG(-1 S4253C2) C1{ BC2{ vd v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fi Fp[2]} vd v1 v2 Fi}


 S4253C2 ::~S4253C2(){ note_dtor("S4253C2", this);}
void  S4253C2 ::v25(){vfunc_called(this, "_ZN7S4253C23v25Ev");}
void  S4253C2 ::v26(){vfunc_called(this, "_ZN7S4253C23v26Ev");}
S4253C2 ::S4253C2(){ note_ctor("S4253C2", this);} // tgen

static void Test_S4253C2()
{
  extern Class_Descriptor cd_S4253C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S4253C2, buf);
    S4253C2 *dp, &lv = *(dp=new (buf) S4253C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S4253C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4253C2)");
    check_base_class_offset(lv, (S4253C3*), 0, "S4253C2");
    check_field_offset(lv, s4253c2f0, ABISELECT(32,16), "S4253C2.s4253c2f0");
    test_class_info(&lv, &cd_S4253C2);
    dp->~S4253C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4253C2(Test_S4253C2, "S4253C2", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S4253C2C1Ev();
extern void _ZN7S4253C2D1Ev();
Name_Map name_map_S4253C2[] = {
  NSPAIR(_ZN7S4253C2C1Ev),
  NSPAIR(_ZN7S4253C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4253C3;
extern VTBL_ENTRY _ZTI7S4253C3[];
extern  VTBL_ENTRY _ZTV7S4253C3[];
static Base_Class bases_S4253C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4253C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S4253C2[];
extern void _ZN7S4253C2D1Ev();
extern void _ZN7S4253C2D0Ev();
extern void _ZN7S4253C33v14Ev();
extern void _ZN7S4253C33v15Ev();
extern void _ZN7S4253C33v16Ev();
extern void _ZN7S4253C33v17Ev();
extern void _ZN7S4253C33v18Ev();
extern void _ZN7S4253C33v19Ev();
extern void _ZN7S4253C33v20Ev();
extern void _ZN7S4253C33v21Ev();
extern void _ZN7S4253C33v22Ev();
extern void _ZN7S4253C33v23Ev();
extern void _ZN7S4253C33v24Ev();
extern void _ZN7S4253C23v25Ev();
extern void _ZN7S4253C23v26Ev();
static  VTBL_ENTRY vtc_S4253C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4253C2[0]),
  (VTBL_ENTRY)&_ZN7S4253C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4253C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4253C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4253C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4253C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4253C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4253C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4253C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4253C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4253C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4253C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4253C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4253C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4253C23v25Ev,
  (VTBL_ENTRY)&_ZN7S4253C23v26Ev,
};
extern VTBL_ENTRY _ZTI7S4253C2[];
extern  VTBL_ENTRY _ZTV7S4253C2[];
Class_Descriptor cd_S4253C2 = {  "S4253C2", // class name
  bases_S4253C2, 1,
  &(vtc_S4253C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S4253C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4253C2),17, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4253C1  : S4253C2 {
  void *s4253c1f0;
  int s4253c1f1[5];
  virtual  ~S4253C1(); // _ZN7S4253C1D1Ev
  virtual void  v1(); // _ZN7S4253C12v1Ev
  virtual void  v2(); // _ZN7S4253C12v2Ev
  virtual void  v3(); // _ZN7S4253C12v3Ev
  virtual void  v4(); // _ZN7S4253C12v4Ev
  virtual void  v5(); // _ZN7S4253C12v5Ev
  virtual void  v6(); // _ZN7S4253C12v6Ev
  virtual void  v7(); // _ZN7S4253C12v7Ev
  virtual void  v8(); // _ZN7S4253C12v8Ev
  virtual void  v9(); // _ZN7S4253C12v9Ev
  virtual void  v10(); // _ZN7S4253C13v10Ev
  virtual void  v11(); // _ZN7S4253C13v11Ev
  virtual void  v12(); // _ZN7S4253C13v12Ev
  virtual void  v13(); // _ZN7S4253C13v13Ev
  S4253C1(); // tgen
};
//SIG(1 S4253C1) C1{ BC2{ BC3{ vd v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 Fi Fp[2]} vd v25 v26 Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp Fi[5]}


 S4253C1 ::~S4253C1(){ note_dtor("S4253C1", this);}
void  S4253C1 ::v1(){vfunc_called(this, "_ZN7S4253C12v1Ev");}
void  S4253C1 ::v2(){vfunc_called(this, "_ZN7S4253C12v2Ev");}
void  S4253C1 ::v3(){vfunc_called(this, "_ZN7S4253C12v3Ev");}
void  S4253C1 ::v4(){vfunc_called(this, "_ZN7S4253C12v4Ev");}
void  S4253C1 ::v5(){vfunc_called(this, "_ZN7S4253C12v5Ev");}
void  S4253C1 ::v6(){vfunc_called(this, "_ZN7S4253C12v6Ev");}
void  S4253C1 ::v7(){vfunc_called(this, "_ZN7S4253C12v7Ev");}
void  S4253C1 ::v8(){vfunc_called(this, "_ZN7S4253C12v8Ev");}
void  S4253C1 ::v9(){vfunc_called(this, "_ZN7S4253C12v9Ev");}
void  S4253C1 ::v10(){vfunc_called(this, "_ZN7S4253C13v10Ev");}
void  S4253C1 ::v11(){vfunc_called(this, "_ZN7S4253C13v11Ev");}
void  S4253C1 ::v12(){vfunc_called(this, "_ZN7S4253C13v12Ev");}
void  S4253C1 ::v13(){vfunc_called(this, "_ZN7S4253C13v13Ev");}
S4253C1 ::S4253C1(){ note_ctor("S4253C1", this);} // tgen

static void Test_S4253C1()
{
  extern Class_Descriptor cd_S4253C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,12)];
    init_test(&cd_S4253C1, buf);
    S4253C1 *dp, &lv = *(dp=new (buf) S4253C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,44), "sizeof(S4253C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4253C1)");
    check_base_class_offset(lv, (S4253C3*)(S4253C2*), 0, "S4253C1");
    check_base_class_offset(lv, (S4253C2*), 0, "S4253C1");
    check_field_offset(lv, s4253c1f0, ABISELECT(40,20), "S4253C1.s4253c1f0");
    check_field_offset(lv, s4253c1f1, ABISELECT(48,24), "S4253C1.s4253c1f1");
    test_class_info(&lv, &cd_S4253C1);
    dp->~S4253C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4253C1(Test_S4253C1, "S4253C1", ABISELECT(72,44));

#else // __cplusplus

extern void _ZN7S4253C1C1Ev();
extern void _ZN7S4253C1D1Ev();
Name_Map name_map_S4253C1[] = {
  NSPAIR(_ZN7S4253C1C1Ev),
  NSPAIR(_ZN7S4253C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4253C3;
extern VTBL_ENTRY _ZTI7S4253C3[];
extern  VTBL_ENTRY _ZTV7S4253C3[];
extern Class_Descriptor cd_S4253C2;
extern VTBL_ENTRY _ZTI7S4253C2[];
extern  VTBL_ENTRY _ZTV7S4253C2[];
static Base_Class bases_S4253C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4253C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4253C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4253C1[];
extern void _ZN7S4253C1D1Ev();
extern void _ZN7S4253C1D0Ev();
extern void _ZN7S4253C33v14Ev();
extern void _ZN7S4253C33v15Ev();
extern void _ZN7S4253C33v16Ev();
extern void _ZN7S4253C33v17Ev();
extern void _ZN7S4253C33v18Ev();
extern void _ZN7S4253C33v19Ev();
extern void _ZN7S4253C33v20Ev();
extern void _ZN7S4253C33v21Ev();
extern void _ZN7S4253C33v22Ev();
extern void _ZN7S4253C33v23Ev();
extern void _ZN7S4253C33v24Ev();
extern void _ZN7S4253C23v25Ev();
extern void _ZN7S4253C23v26Ev();
extern void _ZN7S4253C12v1Ev();
extern void _ZN7S4253C12v2Ev();
extern void _ZN7S4253C12v3Ev();
extern void _ZN7S4253C12v4Ev();
extern void _ZN7S4253C12v5Ev();
extern void _ZN7S4253C12v6Ev();
extern void _ZN7S4253C12v7Ev();
extern void _ZN7S4253C12v8Ev();
extern void _ZN7S4253C12v9Ev();
extern void _ZN7S4253C13v10Ev();
extern void _ZN7S4253C13v11Ev();
extern void _ZN7S4253C13v12Ev();
extern void _ZN7S4253C13v13Ev();
static  VTBL_ENTRY vtc_S4253C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4253C1[0]),
  (VTBL_ENTRY)&_ZN7S4253C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4253C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4253C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4253C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4253C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4253C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4253C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4253C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4253C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4253C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4253C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4253C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4253C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4253C23v25Ev,
  (VTBL_ENTRY)&_ZN7S4253C23v26Ev,
  (VTBL_ENTRY)&_ZN7S4253C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4253C12v2Ev,
  (VTBL_ENTRY)&_ZN7S4253C12v3Ev,
  (VTBL_ENTRY)&_ZN7S4253C12v4Ev,
  (VTBL_ENTRY)&_ZN7S4253C12v5Ev,
  (VTBL_ENTRY)&_ZN7S4253C12v6Ev,
  (VTBL_ENTRY)&_ZN7S4253C12v7Ev,
  (VTBL_ENTRY)&_ZN7S4253C12v8Ev,
  (VTBL_ENTRY)&_ZN7S4253C12v9Ev,
  (VTBL_ENTRY)&_ZN7S4253C13v10Ev,
  (VTBL_ENTRY)&_ZN7S4253C13v11Ev,
  (VTBL_ENTRY)&_ZN7S4253C13v12Ev,
  (VTBL_ENTRY)&_ZN7S4253C13v13Ev,
};
extern VTBL_ENTRY _ZTI7S4253C1[];
extern  VTBL_ENTRY _ZTV7S4253C1[];
Class_Descriptor cd_S4253C1 = {  "S4253C1", // class name
  bases_S4253C1, 2,
  &(vtc_S4253C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,44), // object size
  NSPAIRA(_ZTI7S4253C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4253C1),30, //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  S21468C4_nt  {
  __tsi64 s21468c4f0[4];
  void  mf21468c4(); // _ZN11S21468C4_nt9mf21468c4Ev
};
//SIG(-1 S21468C4_nt) C1{ m FL[4]}


void  S21468C4_nt ::mf21468c4(){}

//skip512 S21468C4_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21468C12_nt  {
  int s21468c12f0[2];
  void *s21468c12f1[2];
  void  mf21468c12(); // _ZN12S21468C12_nt10mf21468c12Ev
};
//SIG(-1 S21468C12_nt) C1{ m Fi[2] Fp[2]}


void  S21468C12_nt ::mf21468c12(){}

//skip512 S21468C12_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21468C1  {
  ::S2185C10_nt s21468c1f0;
  ::S2185C10_nt s21468c1f1;
  ::S21468C4_nt s21468c1f2;
  void *s21468c1f3[3];
  ::S2121C25 s21468c1f4;
  ::S2121C25 s21468c1f5;
  ::S2121C26 s21468c1f6;
  ::S21468C12_nt s21468c1f7;
  void *s21468c1f8[2];
  void  mf21468c1(); // _ZN8S21468C19mf21468c1Ev
  virtual  ~S21468C1(); // _ZN8S21468C1D1Ev
  S21468C1(); // tgen
};
//SIG(1 S21468C1) C1{ vd m FC2{ m Fp Fi FC3{ m}} FC2 FC4{ m FL[4]} Fp[3] FC5{ BC6{ m Fp Fi FC7{ m} FC8{ m}}} FC5 FC6 FC9{ m Fi[2] Fp[2]} Fp[2]}


void  S21468C1 ::mf21468c1(){}
 S21468C1 ::~S21468C1(){ note_dtor("S21468C1", this);}
S21468C1 ::S21468C1(){ note_ctor("S21468C1", this);} // tgen

static void Test_S21468C1()
{
  extern Class_Descriptor cd_S21468C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,34)];
    init_test(&cd_S21468C1, buf);
    S21468C1 *dp, &lv = *(dp=new (buf) S21468C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,132), "sizeof(S21468C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21468C1)");
    check_field_offset(lv, s21468c1f0, ABISELECT(8,4), "S21468C1.s21468c1f0");
    check_field_offset(lv, s21468c1f1, ABISELECT(24,16), "S21468C1.s21468c1f1");
    check_field_offset(lv, s21468c1f2, ABISELECT(40,28), "S21468C1.s21468c1f2");
    check_field_offset(lv, s21468c1f3, ABISELECT(72,60), "S21468C1.s21468c1f3");
    check_field_offset(lv, s21468c1f4, ABISELECT(96,72), "S21468C1.s21468c1f4");
    check_field_offset(lv, s21468c1f5, ABISELECT(112,84), "S21468C1.s21468c1f5");
    check_field_offset(lv, s21468c1f6, ABISELECT(128,96), "S21468C1.s21468c1f6");
    check_field_offset(lv, s21468c1f7, ABISELECT(144,108), "S21468C1.s21468c1f7");
    check_field_offset(lv, s21468c1f8, ABISELECT(168,124), "S21468C1.s21468c1f8");
    test_class_info(&lv, &cd_S21468C1);
    dp->~S21468C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21468C1(Test_S21468C1, "S21468C1", ABISELECT(184,132));

#else // __cplusplus

extern void _ZN8S21468C1C1Ev();
extern void _ZN8S21468C1D1Ev();
Name_Map name_map_S21468C1[] = {
  NSPAIR(_ZN8S21468C1C1Ev),
  NSPAIR(_ZN8S21468C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21468C1[];
extern void _ZN8S21468C1D1Ev();
extern void _ZN8S21468C1D0Ev();
static  VTBL_ENTRY vtc_S21468C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21468C1[0]),
  (VTBL_ENTRY)&_ZN8S21468C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21468C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21468C1[];
extern  VTBL_ENTRY _ZTV8S21468C1[];
Class_Descriptor cd_S21468C1 = {  "S21468C1", // class name
  0,0,//no base classes
  &(vtc_S21468C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,132), // object size
  NSPAIRA(_ZTI8S21468C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21468C1),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  S7793C4_nt  {
  __tsi64 s7793c4f0[7];
  virtual void  v3(); // _ZN10S7793C4_nt2v3Ev
  virtual void  v4(); // _ZN10S7793C4_nt2v4Ev
  virtual void  v5(); // _ZN10S7793C4_nt2v5Ev
  virtual void  v6(); // _ZN10S7793C4_nt2v6Ev
  virtual void  v7(); // _ZN10S7793C4_nt2v7Ev
  ~S7793C4_nt(); // tgen
  S7793C4_nt(); // tgen
};
//SIG(-1 S7793C4_nt) C1{ v1 v2 v3 v4 v5 FL[7]}


void  S7793C4_nt ::v3(){vfunc_called(this, "_ZN10S7793C4_nt2v3Ev");}
void  S7793C4_nt ::v4(){vfunc_called(this, "_ZN10S7793C4_nt2v4Ev");}
void  S7793C4_nt ::v5(){vfunc_called(this, "_ZN10S7793C4_nt2v5Ev");}
void  S7793C4_nt ::v6(){vfunc_called(this, "_ZN10S7793C4_nt2v6Ev");}
void  S7793C4_nt ::v7(){vfunc_called(this, "_ZN10S7793C4_nt2v7Ev");}
S7793C4_nt ::~S7793C4_nt(){ note_dtor("S7793C4_nt", this);} // tgen
S7793C4_nt ::S7793C4_nt(){ note_ctor("S7793C4_nt", this);} // tgen

//skip512 S7793C4_nt

#else // __cplusplus

extern void _ZN10S7793C4_ntC1Ev();
extern void _ZN10S7793C4_ntD1Ev();
Name_Map name_map_S7793C4_nt[] = {
  NSPAIR(_ZN10S7793C4_ntC1Ev),
  NSPAIR(_ZN10S7793C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S7793C4_nt[];
extern void _ZN10S7793C4_nt2v3Ev();
extern void _ZN10S7793C4_nt2v4Ev();
extern void _ZN10S7793C4_nt2v5Ev();
extern void _ZN10S7793C4_nt2v6Ev();
extern void _ZN10S7793C4_nt2v7Ev();
static  VTBL_ENTRY vtc_S7793C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S7793C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v7Ev,
};
extern VTBL_ENTRY _ZTI10S7793C4_nt[];
VTBL_ENTRY *P__ZTI10S7793C4_nt = _ZTI10S7793C4_nt; 
extern  VTBL_ENTRY _ZTV10S7793C4_nt[];
Class_Descriptor cd_S7793C4_nt = {  "S7793C4_nt", // class name
  0,0,//no base classes
  &(vtc_S7793C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,60), // object size
  NSPAIRA(_ZTI10S7793C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S7793C4_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  S7793C3_nt  : virtual S7793C4_nt {
  virtual void  v8(); // _ZN10S7793C3_nt2v8Ev
  virtual void  v9(); // _ZN10S7793C3_nt2v9Ev
  virtual void  v10(); // _ZN10S7793C3_nt3v10Ev
  virtual void  v11(); // _ZN10S7793C3_nt3v11Ev
  ~S7793C3_nt(); // tgen
  S7793C3_nt(); // tgen
};
//SIG(-1 S7793C3_nt) C1{ VBC2{ v5 v6 v7 v8 v9 FL[7]} v1 v2 v3 v4}


void  S7793C3_nt ::v8(){vfunc_called(this, "_ZN10S7793C3_nt2v8Ev");}
void  S7793C3_nt ::v9(){vfunc_called(this, "_ZN10S7793C3_nt2v9Ev");}
void  S7793C3_nt ::v10(){vfunc_called(this, "_ZN10S7793C3_nt3v10Ev");}
void  S7793C3_nt ::v11(){vfunc_called(this, "_ZN10S7793C3_nt3v11Ev");}
S7793C3_nt ::~S7793C3_nt(){ note_dtor("S7793C3_nt", this);} // tgen
S7793C3_nt ::S7793C3_nt(){ note_ctor("S7793C3_nt", this);} // tgen

//skip512 S7793C3_nt

#else // __cplusplus

extern void _ZN10S7793C3_ntC1Ev();
extern void _ZN10S7793C3_ntD1Ev();
Name_Map name_map_S7793C3_nt[] = {
  NSPAIR(_ZN10S7793C3_ntC1Ev),
  NSPAIR(_ZN10S7793C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7793C4_nt;
extern VTBL_ENTRY _ZTI10S7793C4_nt[];
extern  VTBL_ENTRY _ZTV10S7793C4_nt[];
static Base_Class bases_S7793C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7793C4_nt,    ABISELECT(8,4), //bcp->offset
    7, //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 _ZTI10S7793C3_nt[];
extern void _ZN10S7793C3_nt2v8Ev();
extern void _ZN10S7793C3_nt2v9Ev();
extern void _ZN10S7793C3_nt3v10Ev();
extern void _ZN10S7793C3_nt3v11Ev();
extern void _ZN10S7793C4_nt2v3Ev();
extern void _ZN10S7793C4_nt2v4Ev();
extern void _ZN10S7793C4_nt2v5Ev();
extern void _ZN10S7793C4_nt2v6Ev();
extern void _ZN10S7793C4_nt2v7Ev();
static  VTBL_ENTRY vtc_S7793C3_nt[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI10S7793C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S7793C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S7793C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7793C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7793C3_nt3v11Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI10S7793C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v7Ev,
};
extern VTBL_ENTRY _ZTV10S7793C3_nt[];
static  VTT_ENTRY vtt_S7793C3_nt[] = {
  {&(_ZTV10S7793C3_nt[3]),  3,19},
  {&(_ZTV10S7793C3_nt[14]),  14,19},
};
extern VTBL_ENTRY _ZTI10S7793C3_nt[];
VTBL_ENTRY *P__ZTI10S7793C3_nt = _ZTI10S7793C3_nt; 
extern  VTBL_ENTRY _ZTV10S7793C3_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S7793C3_nt[];
Class_Descriptor cd_S7793C3_nt = {  "S7793C3_nt", // class name
  bases_S7793C3_nt, 1,
  &(vtc_S7793C3_nt[0]), // expected_vtbl_contents
  &(vtt_S7793C3_nt[0]), // expected_vtt_contents
  ABISELECT(72,64), // object size
  NSPAIRA(_ZTI10S7793C3_nt),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV10S7793C3_nt),19, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT10S7793C3_nt),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  S7793C5_nt  {
  virtual void  v12(); // _ZN10S7793C5_nt3v12Ev
  virtual void  v13(); // _ZN10S7793C5_nt3v13Ev
  virtual void  v14(); // _ZN10S7793C5_nt3v14Ev
  virtual void  v15(); // _ZN10S7793C5_nt3v15Ev
  virtual void  v16(); // _ZN10S7793C5_nt3v16Ev
  virtual void  v17(); // _ZN10S7793C5_nt3v17Ev
  virtual void  v18(); // _ZN10S7793C5_nt3v18Ev
  ~S7793C5_nt(); // tgen
  S7793C5_nt(); // tgen
};
//SIG(-1 S7793C5_nt) C1{ v1 v2 v3 v4 v5 v6 v7}


void  S7793C5_nt ::v12(){vfunc_called(this, "_ZN10S7793C5_nt3v12Ev");}
void  S7793C5_nt ::v13(){vfunc_called(this, "_ZN10S7793C5_nt3v13Ev");}
void  S7793C5_nt ::v14(){vfunc_called(this, "_ZN10S7793C5_nt3v14Ev");}
void  S7793C5_nt ::v15(){vfunc_called(this, "_ZN10S7793C5_nt3v15Ev");}
void  S7793C5_nt ::v16(){vfunc_called(this, "_ZN10S7793C5_nt3v16Ev");}
void  S7793C5_nt ::v17(){vfunc_called(this, "_ZN10S7793C5_nt3v17Ev");}
void  S7793C5_nt ::v18(){vfunc_called(this, "_ZN10S7793C5_nt3v18Ev");}
S7793C5_nt ::~S7793C5_nt(){ note_dtor("S7793C5_nt", this);} // tgen
S7793C5_nt ::S7793C5_nt(){ note_ctor("S7793C5_nt", this);} // tgen

//skip512 S7793C5_nt

#else // __cplusplus

extern void _ZN10S7793C5_ntC1Ev();
extern void _ZN10S7793C5_ntD1Ev();
Name_Map name_map_S7793C5_nt[] = {
  NSPAIR(_ZN10S7793C5_ntC1Ev),
  NSPAIR(_ZN10S7793C5_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S7793C5_nt[];
extern void _ZN10S7793C5_nt3v12Ev();
extern void _ZN10S7793C5_nt3v13Ev();
extern void _ZN10S7793C5_nt3v14Ev();
extern void _ZN10S7793C5_nt3v15Ev();
extern void _ZN10S7793C5_nt3v16Ev();
extern void _ZN10S7793C5_nt3v17Ev();
extern void _ZN10S7793C5_nt3v18Ev();
static  VTBL_ENTRY vtc_S7793C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S7793C5_nt[0]),
  (VTBL_ENTRY)&_ZN10S7793C5_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7793C5_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S7793C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S7793C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S7793C5_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S7793C5_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S7793C5_nt3v18Ev,
};
extern VTBL_ENTRY _ZTI10S7793C5_nt[];
VTBL_ENTRY *P__ZTI10S7793C5_nt = _ZTI10S7793C5_nt; 
extern  VTBL_ENTRY _ZTV10S7793C5_nt[];
Class_Descriptor cd_S7793C5_nt = {  "S7793C5_nt", // class name
  0,0,//no base classes
  &(vtc_S7793C5_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S7793C5_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S7793C5_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  S7793C2_nt  : virtual S7793C3_nt , virtual S7793C5_nt {
  long double s7793c2f0[8];
  virtual void  v19(); // _ZN10S7793C2_nt3v19Ev
  virtual void  v20(); // _ZN10S7793C2_nt3v20Ev
  ~S7793C2_nt(); // tgen
  S7793C2_nt(); // tgen
};
//SIG(-1 S7793C2_nt) C1{ VBC2{ VBC3{ v3 v4 v5 v6 v7 FL[7]} v8 v9 v10 v11} VBC4{ v12 v13 v14 v15 v16 v17 v18} v1 v2 FD[8]}


void  S7793C2_nt ::v19(){vfunc_called(this, "_ZN10S7793C2_nt3v19Ev");}
void  S7793C2_nt ::v20(){vfunc_called(this, "_ZN10S7793C2_nt3v20Ev");}
S7793C2_nt ::~S7793C2_nt(){ note_dtor("S7793C2_nt", this);} // tgen
S7793C2_nt ::S7793C2_nt(){ note_ctor("S7793C2_nt", this);} // tgen

//skip512 S7793C2_nt

#else // __cplusplus

extern void _ZN10S7793C2_ntC1Ev();
extern void _ZN10S7793C2_ntD1Ev();
Name_Map name_map_S7793C2_nt[] = {
  NSPAIR(_ZN10S7793C2_ntC1Ev),
  NSPAIR(_ZN10S7793C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7793C4_nt;
extern VTBL_ENTRY _ZTI10S7793C4_nt[];
extern  VTBL_ENTRY _ZTV10S7793C4_nt[];
extern Class_Descriptor cd_S7793C3_nt;
extern VTBL_ENTRY _ZTI10S7793C3_nt[];
extern  VTBL_ENTRY _ZTV10S7793C3_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S7793C3_nt[];
extern Class_Descriptor cd_S7793C5_nt;
extern VTBL_ENTRY _ZTI10S7793C5_nt[];
extern  VTBL_ENTRY _ZTV10S7793C5_nt[];
static Base_Class bases_S7793C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7793C4_nt,    ABISELECT(144,100), //bcp->offset
    15, //bcp->virtual_function_table_offset
    7, //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
    1, //immediately_derived
  0, 1},
  {&cd_S7793C3_nt,    0, //bcp->offset
    -1, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7793C5_nt,    ABISELECT(208,160), //bcp->offset
    27, //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
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI10S7793C2_nt[];
extern void _ZN10S7793C3_nt2v8Ev();
extern void _ZN10S7793C3_nt2v9Ev();
extern void _ZN10S7793C3_nt3v10Ev();
extern void _ZN10S7793C3_nt3v11Ev();
extern void _ZN10S7793C2_nt3v19Ev();
extern void _ZN10S7793C2_nt3v20Ev();
extern void _ZN10S7793C4_nt2v3Ev();
extern void _ZN10S7793C4_nt2v4Ev();
extern void _ZN10S7793C4_nt2v5Ev();
extern void _ZN10S7793C4_nt2v6Ev();
extern void _ZN10S7793C4_nt2v7Ev();
extern void _ZN10S7793C5_nt3v12Ev();
extern void _ZN10S7793C5_nt3v13Ev();
extern void _ZN10S7793C5_nt3v14Ev();
extern void _ZN10S7793C5_nt3v15Ev();
extern void _ZN10S7793C5_nt3v16Ev();
extern void _ZN10S7793C5_nt3v17Ev();
extern void _ZN10S7793C5_nt3v18Ev();
static  VTBL_ENTRY vtc_S7793C2_nt[] = {
  ABISELECT(208,160),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(144,100),
  0,
  (VTBL_ENTRY)&(_ZTI10S7793C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S7793C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S7793C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7793C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7793C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7793C2_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S7793C2_nt3v20Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-144,-100),
  (VTBL_ENTRY)&(_ZTI10S7793C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v7Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-208,-160),
  (VTBL_ENTRY)&(_ZTI10S7793C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S7793C5_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7793C5_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S7793C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S7793C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S7793C5_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S7793C5_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S7793C5_nt3v18Ev,
};
extern VTBL_ENTRY _ZTV10S7793C2_nt[];
extern void _ZN10S7793C3_nt2v8Ev();
extern void _ZN10S7793C3_nt2v9Ev();
extern void _ZN10S7793C3_nt3v10Ev();
extern void _ZN10S7793C3_nt3v11Ev();
static  VTBL_ENTRY _tg__ZTV10S7793C3_nt__10S7793C2_nt[] = {
  ABISELECT(144,100),
  0,
  (VTBL_ENTRY)&(_ZTI10S7793C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S7793C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S7793C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7793C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7793C3_nt3v11Ev,
};
extern void _ZN10S7793C4_nt2v3Ev();
extern void _ZN10S7793C4_nt2v4Ev();
extern void _ZN10S7793C4_nt2v5Ev();
extern void _ZN10S7793C4_nt2v6Ev();
extern void _ZN10S7793C4_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV10S7793C4_nt__10S7793C3_nt__10S7793C2_nt[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-144,-100),
  (VTBL_ENTRY)&(_ZTI10S7793C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v7Ev,
};
static  VTT_ENTRY vtt_S7793C2_nt[] = {
  {&(_ZTV10S7793C2_nt[9]),  9,43},
  {&(_ZTV10S7793C2_nt[9]),  9,43},
  {&(_ZTV10S7793C2_nt[22]),  22,43},
  {&(_ZTV10S7793C2_nt[36]),  36,43},
  {&(_tg__ZTV10S7793C3_nt__10S7793C2_nt[3]),  3,7},
  {&(_tg__ZTV10S7793C4_nt__10S7793C3_nt__10S7793C2_nt[7]),  7,12},
};
extern VTBL_ENTRY _ZTI10S7793C2_nt[];
VTBL_ENTRY *P__ZTI10S7793C2_nt = _ZTI10S7793C2_nt; 
extern  VTBL_ENTRY _ZTV10S7793C2_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S7793C2_nt[];
Class_Descriptor cd_S7793C2_nt = {  "S7793C2_nt", // class name
  bases_S7793C2_nt, 3,
  &(vtc_S7793C2_nt[0]), // expected_vtbl_contents
  &(vtt_S7793C2_nt[0]), // expected_vtt_contents
  ABISELECT(224,164), // object size
  NSPAIRA(_ZTI10S7793C2_nt),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV10S7793C2_nt),43, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT10S7793C2_nt),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  S7793C1  : S7793C2_nt {
  ::S19580C5 s7793c1f0;
  virtual void  v1(); // _ZN7S7793C12v1Ev
  virtual void  v2(); // _ZN7S7793C12v2Ev
  ~S7793C1(); // tgen
  S7793C1(); // tgen
};
//SIG(1 S7793C1) C1{ BC2{ VBC3{ VBC4{ v3 v4 v5 v6 v7 FL[7]} v8 v9 v10 v11} VBC5{ v12 v13 v14 v15 v16 v17 v18} v19 v20 FD[8]} v1 v2 FC6{ vd v21 v22 v23 v24 v25}}


void  S7793C1 ::v1(){vfunc_called(this, "_ZN7S7793C12v1Ev");}
void  S7793C1 ::v2(){vfunc_called(this, "_ZN7S7793C12v2Ev");}
S7793C1 ::~S7793C1(){ note_dtor("S7793C1", this);} // tgen
S7793C1 ::S7793C1(){ note_ctor("S7793C1", this);} // tgen

static void Test_S7793C1()
{
  extern Class_Descriptor cd_S7793C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(15,43)];
    init_test(&cd_S7793C1, buf);
    S7793C1 *dp, &lv = *(dp=new (buf) S7793C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,168), "sizeof(S7793C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7793C1)");
    check_base_class_offset(lv, (S7793C4_nt*)(S7793C3_nt*), ABISELECT(152,104), "S7793C1");
    check_base_class_offset(lv, (S7793C3_nt*)(S7793C2_nt*), 0, "S7793C1");
    check_base_class_offset(lv, (S7793C5_nt*)(S7793C2_nt*), ABISELECT(216,164), "S7793C1");
    check_base_class_offset(lv, (S7793C2_nt*), 0, "S7793C1");
    check_field_offset(lv, s7793c1f0, ABISELECT(144,100), "S7793C1.s7793c1f0");
    test_class_info(&lv, &cd_S7793C1);
    dp->~S7793C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7793C1(Test_S7793C1, "S7793C1", ABISELECT(224,168));

#else // __cplusplus

extern void _ZN7S7793C1C1Ev();
extern void _ZN7S7793C1D1Ev();
Name_Map name_map_S7793C1[] = {
  NSPAIR(_ZN7S7793C1C1Ev),
  NSPAIR(_ZN7S7793C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7793C4_nt;
extern VTBL_ENTRY _ZTI10S7793C4_nt[];
extern  VTBL_ENTRY _ZTV10S7793C4_nt[];
extern Class_Descriptor cd_S7793C3_nt;
extern VTBL_ENTRY _ZTI10S7793C3_nt[];
extern  VTBL_ENTRY _ZTV10S7793C3_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S7793C3_nt[];
extern Class_Descriptor cd_S7793C5_nt;
extern VTBL_ENTRY _ZTI10S7793C5_nt[];
extern  VTBL_ENTRY _ZTV10S7793C5_nt[];
extern Class_Descriptor cd_S7793C2_nt;
extern VTBL_ENTRY _ZTI10S7793C2_nt[];
extern  VTBL_ENTRY _ZTV10S7793C2_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S7793C2_nt[];
static Base_Class bases_S7793C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7793C4_nt,    ABISELECT(152,104), //bcp->offset
    17, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7793C3_nt,    0, //bcp->offset
    -1, //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
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7793C5_nt,    ABISELECT(216,164), //bcp->offset
    29, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7793C2_nt,    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 _ZTI7S7793C1[];
extern void _ZN10S7793C3_nt2v8Ev();
extern void _ZN10S7793C3_nt2v9Ev();
extern void _ZN10S7793C3_nt3v10Ev();
extern void _ZN10S7793C3_nt3v11Ev();
extern void _ZN10S7793C2_nt3v19Ev();
extern void _ZN10S7793C2_nt3v20Ev();
extern void _ZN7S7793C12v1Ev();
extern void _ZN7S7793C12v2Ev();
extern void _ZN10S7793C4_nt2v3Ev();
extern void _ZN10S7793C4_nt2v4Ev();
extern void _ZN10S7793C4_nt2v5Ev();
extern void _ZN10S7793C4_nt2v6Ev();
extern void _ZN10S7793C4_nt2v7Ev();
extern void _ZN10S7793C5_nt3v12Ev();
extern void _ZN10S7793C5_nt3v13Ev();
extern void _ZN10S7793C5_nt3v14Ev();
extern void _ZN10S7793C5_nt3v15Ev();
extern void _ZN10S7793C5_nt3v16Ev();
extern void _ZN10S7793C5_nt3v17Ev();
extern void _ZN10S7793C5_nt3v18Ev();
static  VTBL_ENTRY vtc_S7793C1[] = {
  ABISELECT(216,164),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(152,104),
  0,
  (VTBL_ENTRY)&(_ZTI7S7793C1[0]),
  (VTBL_ENTRY)&_ZN10S7793C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S7793C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7793C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7793C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7793C2_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S7793C2_nt3v20Ev,
  (VTBL_ENTRY)&_ZN7S7793C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7793C12v2Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-152,-104),
  (VTBL_ENTRY)&(_ZTI7S7793C1[0]),
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v7Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-216,-164),
  (VTBL_ENTRY)&(_ZTI7S7793C1[0]),
  (VTBL_ENTRY)&_ZN10S7793C5_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7793C5_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S7793C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S7793C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S7793C5_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S7793C5_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S7793C5_nt3v18Ev,
};
extern VTBL_ENTRY _ZTV7S7793C1[];
extern void _ZN10S7793C3_nt2v8Ev();
extern void _ZN10S7793C3_nt2v9Ev();
extern void _ZN10S7793C3_nt3v10Ev();
extern void _ZN10S7793C3_nt3v11Ev();
extern void _ZN10S7793C2_nt3v19Ev();
extern void _ZN10S7793C2_nt3v20Ev();
static  VTBL_ENTRY _tg__ZTV10S7793C2_nt__7S7793C1[] = {
  ABISELECT(216,164),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(152,104),
  0,
  (VTBL_ENTRY)&(_ZTI10S7793C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S7793C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S7793C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7793C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7793C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7793C2_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S7793C2_nt3v20Ev,
};
extern void _ZN10S7793C4_nt2v3Ev();
extern void _ZN10S7793C4_nt2v4Ev();
extern void _ZN10S7793C4_nt2v5Ev();
extern void _ZN10S7793C4_nt2v6Ev();
extern void _ZN10S7793C4_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV10S7793C4_nt__10S7793C2_nt__7S7793C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-152,-104),
  (VTBL_ENTRY)&(_ZTI10S7793C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v7Ev,
};
extern void _ZN10S7793C5_nt3v12Ev();
extern void _ZN10S7793C5_nt3v13Ev();
extern void _ZN10S7793C5_nt3v14Ev();
extern void _ZN10S7793C5_nt3v15Ev();
extern void _ZN10S7793C5_nt3v16Ev();
extern void _ZN10S7793C5_nt3v17Ev();
extern void _ZN10S7793C5_nt3v18Ev();
static  VTBL_ENTRY _tg__ZTV10S7793C5_nt__10S7793C2_nt__7S7793C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-216,-164),
  (VTBL_ENTRY)&(_ZTI10S7793C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S7793C5_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7793C5_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S7793C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S7793C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S7793C5_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S7793C5_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S7793C5_nt3v18Ev,
};
extern void _ZN10S7793C3_nt2v8Ev();
extern void _ZN10S7793C3_nt2v9Ev();
extern void _ZN10S7793C3_nt3v10Ev();
extern void _ZN10S7793C3_nt3v11Ev();
static  VTBL_ENTRY _tg__ZTV10S7793C3_nt__7S7793C1[] = {
  ABISELECT(152,104),
  0,
  (VTBL_ENTRY)&(_ZTI10S7793C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S7793C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S7793C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7793C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7793C3_nt3v11Ev,
};
extern void _ZN10S7793C4_nt2v3Ev();
extern void _ZN10S7793C4_nt2v4Ev();
extern void _ZN10S7793C4_nt2v5Ev();
extern void _ZN10S7793C4_nt2v6Ev();
extern void _ZN10S7793C4_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV10S7793C4_nt__10S7793C3_nt__7S7793C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-152,-104),
  (VTBL_ENTRY)&(_ZTI10S7793C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v7Ev,
};
static  VTT_ENTRY vtt_S7793C1[] = {
  {&(_ZTV7S7793C1[9]),  9,45},
  {&(_tg__ZTV10S7793C2_nt__7S7793C1[9]),  9,15},
  {&(_tg__ZTV10S7793C2_nt__7S7793C1[9]),  9,15},
  {&(_tg__ZTV10S7793C4_nt__10S7793C2_nt__7S7793C1[7]),  7,12},
  {&(_tg__ZTV10S7793C5_nt__10S7793C2_nt__7S7793C1[9]),  9,16},
  {&(_ZTV7S7793C1[9]),  9,45},
  {&(_ZTV7S7793C1[24]),  24,45},
  {&(_ZTV7S7793C1[38]),  38,45},
  {&(_tg__ZTV10S7793C3_nt__7S7793C1[3]),  3,7},
  {&(_tg__ZTV10S7793C4_nt__10S7793C3_nt__7S7793C1[7]),  7,12},
};
extern VTBL_ENTRY _ZTI7S7793C1[];
extern  VTBL_ENTRY _ZTV7S7793C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7793C1[];
Class_Descriptor cd_S7793C1 = {  "S7793C1", // class name
  bases_S7793C1, 4,
  &(vtc_S7793C1[0]), // expected_vtbl_contents
  &(vtt_S7793C1[0]), // expected_vtt_contents
  ABISELECT(224,168), // object size
  NSPAIRA(_ZTI7S7793C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7793C1),45, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7793C1),10, //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  S9255C2  {
  ::S2185C10_nt s9255c2f0;
  int s9255c2f1[2];
  char s9255c2f2;
  virtual  ~S9255C2(); // _ZN7S9255C2D1Ev
  virtual void  v3(); // _ZN7S9255C22v3Ev
  virtual void  v4(); // _ZN7S9255C22v4Ev
  virtual void  v5(); // _ZN7S9255C22v5Ev
  S9255C2(); // tgen
};
//SIG(-1 S9255C2) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9255C2 ::~S9255C2(){ note_dtor("S9255C2", this);}
void  S9255C2 ::v3(){vfunc_called(this, "_ZN7S9255C22v3Ev");}
void  S9255C2 ::v4(){vfunc_called(this, "_ZN7S9255C22v4Ev");}
void  S9255C2 ::v5(){vfunc_called(this, "_ZN7S9255C22v5Ev");}
S9255C2 ::S9255C2(){ note_ctor("S9255C2", this);} // tgen

static void Test_S9255C2()
{
  extern Class_Descriptor cd_S9255C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9255C2, buf);
    S9255C2 *dp, &lv = *(dp=new (buf) S9255C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9255C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9255C2)");
    check_field_offset(lv, s9255c2f0, ABISELECT(8,4), "S9255C2.s9255c2f0");
    check_field_offset(lv, s9255c2f1, ABISELECT(24,16), "S9255C2.s9255c2f1");
    check_field_offset(lv, s9255c2f2, ABISELECT(32,24), "S9255C2.s9255c2f2");
    test_class_info(&lv, &cd_S9255C2);
    dp->~S9255C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9255C2(Test_S9255C2, "S9255C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9255C2C1Ev();
extern void _ZN7S9255C2D1Ev();
Name_Map name_map_S9255C2[] = {
  NSPAIR(_ZN7S9255C2C1Ev),
  NSPAIR(_ZN7S9255C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9255C2[];
extern void _ZN7S9255C2D1Ev();
extern void _ZN7S9255C2D0Ev();
extern void _ZN7S9255C22v3Ev();
extern void _ZN7S9255C22v4Ev();
extern void _ZN7S9255C22v5Ev();
static  VTBL_ENTRY vtc_S9255C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9255C2[0]),
  (VTBL_ENTRY)&_ZN7S9255C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9255C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9255C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9255C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9255C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S9255C2[];
extern  VTBL_ENTRY _ZTV7S9255C2[];
Class_Descriptor cd_S9255C2 = {  "S9255C2", // class name
  0,0,//no base classes
  &(vtc_S9255C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9255C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9255C2),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  S9255C8_nt  {
  long s9255c8f0[4];
};
//SIG(-1 S9255C8_nt) C1{ Fl[4]}



//skip512 S9255C8_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9255C7_nt  {
  ::S9255C8_nt s9255c7f0;
  void  mf9255c7(); // _ZN10S9255C7_nt8mf9255c7Ev
};
//SIG(-1 S9255C7_nt) C1{ m FC2{ Fl[4]}}


void  S9255C7_nt ::mf9255c7(){}

//skip512 S9255C7_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9255C1  : S9255C2 {
  char s9255c1f0[2];
  int s9255c1f1[2];
  void *s9255c1f2;
  ::S21811C16 s9255c1f3;
  int s9255c1f4[2];
  char s9255c1f5;
  int s9255c1f6[2];
  ::S9255C7_nt s9255c1f7;
  int s9255c1f8;
  void *s9255c1f9;
  virtual  ~S9255C1(); // _ZN7S9255C1D1Ev
  virtual void  v1(); // _ZN7S9255C12v1Ev
  virtual void  v2(); // _ZN7S9255C12v2Ev
  S9255C1(); // tgen
};
//SIG(1 S9255C1) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 Fc[2] Fi[2] Fp FC5{ m Fp Fi[2] FC6{ m}} Fi[2] Fc Fi[2] FC7{ m FC8{ Fl[4]}} Fi Fp}


 S9255C1 ::~S9255C1(){ note_dtor("S9255C1", this);}
void  S9255C1 ::v1(){vfunc_called(this, "_ZN7S9255C12v1Ev");}
void  S9255C1 ::v2(){vfunc_called(this, "_ZN7S9255C12v2Ev");}
S9255C1 ::S9255C1(){ note_ctor("S9255C1", this);} // tgen

static void Test_S9255C1()
{
  extern Class_Descriptor cd_S9255C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,26)];
    init_test(&cd_S9255C1, buf);
    S9255C1 *dp, &lv = *(dp=new (buf) S9255C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,100), "sizeof(S9255C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9255C1)");
    check_base_class_offset(lv, (S9255C2*), 0, "S9255C1");
    check_field_offset(lv, s9255c1f0, ABISELECT(33,25), "S9255C1.s9255c1f0");
    check_field_offset(lv, s9255c1f1, ABISELECT(36,28), "S9255C1.s9255c1f1");
    check_field_offset(lv, s9255c1f2, ABISELECT(48,36), "S9255C1.s9255c1f2");
    check_field_offset(lv, s9255c1f3, ABISELECT(56,40), "S9255C1.s9255c1f3");
    check_field_offset(lv, s9255c1f4, ABISELECT(80,56), "S9255C1.s9255c1f4");
    check_field_offset(lv, s9255c1f5, ABISELECT(88,64), "S9255C1.s9255c1f5");
    check_field_offset(lv, s9255c1f6, ABISELECT(92,68), "S9255C1.s9255c1f6");
    check_field_offset(lv, s9255c1f7, ABISELECT(104,76), "S9255C1.s9255c1f7");
    check_field_offset(lv, s9255c1f8, ABISELECT(136,92), "S9255C1.s9255c1f8");
    check_field_offset(lv, s9255c1f9, ABISELECT(144,96), "S9255C1.s9255c1f9");
    test_class_info(&lv, &cd_S9255C1);
    dp->~S9255C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9255C1(Test_S9255C1, "S9255C1", ABISELECT(152,100));

#else // __cplusplus

extern void _ZN7S9255C1C1Ev();
extern void _ZN7S9255C1D1Ev();
Name_Map name_map_S9255C1[] = {
  NSPAIR(_ZN7S9255C1C1Ev),
  NSPAIR(_ZN7S9255C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9255C2;
extern VTBL_ENTRY _ZTI7S9255C2[];
extern  VTBL_ENTRY _ZTV7S9255C2[];
static Base_Class bases_S9255C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9255C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S9255C1[];
extern void _ZN7S9255C1D1Ev();
extern void _ZN7S9255C1D0Ev();
extern void _ZN7S9255C22v3Ev();
extern void _ZN7S9255C22v4Ev();
extern void _ZN7S9255C22v5Ev();
extern void _ZN7S9255C12v1Ev();
extern void _ZN7S9255C12v2Ev();
static  VTBL_ENTRY vtc_S9255C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9255C1[0]),
  (VTBL_ENTRY)&_ZN7S9255C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9255C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9255C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9255C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9255C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9255C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9255C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9255C1[];
extern  VTBL_ENTRY _ZTV7S9255C1[];
Class_Descriptor cd_S9255C1 = {  "S9255C1", // class name
  bases_S9255C1, 1,
  &(vtc_S9255C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,100), // object size
  NSPAIRA(_ZTI7S9255C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9255C1),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  S1108C3_nt  : S3350C8_nt {
};
//SIG(-1 S1108C3_nt) C1{ BC2{ m Fi}}



//skip512 S1108C3_nt

#else // __cplusplus

extern Class_Descriptor cd_S3350C8_nt;
extern VTBL_ENTRY _ZTI10S3350C8_nt[];
static Base_Class bases_S1108C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3350C8_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 _ZTI10S1108C3_nt[];
VTBL_ENTRY *P__ZTI10S1108C3_nt = _ZTI10S1108C3_nt; 
Class_Descriptor cd_S1108C3_nt = {  "S1108C3_nt", // class name
  bases_S1108C3_nt, 1,
  0, // no vftv
  0, //no vtt
  4, // object size
  NSPAIRA(_ZTI10S1108C3_nt),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  S1108C2  : S1108C3_nt {
  ::S21811C13_nt s1108c2f0;
  ::S3350C4_nt s1108c2f1;
  int s1108c2f2;
  virtual  ~S1108C2(); // _ZN7S1108C2D1Ev
  virtual void  v6(); // _ZN7S1108C22v6Ev
  virtual void  v7(); // _ZN7S1108C22v7Ev
  virtual void  v8(); // _ZN7S1108C22v8Ev
  virtual void  v9(); // _ZN7S1108C22v9Ev
  virtual void  v10(); // _ZN7S1108C23v10Ev
  S1108C2(); // tgen
};
//SIG(-1 S1108C2) C1{ BC2{ BC3{ m Fi}} vd v1 v2 v3 v4 v5 FC4{ m Fp} FC5{ m Fi[2]} Fi}


 S1108C2 ::~S1108C2(){ note_dtor("S1108C2", this);}
void  S1108C2 ::v6(){vfunc_called(this, "_ZN7S1108C22v6Ev");}
void  S1108C2 ::v7(){vfunc_called(this, "_ZN7S1108C22v7Ev");}
void  S1108C2 ::v8(){vfunc_called(this, "_ZN7S1108C22v8Ev");}
void  S1108C2 ::v9(){vfunc_called(this, "_ZN7S1108C22v9Ev");}
void  S1108C2 ::v10(){vfunc_called(this, "_ZN7S1108C23v10Ev");}
S1108C2 ::S1108C2(){ note_ctor("S1108C2", this);} // tgen

static void Test_S1108C2()
{
  extern Class_Descriptor cd_S1108C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S1108C2, buf);
    S1108C2 *dp, &lv = *(dp=new (buf) S1108C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S1108C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1108C2)");
    check_base_class_offset(lv, (S3350C8_nt*)(S1108C3_nt*), ABISELECT(8,4), "S1108C2");
    check_base_class_offset(lv, (S1108C3_nt*), ABISELECT(8,4), "S1108C2");
    check_field_offset(lv, s1108c2f0, ABISELECT(16,8), "S1108C2.s1108c2f0");
    check_field_offset(lv, s1108c2f1, ABISELECT(24,12), "S1108C2.s1108c2f1");
    check_field_offset(lv, s1108c2f2, ABISELECT(32,20), "S1108C2.s1108c2f2");
    test_class_info(&lv, &cd_S1108C2);
    dp->~S1108C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1108C2(Test_S1108C2, "S1108C2", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN7S1108C2C1Ev();
extern void _ZN7S1108C2D1Ev();
Name_Map name_map_S1108C2[] = {
  NSPAIR(_ZN7S1108C2C1Ev),
  NSPAIR(_ZN7S1108C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3350C8_nt;
extern VTBL_ENTRY _ZTI10S3350C8_nt[];
extern Class_Descriptor cd_S1108C3_nt;
extern VTBL_ENTRY _ZTI10S1108C3_nt[];
static Base_Class bases_S1108C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3350C8_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1108C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1108C2[];
extern void _ZN7S1108C2D1Ev();
extern void _ZN7S1108C2D0Ev();
extern void _ZN7S1108C22v6Ev();
extern void _ZN7S1108C22v7Ev();
extern void _ZN7S1108C22v8Ev();
extern void _ZN7S1108C22v9Ev();
extern void _ZN7S1108C23v10Ev();
static  VTBL_ENTRY vtc_S1108C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1108C2[0]),
  (VTBL_ENTRY)&_ZN7S1108C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1108C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1108C22v6Ev,
  (VTBL_ENTRY)&_ZN7S1108C22v7Ev,
  (VTBL_ENTRY)&_ZN7S1108C22v8Ev,
  (VTBL_ENTRY)&_ZN7S1108C22v9Ev,
  (VTBL_ENTRY)&_ZN7S1108C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S1108C2[];
extern  VTBL_ENTRY _ZTV7S1108C2[];
Class_Descriptor cd_S1108C2 = {  "S1108C2", // class name
  bases_S1108C2, 2,
  &(vtc_S1108C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI7S1108C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S1108C2),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  S1108C7_nt  {
  __tsi64 s1108c7f0[6];
  void  mf1108c7(); // _ZN10S1108C7_nt8mf1108c7Ev
};
//SIG(-1 S1108C7_nt) C1{ m FL[6]}


void  S1108C7_nt ::mf1108c7(){}

//skip512 S1108C7_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1108C9_nt  {
  int s1108c9f0[2];
  void  mf1108c9(); // _ZN10S1108C9_nt8mf1108c9Ev
};
//SIG(-1 S1108C9_nt) C1{ m Fi[2]}


void  S1108C9_nt ::mf1108c9(){}

//skip512 S1108C9_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1108C8_nt  {
  ::S1108C9_nt s1108c8f0;
  ::S3350C4_nt s1108c8f1;
  void  mf1108c8(); // _ZN10S1108C8_nt8mf1108c8Ev
};
//SIG(-1 S1108C8_nt) C1{ m FC2{ m Fi[2]} FC3{ m Fi[2]}}


void  S1108C8_nt ::mf1108c8(){}

//skip512 S1108C8_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1108C1  : S1108C2 {
  ::S1108C7_nt s1108c1f0;
  ::S1108C8_nt s1108c1f1;
  ::S1108C8_nt s1108c1f2;
  ::S1108C8_nt s1108c1f3;
  ::S1108C8_nt s1108c1f4;
  char s1108c1f5;
  virtual void  v1(); // _ZN7S1108C12v1Ev
  virtual void  v2(); // _ZN7S1108C12v2Ev
  virtual void  v3(); // _ZN7S1108C12v3Ev
  virtual void  v4(); // _ZN7S1108C12v4Ev
  virtual void  v5(); // _ZN7S1108C12v5Ev
  ~S1108C1(); // tgen
  S1108C1(); // tgen
};
//SIG(1 S1108C1) C1{ BC2{ BC3{ BC4{ m Fi}} vd v6 v7 v8 v9 v10 FC5{ m Fp} FC6{ m Fi[2]} Fi} v1 v2 v3 v4 v5 FC7{ m FL[6]} FC8{ m FC9{ m Fi[2]} FC6} FC8 FC8 FC8 Fc}


void  S1108C1 ::v1(){vfunc_called(this, "_ZN7S1108C12v1Ev");}
void  S1108C1 ::v2(){vfunc_called(this, "_ZN7S1108C12v2Ev");}
void  S1108C1 ::v3(){vfunc_called(this, "_ZN7S1108C12v3Ev");}
void  S1108C1 ::v4(){vfunc_called(this, "_ZN7S1108C12v4Ev");}
void  S1108C1 ::v5(){vfunc_called(this, "_ZN7S1108C12v5Ev");}
S1108C1 ::~S1108C1(){ note_dtor("S1108C1", this);} // tgen
S1108C1 ::S1108C1(){ note_ctor("S1108C1", this);} // tgen

static void Test_S1108C1()
{
  extern Class_Descriptor cd_S1108C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,36)];
    init_test(&cd_S1108C1, buf);
    S1108C1 *dp, &lv = *(dp=new (buf) S1108C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,140), "sizeof(S1108C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1108C1)");
    check_base_class_offset(lv, (S3350C8_nt*)(S1108C3_nt*)(S1108C2*), ABISELECT(8,4), "S1108C1");
    check_base_class_offset(lv, (S1108C3_nt*)(S1108C2*), ABISELECT(8,4), "S1108C1");
    check_base_class_offset(lv, (S1108C2*), 0, "S1108C1");
    check_field_offset(lv, s1108c1f0, ABISELECT(40,24), "S1108C1.s1108c1f0");
    check_field_offset(lv, s1108c1f1, ABISELECT(88,72), "S1108C1.s1108c1f1");
    check_field_offset(lv, s1108c1f2, ABISELECT(104,88), "S1108C1.s1108c1f2");
    check_field_offset(lv, s1108c1f3, ABISELECT(120,104), "S1108C1.s1108c1f3");
    check_field_offset(lv, s1108c1f4, ABISELECT(136,120), "S1108C1.s1108c1f4");
    check_field_offset(lv, s1108c1f5, ABISELECT(152,136), "S1108C1.s1108c1f5");
    test_class_info(&lv, &cd_S1108C1);
    dp->~S1108C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1108C1(Test_S1108C1, "S1108C1", ABISELECT(160,140));

#else // __cplusplus

extern void _ZN7S1108C1C1Ev();
extern void _ZN7S1108C1D1Ev();
Name_Map name_map_S1108C1[] = {
  NSPAIR(_ZN7S1108C1C1Ev),
  NSPAIR(_ZN7S1108C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3350C8_nt;
extern VTBL_ENTRY _ZTI10S3350C8_nt[];
extern Class_Descriptor cd_S1108C3_nt;
extern VTBL_ENTRY _ZTI10S1108C3_nt[];
extern Class_Descriptor cd_S1108C2;
extern VTBL_ENTRY _ZTI7S1108C2[];
extern  VTBL_ENTRY _ZTV7S1108C2[];
static Base_Class bases_S1108C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3350C8_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1108C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1108C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S1108C1[];
extern void _ZN7S1108C1D1Ev();
extern void _ZN7S1108C1D0Ev();
extern void _ZN7S1108C22v6Ev();
extern void _ZN7S1108C22v7Ev();
extern void _ZN7S1108C22v8Ev();
extern void _ZN7S1108C22v9Ev();
extern void _ZN7S1108C23v10Ev();
extern void _ZN7S1108C12v1Ev();
extern void _ZN7S1108C12v2Ev();
extern void _ZN7S1108C12v3Ev();
extern void _ZN7S1108C12v4Ev();
extern void _ZN7S1108C12v5Ev();
static  VTBL_ENTRY vtc_S1108C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1108C1[0]),
  (VTBL_ENTRY)&_ZN7S1108C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1108C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1108C22v6Ev,
  (VTBL_ENTRY)&_ZN7S1108C22v7Ev,
  (VTBL_ENTRY)&_ZN7S1108C22v8Ev,
  (VTBL_ENTRY)&_ZN7S1108C22v9Ev,
  (VTBL_ENTRY)&_ZN7S1108C23v10Ev,
  (VTBL_ENTRY)&_ZN7S1108C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1108C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1108C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1108C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1108C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S1108C1[];
extern  VTBL_ENTRY _ZTV7S1108C1[];
Class_Descriptor cd_S1108C1 = {  "S1108C1", // class name
  bases_S1108C1, 3,
  &(vtc_S1108C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(160,140), // object size
  NSPAIRA(_ZTI7S1108C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1108C1),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  S8579C2  {
  int s8579c2f0;
  void *s8579c2f1[2];
  virtual  ~S8579C2(); // _ZN7S8579C2D1Ev
  virtual void  v13(); // _ZN7S8579C23v13Ev
  virtual void  v14(); // _ZN7S8579C23v14Ev
  virtual void  v15(); // _ZN7S8579C23v15Ev
  virtual void  v16(); // _ZN7S8579C23v16Ev
  virtual void  v17(); // _ZN7S8579C23v17Ev
  virtual void  v18(); // _ZN7S8579C23v18Ev
  virtual void  v19(); // _ZN7S8579C23v19Ev
  virtual void  v20(); // _ZN7S8579C23v20Ev
  virtual void  v21(); // _ZN7S8579C23v21Ev
  virtual void  v22(); // _ZN7S8579C23v22Ev
  virtual void  v23(); // _ZN7S8579C23v23Ev
  S8579C2(); // tgen
};
//SIG(-1 S8579C2) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fi Fp[2]}


 S8579C2 ::~S8579C2(){ note_dtor("S8579C2", this);}
void  S8579C2 ::v13(){vfunc_called(this, "_ZN7S8579C23v13Ev");}
void  S8579C2 ::v14(){vfunc_called(this, "_ZN7S8579C23v14Ev");}
void  S8579C2 ::v15(){vfunc_called(this, "_ZN7S8579C23v15Ev");}
void  S8579C2 ::v16(){vfunc_called(this, "_ZN7S8579C23v16Ev");}
void  S8579C2 ::v17(){vfunc_called(this, "_ZN7S8579C23v17Ev");}
void  S8579C2 ::v18(){vfunc_called(this, "_ZN7S8579C23v18Ev");}
void  S8579C2 ::v19(){vfunc_called(this, "_ZN7S8579C23v19Ev");}
void  S8579C2 ::v20(){vfunc_called(this, "_ZN7S8579C23v20Ev");}
void  S8579C2 ::v21(){vfunc_called(this, "_ZN7S8579C23v21Ev");}
void  S8579C2 ::v22(){vfunc_called(this, "_ZN7S8579C23v22Ev");}
void  S8579C2 ::v23(){vfunc_called(this, "_ZN7S8579C23v23Ev");}
S8579C2 ::S8579C2(){ note_ctor("S8579C2", this);} // tgen

static void Test_S8579C2()
{
  extern Class_Descriptor cd_S8579C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S8579C2, buf);
    S8579C2 *dp, &lv = *(dp=new (buf) S8579C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S8579C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8579C2)");
    check_field_offset(lv, s8579c2f0, ABISELECT(8,4), "S8579C2.s8579c2f0");
    check_field_offset(lv, s8579c2f1, ABISELECT(16,8), "S8579C2.s8579c2f1");
    test_class_info(&lv, &cd_S8579C2);
    dp->~S8579C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8579C2(Test_S8579C2, "S8579C2", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S8579C2C1Ev();
extern void _ZN7S8579C2D1Ev();
Name_Map name_map_S8579C2[] = {
  NSPAIR(_ZN7S8579C2C1Ev),
  NSPAIR(_ZN7S8579C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8579C2[];
extern void _ZN7S8579C2D1Ev();
extern void _ZN7S8579C2D0Ev();
extern void _ZN7S8579C23v13Ev();
extern void _ZN7S8579C23v14Ev();
extern void _ZN7S8579C23v15Ev();
extern void _ZN7S8579C23v16Ev();
extern void _ZN7S8579C23v17Ev();
extern void _ZN7S8579C23v18Ev();
extern void _ZN7S8579C23v19Ev();
extern void _ZN7S8579C23v20Ev();
extern void _ZN7S8579C23v21Ev();
extern void _ZN7S8579C23v22Ev();
extern void _ZN7S8579C23v23Ev();
static  VTBL_ENTRY vtc_S8579C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8579C2[0]),
  (VTBL_ENTRY)&_ZN7S8579C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8579C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8579C23v13Ev,
  (VTBL_ENTRY)&_ZN7S8579C23v14Ev,
  (VTBL_ENTRY)&_ZN7S8579C23v15Ev,
  (VTBL_ENTRY)&_ZN7S8579C23v16Ev,
  (VTBL_ENTRY)&_ZN7S8579C23v17Ev,
  (VTBL_ENTRY)&_ZN7S8579C23v18Ev,
  (VTBL_ENTRY)&_ZN7S8579C23v19Ev,
  (VTBL_ENTRY)&_ZN7S8579C23v20Ev,
  (VTBL_ENTRY)&_ZN7S8579C23v21Ev,
  (VTBL_ENTRY)&_ZN7S8579C23v22Ev,
  (VTBL_ENTRY)&_ZN7S8579C23v23Ev,
};
extern VTBL_ENTRY _ZTI7S8579C2[];
extern  VTBL_ENTRY _ZTV7S8579C2[];
Class_Descriptor cd_S8579C2 = {  "S8579C2", // class name
  0,0,//no base classes
  &(vtc_S8579C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S8579C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8579C2),15, //virtual function table var
  2, // 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  S8579C3_nt  {
  void *s8579c3f0;
  int s8579c3f1[3];
};
//SIG(-1 S8579C3_nt) C1{ Fp Fi[3]}



//skip512 S8579C3_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8579C1  : S8579C2 {
  ::S8579C3_nt s8579c1f0;
  int s8579c1f1[2];
  char s8579c1f2;
  virtual  ~S8579C1(); // _ZN7S8579C1D1Ev
  virtual void  v1(); // _ZN7S8579C12v1Ev
  virtual void  v2(); // _ZN7S8579C12v2Ev
  virtual void  v3(); // _ZN7S8579C12v3Ev
  virtual void  v4(); // _ZN7S8579C12v4Ev
  virtual void  v5(); // _ZN7S8579C12v5Ev
  virtual void  v6(); // _ZN7S8579C12v6Ev
  virtual void  v7(); // _ZN7S8579C12v7Ev
  virtual void  v8(); // _ZN7S8579C12v8Ev
  virtual void  v9(); // _ZN7S8579C12v9Ev
  virtual void  v10(); // _ZN7S8579C13v10Ev
  virtual void  v11(); // _ZN7S8579C13v11Ev
  virtual void  v12(); // _ZN7S8579C13v12Ev
  S8579C1(); // tgen
};
//SIG(1 S8579C1) C1{ BC2{ vd v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 Fi Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 FC3{ Fp Fi[3]} Fi[2] Fc}


 S8579C1 ::~S8579C1(){ note_dtor("S8579C1", this);}
void  S8579C1 ::v1(){vfunc_called(this, "_ZN7S8579C12v1Ev");}
void  S8579C1 ::v2(){vfunc_called(this, "_ZN7S8579C12v2Ev");}
void  S8579C1 ::v3(){vfunc_called(this, "_ZN7S8579C12v3Ev");}
void  S8579C1 ::v4(){vfunc_called(this, "_ZN7S8579C12v4Ev");}
void  S8579C1 ::v5(){vfunc_called(this, "_ZN7S8579C12v5Ev");}
void  S8579C1 ::v6(){vfunc_called(this, "_ZN7S8579C12v6Ev");}
void  S8579C1 ::v7(){vfunc_called(this, "_ZN7S8579C12v7Ev");}
void  S8579C1 ::v8(){vfunc_called(this, "_ZN7S8579C12v8Ev");}
void  S8579C1 ::v9(){vfunc_called(this, "_ZN7S8579C12v9Ev");}
void  S8579C1 ::v10(){vfunc_called(this, "_ZN7S8579C13v10Ev");}
void  S8579C1 ::v11(){vfunc_called(this, "_ZN7S8579C13v11Ev");}
void  S8579C1 ::v12(){vfunc_called(this, "_ZN7S8579C13v12Ev");}
S8579C1 ::S8579C1(){ note_ctor("S8579C1", this);} // tgen

static void Test_S8579C1()
{
  extern Class_Descriptor cd_S8579C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,12)];
    init_test(&cd_S8579C1, buf);
    S8579C1 *dp, &lv = *(dp=new (buf) S8579C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,44), "sizeof(S8579C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8579C1)");
    check_base_class_offset(lv, (S8579C2*), 0, "S8579C1");
    check_field_offset(lv, s8579c1f0, ABISELECT(32,16), "S8579C1.s8579c1f0");
    check_field_offset(lv, s8579c1f1, ABISELECT(56,32), "S8579C1.s8579c1f1");
    check_field_offset(lv, s8579c1f2, ABISELECT(64,40), "S8579C1.s8579c1f2");
    test_class_info(&lv, &cd_S8579C1);
    dp->~S8579C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8579C1(Test_S8579C1, "S8579C1", ABISELECT(72,44));

#else // __cplusplus

extern void _ZN7S8579C1C1Ev();
extern void _ZN7S8579C1D1Ev();
Name_Map name_map_S8579C1[] = {
  NSPAIR(_ZN7S8579C1C1Ev),
  NSPAIR(_ZN7S8579C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8579C2;
extern VTBL_ENTRY _ZTI7S8579C2[];
extern  VTBL_ENTRY _ZTV7S8579C2[];
static Base_Class bases_S8579C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8579C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S8579C1[];
extern void _ZN7S8579C1D1Ev();
extern void _ZN7S8579C1D0Ev();
extern void _ZN7S8579C23v13Ev();
extern void _ZN7S8579C23v14Ev();
extern void _ZN7S8579C23v15Ev();
extern void _ZN7S8579C23v16Ev();
extern void _ZN7S8579C23v17Ev();
extern void _ZN7S8579C23v18Ev();
extern void _ZN7S8579C23v19Ev();
extern void _ZN7S8579C23v20Ev();
extern void _ZN7S8579C23v21Ev();
extern void _ZN7S8579C23v22Ev();
extern void _ZN7S8579C23v23Ev();
extern void _ZN7S8579C12v1Ev();
extern void _ZN7S8579C12v2Ev();
extern void _ZN7S8579C12v3Ev();
extern void _ZN7S8579C12v4Ev();
extern void _ZN7S8579C12v5Ev();
extern void _ZN7S8579C12v6Ev();
extern void _ZN7S8579C12v7Ev();
extern void _ZN7S8579C12v8Ev();
extern void _ZN7S8579C12v9Ev();
extern void _ZN7S8579C13v10Ev();
extern void _ZN7S8579C13v11Ev();
extern void _ZN7S8579C13v12Ev();
static  VTBL_ENTRY vtc_S8579C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8579C1[0]),
  (VTBL_ENTRY)&_ZN7S8579C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8579C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8579C23v13Ev,
  (VTBL_ENTRY)&_ZN7S8579C23v14Ev,
  (VTBL_ENTRY)&_ZN7S8579C23v15Ev,
  (VTBL_ENTRY)&_ZN7S8579C23v16Ev,
  (VTBL_ENTRY)&_ZN7S8579C23v17Ev,
  (VTBL_ENTRY)&_ZN7S8579C23v18Ev,
  (VTBL_ENTRY)&_ZN7S8579C23v19Ev,
  (VTBL_ENTRY)&_ZN7S8579C23v20Ev,
  (VTBL_ENTRY)&_ZN7S8579C23v21Ev,
  (VTBL_ENTRY)&_ZN7S8579C23v22Ev,
  (VTBL_ENTRY)&_ZN7S8579C23v23Ev,
  (VTBL_ENTRY)&_ZN7S8579C12v1Ev,
  (VTBL_ENTRY)&_ZN7S8579C12v2Ev,
  (VTBL_ENTRY)&_ZN7S8579C12v3Ev,
  (VTBL_ENTRY)&_ZN7S8579C12v4Ev,
  (VTBL_ENTRY)&_ZN7S8579C12v5Ev,
  (VTBL_ENTRY)&_ZN7S8579C12v6Ev,
  (VTBL_ENTRY)&_ZN7S8579C12v7Ev,
  (VTBL_ENTRY)&_ZN7S8579C12v8Ev,
  (VTBL_ENTRY)&_ZN7S8579C12v9Ev,
  (VTBL_ENTRY)&_ZN7S8579C13v10Ev,
  (VTBL_ENTRY)&_ZN7S8579C13v11Ev,
  (VTBL_ENTRY)&_ZN7S8579C13v12Ev,
};
extern VTBL_ENTRY _ZTI7S8579C1[];
extern  VTBL_ENTRY _ZTV7S8579C1[];
Class_Descriptor cd_S8579C1 = {  "S8579C1", // class name
  bases_S8579C1, 1,
  &(vtc_S8579C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,44), // object size
  NSPAIRA(_ZTI7S8579C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8579C1),27, //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  S10171C2  {
  virtual  ~S10171C2(); // _ZN8S10171C2D1Ev
  virtual void  v7(); // _ZN8S10171C22v7Ev
  virtual void  v8(); // _ZN8S10171C22v8Ev
  virtual void  v9(); // _ZN8S10171C22v9Ev
  virtual void  v10(); // _ZN8S10171C23v10Ev
  virtual void  v11(); // _ZN8S10171C23v11Ev
  S10171C2(); // tgen
};
//SIG(-1 S10171C2) C1{ vd v1 v2 v3 v4 v5}


 S10171C2 ::~S10171C2(){ note_dtor("S10171C2", this);}
void  S10171C2 ::v7(){vfunc_called(this, "_ZN8S10171C22v7Ev");}
void  S10171C2 ::v8(){vfunc_called(this, "_ZN8S10171C22v8Ev");}
void  S10171C2 ::v9(){vfunc_called(this, "_ZN8S10171C22v9Ev");}
void  S10171C2 ::v10(){vfunc_called(this, "_ZN8S10171C23v10Ev");}
void  S10171C2 ::v11(){vfunc_called(this, "_ZN8S10171C23v11Ev");}
S10171C2 ::S10171C2(){ note_ctor("S10171C2", this);} // tgen

static void Test_S10171C2()
{
  extern Class_Descriptor cd_S10171C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S10171C2, buf);
    S10171C2 *dp, &lv = *(dp=new (buf) S10171C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S10171C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10171C2)");
    test_class_info(&lv, &cd_S10171C2);
    dp->~S10171C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10171C2(Test_S10171C2, "S10171C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S10171C2C1Ev();
extern void _ZN8S10171C2D1Ev();
Name_Map name_map_S10171C2[] = {
  NSPAIR(_ZN8S10171C2C1Ev),
  NSPAIR(_ZN8S10171C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10171C2[];
extern void _ZN8S10171C2D1Ev();
extern void _ZN8S10171C2D0Ev();
extern void _ZN8S10171C22v7Ev();
extern void _ZN8S10171C22v8Ev();
extern void _ZN8S10171C22v9Ev();
extern void _ZN8S10171C23v10Ev();
extern void _ZN8S10171C23v11Ev();
static  VTBL_ENTRY vtc_S10171C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10171C2[0]),
  (VTBL_ENTRY)&_ZN8S10171C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10171C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10171C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10171C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10171C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10171C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10171C23v11Ev,
};
extern VTBL_ENTRY _ZTI8S10171C2[];
extern  VTBL_ENTRY _ZTV8S10171C2[];
Class_Descriptor cd_S10171C2 = {  "S10171C2", // class name
  0,0,//no base classes
  &(vtc_S10171C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S10171C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10171C2),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  S10171C3  {
  int s10171c3f0;
  __tsi64 s10171c3f1;
  int s10171c3f2[3];
  void *s10171c3f3[4];
  char s10171c3f4[4];
  void *s10171c3f5;
  char s10171c3f6[12];
};
//SIG(-1 S10171C3) C1{ Fi FL Fi[3] Fp[4] Fc[4] Fp Fc[12]}



static void Test_S10171C3()
{
  {
    init_simple_test("S10171C3");
    S10171C3 lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S10171C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10171C3)");
    check_field_offset(lv, s10171c3f0, 0, "S10171C3.s10171c3f0");
    check_field_offset(lv, s10171c3f1, ABISELECT(8,4), "S10171C3.s10171c3f1");
    check_field_offset(lv, s10171c3f2, ABISELECT(16,12), "S10171C3.s10171c3f2");
    check_field_offset(lv, s10171c3f3, ABISELECT(32,24), "S10171C3.s10171c3f3");
    check_field_offset(lv, s10171c3f4, ABISELECT(64,40), "S10171C3.s10171c3f4");
    check_field_offset(lv, s10171c3f5, ABISELECT(72,44), "S10171C3.s10171c3f5");
    check_field_offset(lv, s10171c3f6, ABISELECT(80,48), "S10171C3.s10171c3f6");
  }
}
static Arrange_To_Call_Me vS10171C3(Test_S10171C3, "S10171C3", ABISELECT(96,60));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10171C1  : S10171C2 {
  ::S10171C3 s10171c1f0;
  int s10171c1f1;
  void *s10171c1f2[2];
  int s10171c1f3[4];
  ::S2121C13_nt s10171c1f4;
  ::S2121C13_nt s10171c1f5;
  char s10171c1f6;
  virtual  ~S10171C1(); // _ZN8S10171C1D1Ev
  virtual void  v1(); // _ZN8S10171C12v1Ev
  virtual void  v2(); // _ZN8S10171C12v2Ev
  virtual void  v3(); // _ZN8S10171C12v3Ev
  virtual void  v4(); // _ZN8S10171C12v4Ev
  virtual void  v5(); // _ZN8S10171C12v5Ev
  virtual void  v6(); // _ZN8S10171C12v6Ev
  S10171C1(); // tgen
};
//SIG(1 S10171C1) C1{ BC2{ vd v7 v8 v9 v10 v11} vd v1 v2 v3 v4 v5 v6 FC3{ Fi FL Fi[3] Fp[4] Fc[4] Fp Fc[12]} Fi Fp[2] Fi[4] FC4{ m FC5{ m FL[2]}} FC4 Fc}


 S10171C1 ::~S10171C1(){ note_dtor("S10171C1", this);}
void  S10171C1 ::v1(){vfunc_called(this, "_ZN8S10171C12v1Ev");}
void  S10171C1 ::v2(){vfunc_called(this, "_ZN8S10171C12v2Ev");}
void  S10171C1 ::v3(){vfunc_called(this, "_ZN8S10171C12v3Ev");}
void  S10171C1 ::v4(){vfunc_called(this, "_ZN8S10171C12v4Ev");}
void  S10171C1 ::v5(){vfunc_called(this, "_ZN8S10171C12v5Ev");}
void  S10171C1 ::v6(){vfunc_called(this, "_ZN8S10171C12v6Ev");}
S10171C1 ::S10171C1(){ note_ctor("S10171C1", this);} // tgen

static void Test_S10171C1()
{
  extern Class_Descriptor cd_S10171C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,33)];
    init_test(&cd_S10171C1, buf);
    S10171C1 *dp, &lv = *(dp=new (buf) S10171C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,128), "sizeof(S10171C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10171C1)");
    check_base_class_offset(lv, (S10171C2*), 0, "S10171C1");
    check_field_offset(lv, s10171c1f0, ABISELECT(8,4), "S10171C1.s10171c1f0");
    check_field_offset(lv, s10171c1f1, ABISELECT(104,64), "S10171C1.s10171c1f1");
    check_field_offset(lv, s10171c1f2, ABISELECT(112,68), "S10171C1.s10171c1f2");
    check_field_offset(lv, s10171c1f3, ABISELECT(128,76), "S10171C1.s10171c1f3");
    check_field_offset(lv, s10171c1f4, ABISELECT(144,92), "S10171C1.s10171c1f4");
    check_field_offset(lv, s10171c1f5, ABISELECT(160,108), "S10171C1.s10171c1f5");
    check_field_offset(lv, s10171c1f6, ABISELECT(176,124), "S10171C1.s10171c1f6");
    test_class_info(&lv, &cd_S10171C1);
    dp->~S10171C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10171C1(Test_S10171C1, "S10171C1", ABISELECT(184,128));

#else // __cplusplus

extern void _ZN8S10171C1C1Ev();
extern void _ZN8S10171C1D1Ev();
Name_Map name_map_S10171C1[] = {
  NSPAIR(_ZN8S10171C1C1Ev),
  NSPAIR(_ZN8S10171C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10171C2;
extern VTBL_ENTRY _ZTI8S10171C2[];
extern  VTBL_ENTRY _ZTV8S10171C2[];
static Base_Class bases_S10171C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10171C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S10171C1[];
extern void _ZN8S10171C1D1Ev();
extern void _ZN8S10171C1D0Ev();
extern void _ZN8S10171C22v7Ev();
extern void _ZN8S10171C22v8Ev();
extern void _ZN8S10171C22v9Ev();
extern void _ZN8S10171C23v10Ev();
extern void _ZN8S10171C23v11Ev();
extern void _ZN8S10171C12v1Ev();
extern void _ZN8S10171C12v2Ev();
extern void _ZN8S10171C12v3Ev();
extern void _ZN8S10171C12v4Ev();
extern void _ZN8S10171C12v5Ev();
extern void _ZN8S10171C12v6Ev();
static  VTBL_ENTRY vtc_S10171C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10171C1[0]),
  (VTBL_ENTRY)&_ZN8S10171C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10171C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10171C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10171C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10171C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10171C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10171C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10171C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10171C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10171C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10171C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10171C12v5Ev,
  (VTBL_ENTRY)&_ZN8S10171C12v6Ev,
};
extern VTBL_ENTRY _ZTI8S10171C1[];
extern  VTBL_ENTRY _ZTV8S10171C1[];
Class_Descriptor cd_S10171C1 = {  "S10171C1", // class name
  bases_S10171C1, 1,
  &(vtc_S10171C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,128), // object size
  NSPAIRA(_ZTI8S10171C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10171C1),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  S10170C2  {
  virtual  ~S10170C2(); // _ZN8S10170C2D1Ev
  virtual void  v7(); // _ZN8S10170C22v7Ev
  virtual void  v8(); // _ZN8S10170C22v8Ev
  virtual void  v9(); // _ZN8S10170C22v9Ev
  virtual void  v10(); // _ZN8S10170C23v10Ev
  virtual void  v11(); // _ZN8S10170C23v11Ev
  S10170C2(); // tgen
};
//SIG(-1 S10170C2) C1{ vd v1 v2 v3 v4 v5}


 S10170C2 ::~S10170C2(){ note_dtor("S10170C2", this);}
void  S10170C2 ::v7(){vfunc_called(this, "_ZN8S10170C22v7Ev");}
void  S10170C2 ::v8(){vfunc_called(this, "_ZN8S10170C22v8Ev");}
void  S10170C2 ::v9(){vfunc_called(this, "_ZN8S10170C22v9Ev");}
void  S10170C2 ::v10(){vfunc_called(this, "_ZN8S10170C23v10Ev");}
void  S10170C2 ::v11(){vfunc_called(this, "_ZN8S10170C23v11Ev");}
S10170C2 ::S10170C2(){ note_ctor("S10170C2", this);} // tgen

static void Test_S10170C2()
{
  extern Class_Descriptor cd_S10170C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S10170C2, buf);
    S10170C2 *dp, &lv = *(dp=new (buf) S10170C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S10170C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10170C2)");
    test_class_info(&lv, &cd_S10170C2);
    dp->~S10170C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10170C2(Test_S10170C2, "S10170C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S10170C2C1Ev();
extern void _ZN8S10170C2D1Ev();
Name_Map name_map_S10170C2[] = {
  NSPAIR(_ZN8S10170C2C1Ev),
  NSPAIR(_ZN8S10170C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10170C2[];
extern void _ZN8S10170C2D1Ev();
extern void _ZN8S10170C2D0Ev();
extern void _ZN8S10170C22v7Ev();
extern void _ZN8S10170C22v8Ev();
extern void _ZN8S10170C22v9Ev();
extern void _ZN8S10170C23v10Ev();
extern void _ZN8S10170C23v11Ev();
static  VTBL_ENTRY vtc_S10170C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10170C2[0]),
  (VTBL_ENTRY)&_ZN8S10170C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10170C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10170C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10170C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10170C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10170C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10170C23v11Ev,
};
extern VTBL_ENTRY _ZTI8S10170C2[];
extern  VTBL_ENTRY _ZTV8S10170C2[];
Class_Descriptor cd_S10170C2 = {  "S10170C2", // class name
  0,0,//no base classes
  &(vtc_S10170C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S10170C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10170C2),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  S10170C3  {
  int s10170c3f0;
  long s10170c3f1;
  int s10170c3f2[3];
  void *s10170c3f3[4];
  char s10170c3f4[4];
  void *s10170c3f5;
  char s10170c3f6[12];
};
//SIG(-1 S10170C3) C1{ Fi Fl Fi[3] Fp[4] Fc[4] Fp Fc[12]}



static void Test_S10170C3()
{
  {
    init_simple_test("S10170C3");
    S10170C3 lv;
    check2(sizeof(lv), ABISELECT(96,56), "sizeof(S10170C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10170C3)");
    check_field_offset(lv, s10170c3f0, 0, "S10170C3.s10170c3f0");
    check_field_offset(lv, s10170c3f1, ABISELECT(8,4), "S10170C3.s10170c3f1");
    check_field_offset(lv, s10170c3f2, ABISELECT(16,8), "S10170C3.s10170c3f2");
    check_field_offset(lv, s10170c3f3, ABISELECT(32,20), "S10170C3.s10170c3f3");
    check_field_offset(lv, s10170c3f4, ABISELECT(64,36), "S10170C3.s10170c3f4");
    check_field_offset(lv, s10170c3f5, ABISELECT(72,40), "S10170C3.s10170c3f5");
    check_field_offset(lv, s10170c3f6, ABISELECT(80,44), "S10170C3.s10170c3f6");
  }
}
static Arrange_To_Call_Me vS10170C3(Test_S10170C3, "S10170C3", ABISELECT(96,56));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10170C1  : S10170C2 {
  ::S10170C3 s10170c1f0;
  int s10170c1f1;
  void *s10170c1f2[2];
  int s10170c1f3[4];
  ::S2121C13_nt s10170c1f4;
  ::S2121C13_nt s10170c1f5;
  char s10170c1f6;
  virtual  ~S10170C1(); // _ZN8S10170C1D1Ev
  virtual void  v1(); // _ZN8S10170C12v1Ev
  virtual void  v2(); // _ZN8S10170C12v2Ev
  virtual void  v3(); // _ZN8S10170C12v3Ev
  virtual void  v4(); // _ZN8S10170C12v4Ev
  virtual void  v5(); // _ZN8S10170C12v5Ev
  virtual void  v6(); // _ZN8S10170C12v6Ev
  S10170C1(); // tgen
};
//SIG(1 S10170C1) C1{ BC2{ vd v7 v8 v9 v10 v11} vd v1 v2 v3 v4 v5 v6 FC3{ Fi Fl Fi[3] Fp[4] Fc[4] Fp Fc[12]} Fi Fp[2] Fi[4] FC4{ m FC5{ m FL[2]}} FC4 Fc}


 S10170C1 ::~S10170C1(){ note_dtor("S10170C1", this);}
void  S10170C1 ::v1(){vfunc_called(this, "_ZN8S10170C12v1Ev");}
void  S10170C1 ::v2(){vfunc_called(this, "_ZN8S10170C12v2Ev");}
void  S10170C1 ::v3(){vfunc_called(this, "_ZN8S10170C12v3Ev");}
void  S10170C1 ::v4(){vfunc_called(this, "_ZN8S10170C12v4Ev");}
void  S10170C1 ::v5(){vfunc_called(this, "_ZN8S10170C12v5Ev");}
void  S10170C1 ::v6(){vfunc_called(this, "_ZN8S10170C12v6Ev");}
S10170C1 ::S10170C1(){ note_ctor("S10170C1", this);} // tgen

static void Test_S10170C1()
{
  extern Class_Descriptor cd_S10170C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,32)];
    init_test(&cd_S10170C1, buf);
    S10170C1 *dp, &lv = *(dp=new (buf) S10170C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,124), "sizeof(S10170C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10170C1)");
    check_base_class_offset(lv, (S10170C2*), 0, "S10170C1");
    check_field_offset(lv, s10170c1f0, ABISELECT(8,4), "S10170C1.s10170c1f0");
    check_field_offset(lv, s10170c1f1, ABISELECT(104,60), "S10170C1.s10170c1f1");
    check_field_offset(lv, s10170c1f2, ABISELECT(112,64), "S10170C1.s10170c1f2");
    check_field_offset(lv, s10170c1f3, ABISELECT(128,72), "S10170C1.s10170c1f3");
    check_field_offset(lv, s10170c1f4, ABISELECT(144,88), "S10170C1.s10170c1f4");
    check_field_offset(lv, s10170c1f5, ABISELECT(160,104), "S10170C1.s10170c1f5");
    check_field_offset(lv, s10170c1f6, ABISELECT(176,120), "S10170C1.s10170c1f6");
    test_class_info(&lv, &cd_S10170C1);
    dp->~S10170C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10170C1(Test_S10170C1, "S10170C1", ABISELECT(184,124));

#else // __cplusplus

extern void _ZN8S10170C1C1Ev();
extern void _ZN8S10170C1D1Ev();
Name_Map name_map_S10170C1[] = {
  NSPAIR(_ZN8S10170C1C1Ev),
  NSPAIR(_ZN8S10170C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10170C2;
extern VTBL_ENTRY _ZTI8S10170C2[];
extern  VTBL_ENTRY _ZTV8S10170C2[];
static Base_Class bases_S10170C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10170C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S10170C1[];
extern void _ZN8S10170C1D1Ev();
extern void _ZN8S10170C1D0Ev();
extern void _ZN8S10170C22v7Ev();
extern void _ZN8S10170C22v8Ev();
extern void _ZN8S10170C22v9Ev();
extern void _ZN8S10170C23v10Ev();
extern void _ZN8S10170C23v11Ev();
extern void _ZN8S10170C12v1Ev();
extern void _ZN8S10170C12v2Ev();
extern void _ZN8S10170C12v3Ev();
extern void _ZN8S10170C12v4Ev();
extern void _ZN8S10170C12v5Ev();
extern void _ZN8S10170C12v6Ev();
static  VTBL_ENTRY vtc_S10170C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10170C1[0]),
  (VTBL_ENTRY)&_ZN8S10170C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10170C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10170C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10170C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10170C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10170C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10170C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10170C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10170C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10170C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10170C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10170C12v5Ev,
  (VTBL_ENTRY)&_ZN8S10170C12v6Ev,
};
extern VTBL_ENTRY _ZTI8S10170C1[];
extern  VTBL_ENTRY _ZTV8S10170C1[];
Class_Descriptor cd_S10170C1 = {  "S10170C1", // class name
  bases_S10170C1, 1,
  &(vtc_S10170C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,124), // object size
  NSPAIRA(_ZTI8S10170C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10170C1),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  S4845C3  {
  ::S2185C10_nt s4845c3f0;
  int s4845c3f1[2];
  char s4845c3f2;
  virtual  ~S4845C3(); // _ZN7S4845C3D1Ev
  virtual void  v3(); // _ZN7S4845C32v3Ev
  virtual void  v4(); // _ZN7S4845C32v4Ev
  virtual void  v5(); // _ZN7S4845C32v5Ev
  S4845C3(); // tgen
};
//SIG(-1 S4845C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4845C3 ::~S4845C3(){ note_dtor("S4845C3", this);}
void  S4845C3 ::v3(){vfunc_called(this, "_ZN7S4845C32v3Ev");}
void  S4845C3 ::v4(){vfunc_called(this, "_ZN7S4845C32v4Ev");}
void  S4845C3 ::v5(){vfunc_called(this, "_ZN7S4845C32v5Ev");}
S4845C3 ::S4845C3(){ note_ctor("S4845C3", this);} // tgen

static void Test_S4845C3()
{
  extern Class_Descriptor cd_S4845C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4845C3, buf);
    S4845C3 *dp, &lv = *(dp=new (buf) S4845C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4845C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4845C3)");
    check_field_offset(lv, s4845c3f0, ABISELECT(8,4), "S4845C3.s4845c3f0");
    check_field_offset(lv, s4845c3f1, ABISELECT(24,16), "S4845C3.s4845c3f1");
    check_field_offset(lv, s4845c3f2, ABISELECT(32,24), "S4845C3.s4845c3f2");
    test_class_info(&lv, &cd_S4845C3);
    dp->~S4845C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4845C3(Test_S4845C3, "S4845C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4845C3C1Ev();
extern void _ZN7S4845C3D1Ev();
Name_Map name_map_S4845C3[] = {
  NSPAIR(_ZN7S4845C3C1Ev),
  NSPAIR(_ZN7S4845C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4845C3[];
extern void _ZN7S4845C3D1Ev();
extern void _ZN7S4845C3D0Ev();
extern void _ZN7S4845C32v3Ev();
extern void _ZN7S4845C32v4Ev();
extern void _ZN7S4845C32v5Ev();
static  VTBL_ENTRY vtc_S4845C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4845C3[0]),
  (VTBL_ENTRY)&_ZN7S4845C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4845C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4845C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4845C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4845C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4845C3[];
extern  VTBL_ENTRY _ZTV7S4845C3[];
Class_Descriptor cd_S4845C3 = {  "S4845C3", // class name
  0,0,//no base classes
  &(vtc_S4845C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4845C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4845C3),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  S4845C2  : S4845C3 {
  void *s4845c2f0[2];
  ::S4846C6_nt s4845c2f1;
  virtual  ~S4845C2(); // _ZN7S4845C2D1Ev
  virtual void  v6(); // _ZN7S4845C22v6Ev
  virtual void  v7(); // _ZN7S4845C22v7Ev
  virtual void  v8(); // _ZN7S4845C22v8Ev
  virtual void  v9(); // _ZN7S4845C22v9Ev
  S4845C2(); // tgen
};
//SIG(-1 S4845C2) C1{ BC2{ vd v5 v6 v7 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 v3 v4 Fp[2] FC5{ FC6{ Fc[20]} Fc[16]}}


 S4845C2 ::~S4845C2(){ note_dtor("S4845C2", this);}
void  S4845C2 ::v6(){vfunc_called(this, "_ZN7S4845C22v6Ev");}
void  S4845C2 ::v7(){vfunc_called(this, "_ZN7S4845C22v7Ev");}
void  S4845C2 ::v8(){vfunc_called(this, "_ZN7S4845C22v8Ev");}
void  S4845C2 ::v9(){vfunc_called(this, "_ZN7S4845C22v9Ev");}
S4845C2 ::S4845C2(){ note_ctor("S4845C2", this);} // tgen

static void Test_S4845C2()
{
  extern Class_Descriptor cd_S4845C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,19)];
    init_test(&cd_S4845C2, buf);
    S4845C2 *dp, &lv = *(dp=new (buf) S4845C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,72), "sizeof(S4845C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4845C2)");
    check_base_class_offset(lv, (S4845C3*), 0, "S4845C2");
    check_field_offset(lv, s4845c2f0, ABISELECT(40,28), "S4845C2.s4845c2f0");
    check_field_offset(lv, s4845c2f1, ABISELECT(56,36), "S4845C2.s4845c2f1");
    test_class_info(&lv, &cd_S4845C2);
    dp->~S4845C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4845C2(Test_S4845C2, "S4845C2", ABISELECT(96,72));

#else // __cplusplus

extern void _ZN7S4845C2C1Ev();
extern void _ZN7S4845C2D1Ev();
Name_Map name_map_S4845C2[] = {
  NSPAIR(_ZN7S4845C2C1Ev),
  NSPAIR(_ZN7S4845C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4845C3;
extern VTBL_ENTRY _ZTI7S4845C3[];
extern  VTBL_ENTRY _ZTV7S4845C3[];
static Base_Class bases_S4845C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4845C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S4845C2[];
extern void _ZN7S4845C2D1Ev();
extern void _ZN7S4845C2D0Ev();
extern void _ZN7S4845C32v3Ev();
extern void _ZN7S4845C32v4Ev();
extern void _ZN7S4845C32v5Ev();
extern void _ZN7S4845C22v6Ev();
extern void _ZN7S4845C22v7Ev();
extern void _ZN7S4845C22v8Ev();
extern void _ZN7S4845C22v9Ev();
static  VTBL_ENTRY vtc_S4845C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4845C2[0]),
  (VTBL_ENTRY)&_ZN7S4845C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4845C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4845C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4845C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4845C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4845C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4845C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4845C22v8Ev,
  (VTBL_ENTRY)&_ZN7S4845C22v9Ev,
};
extern VTBL_ENTRY _ZTI7S4845C2[];
extern  VTBL_ENTRY _ZTV7S4845C2[];
Class_Descriptor cd_S4845C2 = {  "S4845C2", // class name
  bases_S4845C2, 1,
  &(vtc_S4845C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,72), // object size
  NSPAIRA(_ZTI7S4845C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4845C2),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4845C8_nt  {
  int s4845c8f0[2];
  char s4845c8f1[448];
  int s4845c8f2;
};
//SIG(-1 S4845C8_nt) C1{ Fi[2] Fc[448] Fi}



//skip512 S4845C8_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4845C1  : S4845C2 {
  ::S4845C8_nt s4845c1f0;
  virtual  ~S4845C1(); // _ZN7S4845C1D1Ev
  virtual void  v1(); // _ZN7S4845C12v1Ev
  virtual void  v2(); // _ZN7S4845C12v2Ev
  S4845C1(); // tgen
};
//SIG(1 S4845C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} vd v6 v7 v8 v9 Fp[2] FC6{ FC7{ Fc[20]} Fc[16]}} vd v1 v2 FC8{ Fi[2] Fc[448] Fi}}


 S4845C1 ::~S4845C1(){ note_dtor("S4845C1", this);}
void  S4845C1 ::v1(){vfunc_called(this, "_ZN7S4845C12v1Ev");}
void  S4845C1 ::v2(){vfunc_called(this, "_ZN7S4845C12v2Ev");}
S4845C1 ::S4845C1(){ note_ctor("S4845C1", this);} // tgen

static void Test_S4845C1()
{
  extern Class_Descriptor cd_S4845C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(70,134)];
    init_test(&cd_S4845C1, buf);
    S4845C1 *dp, &lv = *(dp=new (buf) S4845C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(552,532), "sizeof(S4845C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4845C1)");
    check_base_class_offset(lv, (S4845C3*)(S4845C2*), 0, "S4845C1");
    check_base_class_offset(lv, (S4845C2*), 0, "S4845C1");
    check_field_offset(lv, s4845c1f0, ABISELECT(92,72), "S4845C1.s4845c1f0");
    test_class_info(&lv, &cd_S4845C1);
    dp->~S4845C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4845C1(Test_S4845C1, "S4845C1", ABISELECT(552,532));

#else // __cplusplus

extern void _ZN7S4845C1C1Ev();
extern void _ZN7S4845C1D1Ev();
Name_Map name_map_S4845C1[] = {
  NSPAIR(_ZN7S4845C1C1Ev),
  NSPAIR(_ZN7S4845C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4845C3;
extern VTBL_ENTRY _ZTI7S4845C3[];
extern  VTBL_ENTRY _ZTV7S4845C3[];
extern Class_Descriptor cd_S4845C2;
extern VTBL_ENTRY _ZTI7S4845C2[];
extern  VTBL_ENTRY _ZTV7S4845C2[];
static Base_Class bases_S4845C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4845C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4845C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4845C1[];
extern void _ZN7S4845C1D1Ev();
extern void _ZN7S4845C1D0Ev();
extern void _ZN7S4845C32v3Ev();
extern void _ZN7S4845C32v4Ev();
extern void _ZN7S4845C32v5Ev();
extern void _ZN7S4845C22v6Ev();
extern void _ZN7S4845C22v7Ev();
extern void _ZN7S4845C22v8Ev();
extern void _ZN7S4845C22v9Ev();
extern void _ZN7S4845C12v1Ev();
extern void _ZN7S4845C12v2Ev();
static  VTBL_ENTRY vtc_S4845C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4845C1[0]),
  (VTBL_ENTRY)&_ZN7S4845C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4845C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4845C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4845C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4845C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4845C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4845C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4845C22v8Ev,
  (VTBL_ENTRY)&_ZN7S4845C22v9Ev,
  (VTBL_ENTRY)&_ZN7S4845C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4845C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4845C1[];
extern  VTBL_ENTRY _ZTV7S4845C1[];
Class_Descriptor cd_S4845C1 = {  "S4845C1", // class name
  bases_S4845C1, 2,
  &(vtc_S4845C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(552,532), // object size
  NSPAIRA(_ZTI7S4845C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4845C1),13, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3503C7  {
  virtual void  v1(); // _ZN7S3503C72v1Ev
  ~S3503C7(); // tgen
  S3503C7(); // tgen
};
//SIG(-1 S3503C7) C1{ v1}


void  S3503C7 ::v1(){vfunc_called(this, "_ZN7S3503C72v1Ev");}
S3503C7 ::~S3503C7(){ note_dtor("S3503C7", this);} // tgen
S3503C7 ::S3503C7(){ note_ctor("S3503C7", this);} // tgen

static void Test_S3503C7()
{
  extern Class_Descriptor cd_S3503C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3503C7, buf);
    S3503C7 *dp, &lv = *(dp=new (buf) S3503C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3503C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3503C7)");
    test_class_info(&lv, &cd_S3503C7);
    dp->~S3503C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3503C7(Test_S3503C7, "S3503C7", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3503C7C1Ev();
extern void _ZN7S3503C7D1Ev();
Name_Map name_map_S3503C7[] = {
  NSPAIR(_ZN7S3503C7C1Ev),
  NSPAIR(_ZN7S3503C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3503C7[];
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY vtc_S3503C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3503C7[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
extern VTBL_ENTRY _ZTI7S3503C7[];
extern  VTBL_ENTRY _ZTV7S3503C7[];
Class_Descriptor cd_S3503C7 = {  "S3503C7", // class name
  0,0,//no base classes
  &(vtc_S3503C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3503C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3503C7),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  S3503C6  : virtual S2121C38 , S3503C7 , virtual S2121C28 {
  ~S3503C6(); // tgen
  S3503C6(); // tgen
};
//SIG(-1 S3503C6) C1{ VBC2{ m} BC3{ v1} VBC4{ m}}


S3503C6 ::~S3503C6(){ note_dtor("S3503C6", this);} // tgen
S3503C6 ::S3503C6(){ note_ctor("S3503C6", this);} // tgen

static void Test_S3503C6()
{
  extern Class_Descriptor cd_S3503C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3503C6, buf);
    S3503C6 *dp, &lv = *(dp=new (buf) S3503C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3503C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3503C6)");
    check_base_class_offset(lv, (S2121C38*), 0, "S3503C6");
    check_base_class_offset(lv, (S3503C7*), 0, "S3503C6");
    check_base_class_offset(lv, (S2121C28*), 0, "S3503C6");
    test_class_info(&lv, &cd_S3503C6);
    dp->~S3503C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3503C6(Test_S3503C6, "S3503C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3503C6C1Ev();
extern void _ZN7S3503C6D1Ev();
Name_Map name_map_S3503C6[] = {
  NSPAIR(_ZN7S3503C6C1Ev),
  NSPAIR(_ZN7S3503C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S3503C7;
extern VTBL_ENTRY _ZTI7S3503C7[];
extern  VTBL_ENTRY _ZTV7S3503C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
static Base_Class bases_S3503C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S3503C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S3503C6[];
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY vtc_S3503C6[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3503C6[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
extern VTBL_ENTRY _ZTV7S3503C6[];
static  VTT_ENTRY vtt_S3503C6[] = {
  {&(_ZTV7S3503C6[4]),  4,5},
};
extern VTBL_ENTRY _ZTI7S3503C6[];
extern  VTBL_ENTRY _ZTV7S3503C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3503C6[];
Class_Descriptor cd_S3503C6 = {  "S3503C6", // class name
  bases_S3503C6, 3,
  &(vtc_S3503C6[0]), // expected_vtbl_contents
  &(vtt_S3503C6[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3503C6),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S3503C6),5, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3503C6),1, //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  S3503C5  : S3503C6 , S3503C7 {
  ~S3503C5(); // tgen
  S3503C5(); // tgen
};
//SIG(-1 S3503C5) C1{ BC2{ VBC3{ m} BC4{ v1} VBC5{ m}} BC4}


S3503C5 ::~S3503C5(){ note_dtor("S3503C5", this);} // tgen
S3503C5 ::S3503C5(){ note_ctor("S3503C5", this);} // tgen

static void Test_S3503C5()
{
  extern Class_Descriptor cd_S3503C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3503C5, buf);
    S3503C5 *dp, &lv = *(dp=new (buf) S3503C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3503C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3503C5)");
    check_base_class_offset(lv, (S2121C38*)(S3503C6*), 0, "S3503C5");
    check_base_class_offset(lv, (S3503C7*)(S3503C6*), 0, "S3503C5");
    check_base_class_offset(lv, (S2121C28*)(S3503C6*), 0, "S3503C5");
    check_base_class_offset(lv, (S3503C6*), 0, "S3503C5");
    /*is_ambiguous_... S3503C5::S3503C7 */ AMB_check_base_class_offset(lv, (S3503C7*), ABISELECT(8,4), "S3503C5");
    test_class_info(&lv, &cd_S3503C5);
    dp->~S3503C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3503C5(Test_S3503C5, "S3503C5", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3503C5C1Ev();
extern void _ZN7S3503C5D1Ev();
Name_Map name_map_S3503C5[] = {
  NSPAIR(_ZN7S3503C5C1Ev),
  NSPAIR(_ZN7S3503C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S3503C7;
extern VTBL_ENTRY _ZTI7S3503C7[];
extern  VTBL_ENTRY _ZTV7S3503C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S3503C6;
extern VTBL_ENTRY _ZTI7S3503C6[];
extern  VTBL_ENTRY _ZTV7S3503C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3503C6[];
extern Class_Descriptor cd_S3503C7;
extern VTBL_ENTRY _ZTI7S3503C7[];
extern  VTBL_ENTRY _ZTV7S3503C7[];
static Base_Class bases_S3503C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3503C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3503C6,    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_S3503C7,    ABISELECT(8,4), //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
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3503C5[];
extern void _ZN7S3503C72v1Ev();
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY vtc_S3503C5[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3503C5[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3503C5[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
extern VTBL_ENTRY _ZTV7S3503C5[];
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3503C6__7S3503C5[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3503C6[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
static  VTT_ENTRY vtt_S3503C5[] = {
  {&(_ZTV7S3503C5[4]),  4,8},
  {&(_tg__ZTV7S3503C6__7S3503C5[4]),  4,5},
};
extern VTBL_ENTRY _ZTI7S3503C5[];
extern  VTBL_ENTRY _ZTV7S3503C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3503C5[];
Class_Descriptor cd_S3503C5 = {  "S3503C5", // class name
  bases_S3503C5, 5,
  &(vtc_S3503C5[0]), // expected_vtbl_contents
  &(vtt_S3503C5[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3503C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3503C5),8, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3503C5),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  S3503C9  : S2121C38 , S3503C6 {
  virtual void  v2(); // _ZN7S3503C92v2Ev
  ~S3503C9(); // tgen
  S3503C9(); // tgen
};
//SIG(-1 S3503C9) C1{ BC2{ m} BC3{ VBC2 BC4{ v2} VBC5{ m}} v1}


void  S3503C9 ::v2(){vfunc_called(this, "_ZN7S3503C92v2Ev");}
S3503C9 ::~S3503C9(){ note_dtor("S3503C9", this);} // tgen
S3503C9 ::S3503C9(){ note_ctor("S3503C9", this);} // tgen

static void Test_S3503C9()
{
  extern Class_Descriptor cd_S3503C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3503C9, buf);
    S3503C9 *dp, &lv = *(dp=new (buf) S3503C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3503C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3503C9)");
    /*is_ambiguous_... S3503C9::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*), 0, "S3503C9");
    check_base_class_offset(lv, (S2121C38*)(S3503C6*), ABISELECT(8,4), "S3503C9");
    check_base_class_offset(lv, (S3503C7*)(S3503C6*), 0, "S3503C9");
    check_base_class_offset(lv, (S2121C28*)(S3503C6*), 0, "S3503C9");
    check_base_class_offset(lv, (S3503C6*), 0, "S3503C9");
    test_class_info(&lv, &cd_S3503C9);
    dp->~S3503C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3503C9(Test_S3503C9, "S3503C9", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3503C9C1Ev();
extern void _ZN7S3503C9D1Ev();
Name_Map name_map_S3503C9[] = {
  NSPAIR(_ZN7S3503C9C1Ev),
  NSPAIR(_ZN7S3503C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S3503C7;
extern VTBL_ENTRY _ZTI7S3503C7[];
extern  VTBL_ENTRY _ZTV7S3503C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S3503C6;
extern VTBL_ENTRY _ZTI7S3503C6[];
extern  VTBL_ENTRY _ZTV7S3503C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3503C6[];
static Base_Class bases_S3503C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2121C38,    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, 1},
  {&cd_S3503C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3503C6,    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 _ZTI7S3503C9[];
extern void _ZN7S3503C72v1Ev();
extern void _ZN7S3503C92v2Ev();
static  VTBL_ENTRY vtc_S3503C9[] = {
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3503C9[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3503C92v2Ev,
};
extern VTBL_ENTRY _ZTV7S3503C9[];
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3503C6__7S3503C9[] = {
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3503C6[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
static  VTT_ENTRY vtt_S3503C9[] = {
  {&(_ZTV7S3503C9[4]),  4,6},
  {&(_tg__ZTV7S3503C6__7S3503C9[4]),  4,5},
};
extern VTBL_ENTRY _ZTI7S3503C9[];
extern  VTBL_ENTRY _ZTV7S3503C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3503C9[];
Class_Descriptor cd_S3503C9 = {  "S3503C9", // class name
  bases_S3503C9, 5,
  &(vtc_S3503C9[0]), // expected_vtbl_contents
  &(vtt_S3503C9[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3503C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3503C9),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3503C9),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  S3503C10  : S3503C7 , S2121C28 , virtual S2121C38 {
  ~S3503C10(); // tgen
  S3503C10(); // tgen
};
//SIG(-1 S3503C10) C1{ BC2{ v1} BC3{ m} VBC4{ m}}


S3503C10 ::~S3503C10(){ note_dtor("S3503C10", this);} // tgen
S3503C10 ::S3503C10(){ note_ctor("S3503C10", this);} // tgen

static void Test_S3503C10()
{
  extern Class_Descriptor cd_S3503C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3503C10, buf);
    S3503C10 *dp, &lv = *(dp=new (buf) S3503C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3503C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3503C10)");
    check_base_class_offset(lv, (S3503C7*), 0, "S3503C10");
    check_base_class_offset(lv, (S2121C28*), 0, "S3503C10");
    check_base_class_offset(lv, (S2121C38*), 0, "S3503C10");
    test_class_info(&lv, &cd_S3503C10);
    dp->~S3503C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3503C10(Test_S3503C10, "S3503C10", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S3503C10C1Ev();
extern void _ZN8S3503C10D1Ev();
Name_Map name_map_S3503C10[] = {
  NSPAIR(_ZN8S3503C10C1Ev),
  NSPAIR(_ZN8S3503C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3503C7;
extern VTBL_ENTRY _ZTI7S3503C7[];
extern  VTBL_ENTRY _ZTV7S3503C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
static Base_Class bases_S3503C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3503C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S3503C10[];
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY vtc_S3503C10[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S3503C10[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
extern VTBL_ENTRY _ZTV8S3503C10[];
static  VTT_ENTRY vtt_S3503C10[] = {
  {&(_ZTV8S3503C10[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S3503C10[];
extern  VTBL_ENTRY _ZTV8S3503C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3503C10[];
Class_Descriptor cd_S3503C10 = {  "S3503C10", // class name
  bases_S3503C10, 3,
  &(vtc_S3503C10[0]), // expected_vtbl_contents
  &(vtt_S3503C10[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S3503C10),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S3503C10),4, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3503C10),1, //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  S3503C3  : virtual S2121C38 , virtual S3503C5 , virtual S3503C9 , virtual S3503C10 , S3503C7 {
  ~S3503C3(); // tgen
  S3503C3(); // tgen
};
//SIG(-1 S3503C3) C1{ VBC2{ m} VBC3{ BC4{ VBC2 BC5{ v1} VBC6{ m}} BC5} VBC7{ BC2 BC4 v2} VBC8{ BC5 BC6 VBC2} BC5}


S3503C3 ::~S3503C3(){ note_dtor("S3503C3", this);} // tgen
S3503C3 ::S3503C3(){ note_ctor("S3503C3", this);} // tgen

static void Test_S3503C3()
{
  extern Class_Descriptor cd_S3503C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S3503C3, buf);
    S3503C3 *dp, &lv = *(dp=new (buf) S3503C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S3503C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3503C3)");
    /*is_ambiguous_... S3503C3::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*), 0, "S3503C3");
    check_base_class_offset(lv, (S2121C38*)(S3503C6*)(S3503C5*), 0, "S3503C3");
    check_base_class_offset(lv, (S2121C38*)(S3503C6*)(S3503C9*), 0, "S3503C3");
    check_base_class_offset(lv, (S2121C38*)(S3503C10*), 0, "S3503C3");
    check_base_class_offset(lv, (S3503C7*)(S3503C6*)(S3503C5*), ABISELECT(8,4), "S3503C3");
    check_base_class_offset(lv, (S2121C28*)(S3503C6*)(S3503C5*), 0, "S3503C3");
    check_base_class_offset(lv, (S2121C28*)(S3503C6*)(S3503C9*), 0, "S3503C3");
    check_base_class_offset(lv, (S3503C6*)(S3503C5*), ABISELECT(8,4), "S3503C3");
    /*is_ambiguous_... S3503C5::S3503C7 */ AMB_check_base_class_offset(lv, (S3503C7*)(S3503C5*), ABISELECT(16,8), "S3503C3");
    check_base_class_offset(lv, (S3503C5*), ABISELECT(8,4), "S3503C3");
    /*is_ambiguous_... S3503C9::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S3503C9*), ABISELECT(24,12), "S3503C3");
    check_base_class_offset(lv, (S3503C7*)(S3503C6*)(S3503C9*), ABISELECT(24,12), "S3503C3");
    check_base_class_offset(lv, (S3503C6*)(S3503C9*), ABISELECT(24,12), "S3503C3");
    check_base_class_offset(lv, (S3503C9*), ABISELECT(24,12), "S3503C3");
    check_base_class_offset(lv, (S3503C7*)(S3503C10*), ABISELECT(32,16), "S3503C3");
    check_base_class_offset(lv, (S2121C28*)(S3503C10*), ABISELECT(32,16), "S3503C3");
    check_base_class_offset(lv, (S3503C10*), ABISELECT(32,16), "S3503C3");
    /*is_ambiguous_... S3503C3::S3503C7 */ AMB_check_base_class_offset(lv, (S3503C7*), 0, "S3503C3");
    test_class_info(&lv, &cd_S3503C3);
    dp->~S3503C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3503C3(Test_S3503C3, "S3503C3", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S3503C3C1Ev();
extern void _ZN7S3503C3D1Ev();
Name_Map name_map_S3503C3[] = {
  NSPAIR(_ZN7S3503C3C1Ev),
  NSPAIR(_ZN7S3503C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S3503C7;
extern VTBL_ENTRY _ZTI7S3503C7[];
extern  VTBL_ENTRY _ZTV7S3503C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S3503C6;
extern VTBL_ENTRY _ZTI7S3503C6[];
extern  VTBL_ENTRY _ZTV7S3503C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3503C6[];
extern Class_Descriptor cd_S3503C7;
extern VTBL_ENTRY _ZTI7S3503C7[];
extern  VTBL_ENTRY _ZTV7S3503C7[];
extern Class_Descriptor cd_S3503C5;
extern VTBL_ENTRY _ZTI7S3503C5[];
extern  VTBL_ENTRY _ZTV7S3503C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3503C5[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S3503C7;
extern VTBL_ENTRY _ZTI7S3503C7[];
extern  VTBL_ENTRY _ZTV7S3503C7[];
extern Class_Descriptor cd_S3503C6;
extern VTBL_ENTRY _ZTI7S3503C6[];
extern  VTBL_ENTRY _ZTV7S3503C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3503C6[];
extern Class_Descriptor cd_S3503C9;
extern VTBL_ENTRY _ZTI7S3503C9[];
extern  VTBL_ENTRY _ZTV7S3503C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3503C9[];
extern Class_Descriptor cd_S3503C7;
extern VTBL_ENTRY _ZTI7S3503C7[];
extern  VTBL_ENTRY _ZTV7S3503C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S3503C10;
extern VTBL_ENTRY _ZTI8S3503C10[];
extern  VTBL_ENTRY _ZTV8S3503C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3503C10[];
extern Class_Descriptor cd_S3503C7;
extern VTBL_ENTRY _ZTI7S3503C7[];
extern  VTBL_ENTRY _ZTV7S3503C7[];
static Base_Class bases_S3503C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S3503C7,    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
    3, //immediately_derived
  0, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3503C6,    ABISELECT(8,4), //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
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3503C7,    ABISELECT(16,8), //bcp->offset
    14, //bcp->virtual_function_table_offset
    2, //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
    5, //immediately_derived
  0, 0},
  {&cd_S3503C5,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2121C38,    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
    9, //immediately_derived
  0, 0},
  {&cd_S3503C7,    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
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3503C6,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3503C9,    ABISELECT(24,12), //bcp->offset
    17, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3503C7,    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
    8, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2121C28,    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
    12, //immediately_derived
  0, 0},
  {&cd_S3503C10,    ABISELECT(32,16), //bcp->offset
    25, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3503C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3503C3[];
extern void _ZN7S3503C72v1Ev();
extern void _ZN7S3503C72v1Ev();
extern void _ZN7S3503C72v1Ev();
extern void _ZN7S3503C72v1Ev();
extern void _ZN7S3503C92v2Ev();
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY vtc_S3503C3[] = {
  ABISELECT(32,16),
  ABISELECT(24,12),
  0,
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3503C3[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3503C3[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3503C3[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S3503C3[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3503C92v2Ev,
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3503C3[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
extern VTBL_ENTRY _ZTV7S3503C3[];
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3503C5__7S3503C3[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3503C5[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3503C67S3503C5__7S3503C3[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3503C6[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
extern void _ZN7S3503C72v1Ev();
extern void _ZN7S3503C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3503C9__7S3503C3[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S3503C9[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3503C92v2Ev,
};
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3503C67S3503C9__A1__7S3503C3[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S3503C6[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S3503C10__7S3503C3[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S3503C10[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
static  VTT_ENTRY vtt_S3503C3[] = {
  {&(_ZTV7S3503C3[7]),  7,30},
  {&(_ZTV7S3503C3[13]),  13,30},
  {&(_ZTV7S3503C3[16]),  16,30},
  {&(_ZTV7S3503C3[23]),  23,30},
  {&(_ZTV7S3503C3[29]),  29,30},
  {&(_tg__ZTV7S3503C5__7S3503C3[4]),  4,5},
  {&(_tg__ZTV7S3503C67S3503C5__7S3503C3[4]),  4,5},
  {&(_tg__ZTV7S3503C9__7S3503C3[4]),  4,6},
  {&(_tg__ZTV7S3503C67S3503C9__A1__7S3503C3[4]),  4,5},
  {&(_tg__ZTV8S3503C10__7S3503C3[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S3503C3[];
extern  VTBL_ENTRY _ZTV7S3503C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3503C3[];
Class_Descriptor cd_S3503C3 = {  "S3503C3", // class name
  bases_S3503C3, 14,
  &(vtc_S3503C3[0]), // expected_vtbl_contents
  &(vtt_S3503C3[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S3503C3),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S3503C3),30, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3503C3),10, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3503C2  : S3503C3 , virtual S2121C24 , S3503C6 , S2121C28 , S3503C10 {
  virtual  ~S3503C2(); // _ZN7S3503C2D2Ev
  S3503C2(); // tgen
};
//SIG(-1 S3503C2) C1{ BC2{ VBC3{ m} VBC4{ BC5{ VBC3 BC6{ v1} VBC7{ m}} BC6} VBC8{ BC3 BC5 v2} VBC9{ BC6 BC7 VBC3} BC6} VBC10{ m} BC5 BC7 BC9 vd}


 S3503C2 ::~S3503C2(){ note_dtor("S3503C2", this);}
S3503C2 ::S3503C2(){ note_ctor("S3503C2", this);} // tgen

static void Test_S3503C2()
{
  extern Class_Descriptor cd_S3503C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S3503C2, buf);
    S3503C2 *dp, &lv = *(dp=new (buf) S3503C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S3503C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3503C2)");
    /*is_ambiguous_... S3503C3::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S3503C3*), 0, "S3503C2");
    check_base_class_offset(lv, (S2121C38*)(S3503C6*)(S3503C5*), 0, "S3503C2");
    check_base_class_offset(lv, (S2121C38*)(S3503C6*)(S3503C9*), 0, "S3503C2");
    /*is_ambiguous_... S3503C2::S3503C10 */ AMB_check_base_class_offset(lv, (S2121C38*)(S3503C10*), 0, "S3503C2");
    /*is_ambiguous_... S3503C2::S3503C6 */ AMB_check_base_class_offset(lv, (S2121C38*)(S3503C6*), 0, "S3503C2");
    /*is_ambiguous_... S3503C2::S3503C10 */ AMB_check_base_class_offset(lv, (S2121C38*)(S3503C10*), 0, "S3503C2");
    check_base_class_offset(lv, (S3503C7*)(S3503C6*)(S3503C5*), ABISELECT(24,12), "S3503C2");
    check_base_class_offset(lv, (S2121C28*)(S3503C6*)(S3503C5*), ABISELECT(40,20), "S3503C2");
    check_base_class_offset(lv, (S2121C28*)(S3503C6*)(S3503C9*), ABISELECT(40,20), "S3503C2");
    /*is_ambiguous_... S3503C2::S3503C6 */ AMB_check_base_class_offset(lv, (S2121C28*)(S3503C6*), ABISELECT(40,20), "S3503C2");
    check_base_class_offset(lv, (S3503C6*)(S3503C5*), ABISELECT(24,12), "S3503C2");
    /*is_ambiguous_... S3503C5::S3503C7 */ AMB_check_base_class_offset(lv, (S3503C7*)(S3503C5*), ABISELECT(32,16), "S3503C2");
    check_base_class_offset(lv, (S3503C5*)(S3503C3*), ABISELECT(24,12), "S3503C2");
    /*is_ambiguous_... S3503C9::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S3503C9*), ABISELECT(40,20), "S3503C2");
    check_base_class_offset(lv, (S3503C7*)(S3503C6*)(S3503C9*), ABISELECT(40,20), "S3503C2");
    check_base_class_offset(lv, (S3503C6*)(S3503C9*), ABISELECT(40,20), "S3503C2");
    check_base_class_offset(lv, (S3503C9*)(S3503C3*), ABISELECT(40,20), "S3503C2");
    /*is_ambiguous_... S3503C2::S3503C10 */ AMB_check_base_class_offset(lv, (S3503C7*)(S3503C10*), ABISELECT(48,24), "S3503C2");
    /*is_ambiguous_... S3503C2::S3503C10 */ AMB_check_base_class_offset(lv, (S2121C28*)(S3503C10*), ABISELECT(48,24), "S3503C2");
    check_base_class_offset(lv, (S3503C10*)(S3503C3*), ABISELECT(48,24), "S3503C2");
    /*is_ambiguous_... S3503C3::S3503C7 */ AMB_check_base_class_offset(lv, (S3503C7*)(S3503C3*), 0, "S3503C2");
    check_base_class_offset(lv, (S3503C3*), 0, "S3503C2");
    check_base_class_offset(lv, (S2121C24*), 0, "S3503C2");
    /*is_ambiguous_... S3503C2::S3503C6 */ AMB_check_base_class_offset(lv, (S3503C7*)(S3503C6*), ABISELECT(8,4), "S3503C2");
    /*is_ambiguous_... S3503C2::S3503C6 */ AMB_check_base_class_offset(lv, (S3503C6*), ABISELECT(8,4), "S3503C2");
    /*is_ambiguous_... S3503C2::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*), 0, "S3503C2");
    /*is_ambiguous_... S3503C2::S3503C10 */ AMB_check_base_class_offset(lv, (S3503C7*)(S3503C10*), ABISELECT(16,8), "S3503C2");
    /*is_ambiguous_... S3503C2::S3503C10 */ AMB_check_base_class_offset(lv, (S2121C28*)(S3503C10*), ABISELECT(16,8), "S3503C2");
    /*is_ambiguous_... S3503C2::S3503C10 */ AMB_check_base_class_offset(lv, (S3503C10*), ABISELECT(16,8), "S3503C2");
    test_class_info(&lv, &cd_S3503C2);
    dp->~S3503C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3503C2(Test_S3503C2, "S3503C2", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN7S3503C2C1Ev();
extern void _ZN7S3503C2D2Ev();
Name_Map name_map_S3503C2[] = {
  NSPAIR(_ZN7S3503C2C1Ev),
  NSPAIR(_ZN7S3503C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S3503C7;
extern VTBL_ENTRY _ZTI7S3503C7[];
extern  VTBL_ENTRY _ZTV7S3503C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S3503C6;
extern VTBL_ENTRY _ZTI7S3503C6[];
extern  VTBL_ENTRY _ZTV7S3503C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3503C6[];
extern Class_Descriptor cd_S3503C7;
extern VTBL_ENTRY _ZTI7S3503C7[];
extern  VTBL_ENTRY _ZTV7S3503C7[];
extern Class_Descriptor cd_S3503C5;
extern VTBL_ENTRY _ZTI7S3503C5[];
extern  VTBL_ENTRY _ZTV7S3503C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3503C5[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S3503C7;
extern VTBL_ENTRY _ZTI7S3503C7[];
extern  VTBL_ENTRY _ZTV7S3503C7[];
extern Class_Descriptor cd_S3503C6;
extern VTBL_ENTRY _ZTI7S3503C6[];
extern  VTBL_ENTRY _ZTV7S3503C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3503C6[];
extern Class_Descriptor cd_S3503C9;
extern VTBL_ENTRY _ZTI7S3503C9[];
extern  VTBL_ENTRY _ZTV7S3503C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3503C9[];
extern Class_Descriptor cd_S3503C7;
extern VTBL_ENTRY _ZTI7S3503C7[];
extern  VTBL_ENTRY _ZTV7S3503C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S3503C10;
extern VTBL_ENTRY _ZTI8S3503C10[];
extern  VTBL_ENTRY _ZTV8S3503C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3503C10[];
extern Class_Descriptor cd_S3503C7;
extern VTBL_ENTRY _ZTI7S3503C7[];
extern  VTBL_ENTRY _ZTV7S3503C7[];
extern Class_Descriptor cd_S3503C3;
extern VTBL_ENTRY _ZTI7S3503C3[];
extern  VTBL_ENTRY _ZTV7S3503C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3503C3[];
extern Class_Descriptor cd_S2121C24;
extern VTBL_ENTRY _ZTI8S2121C24[];
extern Class_Descriptor cd_S3503C7;
extern VTBL_ENTRY _ZTI7S3503C7[];
extern  VTBL_ENTRY _ZTV7S3503C7[];
extern Class_Descriptor cd_S3503C6;
extern VTBL_ENTRY _ZTI7S3503C6[];
extern  VTBL_ENTRY _ZTV7S3503C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3503C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S3503C7;
extern VTBL_ENTRY _ZTI7S3503C7[];
extern  VTBL_ENTRY _ZTV7S3503C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S3503C10;
extern VTBL_ENTRY _ZTI8S3503C10[];
extern  VTBL_ENTRY _ZTV8S3503C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3503C10[];
static Base_Class bases_S3503C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3503C7,    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
    3, //immediately_derived
  0, 0},
  {&cd_S2121C28,    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
    3, //immediately_derived
  0, 1},
  {&cd_S3503C6,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3503C7,    ABISELECT(32,16), //bcp->offset
    26, //bcp->virtual_function_table_offset
    2, //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
    5, //immediately_derived
  0, 0},
  {&cd_S3503C5,    ABISELECT(24,12), //bcp->offset
    20, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S2121C38,    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
    9, //immediately_derived
  0, 0},
  {&cd_S3503C7,    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
    8, //immediately_derived
  0, 0},
  {&cd_S3503C6,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3503C9,    ABISELECT(40,20), //bcp->offset
    29, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S3503C7,    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
    8, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2121C28,    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
    12, //immediately_derived
  0, 0},
  {&cd_S3503C10,    ABISELECT(48,24), //bcp->offset
    37, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S3503C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S3503C3,    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
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S3503C7,    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
    12, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S3503C6,    ABISELECT(8,4), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3503C7,    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
    14, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S2121C28,    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
    21, //immediately_derived
  0, 0},
  {&cd_S3503C10,    ABISELECT(16,8), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3503C2[];
extern void _ZN7S3503C72v1Ev();
extern void _ZN7S3503C2D1Ev();
extern void _ZN7S3503C2D0Ev();
extern void _ZN7S3503C72v1Ev();
extern void _ZN7S3503C72v1Ev();
extern void _ZN7S3503C72v1Ev();
extern void _ZN7S3503C72v1Ev();
extern void _ZN7S3503C72v1Ev();
extern void _ZN7S3503C92v2Ev();
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY vtc_S3503C2[] = {
  0,
  ABISELECT(48,24),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(24,12),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3503C2[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3503C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3503C2D0Ev,
  ABISELECT(32,16),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3503C2[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3503C2[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
  0,
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S3503C2[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3503C2[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
  0,
  0,
  0,
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S3503C2[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3503C92v2Ev,
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S3503C2[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
extern VTBL_ENTRY _ZTV7S3503C2[];
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3503C3__7S3503C2[] = {
  ABISELECT(48,24),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(24,12),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3503C3[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3503C5__7S3503C3__7S3503C2[] = {
  0,
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S3503C3[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3503C77S3503C5__A1__7S3503C3__7S3503C2[] = {
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3503C3[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
extern void _ZN7S3503C72v1Ev();
extern void _ZN7S3503C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3503C9__7S3503C3__7S3503C2[] = {
  0,
  0,
  0,
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S3503C3[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3503C92v2Ev,
};
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S3503C10__7S3503C3__7S3503C2[] = {
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S3503C3[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3503C6__A2__7S3503C2[] = {
  ABISELECT(32,16),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3503C6[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S3503C10__A__7S3503C2[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S3503C10[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3503C5__7S3503C2[] = {
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S3503C5[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3503C67S3503C5__7S3503C2[] = {
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S3503C6[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
extern void _ZN7S3503C72v1Ev();
extern void _ZN7S3503C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3503C9__7S3503C2[] = {
  0,
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI7S3503C9[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3503C92v2Ev,
};
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3503C67S3503C9__A1__7S3503C2[] = {
  0,
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI7S3503C6[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S3503C10__7S3503C2[] = {
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S3503C10[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
static  VTT_ENTRY vtt_S3503C2[] = {
  {&(_ZTV7S3503C2[8]),  8,42},
  {&(_tg__ZTV7S3503C3__7S3503C2[7]),  7,8},
  {&(_tg__ZTV7S3503C5__7S3503C3__7S3503C2[5]),  5,6},
  {&(_tg__ZTV7S3503C77S3503C5__A1__7S3503C3__7S3503C2[2]),  2,3},
  {&(_tg__ZTV7S3503C9__7S3503C3__7S3503C2[6]),  6,8},
  {&(_tg__ZTV8S3503C10__7S3503C3__7S3503C2[4]),  4,5},
  {&(_tg__ZTV7S3503C6__A2__7S3503C2[4]),  4,5},
  {&(_tg__ZTV8S3503C10__A__7S3503C2[3]),  3,4},
  {&(_ZTV7S3503C2[25]),  25,42},
  {&(_ZTV7S3503C2[28]),  28,42},
  {&(_ZTV7S3503C2[35]),  35,42},
  {&(_ZTV7S3503C2[41]),  41,42},
  {&(_ZTV7S3503C2[15]),  15,42},
  {&(_ZTV7S3503C2[19]),  19,42},
  {&(_tg__ZTV7S3503C5__7S3503C2[4]),  4,5},
  {&(_tg__ZTV7S3503C67S3503C5__7S3503C2[4]),  4,5},
  {&(_tg__ZTV7S3503C9__7S3503C2[4]),  4,6},
  {&(_tg__ZTV7S3503C67S3503C9__A1__7S3503C2[4]),  4,5},
  {&(_tg__ZTV8S3503C10__7S3503C2[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S3503C2[];
extern  VTBL_ENTRY _ZTV7S3503C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3503C2[];
Class_Descriptor cd_S3503C2 = {  "S3503C2", // class name
  bases_S3503C2, 22,
  &(vtc_S3503C2[0]), // expected_vtbl_contents
  &(vtt_S3503C2[0]), // expected_vtt_contents
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI7S3503C2),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S3503C2),42, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3503C2),19, //virtual table table var
  15, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3503C1  : S3503C2 , S3350C8_nt {
  ~S3503C1(); // tgen
  S3503C1(); // tgen
};
//SIG(1 S3503C1) C1{ BC2{ BC3{ VBC4{ m} VBC5{ BC6{ VBC4 BC7{ v1} VBC8{ m}} BC7} VBC9{ BC4 BC6 v2} VBC10{ BC7 BC8 VBC4} BC7} VBC11{ m} BC6 BC8 BC10 vd} BC12{ m Fi}}


S3503C1 ::~S3503C1(){ note_dtor("S3503C1", this);} // tgen
S3503C1 ::S3503C1(){ note_ctor("S3503C1", this);} // tgen

static void Test_S3503C1()
{
  extern Class_Descriptor cd_S3503C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S3503C1, buf);
    S3503C1 *dp, &lv = *(dp=new (buf) S3503C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S3503C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3503C1)");
    /*is_ambiguous_... S3503C3::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S3503C3*)(S3503C2*), 0, "S3503C1");
    check_base_class_offset(lv, (S2121C38*)(S3503C6*)(S3503C5*), 0, "S3503C1");
    check_base_class_offset(lv, (S2121C38*)(S3503C6*)(S3503C9*), 0, "S3503C1");
    /*is_ambiguous_... S3503C1::S3503C10 */ AMB_check_base_class_offset(lv, (S2121C38*)(S3503C10*), 0, "S3503C1");
    /*is_ambiguous_... S3503C2::S3503C6 */ AMB_check_base_class_offset(lv, (S2121C38*)(S3503C6*)(S3503C2*), 0, "S3503C1");
    /*is_ambiguous_... S3503C2::S3503C10 */ AMB_check_base_class_offset(lv, (S2121C38*)(S3503C10*)(S3503C2*), 0, "S3503C1");
    check_base_class_offset(lv, (S3503C7*)(S3503C6*)(S3503C5*), ABISELECT(32,16), "S3503C1");
    check_base_class_offset(lv, (S2121C28*)(S3503C6*)(S3503C5*), ABISELECT(48,24), "S3503C1");
    check_base_class_offset(lv, (S2121C28*)(S3503C6*)(S3503C9*), ABISELECT(48,24), "S3503C1");
    /*is_ambiguous_... S3503C2::S3503C6 */ AMB_check_base_class_offset(lv, (S2121C28*)(S3503C6*)(S3503C2*), ABISELECT(48,24), "S3503C1");
    check_base_class_offset(lv, (S3503C6*)(S3503C5*), ABISELECT(32,16), "S3503C1");
    /*is_ambiguous_... S3503C5::S3503C7 */ AMB_check_base_class_offset(lv, (S3503C7*)(S3503C5*), ABISELECT(40,20), "S3503C1");
    check_base_class_offset(lv, (S3503C5*)(S3503C3*)(S3503C2*), ABISELECT(32,16), "S3503C1");
    /*is_ambiguous_... S3503C9::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S3503C9*), ABISELECT(48,24), "S3503C1");
    check_base_class_offset(lv, (S3503C7*)(S3503C6*)(S3503C9*), ABISELECT(48,24), "S3503C1");
    check_base_class_offset(lv, (S3503C6*)(S3503C9*), ABISELECT(48,24), "S3503C1");
    check_base_class_offset(lv, (S3503C9*)(S3503C3*)(S3503C2*), ABISELECT(48,24), "S3503C1");
    /*is_ambiguous_... S3503C1::S3503C10 */ AMB_check_base_class_offset(lv, (S3503C7*)(S3503C10*), ABISELECT(56,28), "S3503C1");
    /*is_ambiguous_... S3503C1::S3503C10 */ AMB_check_base_class_offset(lv, (S2121C28*)(S3503C10*), ABISELECT(56,28), "S3503C1");
    check_base_class_offset(lv, (S3503C10*)(S3503C3*)(S3503C2*), ABISELECT(56,28), "S3503C1");
    /*is_ambiguous_... S3503C3::S3503C7 */ AMB_check_base_class_offset(lv, (S3503C7*)(S3503C3*)(S3503C2*), 0, "S3503C1");
    check_base_class_offset(lv, (S3503C3*)(S3503C2*), 0, "S3503C1");
    check_base_class_offset(lv, (S2121C24*)(S3503C2*), 0, "S3503C1");
    /*is_ambiguous_... S3503C2::S3503C6 */ AMB_check_base_class_offset(lv, (S3503C7*)(S3503C6*)(S3503C2*), ABISELECT(8,4), "S3503C1");
    /*is_ambiguous_... S3503C2::S3503C6 */ AMB_check_base_class_offset(lv, (S3503C6*)(S3503C2*), ABISELECT(8,4), "S3503C1");
    /*is_ambiguous_... S3503C2::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*)(S3503C2*), 0, "S3503C1");
    /*is_ambiguous_... S3503C2::S3503C10 */ AMB_check_base_class_offset(lv, (S3503C7*)(S3503C10*)(S3503C2*), ABISELECT(16,8), "S3503C1");
    /*is_ambiguous_... S3503C2::S3503C10 */ AMB_check_base_class_offset(lv, (S2121C28*)(S3503C10*)(S3503C2*), ABISELECT(16,8), "S3503C1");
    /*is_ambiguous_... S3503C2::S3503C10 */ AMB_check_base_class_offset(lv, (S3503C10*)(S3503C2*), ABISELECT(16,8), "S3503C1");
    check_base_class_offset(lv, (S3503C2*), 0, "S3503C1");
    check_base_class_offset(lv, (S3350C8_nt*), ABISELECT(24,12), "S3503C1");
    test_class_info(&lv, &cd_S3503C1);
    dp->~S3503C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3503C1(Test_S3503C1, "S3503C1", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN7S3503C1C1Ev();
extern void _ZN7S3503C1D1Ev();
Name_Map name_map_S3503C1[] = {
  NSPAIR(_ZN7S3503C1C1Ev),
  NSPAIR(_ZN7S3503C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S3503C7;
extern VTBL_ENTRY _ZTI7S3503C7[];
extern  VTBL_ENTRY _ZTV7S3503C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S3503C6;
extern VTBL_ENTRY _ZTI7S3503C6[];
extern  VTBL_ENTRY _ZTV7S3503C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3503C6[];
extern Class_Descriptor cd_S3503C7;
extern VTBL_ENTRY _ZTI7S3503C7[];
extern  VTBL_ENTRY _ZTV7S3503C7[];
extern Class_Descriptor cd_S3503C5;
extern VTBL_ENTRY _ZTI7S3503C5[];
extern  VTBL_ENTRY _ZTV7S3503C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3503C5[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S3503C7;
extern VTBL_ENTRY _ZTI7S3503C7[];
extern  VTBL_ENTRY _ZTV7S3503C7[];
extern Class_Descriptor cd_S3503C6;
extern VTBL_ENTRY _ZTI7S3503C6[];
extern  VTBL_ENTRY _ZTV7S3503C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3503C6[];
extern Class_Descriptor cd_S3503C9;
extern VTBL_ENTRY _ZTI7S3503C9[];
extern  VTBL_ENTRY _ZTV7S3503C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3503C9[];
extern Class_Descriptor cd_S3503C7;
extern VTBL_ENTRY _ZTI7S3503C7[];
extern  VTBL_ENTRY _ZTV7S3503C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S3503C10;
extern VTBL_ENTRY _ZTI8S3503C10[];
extern  VTBL_ENTRY _ZTV8S3503C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3503C10[];
extern Class_Descriptor cd_S3503C7;
extern VTBL_ENTRY _ZTI7S3503C7[];
extern  VTBL_ENTRY _ZTV7S3503C7[];
extern Class_Descriptor cd_S3503C3;
extern VTBL_ENTRY _ZTI7S3503C3[];
extern  VTBL_ENTRY _ZTV7S3503C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3503C3[];
extern Class_Descriptor cd_S2121C24;
extern VTBL_ENTRY _ZTI8S2121C24[];
extern Class_Descriptor cd_S3503C7;
extern VTBL_ENTRY _ZTI7S3503C7[];
extern  VTBL_ENTRY _ZTV7S3503C7[];
extern Class_Descriptor cd_S3503C6;
extern VTBL_ENTRY _ZTI7S3503C6[];
extern  VTBL_ENTRY _ZTV7S3503C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3503C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S3503C7;
extern VTBL_ENTRY _ZTI7S3503C7[];
extern  VTBL_ENTRY _ZTV7S3503C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S3503C10;
extern VTBL_ENTRY _ZTI8S3503C10[];
extern  VTBL_ENTRY _ZTV8S3503C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3503C10[];
extern Class_Descriptor cd_S3503C2;
extern VTBL_ENTRY _ZTI7S3503C2[];
extern  VTBL_ENTRY _ZTV7S3503C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3503C2[];
extern Class_Descriptor cd_S3350C8_nt;
extern VTBL_ENTRY _ZTI10S3350C8_nt[];
static Base_Class bases_S3503C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3503C7,    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
    3, //immediately_derived
  0, 0},
  {&cd_S2121C28,    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
    3, //immediately_derived
  0, 1},
  {&cd_S3503C6,    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
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3503C7,    ABISELECT(40,20), //bcp->offset
    26, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3503C5,    ABISELECT(32,16), //bcp->offset
    20, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S2121C38,    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
    9, //immediately_derived
  0, 0},
  {&cd_S3503C7,    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
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3503C6,    ABISELECT(48,24), //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
    9, //immediately_derived
  0, 0},
  {&cd_S3503C9,    ABISELECT(48,24), //bcp->offset
    29, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S3503C7,    ABISELECT(56,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
    8, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2121C28,    ABISELECT(56,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
    12, //immediately_derived
  0, 0},
  {&cd_S3503C10,    ABISELECT(56,28), //bcp->offset
    37, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S3503C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S3503C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S2121C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S3503C7,    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
    12, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S3503C6,    ABISELECT(8,4), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3503C7,    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
    14, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S2121C28,    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
    21, //immediately_derived
  0, 0},
  {&cd_S3503C10,    ABISELECT(16,8), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S3503C2,    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},
  {&cd_S3350C8_nt,    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
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3503C1[];
extern void _ZN7S3503C72v1Ev();
extern void _ZN7S3503C1D1Ev();
extern void _ZN7S3503C1D0Ev();
extern void _ZN7S3503C72v1Ev();
extern void _ZN7S3503C72v1Ev();
extern void _ZN7S3503C72v1Ev();
extern void _ZN7S3503C72v1Ev();
extern void _ZN7S3503C72v1Ev();
extern void _ZN7S3503C92v2Ev();
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY vtc_S3503C1[] = {
  0,
  ABISELECT(56,28),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(32,16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3503C1[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3503C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3503C1D0Ev,
  ABISELECT(40,20),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3503C1[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3503C1[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
  0,
  ABISELECT(16,8),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3503C1[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S3503C1[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
  0,
  0,
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S3503C1[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3503C92v2Ev,
  0,
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI7S3503C1[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
extern VTBL_ENTRY _ZTV7S3503C1[];
extern void _ZN7S3503C72v1Ev();
extern void _ZN7S3503C2D1Ev();
extern void _ZN7S3503C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3503C2__7S3503C1[] = {
  0,
  ABISELECT(56,28),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(32,16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3503C2[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3503C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3503C2D0Ev,
};
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3503C37S3503C2__7S3503C1[] = {
  ABISELECT(56,28),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(32,16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3503C3[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3503C5__7S3503C37S3503C2__7S3503C1[] = {
  0,
  ABISELECT(16,8),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3503C3[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3503C77S3503C5__A1__7S3503C37S3503C2__7S3503C1[] = {
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S3503C3[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
extern void _ZN7S3503C72v1Ev();
extern void _ZN7S3503C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3503C9__7S3503C37S3503C2__7S3503C1[] = {
  0,
  0,
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S3503C3[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3503C92v2Ev,
};
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S3503C10__7S3503C37S3503C2__7S3503C1[] = {
  0,
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI7S3503C3[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3503C67S3503C2__A2__7S3503C1[] = {
  ABISELECT(40,20),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3503C6[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S3503C107S3503C2__A1__7S3503C1[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S3503C10[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3503C5__7S3503C2__7S3503C1[] = {
  0,
  ABISELECT(16,8),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3503C2[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3503C77S3503C5__A1__7S3503C2__7S3503C1[] = {
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S3503C2[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
extern void _ZN7S3503C72v1Ev();
extern void _ZN7S3503C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3503C9__7S3503C2__7S3503C1[] = {
  0,
  0,
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S3503C2[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3503C92v2Ev,
};
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S3503C10__7S3503C2__7S3503C1[] = {
  0,
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI7S3503C2[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3503C6__A2__7S3503C2__7S3503C1[] = {
  ABISELECT(40,20),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3503C2[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S3503C10__A__7S3503C2__7S3503C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3503C2[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3503C5__7S3503C1[] = {
  ABISELECT(16,8),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI7S3503C5[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3503C67S3503C5__7S3503C1[] = {
  ABISELECT(16,8),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI7S3503C6[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
extern void _ZN7S3503C72v1Ev();
extern void _ZN7S3503C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3503C9__7S3503C1[] = {
  0,
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI7S3503C9[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3503C92v2Ev,
};
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3503C67S3503C9__A1__7S3503C1[] = {
  0,
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI7S3503C6[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S3503C10__7S3503C1[] = {
  ABISELECT(-56,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S3503C10[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
static  VTT_ENTRY vtt_S3503C1[] = {
  {&(_ZTV7S3503C1[8]),  8,42},
  {&(_tg__ZTV7S3503C2__7S3503C1[8]),  8,11},
  {&(_tg__ZTV7S3503C37S3503C2__7S3503C1[7]),  7,8},
  {&(_tg__ZTV7S3503C5__7S3503C37S3503C2__7S3503C1[5]),  5,6},
  {&(_tg__ZTV7S3503C77S3503C5__A1__7S3503C37S3503C2__7S3503C1[2]),  2,3},
  {&(_tg__ZTV7S3503C9__7S3503C37S3503C2__7S3503C1[6]),  6,8},
  {&(_tg__ZTV8S3503C10__7S3503C37S3503C2__7S3503C1[4]),  4,5},
  {&(_tg__ZTV7S3503C67S3503C2__A2__7S3503C1[4]),  4,5},
  {&(_tg__ZTV8S3503C107S3503C2__A1__7S3503C1[3]),  3,4},
  {&(_tg__ZTV7S3503C5__7S3503C2__7S3503C1[5]),  5,6},
  {&(_tg__ZTV7S3503C77S3503C5__A1__7S3503C2__7S3503C1[2]),  2,3},
  {&(_tg__ZTV7S3503C9__7S3503C2__7S3503C1[6]),  6,8},
  {&(_tg__ZTV8S3503C10__7S3503C2__7S3503C1[4]),  4,5},
  {&(_tg__ZTV7S3503C6__A2__7S3503C2__7S3503C1[4]),  4,5},
  {&(_tg__ZTV8S3503C10__A__7S3503C2__7S3503C1[3]),  3,4},
  {&(_ZTV7S3503C1[25]),  25,42},
  {&(_ZTV7S3503C1[28]),  28,42},
  {&(_ZTV7S3503C1[35]),  35,42},
  {&(_ZTV7S3503C1[41]),  41,42},
  {&(_ZTV7S3503C1[15]),  15,42},
  {&(_ZTV7S3503C1[19]),  19,42},
  {&(_tg__ZTV7S3503C5__7S3503C1[4]),  4,5},
  {&(_tg__ZTV7S3503C67S3503C5__7S3503C1[4]),  4,5},
  {&(_tg__ZTV7S3503C9__7S3503C1[4]),  4,6},
  {&(_tg__ZTV7S3503C67S3503C9__A1__7S3503C1[4]),  4,5},
  {&(_tg__ZTV8S3503C10__7S3503C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S3503C1[];
extern  VTBL_ENTRY _ZTV7S3503C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3503C1[];
Class_Descriptor cd_S3503C1 = {  "S3503C1", // class name
  bases_S3503C1, 24,
  &(vtc_S3503C1[0]), // expected_vtbl_contents
  &(vtt_S3503C1[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI7S3503C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3503C1),42, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3503C1),26, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21649C2_nt  {
  void *s21649c2f0[3];
};
//SIG(-1 S21649C2_nt) C1{ Fp[3]}



//skip512 S21649C2_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21649C3_nt  {
  int s21649c3f0;
  void *s21649c3f1;
};
//SIG(-1 S21649C3_nt) C1{ Fi Fp}



//skip512 S21649C3_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21649C6  {
  void *s21649c6f0;
  int s21649c6f1;
  void *s21649c6f2;
  int s21649c6f3;
  void *s21649c6f4[2];
  int s21649c6f5[2];
  ::S8480C8_nt s21649c6f6[16];
};
//SIG(-1 S21649C6) C1{ Fp Fi Fp Fi Fp[2] Fi[2] FC2{ Fi Fp Fi}[16]}



static void Test_S21649C6()
{
  {
    init_simple_test("S21649C6");
    S21649C6 lv;
    check2(sizeof(lv), ABISELECT(440,224), "sizeof(S21649C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21649C6)");
    check_field_offset(lv, s21649c6f0, 0, "S21649C6.s21649c6f0");
    check_field_offset(lv, s21649c6f1, ABISELECT(8,4), "S21649C6.s21649c6f1");
    check_field_offset(lv, s21649c6f2, ABISELECT(16,8), "S21649C6.s21649c6f2");
    check_field_offset(lv, s21649c6f3, ABISELECT(24,12), "S21649C6.s21649c6f3");
    check_field_offset(lv, s21649c6f4, ABISELECT(32,16), "S21649C6.s21649c6f4");
    check_field_offset(lv, s21649c6f5, ABISELECT(48,24), "S21649C6.s21649c6f5");
    check_field_offset(lv, s21649c6f6, ABISELECT(56,32), "S21649C6.s21649c6f6");
  }
}
static Arrange_To_Call_Me vS21649C6(Test_S21649C6, "S21649C6", ABISELECT(440,224));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21649C5  {
  int s21649c5f0;
  void *s21649c5f1;
  int s21649c5f2;
  ::S21649C6 s21649c5f3;
};
//SIG(1 S21649C5) C1{ Fi Fp Fi FC2{ Fp Fi Fp Fi Fp[2] Fi[2] FC3{ Fi Fp Fi}[16]}}



static void Test_S21649C5()
{
  {
    init_simple_test("S21649C5");
    S21649C5 lv;
    check2(sizeof(lv), ABISELECT(464,236), "sizeof(S21649C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21649C5)");
    check_field_offset(lv, s21649c5f0, 0, "S21649C5.s21649c5f0");
    check_field_offset(lv, s21649c5f1, ABISELECT(8,4), "S21649C5.s21649c5f1");
    check_field_offset(lv, s21649c5f2, ABISELECT(16,8), "S21649C5.s21649c5f2");
    check_field_offset(lv, s21649c5f3, ABISELECT(24,12), "S21649C5.s21649c5f3");
  }
}
static Arrange_To_Call_Me vS21649C5(Test_S21649C5, "S21649C5", ABISELECT(464,236));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21649C4  {
  int s21649c4f0;
  ::S21649C5 s21649c4f1[50];
};
//SIG(-1 S21649C4) C1{ Fi FC2{ Fi Fp Fi FC3{ Fp Fi Fp Fi Fp[2] Fi[2] FC4{ Fi Fp Fi}[16]}}[50]}



static void Test_S21649C4()
{
  {
    init_simple_test("S21649C4");
    S21649C4 lv;
    check2(sizeof(lv), ABISELECT(23208,11804), "sizeof(S21649C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21649C4)");
    check_field_offset(lv, s21649c4f0, 0, "S21649C4.s21649c4f0");
    check_field_offset(lv, s21649c4f1, ABISELECT(8,4), "S21649C4.s21649c4f1");
  }
}
static Arrange_To_Call_Me vS21649C4(Test_S21649C4, "S21649C4", ABISELECT(23208,11804));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21649C1  {
  int s21649c1f0[2];
  ::S21649C2_nt s21649c1f1;
  ::S21649C3_nt s21649c1f2;
  ::S21649C4 s21649c1f3;
  ::S21649C3_nt s21649c1f4[3];
  void  mf21649c1(); // _ZN8S21649C19mf21649c1Ev
  virtual  ~S21649C1(); // _ZN8S21649C1D1Ev
  S21649C1(); // tgen
};
//SIG(1 S21649C1) C1{ vd m Fi[2] FC2{ Fp[3]} FC3{ Fi Fp} FC4{ Fi FC5{ Fi Fp Fi FC6{ Fp Fi Fp Fi Fp[2] Fi[2] FC7{ Fi Fp Fi}[16]}}[50]} FC3[3]}


void  S21649C1 ::mf21649c1(){}
 S21649C1 ::~S21649C1(){ note_dtor("S21649C1", this);}
S21649C1 ::S21649C1(){ note_ctor("S21649C1", this);} // tgen

static void Test_S21649C1()
{
  extern Class_Descriptor cd_S21649C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(2915,2966)];
    init_test(&cd_S21649C1, buf);
    S21649C1 *dp, &lv = *(dp=new (buf) S21649C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(23312,11860), "sizeof(S21649C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21649C1)");
    check_field_offset(lv, s21649c1f0, ABISELECT(8,4), "S21649C1.s21649c1f0");
    check_field_offset(lv, s21649c1f1, ABISELECT(16,12), "S21649C1.s21649c1f1");
    check_field_offset(lv, s21649c1f2, ABISELECT(40,24), "S21649C1.s21649c1f2");
    check_field_offset(lv, s21649c1f3, ABISELECT(56,32), "S21649C1.s21649c1f3");
    check_field_offset(lv, s21649c1f4, ABISELECT(23264,11836), "S21649C1.s21649c1f4");
    test_class_info(&lv, &cd_S21649C1);
    dp->~S21649C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21649C1(Test_S21649C1, "S21649C1", ABISELECT(23312,11860));

#else // __cplusplus

extern void _ZN8S21649C1C1Ev();
extern void _ZN8S21649C1D1Ev();
Name_Map name_map_S21649C1[] = {
  NSPAIR(_ZN8S21649C1C1Ev),
  NSPAIR(_ZN8S21649C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21649C1[];
extern void _ZN8S21649C1D1Ev();
extern void _ZN8S21649C1D0Ev();
static  VTBL_ENTRY vtc_S21649C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21649C1[0]),
  (VTBL_ENTRY)&_ZN8S21649C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21649C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21649C1[];
extern  VTBL_ENTRY _ZTV8S21649C1[];
Class_Descriptor cd_S21649C1 = {  "S21649C1", // class name
  0,0,//no base classes
  &(vtc_S21649C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(23312,11860), // object size
  NSPAIRA(_ZTI8S21649C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21649C1),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  S11271C3  {
  ::S4846C6_nt s11271c3f0;
  short s11271c3f1;
  char s11271c3f2[2];
  ::S4846C10_nt s11271c3f3;
  ::S4846C9_nt s11271c3f4;
};
//SIG(-1 S11271C3) C1{ FC2{ FC3{ Fc[20]} Fc[16]} Fs Fc[2] FC4{ Fi Fc[128] FC5{ Fi[2] Fc[320] Fi}} FC6{ Fc[12]}}



static void Test_S11271C3()
{
  {
    init_simple_test("S11271C3");
    S11271C3 lv;
    check2(sizeof(lv), 516, "sizeof(S11271C3)");
    check2(__alignof__(lv), 4, "__alignof__(S11271C3)");
    check_field_offset(lv, s11271c3f0, 0, "S11271C3.s11271c3f0");
    check_field_offset(lv, s11271c3f1, 36, "S11271C3.s11271c3f1");
    check_field_offset(lv, s11271c3f2, 38, "S11271C3.s11271c3f2");
    check_field_offset(lv, s11271c3f3, 40, "S11271C3.s11271c3f3");
    check_field_offset(lv, s11271c3f4, 504, "S11271C3.s11271c3f4");
  }
}
static Arrange_To_Call_Me vS11271C3(Test_S11271C3, "S11271C3", 516);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11271C9_nt  {
  __tsi64 s11271c9f0[3];
  char s11271c9f1;
};
//SIG(-1 S11271C9_nt) C1{ FL[3] Fc}



//skip512 S11271C9_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11271C2  {
  ::S11271C3 s11271c2f0;
  char s11271c2f1;
  ::S11271C9_nt s11271c2f2;
};
//SIG(1 S11271C2) C1{ FC2{ FC3{ FC4{ Fc[20]} Fc[16]} Fs Fc[2] FC5{ Fi Fc[128] FC6{ Fi[2] Fc[320] Fi}} FC7{ Fc[12]}} Fc FC8{ FL[3] Fc}}



static void Test_S11271C2()
{
  {
    init_simple_test("S11271C2");
    S11271C2 lv;
    check2(sizeof(lv), ABISELECT(552,548), "sizeof(S11271C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11271C2)");
    check_field_offset(lv, s11271c2f0, 0, "S11271C2.s11271c2f0");
    check_field_offset(lv, s11271c2f1, 516, "S11271C2.s11271c2f1");
    check_field_offset(lv, s11271c2f2, 520, "S11271C2.s11271c2f2");
  }
}
static Arrange_To_Call_Me vS11271C2(Test_S11271C2, "S11271C2", ABISELECT(552,548));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11271C1  {
  ::S11271C2 s11271c1f0[8];
  int s11271c1f1;
};
//SIG(1 S11271C1) C1{ FC2{ FC3{ FC4{ FC5{ Fc[20]} Fc[16]} Fs Fc[2] FC6{ Fi Fc[128] FC7{ Fi[2] Fc[320] Fi}} FC8{ Fc[12]}} Fc FC9{ FL[3] Fc}}[8] Fi}



static void Test_S11271C1()
{
  {
    init_simple_test("S11271C1");
    S11271C1 lv;
    check2(sizeof(lv), ABISELECT(4424,4388), "sizeof(S11271C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11271C1)");
    check_field_offset(lv, s11271c1f0, 0, "S11271C1.s11271c1f0");
    check_field_offset(lv, s11271c1f1, ABISELECT(4416,4384), "S11271C1.s11271c1f1");
  }
}
static Arrange_To_Call_Me vS11271C1(Test_S11271C1, "S11271C1", ABISELECT(4424,4388));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5104C3  {
  ::S2185C10_nt s5104c3f0;
  int s5104c3f1[2];
  char s5104c3f2;
  virtual  ~S5104C3(); // _ZN7S5104C3D1Ev
  virtual void  v4(); // _ZN7S5104C32v4Ev
  virtual void  v5(); // _ZN7S5104C32v5Ev
  virtual void  v6(); // _ZN7S5104C32v6Ev
  S5104C3(); // tgen
};
//SIG(-1 S5104C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S5104C3 ::~S5104C3(){ note_dtor("S5104C3", this);}
void  S5104C3 ::v4(){vfunc_called(this, "_ZN7S5104C32v4Ev");}
void  S5104C3 ::v5(){vfunc_called(this, "_ZN7S5104C32v5Ev");}
void  S5104C3 ::v6(){vfunc_called(this, "_ZN7S5104C32v6Ev");}
S5104C3 ::S5104C3(){ note_ctor("S5104C3", this);} // tgen

static void Test_S5104C3()
{
  extern Class_Descriptor cd_S5104C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S5104C3, buf);
    S5104C3 *dp, &lv = *(dp=new (buf) S5104C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S5104C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5104C3)");
    check_field_offset(lv, s5104c3f0, ABISELECT(8,4), "S5104C3.s5104c3f0");
    check_field_offset(lv, s5104c3f1, ABISELECT(24,16), "S5104C3.s5104c3f1");
    check_field_offset(lv, s5104c3f2, ABISELECT(32,24), "S5104C3.s5104c3f2");
    test_class_info(&lv, &cd_S5104C3);
    dp->~S5104C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5104C3(Test_S5104C3, "S5104C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S5104C3C1Ev();
extern void _ZN7S5104C3D1Ev();
Name_Map name_map_S5104C3[] = {
  NSPAIR(_ZN7S5104C3C1Ev),
  NSPAIR(_ZN7S5104C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5104C3[];
extern void _ZN7S5104C3D1Ev();
extern void _ZN7S5104C3D0Ev();
extern void _ZN7S5104C32v4Ev();
extern void _ZN7S5104C32v5Ev();
extern void _ZN7S5104C32v6Ev();
static  VTBL_ENTRY vtc_S5104C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5104C3[0]),
  (VTBL_ENTRY)&_ZN7S5104C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5104C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5104C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5104C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5104C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S5104C3[];
extern  VTBL_ENTRY _ZTV7S5104C3[];
Class_Descriptor cd_S5104C3 = {  "S5104C3", // class name
  0,0,//no base classes
  &(vtc_S5104C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S5104C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5104C3),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  S5104C2  : S5104C3 {
  void *s5104c2f0[2];
  ::S4846C6_nt s5104c2f1;
  virtual  ~S5104C2(); // _ZN7S5104C2D1Ev
  virtual void  v7(); // _ZN7S5104C22v7Ev
  virtual void  v8(); // _ZN7S5104C22v8Ev
  virtual void  v9(); // _ZN7S5104C22v9Ev
  virtual void  v10(); // _ZN7S5104C23v10Ev
  S5104C2(); // tgen
};
//SIG(-1 S5104C2) C1{ BC2{ vd v5 v6 v7 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 v3 v4 Fp[2] FC5{ FC6{ Fc[20]} Fc[16]}}


 S5104C2 ::~S5104C2(){ note_dtor("S5104C2", this);}
void  S5104C2 ::v7(){vfunc_called(this, "_ZN7S5104C22v7Ev");}
void  S5104C2 ::v8(){vfunc_called(this, "_ZN7S5104C22v8Ev");}
void  S5104C2 ::v9(){vfunc_called(this, "_ZN7S5104C22v9Ev");}
void  S5104C2 ::v10(){vfunc_called(this, "_ZN7S5104C23v10Ev");}
S5104C2 ::S5104C2(){ note_ctor("S5104C2", this);} // tgen

static void Test_S5104C2()
{
  extern Class_Descriptor cd_S5104C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,19)];
    init_test(&cd_S5104C2, buf);
    S5104C2 *dp, &lv = *(dp=new (buf) S5104C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,72), "sizeof(S5104C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5104C2)");
    check_base_class_offset(lv, (S5104C3*), 0, "S5104C2");
    check_field_offset(lv, s5104c2f0, ABISELECT(40,28), "S5104C2.s5104c2f0");
    check_field_offset(lv, s5104c2f1, ABISELECT(56,36), "S5104C2.s5104c2f1");
    test_class_info(&lv, &cd_S5104C2);
    dp->~S5104C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5104C2(Test_S5104C2, "S5104C2", ABISELECT(96,72));

#else // __cplusplus

extern void _ZN7S5104C2C1Ev();
extern void _ZN7S5104C2D1Ev();
Name_Map name_map_S5104C2[] = {
  NSPAIR(_ZN7S5104C2C1Ev),
  NSPAIR(_ZN7S5104C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5104C3;
extern VTBL_ENTRY _ZTI7S5104C3[];
extern  VTBL_ENTRY _ZTV7S5104C3[];
static Base_Class bases_S5104C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5104C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S5104C2[];
extern void _ZN7S5104C2D1Ev();
extern void _ZN7S5104C2D0Ev();
extern void _ZN7S5104C32v4Ev();
extern void _ZN7S5104C32v5Ev();
extern void _ZN7S5104C32v6Ev();
extern void _ZN7S5104C22v7Ev();
extern void _ZN7S5104C22v8Ev();
extern void _ZN7S5104C22v9Ev();
extern void _ZN7S5104C23v10Ev();
static  VTBL_ENTRY vtc_S5104C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5104C2[0]),
  (VTBL_ENTRY)&_ZN7S5104C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5104C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5104C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5104C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5104C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5104C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5104C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5104C22v9Ev,
  (VTBL_ENTRY)&_ZN7S5104C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S5104C2[];
extern  VTBL_ENTRY _ZTV7S5104C2[];
Class_Descriptor cd_S5104C2 = {  "S5104C2", // class name
  bases_S5104C2, 1,
  &(vtc_S5104C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,72), // object size
  NSPAIRA(_ZTI7S5104C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5104C2),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5104C1  : S5104C2 {
  int s5104c1f0;
  virtual  ~S5104C1(); // _ZN7S5104C1D1Ev
  virtual void  v1(); // _ZN7S5104C12v1Ev
  virtual void  v2(); // _ZN7S5104C12v2Ev
  virtual void  v3(); // _ZN7S5104C12v3Ev
  S5104C1(); // tgen
};
//SIG(1 S5104C1) C1{ BC2{ BC3{ vd v4 v5 v6 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} vd v7 v8 v9 v10 Fp[2] FC6{ FC7{ Fc[20]} Fc[16]}} vd v1 v2 v3 Fi}


 S5104C1 ::~S5104C1(){ note_dtor("S5104C1", this);}
void  S5104C1 ::v1(){vfunc_called(this, "_ZN7S5104C12v1Ev");}
void  S5104C1 ::v2(){vfunc_called(this, "_ZN7S5104C12v2Ev");}
void  S5104C1 ::v3(){vfunc_called(this, "_ZN7S5104C12v3Ev");}
S5104C1 ::S5104C1(){ note_ctor("S5104C1", this);} // tgen

static void Test_S5104C1()
{
  extern Class_Descriptor cd_S5104C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,20)];
    init_test(&cd_S5104C1, buf);
    S5104C1 *dp, &lv = *(dp=new (buf) S5104C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,76), "sizeof(S5104C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5104C1)");
    check_base_class_offset(lv, (S5104C3*)(S5104C2*), 0, "S5104C1");
    check_base_class_offset(lv, (S5104C2*), 0, "S5104C1");
    check_field_offset(lv, s5104c1f0, ABISELECT(92,72), "S5104C1.s5104c1f0");
    test_class_info(&lv, &cd_S5104C1);
    dp->~S5104C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5104C1(Test_S5104C1, "S5104C1", ABISELECT(96,76));

#else // __cplusplus

extern void _ZN7S5104C1C1Ev();
extern void _ZN7S5104C1D1Ev();
Name_Map name_map_S5104C1[] = {
  NSPAIR(_ZN7S5104C1C1Ev),
  NSPAIR(_ZN7S5104C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5104C3;
extern VTBL_ENTRY _ZTI7S5104C3[];
extern  VTBL_ENTRY _ZTV7S5104C3[];
extern Class_Descriptor cd_S5104C2;
extern VTBL_ENTRY _ZTI7S5104C2[];
extern  VTBL_ENTRY _ZTV7S5104C2[];
static Base_Class bases_S5104C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5104C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S5104C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S5104C1[];
extern void _ZN7S5104C1D1Ev();
extern void _ZN7S5104C1D0Ev();
extern void _ZN7S5104C32v4Ev();
extern void _ZN7S5104C32v5Ev();
extern void _ZN7S5104C32v6Ev();
extern void _ZN7S5104C22v7Ev();
extern void _ZN7S5104C22v8Ev();
extern void _ZN7S5104C22v9Ev();
extern void _ZN7S5104C23v10Ev();
extern void _ZN7S5104C12v1Ev();
extern void _ZN7S5104C12v2Ev();
extern void _ZN7S5104C12v3Ev();
static  VTBL_ENTRY vtc_S5104C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5104C1[0]),
  (VTBL_ENTRY)&_ZN7S5104C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5104C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5104C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5104C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5104C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5104C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5104C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5104C22v9Ev,
  (VTBL_ENTRY)&_ZN7S5104C23v10Ev,
  (VTBL_ENTRY)&_ZN7S5104C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5104C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5104C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S5104C1[];
extern  VTBL_ENTRY _ZTV7S5104C1[];
Class_Descriptor cd_S5104C1 = {  "S5104C1", // class name
  bases_S5104C1, 2,
  &(vtc_S5104C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,76), // object size
  NSPAIRA(_ZTI7S5104C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5104C1),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  S16089C1  {
  ::S3350C8_nt s16089c1f0;
  ::S4846C6_nt s16089c1f1;
  ::S4846C8 s16089c1f2;
  int s16089c1f3;
  void  mf16089c1(); // _ZN8S16089C19mf16089c1Ev
};
//SIG(1 S16089C1) C1{ m FC2{ m Fi} FC3{ FC4{ Fc[20]} Fc[16]} FC5{ Fi FC6{ Fc[12]} Fc[48] FC6 FC6 FC7{ Fi Fc[128] FC8{ Fi[2] Fc[320] Fi}}} Fi}


void  S16089C1 ::mf16089c1(){}

static void Test_S16089C1()
{
  {
    init_simple_test("S16089C1");
    S16089C1 lv;
    check2(sizeof(lv), 596, "sizeof(S16089C1)");
    check2(__alignof__(lv), 4, "__alignof__(S16089C1)");
    check_field_offset(lv, s16089c1f0, 0, "S16089C1.s16089c1f0");
    check_field_offset(lv, s16089c1f1, 4, "S16089C1.s16089c1f1");
    check_field_offset(lv, s16089c1f2, 40, "S16089C1.s16089c1f2");
    check_field_offset(lv, s16089c1f3, 592, "S16089C1.s16089c1f3");
  }
}
static Arrange_To_Call_Me vS16089C1(Test_S16089C1, "S16089C1", 596);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3772C2  : S6282C14_nt {
  int s3772c2f0[6];
  char s3772c2f1[2];
  virtual  ~S3772C2(); // _ZN7S3772C2D1Ev
  S3772C2(); // tgen
};
//SIG(-1 S3772C2) C1{ BC2{ vd m Fi} vd Fi[6] Fc[2]}


 S3772C2 ::~S3772C2(){ note_dtor("S3772C2", this);}
S3772C2 ::S3772C2(){ note_ctor("S3772C2", this);} // tgen

static void Test_S3772C2()
{
  extern Class_Descriptor cd_S3772C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,10)];
    init_test(&cd_S3772C2, buf);
    S3772C2 *dp, &lv = *(dp=new (buf) S3772C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,36), "sizeof(S3772C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3772C2)");
    check_base_class_offset(lv, (S6282C14_nt*), 0, "S3772C2");
    check_field_offset(lv, s3772c2f0, ABISELECT(12,8), "S3772C2.s3772c2f0");
    check_field_offset(lv, s3772c2f1, ABISELECT(36,32), "S3772C2.s3772c2f1");
    test_class_info(&lv, &cd_S3772C2);
    dp->~S3772C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3772C2(Test_S3772C2, "S3772C2", ABISELECT(40,36));

#else // __cplusplus

extern void _ZN7S3772C2C1Ev();
extern void _ZN7S3772C2D1Ev();
Name_Map name_map_S3772C2[] = {
  NSPAIR(_ZN7S3772C2C1Ev),
  NSPAIR(_ZN7S3772C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6282C14_nt;
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
extern  VTBL_ENTRY _ZTV11S6282C14_nt[];
static Base_Class bases_S3772C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6282C14_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 _ZTI7S3772C2[];
extern void _ZN7S3772C2D1Ev();
extern void _ZN7S3772C2D0Ev();
static  VTBL_ENTRY vtc_S3772C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3772C2[0]),
  (VTBL_ENTRY)&_ZN7S3772C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3772C2D0Ev,
};
extern VTBL_ENTRY _ZTI7S3772C2[];
extern  VTBL_ENTRY _ZTV7S3772C2[];
Class_Descriptor cd_S3772C2 = {  "S3772C2", // class name
  bases_S3772C2, 1,
  &(vtc_S3772C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,36), // object size
  NSPAIRA(_ZTI7S3772C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3772C2),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3772C1  : S3772C2 {
  int s3772c1f0[5];
  char s3772c1f1[5];
  int s3772c1f2[5];
  ::S21535C5 s3772c1f3;
  virtual  ~S3772C1(); // _ZN7S3772C1D1Ev
  S3772C1(); // tgen
};
//SIG(1 S3772C1) C1{ BC2{ BC3{ vd m Fi} vd Fi[6] Fc[2]} vd Fi[5] Fc[5] Fi[5] FC4{ vd m FC5{ m Fp Fi FC6{ m}} FC7{ m Fp Fi FC8{ m} FC9{ m}}}}


 S3772C1 ::~S3772C1(){ note_dtor("S3772C1", this);}
S3772C1 ::S3772C1(){ note_ctor("S3772C1", this);} // tgen

static void Test_S3772C1()
{
  extern Class_Descriptor cd_S3772C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,29)];
    init_test(&cd_S3772C1, buf);
    S3772C1 *dp, &lv = *(dp=new (buf) S3772C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,112), "sizeof(S3772C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3772C1)");
    check_base_class_offset(lv, (S6282C14_nt*)(S3772C2*), 0, "S3772C1");
    check_base_class_offset(lv, (S3772C2*), 0, "S3772C1");
    check_field_offset(lv, s3772c1f0, ABISELECT(40,36), "S3772C1.s3772c1f0");
    check_field_offset(lv, s3772c1f1, ABISELECT(60,56), "S3772C1.s3772c1f1");
    check_field_offset(lv, s3772c1f2, ABISELECT(68,64), "S3772C1.s3772c1f2");
    check_field_offset(lv, s3772c1f3, ABISELECT(88,84), "S3772C1.s3772c1f3");
    test_class_info(&lv, &cd_S3772C1);
    dp->~S3772C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3772C1(Test_S3772C1, "S3772C1", ABISELECT(128,112));

#else // __cplusplus

extern void _ZN7S3772C1C1Ev();
extern void _ZN7S3772C1D1Ev();
Name_Map name_map_S3772C1[] = {
  NSPAIR(_ZN7S3772C1C1Ev),
  NSPAIR(_ZN7S3772C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6282C14_nt;
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
extern  VTBL_ENTRY _ZTV11S6282C14_nt[];
extern Class_Descriptor cd_S3772C2;
extern VTBL_ENTRY _ZTI7S3772C2[];
extern  VTBL_ENTRY _ZTV7S3772C2[];
static Base_Class bases_S3772C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6282C14_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_S3772C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3772C1[];
extern void _ZN7S3772C1D1Ev();
extern void _ZN7S3772C1D0Ev();
static  VTBL_ENTRY vtc_S3772C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3772C1[0]),
  (VTBL_ENTRY)&_ZN7S3772C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3772C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S3772C1[];
extern  VTBL_ENTRY _ZTV7S3772C1[];
Class_Descriptor cd_S3772C1 = {  "S3772C1", // class name
  bases_S3772C1, 2,
  &(vtc_S3772C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,112), // object size
  NSPAIRA(_ZTI7S3772C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3772C1),4, //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  S3563C5  {
  virtual  ~S3563C5(); // _ZN7S3563C5D1Ev
  virtual void  v4(); // _ZN7S3563C52v4Ev
  virtual void  v5(); // _ZN7S3563C52v5Ev
  virtual void  v6(); // _ZN7S3563C52v6Ev
  virtual void  v7(); // _ZN7S3563C52v7Ev
  virtual void  v8(); // _ZN7S3563C52v8Ev
  S3563C5(); // tgen
};
//SIG(-1 S3563C5) C1{ vd v1 v2 v3 v4 v5}


 S3563C5 ::~S3563C5(){ note_dtor("S3563C5", this);}
void  S3563C5 ::v4(){vfunc_called(this, "_ZN7S3563C52v4Ev");}
void  S3563C5 ::v5(){vfunc_called(this, "_ZN7S3563C52v5Ev");}
void  S3563C5 ::v6(){vfunc_called(this, "_ZN7S3563C52v6Ev");}
void  S3563C5 ::v7(){vfunc_called(this, "_ZN7S3563C52v7Ev");}
void  S3563C5 ::v8(){vfunc_called(this, "_ZN7S3563C52v8Ev");}
S3563C5 ::S3563C5(){ note_ctor("S3563C5", this);} // tgen

static void Test_S3563C5()
{
  extern Class_Descriptor cd_S3563C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3563C5, buf);
    S3563C5 *dp, &lv = *(dp=new (buf) S3563C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3563C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3563C5)");
    test_class_info(&lv, &cd_S3563C5);
    dp->~S3563C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3563C5(Test_S3563C5, "S3563C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3563C5C1Ev();
extern void _ZN7S3563C5D1Ev();
Name_Map name_map_S3563C5[] = {
  NSPAIR(_ZN7S3563C5C1Ev),
  NSPAIR(_ZN7S3563C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3563C5[];
extern void _ZN7S3563C5D1Ev();
extern void _ZN7S3563C5D0Ev();
extern void _ZN7S3563C52v4Ev();
extern void _ZN7S3563C52v5Ev();
extern void _ZN7S3563C52v6Ev();
extern void _ZN7S3563C52v7Ev();
extern void _ZN7S3563C52v8Ev();
static  VTBL_ENTRY vtc_S3563C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3563C5[0]),
  (VTBL_ENTRY)&_ZN7S3563C5D1Ev,
  (VTBL_ENTRY)&_ZN7S3563C5D0Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v5Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v8Ev,
};
extern VTBL_ENTRY _ZTI7S3563C5[];
extern  VTBL_ENTRY _ZTV7S3563C5[];
Class_Descriptor cd_S3563C5 = {  "S3563C5", // class name
  0,0,//no base classes
  &(vtc_S3563C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3563C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3563C5),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  S3563C4  : virtual S3563C5 {
  void *s3563c4f0;
  ::S3563C5 s3563c4f1;
  void *s3563c4f2;
  virtual  ~S3563C4(); // _ZN7S3563C4D2Ev
  virtual void  v9(); // _ZN7S3563C42v9Ev
  virtual void  v10(); // _ZN7S3563C43v10Ev
  virtual void  v11(); // _ZN7S3563C43v11Ev
  S3563C4(); // tgen
};
//SIG(-1 S3563C4) C1{ VBC2{ vd v4 v5 v6 v7 v8} vd v1 v2 v3 Fp FC2 Fp}


 S3563C4 ::~S3563C4(){ note_dtor("S3563C4", this);}
void  S3563C4 ::v9(){vfunc_called(this, "_ZN7S3563C42v9Ev");}
void  S3563C4 ::v10(){vfunc_called(this, "_ZN7S3563C43v10Ev");}
void  S3563C4 ::v11(){vfunc_called(this, "_ZN7S3563C43v11Ev");}
S3563C4 ::S3563C4(){ note_ctor("S3563C4", this);} // tgen

static void Test_S3563C4()
{
  extern Class_Descriptor cd_S3563C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S3563C4, buf);
    S3563C4 *dp, &lv = *(dp=new (buf) S3563C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S3563C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3563C4)");
    check_base_class_offset(lv, (S3563C5*), 0, "S3563C4");
    check_field_offset(lv, s3563c4f0, ABISELECT(8,4), "S3563C4.s3563c4f0");
    check_field_offset(lv, s3563c4f1, ABISELECT(16,8), "S3563C4.s3563c4f1");
    check_field_offset(lv, s3563c4f2, ABISELECT(24,12), "S3563C4.s3563c4f2");
    test_class_info(&lv, &cd_S3563C4);
    dp->~S3563C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3563C4(Test_S3563C4, "S3563C4", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S3563C4C1Ev();
extern void _ZN7S3563C4D2Ev();
Name_Map name_map_S3563C4[] = {
  NSPAIR(_ZN7S3563C4C1Ev),
  NSPAIR(_ZN7S3563C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3563C5;
extern VTBL_ENTRY _ZTI7S3563C5[];
extern  VTBL_ENTRY _ZTV7S3563C5[];
static Base_Class bases_S3563C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3563C5,    0, //bcp->offset
    -1, //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 _ZTI7S3563C4[];
extern void _ZN7S3563C4D1Ev();
extern void _ZN7S3563C4D0Ev();
extern void _ZN7S3563C52v4Ev();
extern void _ZN7S3563C52v5Ev();
extern void _ZN7S3563C52v6Ev();
extern void _ZN7S3563C52v7Ev();
extern void _ZN7S3563C52v8Ev();
extern void _ZN7S3563C42v9Ev();
extern void _ZN7S3563C43v10Ev();
extern void _ZN7S3563C43v11Ev();
static  VTBL_ENTRY vtc_S3563C4[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3563C4[0]),
  (VTBL_ENTRY)&_ZN7S3563C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3563C4D0Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v5Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3563C42v9Ev,
  (VTBL_ENTRY)&_ZN7S3563C43v10Ev,
  (VTBL_ENTRY)&_ZN7S3563C43v11Ev,
};
extern VTBL_ENTRY _ZTV7S3563C4[];
static  VTT_ENTRY vtt_S3563C4[] = {
  {&(_ZTV7S3563C4[9]),  9,19},
  {&(_ZTV7S3563C4[9]),  9,19},
};
extern VTBL_ENTRY _ZTI7S3563C4[];
extern  VTBL_ENTRY _ZTV7S3563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3563C4[];
Class_Descriptor cd_S3563C4 = {  "S3563C4", // class name
  bases_S3563C4, 1,
  &(vtc_S3563C4[0]), // expected_vtbl_contents
  &(vtt_S3563C4[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S3563C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S3563C4),19, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3563C4),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  S3563C3  : virtual S3563C4 {
  virtual  ~S3563C3(); // _ZN7S3563C3D2Ev
  virtual void  v12(); // _ZN7S3563C33v12Ev
  S3563C3(); // tgen
};
//SIG(-1 S3563C3) C1{ VBC2{ VBC3{ vd v2 v3 v4 v5 v6} vd v7 v8 v9 Fp FC3 Fp} vd v1}


 S3563C3 ::~S3563C3(){ note_dtor("S3563C3", this);}
void  S3563C3 ::v12(){vfunc_called(this, "_ZN7S3563C33v12Ev");}
S3563C3 ::S3563C3(){ note_ctor("S3563C3", this);} // tgen

static void Test_S3563C3()
{
  extern Class_Descriptor cd_S3563C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S3563C3, buf);
    S3563C3 *dp, &lv = *(dp=new (buf) S3563C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S3563C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3563C3)");
    check_base_class_offset(lv, (S3563C5*)(S3563C4*), 0, "S3563C3");
    check_base_class_offset(lv, (S3563C4*), ABISELECT(8,4), "S3563C3");
    test_class_info(&lv, &cd_S3563C3);
    dp->~S3563C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3563C3(Test_S3563C3, "S3563C3", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S3563C3C1Ev();
extern void _ZN7S3563C3D2Ev();
Name_Map name_map_S3563C3[] = {
  NSPAIR(_ZN7S3563C3C1Ev),
  NSPAIR(_ZN7S3563C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3563C5;
extern VTBL_ENTRY _ZTI7S3563C5[];
extern  VTBL_ENTRY _ZTV7S3563C5[];
extern Class_Descriptor cd_S3563C4;
extern VTBL_ENTRY _ZTI7S3563C4[];
extern  VTBL_ENTRY _ZTV7S3563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3563C4[];
static Base_Class bases_S3563C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3563C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //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
    1, //immediately_derived
  0, 1},
  {&cd_S3563C4,    ABISELECT(8,4), //bcp->offset
    18, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3563C3[];
extern void _ZN7S3563C3D1Ev();
extern void _ZN7S3563C3D0Ev();
extern void _ZN7S3563C52v4Ev();
extern void _ZN7S3563C52v5Ev();
extern void _ZN7S3563C52v6Ev();
extern void _ZN7S3563C52v7Ev();
extern void _ZN7S3563C52v8Ev();
extern void _ZN7S3563C33v12Ev();
extern void ABISELECT(_ZTv0_n24_N7S3563C3D1Ev,_ZTv0_n12_N7S3563C3D1Ev)();
extern void ABISELECT(_ZThn8_N7S3563C3D1Ev,_ZThn4_N7S3563C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3563C3D0Ev,_ZTv0_n12_N7S3563C3D0Ev)();
extern void ABISELECT(_ZThn8_N7S3563C3D0Ev,_ZThn4_N7S3563C3D0Ev)() __attribute__((weak));
extern void _ZN7S3563C52v4Ev();
extern void _ZN7S3563C52v5Ev();
extern void _ZN7S3563C52v6Ev();
extern void _ZN7S3563C52v7Ev();
extern void _ZN7S3563C52v8Ev();
extern void _ZN7S3563C42v9Ev();
extern void _ZN7S3563C43v10Ev();
extern void _ZN7S3563C43v11Ev();
static  VTBL_ENTRY vtc_S3563C3[] = {
  0,
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3563C3[0]),
  (VTBL_ENTRY)&_ZN7S3563C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3563C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v5Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3563C33v12Ev,
  0,
  0,
  0,
  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)&(_ZTI7S3563C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3563C3D1Ev,_ZTv0_n12_N7S3563C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3563C3D0Ev,_ZTv0_n12_N7S3563C3D0Ev),
  (VTBL_ENTRY)&_ZN7S3563C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v5Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3563C42v9Ev,
  (VTBL_ENTRY)&_ZN7S3563C43v10Ev,
  (VTBL_ENTRY)&_ZN7S3563C43v11Ev,
};
extern VTBL_ENTRY _ZTV7S3563C3[];
extern void ABISELECT(_ZTv0_n24_N7S3563C4D1Ev,_ZTv0_n12_N7S3563C4D1Ev)();
extern void _ZN7S3563C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3563C4D0Ev,_ZTv0_n12_N7S3563C4D0Ev)();
extern void _ZN7S3563C4D0Ev() __attribute__((weak));
extern void _ZN7S3563C52v4Ev();
extern void _ZN7S3563C52v5Ev();
extern void _ZN7S3563C52v6Ev();
extern void _ZN7S3563C52v7Ev();
extern void _ZN7S3563C52v8Ev();
extern void _ZN7S3563C42v9Ev();
extern void _ZN7S3563C43v10Ev();
extern void _ZN7S3563C43v11Ev();
static  VTBL_ENTRY _tg__ZTV7S3563C4__7S3563C3[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3563C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3563C4D1Ev,_ZTv0_n12_N7S3563C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3563C4D0Ev,_ZTv0_n12_N7S3563C4D0Ev),
  (VTBL_ENTRY)&_ZN7S3563C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v5Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3563C42v9Ev,
  (VTBL_ENTRY)&_ZN7S3563C43v10Ev,
  (VTBL_ENTRY)&_ZN7S3563C43v11Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3563C4D1Ev,_ZTv0_n12_N7S3563C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3563C4D0Ev,_ZTv0_n12_N7S3563C4D0Ev)();
extern void _ZN7S3563C52v4Ev();
extern void _ZN7S3563C52v5Ev();
extern void _ZN7S3563C52v6Ev();
extern void _ZN7S3563C52v7Ev();
extern void _ZN7S3563C52v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3563C5__7S3563C4__7S3563C3[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S3563C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3563C4D1Ev,_ZTv0_n12_N7S3563C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3563C4D0Ev,_ZTv0_n12_N7S3563C4D0Ev),
  (VTBL_ENTRY)&_ZN7S3563C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v5Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v8Ev,
};
static  VTT_ENTRY vtt_S3563C3[] = {
  {&(_ZTV7S3563C3[10]),  10,40},
  {&(_ZTV7S3563C3[30]),  30,40},
  {&(_ZTV7S3563C3[10]),  10,40},
  {&(_tg__ZTV7S3563C4__7S3563C3[9]),  9,19},
  {&(_tg__ZTV7S3563C5__7S3563C4__7S3563C3[8]),  8,15},
};
extern VTBL_ENTRY _ZTI7S3563C3[];
extern  VTBL_ENTRY _ZTV7S3563C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3563C3[];
static VTBL_ENTRY alt_thunk_names30[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3563C4D0Ev,_ZTv0_n12_N7S3563C4D0Ev), // 
  (VTBL_ENTRY)_ZN7S3563C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3563C4D1Ev,_ZTv0_n12_N7S3563C4D1Ev), // 
  (VTBL_ENTRY)_ZN7S3563C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3563C3D0Ev,_ZTv0_n12_N7S3563C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3563C3D0Ev,_ZThn4_N7S3563C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3563C3D1Ev,_ZTv0_n12_N7S3563C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3563C3D1Ev,_ZThn4_N7S3563C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3563C3 = {  "S3563C3", // class name
  bases_S3563C3, 2,
  &(vtc_S3563C3[0]), // expected_vtbl_contents
  &(vtt_S3563C3[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S3563C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S3563C3),40, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3563C3),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names30,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3563C2  : S3563C3 {
  virtual void  v13(); // _ZN7S3563C23v13Ev
  ~S3563C2(); // tgen
  S3563C2(); // tgen
};
//SIG(-1 S3563C2) C1{ BC2{ VBC3{ VBC4{ vd v2 v3 v4 v5 v6} vd v7 v8 v9 Fp FC4 Fp} vd v10} v1}


void  S3563C2 ::v13(){vfunc_called(this, "_ZN7S3563C23v13Ev");}
S3563C2 ::~S3563C2(){ note_dtor("S3563C2", this);} // tgen
S3563C2 ::S3563C2(){ note_ctor("S3563C2", this);} // tgen

static void Test_S3563C2()
{
  extern Class_Descriptor cd_S3563C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S3563C2, buf);
    S3563C2 *dp, &lv = *(dp=new (buf) S3563C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S3563C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3563C2)");
    check_base_class_offset(lv, (S3563C5*)(S3563C4*), 0, "S3563C2");
    check_base_class_offset(lv, (S3563C4*)(S3563C3*), ABISELECT(8,4), "S3563C2");
    check_base_class_offset(lv, (S3563C3*), 0, "S3563C2");
    test_class_info(&lv, &cd_S3563C2);
    dp->~S3563C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3563C2(Test_S3563C2, "S3563C2", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S3563C2C1Ev();
extern void _ZN7S3563C2D1Ev();
Name_Map name_map_S3563C2[] = {
  NSPAIR(_ZN7S3563C2C1Ev),
  NSPAIR(_ZN7S3563C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3563C5;
extern VTBL_ENTRY _ZTI7S3563C5[];
extern  VTBL_ENTRY _ZTV7S3563C5[];
extern Class_Descriptor cd_S3563C4;
extern VTBL_ENTRY _ZTI7S3563C4[];
extern  VTBL_ENTRY _ZTV7S3563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3563C4[];
extern Class_Descriptor cd_S3563C3;
extern VTBL_ENTRY _ZTI7S3563C3[];
extern  VTBL_ENTRY _ZTV7S3563C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3563C3[];
static Base_Class bases_S3563C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3563C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //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
    1, //immediately_derived
  0, 1},
  {&cd_S3563C4,    ABISELECT(8,4), //bcp->offset
    19, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S3563C3,    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
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3563C2[];
extern void _ZN7S3563C2D1Ev();
extern void _ZN7S3563C2D0Ev();
extern void _ZN7S3563C52v4Ev();
extern void _ZN7S3563C52v5Ev();
extern void _ZN7S3563C52v6Ev();
extern void _ZN7S3563C52v7Ev();
extern void _ZN7S3563C52v8Ev();
extern void _ZN7S3563C33v12Ev();
extern void _ZN7S3563C23v13Ev();
extern void ABISELECT(_ZTv0_n24_N7S3563C2D1Ev,_ZTv0_n12_N7S3563C2D1Ev)();
extern void ABISELECT(_ZThn8_N7S3563C2D1Ev,_ZThn4_N7S3563C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3563C2D0Ev,_ZTv0_n12_N7S3563C2D0Ev)();
extern void ABISELECT(_ZThn8_N7S3563C2D0Ev,_ZThn4_N7S3563C2D0Ev)() __attribute__((weak));
extern void _ZN7S3563C52v4Ev();
extern void _ZN7S3563C52v5Ev();
extern void _ZN7S3563C52v6Ev();
extern void _ZN7S3563C52v7Ev();
extern void _ZN7S3563C52v8Ev();
extern void _ZN7S3563C42v9Ev();
extern void _ZN7S3563C43v10Ev();
extern void _ZN7S3563C43v11Ev();
static  VTBL_ENTRY vtc_S3563C2[] = {
  0,
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3563C2[0]),
  (VTBL_ENTRY)&_ZN7S3563C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3563C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v5Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3563C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3563C23v13Ev,
  0,
  0,
  0,
  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)&(_ZTI7S3563C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3563C2D1Ev,_ZTv0_n12_N7S3563C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3563C2D0Ev,_ZTv0_n12_N7S3563C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3563C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v5Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3563C42v9Ev,
  (VTBL_ENTRY)&_ZN7S3563C43v10Ev,
  (VTBL_ENTRY)&_ZN7S3563C43v11Ev,
};
extern VTBL_ENTRY _ZTV7S3563C2[];
extern void _ZN7S3563C3D1Ev();
extern void _ZN7S3563C3D0Ev();
extern void _ZN7S3563C52v4Ev();
extern void _ZN7S3563C52v5Ev();
extern void _ZN7S3563C52v6Ev();
extern void _ZN7S3563C52v7Ev();
extern void _ZN7S3563C52v8Ev();
extern void _ZN7S3563C33v12Ev();
static  VTBL_ENTRY _tg__ZTV7S3563C3__7S3563C2[] = {
  0,
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3563C3[0]),
  (VTBL_ENTRY)&_ZN7S3563C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3563C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v5Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3563C33v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3563C3D1Ev,_ZTv0_n12_N7S3563C3D1Ev)();
extern void ABISELECT(_ZThn8_N7S3563C3D1Ev,_ZThn4_N7S3563C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3563C3D0Ev,_ZTv0_n12_N7S3563C3D0Ev)();
extern void ABISELECT(_ZThn8_N7S3563C3D0Ev,_ZThn4_N7S3563C3D0Ev)() __attribute__((weak));
extern void _ZN7S3563C52v4Ev();
extern void _ZN7S3563C52v5Ev();
extern void _ZN7S3563C52v6Ev();
extern void _ZN7S3563C52v7Ev();
extern void _ZN7S3563C52v8Ev();
extern void _ZN7S3563C42v9Ev();
extern void _ZN7S3563C43v10Ev();
extern void _ZN7S3563C43v11Ev();
static  VTBL_ENTRY _tg__ZTV7S3563C4__7S3563C3__7S3563C2[] = {
  0,
  0,
  0,
  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)&(_ZTI7S3563C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3563C3D1Ev,_ZTv0_n12_N7S3563C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3563C3D0Ev,_ZTv0_n12_N7S3563C3D0Ev),
  (VTBL_ENTRY)&_ZN7S3563C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v5Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3563C42v9Ev,
  (VTBL_ENTRY)&_ZN7S3563C43v10Ev,
  (VTBL_ENTRY)&_ZN7S3563C43v11Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3563C4D1Ev,_ZTv0_n12_N7S3563C4D1Ev)();
extern void _ZN7S3563C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3563C4D0Ev,_ZTv0_n12_N7S3563C4D0Ev)();
extern void _ZN7S3563C4D0Ev() __attribute__((weak));
extern void _ZN7S3563C52v4Ev();
extern void _ZN7S3563C52v5Ev();
extern void _ZN7S3563C52v6Ev();
extern void _ZN7S3563C52v7Ev();
extern void _ZN7S3563C52v8Ev();
extern void _ZN7S3563C42v9Ev();
extern void _ZN7S3563C43v10Ev();
extern void _ZN7S3563C43v11Ev();
static  VTBL_ENTRY _tg__ZTV7S3563C4__7S3563C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3563C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3563C4D1Ev,_ZTv0_n12_N7S3563C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3563C4D0Ev,_ZTv0_n12_N7S3563C4D0Ev),
  (VTBL_ENTRY)&_ZN7S3563C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v5Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3563C42v9Ev,
  (VTBL_ENTRY)&_ZN7S3563C43v10Ev,
  (VTBL_ENTRY)&_ZN7S3563C43v11Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3563C4D1Ev,_ZTv0_n12_N7S3563C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3563C4D0Ev,_ZTv0_n12_N7S3563C4D0Ev)();
extern void _ZN7S3563C52v4Ev();
extern void _ZN7S3563C52v5Ev();
extern void _ZN7S3563C52v6Ev();
extern void _ZN7S3563C52v7Ev();
extern void _ZN7S3563C52v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3563C5__7S3563C4__7S3563C2[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S3563C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3563C4D1Ev,_ZTv0_n12_N7S3563C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3563C4D0Ev,_ZTv0_n12_N7S3563C4D0Ev),
  (VTBL_ENTRY)&_ZN7S3563C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v5Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v8Ev,
};
static  VTT_ENTRY vtt_S3563C2[] = {
  {&(_ZTV7S3563C2[10]),  10,41},
  {&(_tg__ZTV7S3563C3__7S3563C2[10]),  10,18},
  {&(_tg__ZTV7S3563C4__7S3563C3__7S3563C2[12]),  12,22},
  {&(_tg__ZTV7S3563C3__7S3563C2[10]),  10,18},
  {&(_ZTV7S3563C2[31]),  31,41},
  {&(_ZTV7S3563C2[10]),  10,41},
  {&(_tg__ZTV7S3563C4__7S3563C2[9]),  9,19},
  {&(_tg__ZTV7S3563C5__7S3563C4__7S3563C2[8]),  8,15},
};
extern VTBL_ENTRY _ZTI7S3563C2[];
extern  VTBL_ENTRY _ZTV7S3563C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3563C2[];
static VTBL_ENTRY alt_thunk_names31[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3563C4D0Ev,_ZTv0_n12_N7S3563C4D0Ev), // 
  (VTBL_ENTRY)_ZN7S3563C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3563C4D1Ev,_ZTv0_n12_N7S3563C4D1Ev), // 
  (VTBL_ENTRY)_ZN7S3563C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3563C3D0Ev,_ZTv0_n12_N7S3563C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3563C3D0Ev,_ZThn4_N7S3563C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3563C3D1Ev,_ZTv0_n12_N7S3563C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3563C3D1Ev,_ZThn4_N7S3563C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3563C2D0Ev,_ZTv0_n12_N7S3563C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3563C2D0Ev,_ZThn4_N7S3563C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3563C2D1Ev,_ZTv0_n12_N7S3563C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3563C2D1Ev,_ZThn4_N7S3563C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3563C2 = {  "S3563C2", // class name
  bases_S3563C2, 3,
  &(vtc_S3563C2[0]), // expected_vtbl_contents
  &(vtt_S3563C2[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S3563C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3563C2),41, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3563C2),8, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names31,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3563C1  : S3563C2 {
  ::S19580C7 s3563c1f0[9];
  virtual  ~S3563C1(); // _ZN7S3563C1D2Ev
  virtual void  v1(); // _ZN7S3563C12v1Ev
  virtual void  v2(); // _ZN7S3563C12v2Ev
  virtual void  v3(); // _ZN7S3563C12v3Ev
  S3563C1(); // tgen
};
//SIG(1 S3563C1) C1{ BC2{ BC3{ VBC4{ VBC5{ vd v4 v5 v6 v7 v8} vd v9 v10 v11 Fp FC5 Fp} vd v12} v13} vd v1 v2 v3 FC6{ BC7{ VBC8{ vd v15 v16 v17 v18 v19} vd v20 v21 v22 Fp FC8 Fp} v14 FC7[6]}[9]}


 S3563C1 ::~S3563C1(){ note_dtor("S3563C1", this);}
void  S3563C1 ::v1(){vfunc_called(this, "_ZN7S3563C12v1Ev");}
void  S3563C1 ::v2(){vfunc_called(this, "_ZN7S3563C12v2Ev");}
void  S3563C1 ::v3(){vfunc_called(this, "_ZN7S3563C12v3Ev");}
S3563C1 ::S3563C1(){ note_ctor("S3563C1", this);} // tgen

static void Test_S3563C1()
{
  extern Class_Descriptor cd_S3563C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[258];
    init_test(&cd_S3563C1, buf);
    S3563C1 *dp, &lv = *(dp=new (buf) S3563C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2056,1028), "sizeof(S3563C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3563C1)");
    check_base_class_offset(lv, (S3563C5*)(S3563C4*), 0, "S3563C1");
    check_base_class_offset(lv, (S3563C4*)(S3563C3*)(S3563C2*), ABISELECT(2024,1012), "S3563C1");
    check_base_class_offset(lv, (S3563C3*)(S3563C2*), 0, "S3563C1");
    check_base_class_offset(lv, (S3563C2*), 0, "S3563C1");
    check_field_offset(lv, s3563c1f0, ABISELECT(8,4), "S3563C1.s3563c1f0");
    test_class_info(&lv, &cd_S3563C1);
    dp->~S3563C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3563C1(Test_S3563C1, "S3563C1", ABISELECT(2056,1028));

#else // __cplusplus

extern void _ZN7S3563C1C1Ev();
extern void _ZN7S3563C1D2Ev();
Name_Map name_map_S3563C1[] = {
  NSPAIR(_ZN7S3563C1C1Ev),
  NSPAIR(_ZN7S3563C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3563C5;
extern VTBL_ENTRY _ZTI7S3563C5[];
extern  VTBL_ENTRY _ZTV7S3563C5[];
extern Class_Descriptor cd_S3563C4;
extern VTBL_ENTRY _ZTI7S3563C4[];
extern  VTBL_ENTRY _ZTV7S3563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3563C4[];
extern Class_Descriptor cd_S3563C3;
extern VTBL_ENTRY _ZTI7S3563C3[];
extern  VTBL_ENTRY _ZTV7S3563C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3563C3[];
extern Class_Descriptor cd_S3563C2;
extern VTBL_ENTRY _ZTI7S3563C2[];
extern  VTBL_ENTRY _ZTV7S3563C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3563C2[];
static Base_Class bases_S3563C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3563C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //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
    1, //immediately_derived
  0, 1},
  {&cd_S3563C4,    ABISELECT(2024,1012), //bcp->offset
    22, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S3563C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //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
    3, //immediately_derived
  0, 0},
  {&cd_S3563C2,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3563C1[];
extern void _ZN7S3563C1D1Ev();
extern void _ZN7S3563C1D0Ev();
extern void _ZN7S3563C52v4Ev();
extern void _ZN7S3563C52v5Ev();
extern void _ZN7S3563C52v6Ev();
extern void _ZN7S3563C52v7Ev();
extern void _ZN7S3563C52v8Ev();
extern void _ZN7S3563C33v12Ev();
extern void _ZN7S3563C23v13Ev();
extern void _ZN7S3563C12v1Ev();
extern void _ZN7S3563C12v2Ev();
extern void _ZN7S3563C12v3Ev();
extern void ABISELECT(_ZTv0_n24_N7S3563C1D1Ev,_ZTv0_n12_N7S3563C1D1Ev)();
extern void ABISELECT(_ZThn2024_N7S3563C1D1Ev,_ZThn1012_N7S3563C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3563C1D0Ev,_ZTv0_n12_N7S3563C1D0Ev)();
extern void ABISELECT(_ZThn2024_N7S3563C1D0Ev,_ZThn1012_N7S3563C1D0Ev)() __attribute__((weak));
extern void _ZN7S3563C52v4Ev();
extern void _ZN7S3563C52v5Ev();
extern void _ZN7S3563C52v6Ev();
extern void _ZN7S3563C52v7Ev();
extern void _ZN7S3563C52v8Ev();
extern void _ZN7S3563C42v9Ev();
extern void _ZN7S3563C43v10Ev();
extern void _ZN7S3563C43v11Ev();
static  VTBL_ENTRY vtc_S3563C1[] = {
  0,
  ABISELECT(2024,1012),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3563C1[0]),
  (VTBL_ENTRY)&_ZN7S3563C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3563C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v5Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3563C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3563C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3563C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3563C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3563C12v3Ev,
  0,
  0,
  0,
  ABISELECT(-2024,-1012),
  ABISELECT(-2024,-1012),
  ABISELECT(-2024,-1012),
  ABISELECT(-2024,-1012),
  ABISELECT(-2024,-1012),
  ABISELECT(-2024,-1012),
  ABISELECT(-2024,-1012),
  ABISELECT(-2024,-1012),
  (VTBL_ENTRY)&(_ZTI7S3563C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3563C1D1Ev,_ZTv0_n12_N7S3563C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3563C1D0Ev,_ZTv0_n12_N7S3563C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3563C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v5Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3563C42v9Ev,
  (VTBL_ENTRY)&_ZN7S3563C43v10Ev,
  (VTBL_ENTRY)&_ZN7S3563C43v11Ev,
};
extern VTBL_ENTRY _ZTV7S3563C1[];
extern void _ZN7S3563C2D1Ev();
extern void _ZN7S3563C2D0Ev();
extern void _ZN7S3563C52v4Ev();
extern void _ZN7S3563C52v5Ev();
extern void _ZN7S3563C52v6Ev();
extern void _ZN7S3563C52v7Ev();
extern void _ZN7S3563C52v8Ev();
extern void _ZN7S3563C33v12Ev();
extern void _ZN7S3563C23v13Ev();
static  VTBL_ENTRY _tg__ZTV7S3563C2__7S3563C1[] = {
  0,
  ABISELECT(2024,1012),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3563C2[0]),
  (VTBL_ENTRY)&_ZN7S3563C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3563C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v5Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3563C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3563C23v13Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3563C3D1Ev,_ZTv0_n12_N7S3563C3D1Ev)();
extern void _ZN7S3563C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3563C3D0Ev,_ZTv0_n12_N7S3563C3D0Ev)();
extern void _ZN7S3563C3D0Ev() __attribute__((weak));
extern void _ZN7S3563C52v4Ev();
extern void _ZN7S3563C52v5Ev();
extern void _ZN7S3563C52v6Ev();
extern void _ZN7S3563C52v7Ev();
extern void _ZN7S3563C52v8Ev();
extern void _ZN7S3563C33v12Ev();
static  VTBL_ENTRY _tg__ZTV7S3563C37S3563C2__7S3563C1[] = {
  0,
  ABISELECT(2024,1012),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3563C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3563C3D1Ev,_ZTv0_n12_N7S3563C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3563C3D0Ev,_ZTv0_n12_N7S3563C3D0Ev),
  (VTBL_ENTRY)&_ZN7S3563C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v5Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3563C33v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3563C3D1Ev,_ZTv0_n12_N7S3563C3D1Ev)();
extern void ABISELECT(_ZThn2024_N7S3563C3D1Ev,_ZThn1012_N7S3563C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3563C3D0Ev,_ZTv0_n12_N7S3563C3D0Ev)();
extern void ABISELECT(_ZThn2024_N7S3563C3D0Ev,_ZThn1012_N7S3563C3D0Ev)() __attribute__((weak));
extern void _ZN7S3563C52v4Ev();
extern void _ZN7S3563C52v5Ev();
extern void _ZN7S3563C52v6Ev();
extern void _ZN7S3563C52v7Ev();
extern void _ZN7S3563C52v8Ev();
extern void _ZN7S3563C42v9Ev();
extern void _ZN7S3563C43v10Ev();
extern void _ZN7S3563C43v11Ev();
static  VTBL_ENTRY _tg__ZTV7S3563C4__7S3563C37S3563C2__7S3563C1[] = {
  0,
  0,
  0,
  ABISELECT(-2024,-1012),
  ABISELECT(-2024,-1012),
  ABISELECT(-2024,-1012),
  ABISELECT(-2024,-1012),
  ABISELECT(-2024,-1012),
  ABISELECT(-2024,-1012),
  ABISELECT(-2024,-1012),
  ABISELECT(-2024,-1012),
  (VTBL_ENTRY)&(_ZTI7S3563C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3563C3D1Ev,_ZTv0_n12_N7S3563C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3563C3D0Ev,_ZTv0_n12_N7S3563C3D0Ev),
  (VTBL_ENTRY)&_ZN7S3563C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v5Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3563C42v9Ev,
  (VTBL_ENTRY)&_ZN7S3563C43v10Ev,
  (VTBL_ENTRY)&_ZN7S3563C43v11Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3563C2D1Ev,_ZTv0_n12_N7S3563C2D1Ev)();
extern void ABISELECT(_ZThn2024_N7S3563C2D1Ev,_ZThn1012_N7S3563C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3563C2D0Ev,_ZTv0_n12_N7S3563C2D0Ev)();
extern void ABISELECT(_ZThn2024_N7S3563C2D0Ev,_ZThn1012_N7S3563C2D0Ev)() __attribute__((weak));
extern void _ZN7S3563C52v4Ev();
extern void _ZN7S3563C52v5Ev();
extern void _ZN7S3563C52v6Ev();
extern void _ZN7S3563C52v7Ev();
extern void _ZN7S3563C52v8Ev();
extern void _ZN7S3563C42v9Ev();
extern void _ZN7S3563C43v10Ev();
extern void _ZN7S3563C43v11Ev();
static  VTBL_ENTRY _tg__ZTV7S3563C4__7S3563C2__7S3563C1[] = {
  0,
  0,
  0,
  ABISELECT(-2024,-1012),
  ABISELECT(-2024,-1012),
  ABISELECT(-2024,-1012),
  ABISELECT(-2024,-1012),
  ABISELECT(-2024,-1012),
  ABISELECT(-2024,-1012),
  ABISELECT(-2024,-1012),
  ABISELECT(-2024,-1012),
  (VTBL_ENTRY)&(_ZTI7S3563C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3563C2D1Ev,_ZTv0_n12_N7S3563C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3563C2D0Ev,_ZTv0_n12_N7S3563C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3563C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v5Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3563C42v9Ev,
  (VTBL_ENTRY)&_ZN7S3563C43v10Ev,
  (VTBL_ENTRY)&_ZN7S3563C43v11Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3563C4D1Ev,_ZTv0_n12_N7S3563C4D1Ev)();
extern void _ZN7S3563C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3563C4D0Ev,_ZTv0_n12_N7S3563C4D0Ev)();
extern void _ZN7S3563C4D0Ev() __attribute__((weak));
extern void _ZN7S3563C52v4Ev();
extern void _ZN7S3563C52v5Ev();
extern void _ZN7S3563C52v6Ev();
extern void _ZN7S3563C52v7Ev();
extern void _ZN7S3563C52v8Ev();
extern void _ZN7S3563C42v9Ev();
extern void _ZN7S3563C43v10Ev();
extern void _ZN7S3563C43v11Ev();
static  VTBL_ENTRY _tg__ZTV7S3563C4__7S3563C1[] = {
  ABISELECT(-2024,-1012),
  ABISELECT(-2024,-1012),
  ABISELECT(-2024,-1012),
  ABISELECT(-2024,-1012),
  ABISELECT(-2024,-1012),
  ABISELECT(-2024,-1012),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3563C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3563C4D1Ev,_ZTv0_n12_N7S3563C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3563C4D0Ev,_ZTv0_n12_N7S3563C4D0Ev),
  (VTBL_ENTRY)&_ZN7S3563C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v5Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3563C42v9Ev,
  (VTBL_ENTRY)&_ZN7S3563C43v10Ev,
  (VTBL_ENTRY)&_ZN7S3563C43v11Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3563C4D1Ev,_ZTv0_n12_N7S3563C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3563C4D0Ev,_ZTv0_n12_N7S3563C4D0Ev)();
extern void _ZN7S3563C52v4Ev();
extern void _ZN7S3563C52v5Ev();
extern void _ZN7S3563C52v6Ev();
extern void _ZN7S3563C52v7Ev();
extern void _ZN7S3563C52v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3563C5__7S3563C4__7S3563C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(2024,1012),
  ABISELECT(2024,1012),
  (VTBL_ENTRY)&(_ZTI7S3563C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3563C4D1Ev,_ZTv0_n12_N7S3563C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3563C4D0Ev,_ZTv0_n12_N7S3563C4D0Ev),
  (VTBL_ENTRY)&_ZN7S3563C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v5Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v8Ev,
};
static  VTT_ENTRY vtt_S3563C1[] = {
  {&(_ZTV7S3563C1[10]),  10,44},
  {&(_tg__ZTV7S3563C2__7S3563C1[10]),  10,19},
  {&(_tg__ZTV7S3563C37S3563C2__7S3563C1[10]),  10,18},
  {&(_tg__ZTV7S3563C4__7S3563C37S3563C2__7S3563C1[12]),  12,22},
  {&(_tg__ZTV7S3563C37S3563C2__7S3563C1[10]),  10,18},
  {&(_tg__ZTV7S3563C4__7S3563C2__7S3563C1[12]),  12,22},
  {&(_tg__ZTV7S3563C2__7S3563C1[10]),  10,19},
  {&(_ZTV7S3563C1[34]),  34,44},
  {&(_ZTV7S3563C1[10]),  10,44},
  {&(_tg__ZTV7S3563C4__7S3563C1[9]),  9,19},
  {&(_tg__ZTV7S3563C5__7S3563C4__7S3563C1[8]),  8,15},
};
extern VTBL_ENTRY _ZTI7S3563C1[];
extern  VTBL_ENTRY _ZTV7S3563C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3563C1[];
static VTBL_ENTRY alt_thunk_names32[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3563C4D0Ev,_ZTv0_n12_N7S3563C4D0Ev), // 
  (VTBL_ENTRY)_ZN7S3563C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3563C4D1Ev,_ZTv0_n12_N7S3563C4D1Ev), // 
  (VTBL_ENTRY)_ZN7S3563C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3563C2D0Ev,_ZTv0_n12_N7S3563C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2024_N7S3563C2D0Ev,_ZThn1012_N7S3563C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3563C2D1Ev,_ZTv0_n12_N7S3563C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2024_N7S3563C2D1Ev,_ZThn1012_N7S3563C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3563C3D0Ev,_ZTv0_n12_N7S3563C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2024_N7S3563C3D0Ev,_ZThn1012_N7S3563C3D0Ev),
  (VTBL_ENTRY)_ZN7S3563C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3563C3D1Ev,_ZTv0_n12_N7S3563C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2024_N7S3563C3D1Ev,_ZThn1012_N7S3563C3D1Ev),
  (VTBL_ENTRY)_ZN7S3563C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3563C1D0Ev,_ZTv0_n12_N7S3563C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2024_N7S3563C1D0Ev,_ZThn1012_N7S3563C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3563C1D1Ev,_ZTv0_n12_N7S3563C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2024_N7S3563C1D1Ev,_ZThn1012_N7S3563C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3563C1 = {  "S3563C1", // class name
  bases_S3563C1, 4,
  &(vtc_S3563C1[0]), // expected_vtbl_contents
  &(vtt_S3563C1[0]), // expected_vtt_contents
  ABISELECT(2056,1028), // object size
  NSPAIRA(_ZTI7S3563C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3563C1),44, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3563C1),11, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names32,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7128C2  {
  virtual void  v7(); // _ZN7S7128C22v7Ev
  ~S7128C2(); // tgen
  S7128C2(); // tgen
};
//SIG(-1 S7128C2) C1{ v1}


void  S7128C2 ::v7(){vfunc_called(this, "_ZN7S7128C22v7Ev");}
S7128C2 ::~S7128C2(){ note_dtor("S7128C2", this);} // tgen
S7128C2 ::S7128C2(){ note_ctor("S7128C2", this);} // tgen

static void Test_S7128C2()
{
  extern Class_Descriptor cd_S7128C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7128C2, buf);
    S7128C2 *dp, &lv = *(dp=new (buf) S7128C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7128C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7128C2)");
    test_class_info(&lv, &cd_S7128C2);
    dp->~S7128C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7128C2(Test_S7128C2, "S7128C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7128C2C1Ev();
extern void _ZN7S7128C2D1Ev();
Name_Map name_map_S7128C2[] = {
  NSPAIR(_ZN7S7128C2C1Ev),
  NSPAIR(_ZN7S7128C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7128C2[];
extern void _ZN7S7128C22v7Ev();
static  VTBL_ENTRY vtc_S7128C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7128C2[0]),
  (VTBL_ENTRY)&_ZN7S7128C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S7128C2[];
extern  VTBL_ENTRY _ZTV7S7128C2[];
Class_Descriptor cd_S7128C2 = {  "S7128C2", // class name
  0,0,//no base classes
  &(vtc_S7128C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7128C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7128C2),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  S7128C5  {
  virtual  ~S7128C5(); // _ZN7S7128C5D1Ev
  virtual void  v8(); // _ZN7S7128C52v8Ev
  virtual void  v9(); // _ZN7S7128C52v9Ev
  virtual void  v10(); // _ZN7S7128C53v10Ev
  virtual void  v11(); // _ZN7S7128C53v11Ev
  virtual void  v12(); // _ZN7S7128C53v12Ev
  S7128C5(); // tgen
};
//SIG(-1 S7128C5) C1{ vd v1 v2 v3 v4 v5}


 S7128C5 ::~S7128C5(){ note_dtor("S7128C5", this);}
void  S7128C5 ::v8(){vfunc_called(this, "_ZN7S7128C52v8Ev");}
void  S7128C5 ::v9(){vfunc_called(this, "_ZN7S7128C52v9Ev");}
void  S7128C5 ::v10(){vfunc_called(this, "_ZN7S7128C53v10Ev");}
void  S7128C5 ::v11(){vfunc_called(this, "_ZN7S7128C53v11Ev");}
void  S7128C5 ::v12(){vfunc_called(this, "_ZN7S7128C53v12Ev");}
S7128C5 ::S7128C5(){ note_ctor("S7128C5", this);} // tgen

static void Test_S7128C5()
{
  extern Class_Descriptor cd_S7128C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7128C5, buf);
    S7128C5 *dp, &lv = *(dp=new (buf) S7128C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7128C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7128C5)");
    test_class_info(&lv, &cd_S7128C5);
    dp->~S7128C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7128C5(Test_S7128C5, "S7128C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7128C5C1Ev();
extern void _ZN7S7128C5D1Ev();
Name_Map name_map_S7128C5[] = {
  NSPAIR(_ZN7S7128C5C1Ev),
  NSPAIR(_ZN7S7128C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7128C5[];
extern void _ZN7S7128C5D1Ev();
extern void _ZN7S7128C5D0Ev();
extern void _ZN7S7128C52v8Ev();
extern void _ZN7S7128C52v9Ev();
extern void _ZN7S7128C53v10Ev();
extern void _ZN7S7128C53v11Ev();
extern void _ZN7S7128C53v12Ev();
static  VTBL_ENTRY vtc_S7128C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7128C5[0]),
  (VTBL_ENTRY)&_ZN7S7128C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7128C5D0Ev,
  (VTBL_ENTRY)&_ZN7S7128C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7128C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v12Ev,
};
extern VTBL_ENTRY _ZTI7S7128C5[];
extern  VTBL_ENTRY _ZTV7S7128C5[];
Class_Descriptor cd_S7128C5 = {  "S7128C5", // class name
  0,0,//no base classes
  &(vtc_S7128C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7128C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7128C5),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  S7128C4  : virtual S7128C5 {
  void *s7128c4f0;
  ::S7128C5 s7128c4f1;
  void *s7128c4f2;
  virtual  ~S7128C4(); // _ZN7S7128C4D2Ev
  virtual void  v13(); // _ZN7S7128C43v13Ev
  virtual void  v14(); // _ZN7S7128C43v14Ev
  virtual void  v15(); // _ZN7S7128C43v15Ev
  S7128C4(); // tgen
};
//SIG(-1 S7128C4) C1{ VBC2{ vd v4 v5 v6 v7 v8} vd v1 v2 v3 Fp FC2 Fp}


 S7128C4 ::~S7128C4(){ note_dtor("S7128C4", this);}
void  S7128C4 ::v13(){vfunc_called(this, "_ZN7S7128C43v13Ev");}
void  S7128C4 ::v14(){vfunc_called(this, "_ZN7S7128C43v14Ev");}
void  S7128C4 ::v15(){vfunc_called(this, "_ZN7S7128C43v15Ev");}
S7128C4 ::S7128C4(){ note_ctor("S7128C4", this);} // tgen

static void Test_S7128C4()
{
  extern Class_Descriptor cd_S7128C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S7128C4, buf);
    S7128C4 *dp, &lv = *(dp=new (buf) S7128C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S7128C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7128C4)");
    check_base_class_offset(lv, (S7128C5*), 0, "S7128C4");
    check_field_offset(lv, s7128c4f0, ABISELECT(8,4), "S7128C4.s7128c4f0");
    check_field_offset(lv, s7128c4f1, ABISELECT(16,8), "S7128C4.s7128c4f1");
    check_field_offset(lv, s7128c4f2, ABISELECT(24,12), "S7128C4.s7128c4f2");
    test_class_info(&lv, &cd_S7128C4);
    dp->~S7128C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7128C4(Test_S7128C4, "S7128C4", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S7128C4C1Ev();
extern void _ZN7S7128C4D2Ev();
Name_Map name_map_S7128C4[] = {
  NSPAIR(_ZN7S7128C4C1Ev),
  NSPAIR(_ZN7S7128C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7128C5;
extern VTBL_ENTRY _ZTI7S7128C5[];
extern  VTBL_ENTRY _ZTV7S7128C5[];
static Base_Class bases_S7128C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7128C5,    0, //bcp->offset
    -1, //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 _ZTI7S7128C4[];
extern void _ZN7S7128C4D1Ev();
extern void _ZN7S7128C4D0Ev();
extern void _ZN7S7128C52v8Ev();
extern void _ZN7S7128C52v9Ev();
extern void _ZN7S7128C53v10Ev();
extern void _ZN7S7128C53v11Ev();
extern void _ZN7S7128C53v12Ev();
extern void _ZN7S7128C43v13Ev();
extern void _ZN7S7128C43v14Ev();
extern void _ZN7S7128C43v15Ev();
static  VTBL_ENTRY vtc_S7128C4[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7128C4[0]),
  (VTBL_ENTRY)&_ZN7S7128C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7128C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7128C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7128C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7128C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7128C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7128C43v15Ev,
};
extern VTBL_ENTRY _ZTV7S7128C4[];
static  VTT_ENTRY vtt_S7128C4[] = {
  {&(_ZTV7S7128C4[9]),  9,19},
  {&(_ZTV7S7128C4[9]),  9,19},
};
extern VTBL_ENTRY _ZTI7S7128C4[];
extern  VTBL_ENTRY _ZTV7S7128C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7128C4[];
Class_Descriptor cd_S7128C4 = {  "S7128C4", // class name
  bases_S7128C4, 1,
  &(vtc_S7128C4[0]), // expected_vtbl_contents
  &(vtt_S7128C4[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S7128C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7128C4),19, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7128C4),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  S7128C3  : virtual S7128C4 {
  virtual  ~S7128C3(); // _ZN7S7128C3D2Ev
  virtual void  v16(); // _ZN7S7128C33v16Ev
  S7128C3(); // tgen
};
//SIG(-1 S7128C3) C1{ VBC2{ VBC3{ vd v2 v3 v4 v5 v6} vd v7 v8 v9 Fp FC3 Fp} vd v1}


 S7128C3 ::~S7128C3(){ note_dtor("S7128C3", this);}
void  S7128C3 ::v16(){vfunc_called(this, "_ZN7S7128C33v16Ev");}
S7128C3 ::S7128C3(){ note_ctor("S7128C3", this);} // tgen

static void Test_S7128C3()
{
  extern Class_Descriptor cd_S7128C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S7128C3, buf);
    S7128C3 *dp, &lv = *(dp=new (buf) S7128C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S7128C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7128C3)");
    check_base_class_offset(lv, (S7128C5*)(S7128C4*), 0, "S7128C3");
    check_base_class_offset(lv, (S7128C4*), ABISELECT(8,4), "S7128C3");
    test_class_info(&lv, &cd_S7128C3);
    dp->~S7128C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7128C3(Test_S7128C3, "S7128C3", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S7128C3C1Ev();
extern void _ZN7S7128C3D2Ev();
Name_Map name_map_S7128C3[] = {
  NSPAIR(_ZN7S7128C3C1Ev),
  NSPAIR(_ZN7S7128C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7128C5;
extern VTBL_ENTRY _ZTI7S7128C5[];
extern  VTBL_ENTRY _ZTV7S7128C5[];
extern Class_Descriptor cd_S7128C4;
extern VTBL_ENTRY _ZTI7S7128C4[];
extern  VTBL_ENTRY _ZTV7S7128C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7128C4[];
static Base_Class bases_S7128C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7128C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //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
    1, //immediately_derived
  0, 1},
  {&cd_S7128C4,    ABISELECT(8,4), //bcp->offset
    18, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7128C3[];
extern void _ZN7S7128C3D1Ev();
extern void _ZN7S7128C3D0Ev();
extern void _ZN7S7128C52v8Ev();
extern void _ZN7S7128C52v9Ev();
extern void _ZN7S7128C53v10Ev();
extern void _ZN7S7128C53v11Ev();
extern void _ZN7S7128C53v12Ev();
extern void _ZN7S7128C33v16Ev();
extern void ABISELECT(_ZTv0_n24_N7S7128C3D1Ev,_ZTv0_n12_N7S7128C3D1Ev)();
extern void ABISELECT(_ZThn8_N7S7128C3D1Ev,_ZThn4_N7S7128C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7128C3D0Ev,_ZTv0_n12_N7S7128C3D0Ev)();
extern void ABISELECT(_ZThn8_N7S7128C3D0Ev,_ZThn4_N7S7128C3D0Ev)() __attribute__((weak));
extern void _ZN7S7128C52v8Ev();
extern void _ZN7S7128C52v9Ev();
extern void _ZN7S7128C53v10Ev();
extern void _ZN7S7128C53v11Ev();
extern void _ZN7S7128C53v12Ev();
extern void _ZN7S7128C43v13Ev();
extern void _ZN7S7128C43v14Ev();
extern void _ZN7S7128C43v15Ev();
static  VTBL_ENTRY vtc_S7128C3[] = {
  0,
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7128C3[0]),
  (VTBL_ENTRY)&_ZN7S7128C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7128C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7128C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7128C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7128C33v16Ev,
  0,
  0,
  0,
  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)&(_ZTI7S7128C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7128C3D1Ev,_ZTv0_n12_N7S7128C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7128C3D0Ev,_ZTv0_n12_N7S7128C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7128C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7128C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7128C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7128C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7128C43v15Ev,
};
extern VTBL_ENTRY _ZTV7S7128C3[];
extern void ABISELECT(_ZTv0_n24_N7S7128C4D1Ev,_ZTv0_n12_N7S7128C4D1Ev)();
extern void _ZN7S7128C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7128C4D0Ev,_ZTv0_n12_N7S7128C4D0Ev)();
extern void _ZN7S7128C4D0Ev() __attribute__((weak));
extern void _ZN7S7128C52v8Ev();
extern void _ZN7S7128C52v9Ev();
extern void _ZN7S7128C53v10Ev();
extern void _ZN7S7128C53v11Ev();
extern void _ZN7S7128C53v12Ev();
extern void _ZN7S7128C43v13Ev();
extern void _ZN7S7128C43v14Ev();
extern void _ZN7S7128C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7128C4__7S7128C3[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7128C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7128C4D1Ev,_ZTv0_n12_N7S7128C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7128C4D0Ev,_ZTv0_n12_N7S7128C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7128C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7128C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7128C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7128C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7128C43v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7128C4D1Ev,_ZTv0_n12_N7S7128C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7128C4D0Ev,_ZTv0_n12_N7S7128C4D0Ev)();
extern void _ZN7S7128C52v8Ev();
extern void _ZN7S7128C52v9Ev();
extern void _ZN7S7128C53v10Ev();
extern void _ZN7S7128C53v11Ev();
extern void _ZN7S7128C53v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7128C5__7S7128C4__7S7128C3[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S7128C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7128C4D1Ev,_ZTv0_n12_N7S7128C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7128C4D0Ev,_ZTv0_n12_N7S7128C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7128C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7128C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v12Ev,
};
static  VTT_ENTRY vtt_S7128C3[] = {
  {&(_ZTV7S7128C3[10]),  10,40},
  {&(_ZTV7S7128C3[30]),  30,40},
  {&(_ZTV7S7128C3[10]),  10,40},
  {&(_tg__ZTV7S7128C4__7S7128C3[9]),  9,19},
  {&(_tg__ZTV7S7128C5__7S7128C4__7S7128C3[8]),  8,15},
};
extern VTBL_ENTRY _ZTI7S7128C3[];
extern  VTBL_ENTRY _ZTV7S7128C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7128C3[];
static VTBL_ENTRY alt_thunk_names33[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7128C4D0Ev,_ZTv0_n12_N7S7128C4D0Ev), // 
  (VTBL_ENTRY)_ZN7S7128C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7128C4D1Ev,_ZTv0_n12_N7S7128C4D1Ev), // 
  (VTBL_ENTRY)_ZN7S7128C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7128C3D0Ev,_ZTv0_n12_N7S7128C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7128C3D0Ev,_ZThn4_N7S7128C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7128C3D1Ev,_ZTv0_n12_N7S7128C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7128C3D1Ev,_ZThn4_N7S7128C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7128C3 = {  "S7128C3", // class name
  bases_S7128C3, 2,
  &(vtc_S7128C3[0]), // expected_vtbl_contents
  &(vtt_S7128C3[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S7128C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7128C3),40, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7128C3),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names33,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7128C1  : S7128C2 , virtual S7128C3 {
  int s7128c1f0;
  char s7128c1f1;
  int s7128c1f2;
  virtual  ~S7128C1(); // _ZN7S7128C1D2Ev
  virtual void  v1(); // _ZN7S7128C12v1Ev
  virtual void  v2(); // _ZN7S7128C12v2Ev
  virtual void  v3(); // _ZN7S7128C12v3Ev
  virtual void  v4(); // _ZN7S7128C12v4Ev
  virtual void  v5(); // _ZN7S7128C12v5Ev
  virtual void  v6(); // _ZN7S7128C12v6Ev
  S7128C1(); // tgen
};
//SIG(1 S7128C1) C1{ BC2{ v7} VBC3{ VBC4{ VBC5{ vd v8 v9 v10 v11 v12} vd v13 v14 v15 Fp FC5 Fp} vd v16} vd v1 v2 v3 v4 v5 v6 Fi Fc Fi}


 S7128C1 ::~S7128C1(){ note_dtor("S7128C1", this);}
void  S7128C1 ::v1(){vfunc_called(this, "_ZN7S7128C12v1Ev");}
void  S7128C1 ::v2(){vfunc_called(this, "_ZN7S7128C12v2Ev");}
void  S7128C1 ::v3(){vfunc_called(this, "_ZN7S7128C12v3Ev");}
void  S7128C1 ::v4(){vfunc_called(this, "_ZN7S7128C12v4Ev");}
void  S7128C1 ::v5(){vfunc_called(this, "_ZN7S7128C12v5Ev");}
void  S7128C1 ::v6(){vfunc_called(this, "_ZN7S7128C12v6Ev");}
S7128C1 ::S7128C1(){ note_ctor("S7128C1", this);} // tgen

static void Test_S7128C1()
{
  extern Class_Descriptor cd_S7128C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S7128C1, buf);
    S7128C1 *dp, &lv = *(dp=new (buf) S7128C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S7128C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7128C1)");
    check_base_class_offset(lv, (S7128C2*), 0, "S7128C1");
    check_base_class_offset(lv, (S7128C5*)(S7128C4*), ABISELECT(24,16), "S7128C1");
    check_base_class_offset(lv, (S7128C4*)(S7128C3*), ABISELECT(32,20), "S7128C1");
    check_base_class_offset(lv, (S7128C3*), ABISELECT(24,16), "S7128C1");
    check_field_offset(lv, s7128c1f0, ABISELECT(8,4), "S7128C1.s7128c1f0");
    check_field_offset(lv, s7128c1f1, ABISELECT(12,8), "S7128C1.s7128c1f1");
    check_field_offset(lv, s7128c1f2, ABISELECT(16,12), "S7128C1.s7128c1f2");
    test_class_info(&lv, &cd_S7128C1);
    dp->~S7128C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7128C1(Test_S7128C1, "S7128C1", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN7S7128C1C1Ev();
extern void _ZN7S7128C1D2Ev();
Name_Map name_map_S7128C1[] = {
  NSPAIR(_ZN7S7128C1C1Ev),
  NSPAIR(_ZN7S7128C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7128C2;
extern VTBL_ENTRY _ZTI7S7128C2[];
extern  VTBL_ENTRY _ZTV7S7128C2[];
extern Class_Descriptor cd_S7128C5;
extern VTBL_ENTRY _ZTI7S7128C5[];
extern  VTBL_ENTRY _ZTV7S7128C5[];
extern Class_Descriptor cd_S7128C4;
extern VTBL_ENTRY _ZTI7S7128C4[];
extern  VTBL_ENTRY _ZTV7S7128C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7128C4[];
extern Class_Descriptor cd_S7128C3;
extern VTBL_ENTRY _ZTI7S7128C3[];
extern  VTBL_ENTRY _ZTV7S7128C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7128C3[];
static Base_Class bases_S7128C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7128C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7128C5,    ABISELECT(24,16), //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
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7128C4,    ABISELECT(32,20), //bcp->offset
    33, //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
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7128C3,    ABISELECT(24,16), //bcp->offset
    14, //bcp->virtual_function_table_offset
    11, //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},
  {0}};
extern VTBL_ENTRY _ZTI7S7128C1[];
extern void _ZN7S7128C22v7Ev();
extern void _ZN7S7128C1D1Ev();
extern void _ZN7S7128C1D0Ev();
extern void _ZN7S7128C12v1Ev();
extern void _ZN7S7128C12v2Ev();
extern void _ZN7S7128C12v3Ev();
extern void _ZN7S7128C12v4Ev();
extern void _ZN7S7128C12v5Ev();
extern void _ZN7S7128C12v6Ev();
extern void ABISELECT(_ZTv0_n24_N7S7128C1D1Ev,_ZTv0_n12_N7S7128C1D1Ev)();
extern void ABISELECT(_ZThn24_N7S7128C1D1Ev,_ZThn16_N7S7128C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7128C1D0Ev,_ZTv0_n12_N7S7128C1D0Ev)();
extern void ABISELECT(_ZThn24_N7S7128C1D0Ev,_ZThn16_N7S7128C1D0Ev)() __attribute__((weak));
extern void _ZN7S7128C52v8Ev();
extern void _ZN7S7128C52v9Ev();
extern void _ZN7S7128C53v10Ev();
extern void _ZN7S7128C53v11Ev();
extern void _ZN7S7128C53v12Ev();
extern void _ZN7S7128C33v16Ev();
extern void ABISELECT(_ZTv0_n24_N7S7128C1D1Ev,_ZTv0_n12_N7S7128C1D1Ev)();
extern void ABISELECT(_ZThn32_N7S7128C1D1Ev,_ZThn20_N7S7128C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7128C1D0Ev,_ZTv0_n12_N7S7128C1D0Ev)();
extern void ABISELECT(_ZThn32_N7S7128C1D0Ev,_ZThn20_N7S7128C1D0Ev)() __attribute__((weak));
extern void _ZN7S7128C52v8Ev();
extern void _ZN7S7128C52v9Ev();
extern void _ZN7S7128C53v10Ev();
extern void _ZN7S7128C53v11Ev();
extern void _ZN7S7128C53v12Ev();
extern void _ZN7S7128C43v13Ev();
extern void _ZN7S7128C43v14Ev();
extern void _ZN7S7128C43v15Ev();
static  VTBL_ENTRY vtc_S7128C1[] = {
  ABISELECT(24,16),
  ABISELECT(32,20),
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7128C1[0]),
  (VTBL_ENTRY)&_ZN7S7128C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7128C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7128C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7128C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7128C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7128C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7128C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7128C12v5Ev,
  (VTBL_ENTRY)&_ZN7S7128C12v6Ev,
  0,
  0,
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S7128C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7128C1D1Ev,_ZTv0_n12_N7S7128C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7128C1D0Ev,_ZTv0_n12_N7S7128C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7128C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7128C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7128C33v16Ev,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S7128C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7128C1D1Ev,_ZTv0_n12_N7S7128C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7128C1D0Ev,_ZTv0_n12_N7S7128C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7128C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7128C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7128C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7128C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7128C43v15Ev,
};
extern VTBL_ENTRY _ZTV7S7128C1[];
extern void ABISELECT(_ZTv0_n24_N7S7128C3D1Ev,_ZTv0_n12_N7S7128C3D1Ev)();
extern void _ZN7S7128C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7128C3D0Ev,_ZTv0_n12_N7S7128C3D0Ev)();
extern void _ZN7S7128C3D0Ev() __attribute__((weak));
extern void _ZN7S7128C52v8Ev();
extern void _ZN7S7128C52v9Ev();
extern void _ZN7S7128C53v10Ev();
extern void _ZN7S7128C53v11Ev();
extern void _ZN7S7128C53v12Ev();
extern void _ZN7S7128C33v16Ev();
static  VTBL_ENTRY _tg__ZTV7S7128C3__7S7128C1[] = {
  0,
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7128C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7128C3D1Ev,_ZTv0_n12_N7S7128C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7128C3D0Ev,_ZTv0_n12_N7S7128C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7128C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7128C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7128C33v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7128C3D1Ev,_ZTv0_n12_N7S7128C3D1Ev)();
extern void ABISELECT(_ZThn8_N7S7128C3D1Ev,_ZThn4_N7S7128C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7128C3D0Ev,_ZTv0_n12_N7S7128C3D0Ev)();
extern void ABISELECT(_ZThn8_N7S7128C3D0Ev,_ZThn4_N7S7128C3D0Ev)() __attribute__((weak));
extern void _ZN7S7128C52v8Ev();
extern void _ZN7S7128C52v9Ev();
extern void _ZN7S7128C53v10Ev();
extern void _ZN7S7128C53v11Ev();
extern void _ZN7S7128C53v12Ev();
extern void _ZN7S7128C43v13Ev();
extern void _ZN7S7128C43v14Ev();
extern void _ZN7S7128C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7128C4__7S7128C3__7S7128C1[] = {
  0,
  0,
  0,
  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)&(_ZTI7S7128C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7128C3D1Ev,_ZTv0_n12_N7S7128C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7128C3D0Ev,_ZTv0_n12_N7S7128C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7128C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7128C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7128C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7128C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7128C43v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7128C4D1Ev,_ZTv0_n12_N7S7128C4D1Ev)();
extern void _ZN7S7128C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7128C4D0Ev,_ZTv0_n12_N7S7128C4D0Ev)();
extern void _ZN7S7128C4D0Ev() __attribute__((weak));
extern void _ZN7S7128C52v8Ev();
extern void _ZN7S7128C52v9Ev();
extern void _ZN7S7128C53v10Ev();
extern void _ZN7S7128C53v11Ev();
extern void _ZN7S7128C53v12Ev();
extern void _ZN7S7128C43v13Ev();
extern void _ZN7S7128C43v14Ev();
extern void _ZN7S7128C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7128C4__7S7128C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7128C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7128C4D1Ev,_ZTv0_n12_N7S7128C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7128C4D0Ev,_ZTv0_n12_N7S7128C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7128C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7128C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7128C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7128C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7128C43v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7128C4D1Ev,_ZTv0_n12_N7S7128C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7128C4D0Ev,_ZTv0_n12_N7S7128C4D0Ev)();
extern void _ZN7S7128C52v8Ev();
extern void _ZN7S7128C52v9Ev();
extern void _ZN7S7128C53v10Ev();
extern void _ZN7S7128C53v11Ev();
extern void _ZN7S7128C53v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7128C5__7S7128C4__7S7128C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S7128C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7128C4D1Ev,_ZTv0_n12_N7S7128C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7128C4D0Ev,_ZTv0_n12_N7S7128C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7128C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7128C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v12Ev,
};
static  VTT_ENTRY vtt_S7128C1[] = {
  {&(_ZTV7S7128C1[5]),  5,55},
  {&(_ZTV7S7128C1[25]),  25,55},
  {&(_ZTV7S7128C1[45]),  45,55},
  {&(_ZTV7S7128C1[25]),  25,55},
  {&(_tg__ZTV7S7128C3__7S7128C1[10]),  10,18},
  {&(_tg__ZTV7S7128C4__7S7128C3__7S7128C1[12]),  12,22},
  {&(_tg__ZTV7S7128C3__7S7128C1[10]),  10,18},
  {&(_tg__ZTV7S7128C4__7S7128C1[9]),  9,19},
  {&(_tg__ZTV7S7128C5__7S7128C4__7S7128C1[8]),  8,15},
};
extern VTBL_ENTRY _ZTI7S7128C1[];
extern  VTBL_ENTRY _ZTV7S7128C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7128C1[];
static VTBL_ENTRY alt_thunk_names34[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7128C4D0Ev,_ZTv0_n12_N7S7128C4D0Ev), // 
  (VTBL_ENTRY)_ZN7S7128C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7128C4D1Ev,_ZTv0_n12_N7S7128C4D1Ev), // 
  (VTBL_ENTRY)_ZN7S7128C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7128C3D0Ev,_ZTv0_n12_N7S7128C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7128C3D0Ev,_ZThn4_N7S7128C3D0Ev),
  (VTBL_ENTRY)_ZN7S7128C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7128C3D1Ev,_ZTv0_n12_N7S7128C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7128C3D1Ev,_ZThn4_N7S7128C3D1Ev),
  (VTBL_ENTRY)_ZN7S7128C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7128C1D0Ev,_ZTv0_n12_N7S7128C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7128C1D0Ev,_ZThn20_N7S7128C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7128C1D0Ev,_ZThn16_N7S7128C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7128C1D1Ev,_ZTv0_n12_N7S7128C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7128C1D1Ev,_ZThn20_N7S7128C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7128C1D1Ev,_ZThn16_N7S7128C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7128C1 = {  "S7128C1", // class name
  bases_S7128C1, 4,
  &(vtc_S7128C1[0]), // expected_vtbl_contents
  &(vtt_S7128C1[0]), // expected_vtt_contents
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI7S7128C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7128C1),55, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7128C1),9, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names34,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16090C1  {
  ::S3350C8_nt s16090c1f0;
  ::S4846C6_nt s16090c1f1;
  ::S4846C8 s16090c1f2;
  void  mf16090c1(); // _ZN8S16090C19mf16090c1Ev
};
//SIG(1 S16090C1) C1{ m FC2{ m Fi} FC3{ FC4{ Fc[20]} Fc[16]} FC5{ Fi FC6{ Fc[12]} Fc[48] FC6 FC6 FC7{ Fi Fc[128] FC8{ Fi[2] Fc[320] Fi}}}}


void  S16090C1 ::mf16090c1(){}

static void Test_S16090C1()
{
  {
    init_simple_test("S16090C1");
    S16090C1 lv;
    check2(sizeof(lv), 592, "sizeof(S16090C1)");
    check2(__alignof__(lv), 4, "__alignof__(S16090C1)");
    check_field_offset(lv, s16090c1f0, 0, "S16090C1.s16090c1f0");
    check_field_offset(lv, s16090c1f1, 4, "S16090C1.s16090c1f1");
    check_field_offset(lv, s16090c1f2, 40, "S16090C1.s16090c1f2");
  }
}
static Arrange_To_Call_Me vS16090C1(Test_S16090C1, "S16090C1", 592);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1624C5  {
  virtual  ~S1624C5(); // _ZN7S1624C5D1Ev
  virtual void  v5(); // _ZN7S1624C52v5Ev
  virtual void  v6(); // _ZN7S1624C52v6Ev
  virtual void  v7(); // _ZN7S1624C52v7Ev
  virtual void  v8(); // _ZN7S1624C52v8Ev
  virtual void  v9(); // _ZN7S1624C52v9Ev
  S1624C5(); // tgen
};
//SIG(-1 S1624C5) C1{ vd v1 v2 v3 v4 v5}


 S1624C5 ::~S1624C5(){ note_dtor("S1624C5", this);}
void  S1624C5 ::v5(){vfunc_called(this, "_ZN7S1624C52v5Ev");}
void  S1624C5 ::v6(){vfunc_called(this, "_ZN7S1624C52v6Ev");}
void  S1624C5 ::v7(){vfunc_called(this, "_ZN7S1624C52v7Ev");}
void  S1624C5 ::v8(){vfunc_called(this, "_ZN7S1624C52v8Ev");}
void  S1624C5 ::v9(){vfunc_called(this, "_ZN7S1624C52v9Ev");}
S1624C5 ::S1624C5(){ note_ctor("S1624C5", this);} // tgen

static void Test_S1624C5()
{
  extern Class_Descriptor cd_S1624C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S1624C5, buf);
    S1624C5 *dp, &lv = *(dp=new (buf) S1624C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S1624C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1624C5)");
    test_class_info(&lv, &cd_S1624C5);
    dp->~S1624C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1624C5(Test_S1624C5, "S1624C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S1624C5C1Ev();
extern void _ZN7S1624C5D1Ev();
Name_Map name_map_S1624C5[] = {
  NSPAIR(_ZN7S1624C5C1Ev),
  NSPAIR(_ZN7S1624C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1624C5[];
extern void _ZN7S1624C5D1Ev();
extern void _ZN7S1624C5D0Ev();
extern void _ZN7S1624C52v5Ev();
extern void _ZN7S1624C52v6Ev();
extern void _ZN7S1624C52v7Ev();
extern void _ZN7S1624C52v8Ev();
extern void _ZN7S1624C52v9Ev();
static  VTBL_ENTRY vtc_S1624C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1624C5[0]),
  (VTBL_ENTRY)&_ZN7S1624C5D1Ev,
  (VTBL_ENTRY)&_ZN7S1624C5D0Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v5Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v6Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v7Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v8Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v9Ev,
};
extern VTBL_ENTRY _ZTI7S1624C5[];
extern  VTBL_ENTRY _ZTV7S1624C5[];
Class_Descriptor cd_S1624C5 = {  "S1624C5", // class name
  0,0,//no base classes
  &(vtc_S1624C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S1624C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1624C5),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  S1624C4  : virtual S1624C5 {
  void *s1624c4f0;
  ::S1624C5 s1624c4f1;
  void *s1624c4f2;
  virtual  ~S1624C4(); // _ZN7S1624C4D2Ev
  virtual void  v10(); // _ZN7S1624C43v10Ev
  virtual void  v11(); // _ZN7S1624C43v11Ev
  virtual void  v12(); // _ZN7S1624C43v12Ev
  S1624C4(); // tgen
};
//SIG(-1 S1624C4) C1{ VBC2{ vd v4 v5 v6 v7 v8} vd v1 v2 v3 Fp FC2 Fp}


 S1624C4 ::~S1624C4(){ note_dtor("S1624C4", this);}
void  S1624C4 ::v10(){vfunc_called(this, "_ZN7S1624C43v10Ev");}
void  S1624C4 ::v11(){vfunc_called(this, "_ZN7S1624C43v11Ev");}
void  S1624C4 ::v12(){vfunc_called(this, "_ZN7S1624C43v12Ev");}
S1624C4 ::S1624C4(){ note_ctor("S1624C4", this);} // tgen

static void Test_S1624C4()
{
  extern Class_Descriptor cd_S1624C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S1624C4, buf);
    S1624C4 *dp, &lv = *(dp=new (buf) S1624C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S1624C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1624C4)");
    check_base_class_offset(lv, (S1624C5*), 0, "S1624C4");
    check_field_offset(lv, s1624c4f0, ABISELECT(8,4), "S1624C4.s1624c4f0");
    check_field_offset(lv, s1624c4f1, ABISELECT(16,8), "S1624C4.s1624c4f1");
    check_field_offset(lv, s1624c4f2, ABISELECT(24,12), "S1624C4.s1624c4f2");
    test_class_info(&lv, &cd_S1624C4);
    dp->~S1624C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1624C4(Test_S1624C4, "S1624C4", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S1624C4C1Ev();
extern void _ZN7S1624C4D2Ev();
Name_Map name_map_S1624C4[] = {
  NSPAIR(_ZN7S1624C4C1Ev),
  NSPAIR(_ZN7S1624C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1624C5;
extern VTBL_ENTRY _ZTI7S1624C5[];
extern  VTBL_ENTRY _ZTV7S1624C5[];
static Base_Class bases_S1624C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1624C5,    0, //bcp->offset
    -1, //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 _ZTI7S1624C4[];
extern void _ZN7S1624C4D1Ev();
extern void _ZN7S1624C4D0Ev();
extern void _ZN7S1624C52v5Ev();
extern void _ZN7S1624C52v6Ev();
extern void _ZN7S1624C52v7Ev();
extern void _ZN7S1624C52v8Ev();
extern void _ZN7S1624C52v9Ev();
extern void _ZN7S1624C43v10Ev();
extern void _ZN7S1624C43v11Ev();
extern void _ZN7S1624C43v12Ev();
static  VTBL_ENTRY vtc_S1624C4[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1624C4[0]),
  (VTBL_ENTRY)&_ZN7S1624C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1624C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v5Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v6Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v7Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v8Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v12Ev,
};
extern VTBL_ENTRY _ZTV7S1624C4[];
static  VTT_ENTRY vtt_S1624C4[] = {
  {&(_ZTV7S1624C4[9]),  9,19},
  {&(_ZTV7S1624C4[9]),  9,19},
};
extern VTBL_ENTRY _ZTI7S1624C4[];
extern  VTBL_ENTRY _ZTV7S1624C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1624C4[];
Class_Descriptor cd_S1624C4 = {  "S1624C4", // class name
  bases_S1624C4, 1,
  &(vtc_S1624C4[0]), // expected_vtbl_contents
  &(vtt_S1624C4[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S1624C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S1624C4),19, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1624C4),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  S1624C3  : S1624C4 {
  ::S1624C4 s1624c3f0[6];
  virtual void  v13(); // _ZN7S1624C33v13Ev
  ~S1624C3(); // tgen
  S1624C3(); // tgen
};
//SIG(-1 S1624C3) C1{ BC2{ VBC3{ vd v2 v3 v4 v5 v6} vd v7 v8 v9 Fp FC3 Fp} v1 FC2[6]}


void  S1624C3 ::v13(){vfunc_called(this, "_ZN7S1624C33v13Ev");}
S1624C3 ::~S1624C3(){ note_dtor("S1624C3", this);} // tgen
S1624C3 ::S1624C3(){ note_ctor("S1624C3", this);} // tgen

static void Test_S1624C3()
{
  extern Class_Descriptor cd_S1624C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[29];
    init_test(&cd_S1624C3, buf);
    S1624C3 *dp, &lv = *(dp=new (buf) S1624C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,112), "sizeof(S1624C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1624C3)");
    check_base_class_offset(lv, (S1624C5*)(S1624C4*), 0, "S1624C3");
    check_base_class_offset(lv, (S1624C4*), 0, "S1624C3");
    check_field_offset(lv, s1624c3f0, ABISELECT(32,16), "S1624C3.s1624c3f0");
    test_class_info(&lv, &cd_S1624C3);
    dp->~S1624C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1624C3(Test_S1624C3, "S1624C3", ABISELECT(224,112));

#else // __cplusplus

extern void _ZN7S1624C3C1Ev();
extern void _ZN7S1624C3D1Ev();
Name_Map name_map_S1624C3[] = {
  NSPAIR(_ZN7S1624C3C1Ev),
  NSPAIR(_ZN7S1624C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1624C5;
extern VTBL_ENTRY _ZTI7S1624C5[];
extern  VTBL_ENTRY _ZTV7S1624C5[];
extern Class_Descriptor cd_S1624C4;
extern VTBL_ENTRY _ZTI7S1624C4[];
extern  VTBL_ENTRY _ZTV7S1624C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1624C4[];
static Base_Class bases_S1624C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1624C5,    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
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S1624C4,    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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1624C3[];
extern void _ZN7S1624C3D1Ev();
extern void _ZN7S1624C3D0Ev();
extern void _ZN7S1624C52v5Ev();
extern void _ZN7S1624C52v6Ev();
extern void _ZN7S1624C52v7Ev();
extern void _ZN7S1624C52v8Ev();
extern void _ZN7S1624C52v9Ev();
extern void _ZN7S1624C43v10Ev();
extern void _ZN7S1624C43v11Ev();
extern void _ZN7S1624C43v12Ev();
extern void _ZN7S1624C33v13Ev();
static  VTBL_ENTRY vtc_S1624C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1624C3[0]),
  (VTBL_ENTRY)&_ZN7S1624C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1624C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v5Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v6Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v7Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v8Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1624C33v13Ev,
};
extern VTBL_ENTRY _ZTV7S1624C3[];
extern void _ZN7S1624C4D1Ev();
extern void _ZN7S1624C4D0Ev();
extern void _ZN7S1624C52v5Ev();
extern void _ZN7S1624C52v6Ev();
extern void _ZN7S1624C52v7Ev();
extern void _ZN7S1624C52v8Ev();
extern void _ZN7S1624C52v9Ev();
extern void _ZN7S1624C43v10Ev();
extern void _ZN7S1624C43v11Ev();
extern void _ZN7S1624C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S1624C4__7S1624C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1624C4[0]),
  (VTBL_ENTRY)&_ZN7S1624C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1624C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v5Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v6Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v7Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v8Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v12Ev,
};
static  VTT_ENTRY vtt_S1624C3[] = {
  {&(_ZTV7S1624C3[9]),  9,20},
  {&(_tg__ZTV7S1624C4__7S1624C3[9]),  9,19},
  {&(_tg__ZTV7S1624C4__7S1624C3[9]),  9,19},
  {&(_ZTV7S1624C3[9]),  9,20},
};
extern VTBL_ENTRY _ZTI7S1624C3[];
extern  VTBL_ENTRY _ZTV7S1624C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1624C3[];
Class_Descriptor cd_S1624C3 = {  "S1624C3", // class name
  bases_S1624C3, 2,
  &(vtc_S1624C3[0]), // expected_vtbl_contents
  &(vtt_S1624C3[0]), // expected_vtt_contents
  ABISELECT(224,112), // object size
  NSPAIRA(_ZTI7S1624C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1624C3),20, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1624C3),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  S1624C2  : S1624C3 {
  virtual  ~S1624C2(); // _ZN7S1624C2D2Ev
  virtual void  v14(); // _ZN7S1624C23v14Ev
  virtual void  v15(); // _ZN7S1624C23v15Ev
  S1624C2(); // tgen
};
//SIG(-1 S1624C2) C1{ BC2{ BC3{ VBC4{ vd v3 v4 v5 v6 v7} vd v8 v9 v10 Fp FC4 Fp} v11 FC3[6]} vd v1 v2}


 S1624C2 ::~S1624C2(){ note_dtor("S1624C2", this);}
void  S1624C2 ::v14(){vfunc_called(this, "_ZN7S1624C23v14Ev");}
void  S1624C2 ::v15(){vfunc_called(this, "_ZN7S1624C23v15Ev");}
S1624C2 ::S1624C2(){ note_ctor("S1624C2", this);} // tgen

static void Test_S1624C2()
{
  extern Class_Descriptor cd_S1624C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[29];
    init_test(&cd_S1624C2, buf);
    S1624C2 *dp, &lv = *(dp=new (buf) S1624C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,112), "sizeof(S1624C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1624C2)");
    check_base_class_offset(lv, (S1624C5*)(S1624C4*)(S1624C3*), 0, "S1624C2");
    check_base_class_offset(lv, (S1624C4*)(S1624C3*), 0, "S1624C2");
    check_base_class_offset(lv, (S1624C3*), 0, "S1624C2");
    test_class_info(&lv, &cd_S1624C2);
    dp->~S1624C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1624C2(Test_S1624C2, "S1624C2", ABISELECT(224,112));

#else // __cplusplus

extern void _ZN7S1624C2C1Ev();
extern void _ZN7S1624C2D2Ev();
Name_Map name_map_S1624C2[] = {
  NSPAIR(_ZN7S1624C2C1Ev),
  NSPAIR(_ZN7S1624C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1624C5;
extern VTBL_ENTRY _ZTI7S1624C5[];
extern  VTBL_ENTRY _ZTV7S1624C5[];
extern Class_Descriptor cd_S1624C4;
extern VTBL_ENTRY _ZTI7S1624C4[];
extern  VTBL_ENTRY _ZTV7S1624C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1624C4[];
extern Class_Descriptor cd_S1624C3;
extern VTBL_ENTRY _ZTI7S1624C3[];
extern  VTBL_ENTRY _ZTV7S1624C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1624C3[];
static Base_Class bases_S1624C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1624C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //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
    1, //immediately_derived
  0, 1},
  {&cd_S1624C4,    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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1624C3,    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 _ZTI7S1624C2[];
extern void _ZN7S1624C2D1Ev();
extern void _ZN7S1624C2D0Ev();
extern void _ZN7S1624C52v5Ev();
extern void _ZN7S1624C52v6Ev();
extern void _ZN7S1624C52v7Ev();
extern void _ZN7S1624C52v8Ev();
extern void _ZN7S1624C52v9Ev();
extern void _ZN7S1624C43v10Ev();
extern void _ZN7S1624C43v11Ev();
extern void _ZN7S1624C43v12Ev();
extern void _ZN7S1624C33v13Ev();
extern void _ZN7S1624C23v14Ev();
extern void _ZN7S1624C23v15Ev();
static  VTBL_ENTRY vtc_S1624C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1624C2[0]),
  (VTBL_ENTRY)&_ZN7S1624C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1624C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v5Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v6Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v7Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v8Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1624C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1624C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1624C23v15Ev,
};
extern VTBL_ENTRY _ZTV7S1624C2[];
extern void _ZN7S1624C3D1Ev();
extern void _ZN7S1624C3D0Ev();
extern void _ZN7S1624C52v5Ev();
extern void _ZN7S1624C52v6Ev();
extern void _ZN7S1624C52v7Ev();
extern void _ZN7S1624C52v8Ev();
extern void _ZN7S1624C52v9Ev();
extern void _ZN7S1624C43v10Ev();
extern void _ZN7S1624C43v11Ev();
extern void _ZN7S1624C43v12Ev();
extern void _ZN7S1624C33v13Ev();
static  VTBL_ENTRY _tg__ZTV7S1624C3__7S1624C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1624C3[0]),
  (VTBL_ENTRY)&_ZN7S1624C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1624C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v5Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v6Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v7Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v8Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1624C33v13Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1624C4D1Ev,_ZTv0_n12_N7S1624C4D1Ev)();
extern void _ZN7S1624C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1624C4D0Ev,_ZTv0_n12_N7S1624C4D0Ev)();
extern void _ZN7S1624C4D0Ev() __attribute__((weak));
extern void _ZN7S1624C52v5Ev();
extern void _ZN7S1624C52v6Ev();
extern void _ZN7S1624C52v7Ev();
extern void _ZN7S1624C52v8Ev();
extern void _ZN7S1624C52v9Ev();
extern void _ZN7S1624C43v10Ev();
extern void _ZN7S1624C43v11Ev();
extern void _ZN7S1624C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S1624C47S1624C3__7S1624C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1624C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1624C4D1Ev,_ZTv0_n12_N7S1624C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1624C4D0Ev,_ZTv0_n12_N7S1624C4D0Ev),
  (VTBL_ENTRY)&_ZN7S1624C52v5Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v6Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v7Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v8Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v12Ev,
};
static  VTT_ENTRY vtt_S1624C2[] = {
  {&(_ZTV7S1624C2[9]),  9,22},
  {&(_tg__ZTV7S1624C3__7S1624C2[9]),  9,20},
  {&(_tg__ZTV7S1624C47S1624C3__7S1624C2[9]),  9,19},
  {&(_tg__ZTV7S1624C47S1624C3__7S1624C2[9]),  9,19},
  {&(_tg__ZTV7S1624C3__7S1624C2[9]),  9,20},
  {&(_ZTV7S1624C2[9]),  9,22},
};
extern VTBL_ENTRY _ZTI7S1624C2[];
extern  VTBL_ENTRY _ZTV7S1624C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1624C2[];
static VTBL_ENTRY alt_thunk_names35[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1624C4D0Ev,_ZTv0_n12_N7S1624C4D0Ev), // 
  (VTBL_ENTRY)_ZN7S1624C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1624C4D1Ev,_ZTv0_n12_N7S1624C4D1Ev), // 
  (VTBL_ENTRY)_ZN7S1624C4D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1624C2 = {  "S1624C2", // class name
  bases_S1624C2, 3,
  &(vtc_S1624C2[0]), // expected_vtbl_contents
  &(vtt_S1624C2[0]), // expected_vtt_contents
  ABISELECT(224,112), // object size
  NSPAIRA(_ZTI7S1624C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1624C2),22, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1624C2),6, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names35,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1624C1  : S1624C2 , S1624C4 {
  int s1624c1f0[2];
  virtual void  v1(); // _ZN7S1624C12v1Ev
  virtual void  v2(); // _ZN7S1624C12v2Ev
  virtual void  v3(); // _ZN7S1624C12v3Ev
  virtual void  v4(); // _ZN7S1624C12v4Ev
  ~S1624C1(); // tgen
  S1624C1(); // tgen
};
//SIG(1 S1624C1) C1{ BC2{ BC3{ BC4{ VBC5{ vd v5 v6 v7 v8 v9} vd v10 v11 v12 Fp FC5 Fp} v13 FC4[6]} vd v14 v15} BC4 v1 v2 v3 v4 Fi[2]}


void  S1624C1 ::v1(){vfunc_called(this, "_ZN7S1624C12v1Ev");}
void  S1624C1 ::v2(){vfunc_called(this, "_ZN7S1624C12v2Ev");}
void  S1624C1 ::v3(){vfunc_called(this, "_ZN7S1624C12v3Ev");}
void  S1624C1 ::v4(){vfunc_called(this, "_ZN7S1624C12v4Ev");}
S1624C1 ::~S1624C1(){ note_dtor("S1624C1", this);} // tgen
S1624C1 ::S1624C1(){ note_ctor("S1624C1", this);} // tgen

static void Test_S1624C1()
{
  extern Class_Descriptor cd_S1624C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(34,35)];
    init_test(&cd_S1624C1, buf);
    S1624C1 *dp, &lv = *(dp=new (buf) S1624C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(264,136), "sizeof(S1624C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1624C1)");
    check_base_class_offset(lv, (S1624C5*)(S1624C4*)(S1624C3*)(S1624C2*), 0, "S1624C1");
    /*is_ambiguous_... S1624C1::S1624C4 */ AMB_check_base_class_offset(lv, (S1624C5*)(S1624C4*), 0, "S1624C1");
    check_base_class_offset(lv, (S1624C4*)(S1624C3*)(S1624C2*), 0, "S1624C1");
    check_base_class_offset(lv, (S1624C3*)(S1624C2*), 0, "S1624C1");
    check_base_class_offset(lv, (S1624C2*), 0, "S1624C1");
    /*is_ambiguous_... S1624C1::S1624C4 */ AMB_check_base_class_offset(lv, (S1624C4*), ABISELECT(224,112), "S1624C1");
    check_field_offset(lv, s1624c1f0, ABISELECT(256,128), "S1624C1.s1624c1f0");
    test_class_info(&lv, &cd_S1624C1);
    dp->~S1624C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1624C1(Test_S1624C1, "S1624C1", ABISELECT(264,136));

#else // __cplusplus

extern void _ZN7S1624C1C1Ev();
extern void _ZN7S1624C1D1Ev();
Name_Map name_map_S1624C1[] = {
  NSPAIR(_ZN7S1624C1C1Ev),
  NSPAIR(_ZN7S1624C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1624C5;
extern VTBL_ENTRY _ZTI7S1624C5[];
extern  VTBL_ENTRY _ZTV7S1624C5[];
extern Class_Descriptor cd_S1624C4;
extern VTBL_ENTRY _ZTI7S1624C4[];
extern  VTBL_ENTRY _ZTV7S1624C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1624C4[];
extern Class_Descriptor cd_S1624C3;
extern VTBL_ENTRY _ZTI7S1624C3[];
extern  VTBL_ENTRY _ZTV7S1624C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1624C3[];
extern Class_Descriptor cd_S1624C2;
extern VTBL_ENTRY _ZTI7S1624C2[];
extern  VTBL_ENTRY _ZTV7S1624C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1624C2[];
extern Class_Descriptor cd_S1624C4;
extern VTBL_ENTRY _ZTI7S1624C4[];
extern  VTBL_ENTRY _ZTV7S1624C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1624C4[];
static Base_Class bases_S1624C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1624C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S1624C4,    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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1624C3,    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
    3, //immediately_derived
  0, 0},
  {&cd_S1624C2,    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},
  {&cd_S1624C4,    ABISELECT(224,112), //bcp->offset
    26, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1624C1[];
extern void _ZN7S1624C1D1Ev();
extern void _ZN7S1624C1D0Ev();
extern void _ZN7S1624C52v5Ev();
extern void _ZN7S1624C52v6Ev();
extern void _ZN7S1624C52v7Ev();
extern void _ZN7S1624C52v8Ev();
extern void _ZN7S1624C52v9Ev();
extern void _ZN7S1624C43v10Ev();
extern void _ZN7S1624C43v11Ev();
extern void _ZN7S1624C43v12Ev();
extern void _ZN7S1624C33v13Ev();
extern void _ZN7S1624C23v14Ev();
extern void _ZN7S1624C23v15Ev();
extern void _ZN7S1624C12v1Ev();
extern void _ZN7S1624C12v2Ev();
extern void _ZN7S1624C12v3Ev();
extern void _ZN7S1624C12v4Ev();
extern void ABISELECT(_ZThn224_N7S1624C1D1Ev,_ZThn112_N7S1624C1D1Ev)();
extern void ABISELECT(_ZThn224_N7S1624C1D0Ev,_ZThn112_N7S1624C1D0Ev)();
extern void _ZN7S1624C52v5Ev();
extern void _ZN7S1624C52v6Ev();
extern void _ZN7S1624C52v7Ev();
extern void _ZN7S1624C52v8Ev();
extern void _ZN7S1624C52v9Ev();
extern void _ZN7S1624C43v10Ev();
extern void _ZN7S1624C43v11Ev();
extern void _ZN7S1624C43v12Ev();
static  VTBL_ENTRY vtc_S1624C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1624C1[0]),
  (VTBL_ENTRY)&_ZN7S1624C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1624C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v5Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v6Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v7Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v8Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1624C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1624C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1624C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1624C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1624C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1624C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1624C12v4Ev,
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  (VTBL_ENTRY)&(_ZTI7S1624C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn224_N7S1624C1D1Ev,_ZThn112_N7S1624C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn224_N7S1624C1D0Ev,_ZThn112_N7S1624C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1624C52v5Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v6Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v7Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v8Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v12Ev,
};
extern VTBL_ENTRY _ZTV7S1624C1[];
extern void _ZN7S1624C2D1Ev();
extern void _ZN7S1624C2D0Ev();
extern void _ZN7S1624C52v5Ev();
extern void _ZN7S1624C52v6Ev();
extern void _ZN7S1624C52v7Ev();
extern void _ZN7S1624C52v8Ev();
extern void _ZN7S1624C52v9Ev();
extern void _ZN7S1624C43v10Ev();
extern void _ZN7S1624C43v11Ev();
extern void _ZN7S1624C43v12Ev();
extern void _ZN7S1624C33v13Ev();
extern void _ZN7S1624C23v14Ev();
extern void _ZN7S1624C23v15Ev();
static  VTBL_ENTRY _tg__ZTV7S1624C2__7S1624C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1624C2[0]),
  (VTBL_ENTRY)&_ZN7S1624C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1624C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v5Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v6Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v7Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v8Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1624C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1624C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1624C23v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1624C3D1Ev,_ZTv0_n12_N7S1624C3D1Ev)();
extern void _ZN7S1624C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1624C3D0Ev,_ZTv0_n12_N7S1624C3D0Ev)();
extern void _ZN7S1624C3D0Ev() __attribute__((weak));
extern void _ZN7S1624C52v5Ev();
extern void _ZN7S1624C52v6Ev();
extern void _ZN7S1624C52v7Ev();
extern void _ZN7S1624C52v8Ev();
extern void _ZN7S1624C52v9Ev();
extern void _ZN7S1624C43v10Ev();
extern void _ZN7S1624C43v11Ev();
extern void _ZN7S1624C43v12Ev();
extern void _ZN7S1624C33v13Ev();
static  VTBL_ENTRY _tg__ZTV7S1624C37S1624C2__7S1624C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1624C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1624C3D1Ev,_ZTv0_n12_N7S1624C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1624C3D0Ev,_ZTv0_n12_N7S1624C3D0Ev),
  (VTBL_ENTRY)&_ZN7S1624C52v5Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v6Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v7Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v8Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1624C33v13Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1624C4D1Ev,_ZTv0_n12_N7S1624C4D1Ev)();
extern void _ZN7S1624C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1624C4D0Ev,_ZTv0_n12_N7S1624C4D0Ev)();
extern void _ZN7S1624C4D0Ev() __attribute__((weak));
extern void _ZN7S1624C52v5Ev();
extern void _ZN7S1624C52v6Ev();
extern void _ZN7S1624C52v7Ev();
extern void _ZN7S1624C52v8Ev();
extern void _ZN7S1624C52v9Ev();
extern void _ZN7S1624C43v10Ev();
extern void _ZN7S1624C43v11Ev();
extern void _ZN7S1624C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S1624C47S1624C37S1624C2__7S1624C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1624C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1624C4D1Ev,_ZTv0_n12_N7S1624C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1624C4D0Ev,_ZTv0_n12_N7S1624C4D0Ev),
  (VTBL_ENTRY)&_ZN7S1624C52v5Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v6Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v7Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v8Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v12Ev,
};
extern void _ZN7S1624C4D1Ev();
extern void _ZN7S1624C4D0Ev();
extern void _ZN7S1624C52v5Ev();
extern void _ZN7S1624C52v6Ev();
extern void _ZN7S1624C52v7Ev();
extern void _ZN7S1624C52v8Ev();
extern void _ZN7S1624C52v9Ev();
extern void _ZN7S1624C43v10Ev();
extern void _ZN7S1624C43v11Ev();
extern void _ZN7S1624C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S1624C4__A1__7S1624C1[] = {
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1624C4[0]),
  (VTBL_ENTRY)&_ZN7S1624C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1624C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v5Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v6Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v7Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v8Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1624C4D1Ev,_ZTv0_n12_N7S1624C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S1624C4D0Ev,_ZTv0_n12_N7S1624C4D0Ev)();
extern void _ZN7S1624C52v5Ev();
extern void _ZN7S1624C52v6Ev();
extern void _ZN7S1624C52v7Ev();
extern void _ZN7S1624C52v8Ev();
extern void _ZN7S1624C52v9Ev();
static  VTBL_ENTRY _tg__ZTV7S1624C5__7S1624C4__A1__7S1624C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(224,112),
  ABISELECT(224,112),
  (VTBL_ENTRY)&(_ZTI7S1624C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1624C4D1Ev,_ZTv0_n12_N7S1624C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1624C4D0Ev,_ZTv0_n12_N7S1624C4D0Ev),
  (VTBL_ENTRY)&_ZN7S1624C52v5Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v6Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v7Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v8Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v9Ev,
};
static  VTT_ENTRY vtt_S1624C1[] = {
  {&(_ZTV7S1624C1[9]),  9,45},
  {&(_tg__ZTV7S1624C2__7S1624C1[9]),  9,22},
  {&(_tg__ZTV7S1624C37S1624C2__7S1624C1[9]),  9,20},
  {&(_tg__ZTV7S1624C47S1624C37S1624C2__7S1624C1[9]),  9,19},
  {&(_tg__ZTV7S1624C47S1624C37S1624C2__7S1624C1[9]),  9,19},
  {&(_tg__ZTV7S1624C37S1624C2__7S1624C1[9]),  9,20},
  {&(_tg__ZTV7S1624C2__7S1624C1[9]),  9,22},
  {&(_tg__ZTV7S1624C4__A1__7S1624C1[9]),  9,19},
  {&(_tg__ZTV7S1624C5__7S1624C4__A1__7S1624C1[8]),  8,15},
  {&(_ZTV7S1624C1[9]),  9,45},
  {&(_ZTV7S1624C1[35]),  35,45},
};
extern VTBL_ENTRY _ZTI7S1624C1[];
extern  VTBL_ENTRY _ZTV7S1624C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1624C1[];
static VTBL_ENTRY alt_thunk_names36[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1624C4D0Ev,_ZTv0_n12_N7S1624C4D0Ev), // 
  (VTBL_ENTRY)_ZN7S1624C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1624C4D1Ev,_ZTv0_n12_N7S1624C4D1Ev), // 
  (VTBL_ENTRY)_ZN7S1624C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1624C3D0Ev,_ZTv0_n12_N7S1624C3D0Ev), // 
  (VTBL_ENTRY)_ZN7S1624C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1624C3D1Ev,_ZTv0_n12_N7S1624C3D1Ev), // 
  (VTBL_ENTRY)_ZN7S1624C3D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1624C1 = {  "S1624C1", // class name
  bases_S1624C1, 5,
  &(vtc_S1624C1[0]), // expected_vtbl_contents
  &(vtt_S1624C1[0]), // expected_vtt_contents
  ABISELECT(264,136), // object size
  NSPAIRA(_ZTI7S1624C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S1624C1),45, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1624C1),11, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names36,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4847C3  {
  ::S2185C10_nt s4847c3f0;
  int s4847c3f1[2];
  char s4847c3f2;
  virtual  ~S4847C3(); // _ZN7S4847C3D1Ev
  virtual void  v3(); // _ZN7S4847C32v3Ev
  virtual void  v4(); // _ZN7S4847C32v4Ev
  virtual void  v5(); // _ZN7S4847C32v5Ev
  S4847C3(); // tgen
};
//SIG(-1 S4847C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4847C3 ::~S4847C3(){ note_dtor("S4847C3", this);}
void  S4847C3 ::v3(){vfunc_called(this, "_ZN7S4847C32v3Ev");}
void  S4847C3 ::v4(){vfunc_called(this, "_ZN7S4847C32v4Ev");}
void  S4847C3 ::v5(){vfunc_called(this, "_ZN7S4847C32v5Ev");}
S4847C3 ::S4847C3(){ note_ctor("S4847C3", this);} // tgen

static void Test_S4847C3()
{
  extern Class_Descriptor cd_S4847C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4847C3, buf);
    S4847C3 *dp, &lv = *(dp=new (buf) S4847C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4847C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4847C3)");
    check_field_offset(lv, s4847c3f0, ABISELECT(8,4), "S4847C3.s4847c3f0");
    check_field_offset(lv, s4847c3f1, ABISELECT(24,16), "S4847C3.s4847c3f1");
    check_field_offset(lv, s4847c3f2, ABISELECT(32,24), "S4847C3.s4847c3f2");
    test_class_info(&lv, &cd_S4847C3);
    dp->~S4847C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4847C3(Test_S4847C3, "S4847C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4847C3C1Ev();
extern void _ZN7S4847C3D1Ev();
Name_Map name_map_S4847C3[] = {
  NSPAIR(_ZN7S4847C3C1Ev),
  NSPAIR(_ZN7S4847C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4847C3[];
extern void _ZN7S4847C3D1Ev();
extern void _ZN7S4847C3D0Ev();
extern void _ZN7S4847C32v3Ev();
extern void _ZN7S4847C32v4Ev();
extern void _ZN7S4847C32v5Ev();
static  VTBL_ENTRY vtc_S4847C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4847C3[0]),
  (VTBL_ENTRY)&_ZN7S4847C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4847C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4847C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4847C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4847C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4847C3[];
extern  VTBL_ENTRY _ZTV7S4847C3[];
Class_Descriptor cd_S4847C3 = {  "S4847C3", // class name
  0,0,//no base classes
  &(vtc_S4847C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4847C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4847C3),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  S4847C2  : S4847C3 {
  void *s4847c2f0[2];
  ::S4846C6_nt s4847c2f1;
  virtual  ~S4847C2(); // _ZN7S4847C2D1Ev
  virtual void  v6(); // _ZN7S4847C22v6Ev
  virtual void  v7(); // _ZN7S4847C22v7Ev
  virtual void  v8(); // _ZN7S4847C22v8Ev
  virtual void  v9(); // _ZN7S4847C22v9Ev
  S4847C2(); // tgen
};
//SIG(-1 S4847C2) C1{ BC2{ vd v5 v6 v7 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 v3 v4 Fp[2] FC5{ FC6{ Fc[20]} Fc[16]}}


 S4847C2 ::~S4847C2(){ note_dtor("S4847C2", this);}
void  S4847C2 ::v6(){vfunc_called(this, "_ZN7S4847C22v6Ev");}
void  S4847C2 ::v7(){vfunc_called(this, "_ZN7S4847C22v7Ev");}
void  S4847C2 ::v8(){vfunc_called(this, "_ZN7S4847C22v8Ev");}
void  S4847C2 ::v9(){vfunc_called(this, "_ZN7S4847C22v9Ev");}
S4847C2 ::S4847C2(){ note_ctor("S4847C2", this);} // tgen

static void Test_S4847C2()
{
  extern Class_Descriptor cd_S4847C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,19)];
    init_test(&cd_S4847C2, buf);
    S4847C2 *dp, &lv = *(dp=new (buf) S4847C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,72), "sizeof(S4847C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4847C2)");
    check_base_class_offset(lv, (S4847C3*), 0, "S4847C2");
    check_field_offset(lv, s4847c2f0, ABISELECT(40,28), "S4847C2.s4847c2f0");
    check_field_offset(lv, s4847c2f1, ABISELECT(56,36), "S4847C2.s4847c2f1");
    test_class_info(&lv, &cd_S4847C2);
    dp->~S4847C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4847C2(Test_S4847C2, "S4847C2", ABISELECT(96,72));

#else // __cplusplus

extern void _ZN7S4847C2C1Ev();
extern void _ZN7S4847C2D1Ev();
Name_Map name_map_S4847C2[] = {
  NSPAIR(_ZN7S4847C2C1Ev),
  NSPAIR(_ZN7S4847C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4847C3;
extern VTBL_ENTRY _ZTI7S4847C3[];
extern  VTBL_ENTRY _ZTV7S4847C3[];
static Base_Class bases_S4847C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4847C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S4847C2[];
extern void _ZN7S4847C2D1Ev();
extern void _ZN7S4847C2D0Ev();
extern void _ZN7S4847C32v3Ev();
extern void _ZN7S4847C32v4Ev();
extern void _ZN7S4847C32v5Ev();
extern void _ZN7S4847C22v6Ev();
extern void _ZN7S4847C22v7Ev();
extern void _ZN7S4847C22v8Ev();
extern void _ZN7S4847C22v9Ev();
static  VTBL_ENTRY vtc_S4847C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4847C2[0]),
  (VTBL_ENTRY)&_ZN7S4847C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4847C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4847C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4847C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4847C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4847C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4847C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4847C22v8Ev,
  (VTBL_ENTRY)&_ZN7S4847C22v9Ev,
};
extern VTBL_ENTRY _ZTI7S4847C2[];
extern  VTBL_ENTRY _ZTV7S4847C2[];
Class_Descriptor cd_S4847C2 = {  "S4847C2", // class name
  bases_S4847C2, 1,
  &(vtc_S4847C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,72), // object size
  NSPAIRA(_ZTI7S4847C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4847C2),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4847C1  : S4847C2 {
  int s4847c1f0;
  virtual  ~S4847C1(); // _ZN7S4847C1D1Ev
  virtual void  v1(); // _ZN7S4847C12v1Ev
  virtual void  v2(); // _ZN7S4847C12v2Ev
  S4847C1(); // tgen
};
//SIG(1 S4847C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} vd v6 v7 v8 v9 Fp[2] FC6{ FC7{ Fc[20]} Fc[16]}} vd v1 v2 Fi}


 S4847C1 ::~S4847C1(){ note_dtor("S4847C1", this);}
void  S4847C1 ::v1(){vfunc_called(this, "_ZN7S4847C12v1Ev");}
void  S4847C1 ::v2(){vfunc_called(this, "_ZN7S4847C12v2Ev");}
S4847C1 ::S4847C1(){ note_ctor("S4847C1", this);} // tgen

static void Test_S4847C1()
{
  extern Class_Descriptor cd_S4847C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,20)];
    init_test(&cd_S4847C1, buf);
    S4847C1 *dp, &lv = *(dp=new (buf) S4847C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,76), "sizeof(S4847C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4847C1)");
    check_base_class_offset(lv, (S4847C3*)(S4847C2*), 0, "S4847C1");
    check_base_class_offset(lv, (S4847C2*), 0, "S4847C1");
    check_field_offset(lv, s4847c1f0, ABISELECT(92,72), "S4847C1.s4847c1f0");
    test_class_info(&lv, &cd_S4847C1);
    dp->~S4847C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4847C1(Test_S4847C1, "S4847C1", ABISELECT(96,76));

#else // __cplusplus

extern void _ZN7S4847C1C1Ev();
extern void _ZN7S4847C1D1Ev();
Name_Map name_map_S4847C1[] = {
  NSPAIR(_ZN7S4847C1C1Ev),
  NSPAIR(_ZN7S4847C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4847C3;
extern VTBL_ENTRY _ZTI7S4847C3[];
extern  VTBL_ENTRY _ZTV7S4847C3[];
extern Class_Descriptor cd_S4847C2;
extern VTBL_ENTRY _ZTI7S4847C2[];
extern  VTBL_ENTRY _ZTV7S4847C2[];
static Base_Class bases_S4847C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4847C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4847C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4847C1[];
extern void _ZN7S4847C1D1Ev();
extern void _ZN7S4847C1D0Ev();
extern void _ZN7S4847C32v3Ev();
extern void _ZN7S4847C32v4Ev();
extern void _ZN7S4847C32v5Ev();
extern void _ZN7S4847C22v6Ev();
extern void _ZN7S4847C22v7Ev();
extern void _ZN7S4847C22v8Ev();
extern void _ZN7S4847C22v9Ev();
extern void _ZN7S4847C12v1Ev();
extern void _ZN7S4847C12v2Ev();
static  VTBL_ENTRY vtc_S4847C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4847C1[0]),
  (VTBL_ENTRY)&_ZN7S4847C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4847C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4847C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4847C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4847C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4847C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4847C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4847C22v8Ev,
  (VTBL_ENTRY)&_ZN7S4847C22v9Ev,
  (VTBL_ENTRY)&_ZN7S4847C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4847C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4847C1[];
extern  VTBL_ENTRY _ZTV7S4847C1[];
Class_Descriptor cd_S4847C1 = {  "S4847C1", // class name
  bases_S4847C1, 2,
  &(vtc_S4847C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,76), // object size
  NSPAIRA(_ZTI7S4847C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4847C1),13, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7801C4  {
  virtual  ~S7801C4(); // _ZN7S7801C4D1Ev
  virtual void  v4(); // _ZN7S7801C42v4Ev
  virtual void  v5(); // _ZN7S7801C42v5Ev
  virtual void  v6(); // _ZN7S7801C42v6Ev
  virtual void  v7(); // _ZN7S7801C42v7Ev
  virtual void  v8(); // _ZN7S7801C42v8Ev
  S7801C4(); // tgen
};
//SIG(-1 S7801C4) C1{ vd v1 v2 v3 v4 v5}


 S7801C4 ::~S7801C4(){ note_dtor("S7801C4", this);}
void  S7801C4 ::v4(){vfunc_called(this, "_ZN7S7801C42v4Ev");}
void  S7801C4 ::v5(){vfunc_called(this, "_ZN7S7801C42v5Ev");}
void  S7801C4 ::v6(){vfunc_called(this, "_ZN7S7801C42v6Ev");}
void  S7801C4 ::v7(){vfunc_called(this, "_ZN7S7801C42v7Ev");}
void  S7801C4 ::v8(){vfunc_called(this, "_ZN7S7801C42v8Ev");}
S7801C4 ::S7801C4(){ note_ctor("S7801C4", this);} // tgen

static void Test_S7801C4()
{
  extern Class_Descriptor cd_S7801C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7801C4, buf);
    S7801C4 *dp, &lv = *(dp=new (buf) S7801C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7801C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7801C4)");
    test_class_info(&lv, &cd_S7801C4);
    dp->~S7801C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7801C4(Test_S7801C4, "S7801C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7801C4C1Ev();
extern void _ZN7S7801C4D1Ev();
Name_Map name_map_S7801C4[] = {
  NSPAIR(_ZN7S7801C4C1Ev),
  NSPAIR(_ZN7S7801C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7801C4[];
extern void _ZN7S7801C4D1Ev();
extern void _ZN7S7801C4D0Ev();
extern void _ZN7S7801C42v4Ev();
extern void _ZN7S7801C42v5Ev();
extern void _ZN7S7801C42v6Ev();
extern void _ZN7S7801C42v7Ev();
extern void _ZN7S7801C42v8Ev();
static  VTBL_ENTRY vtc_S7801C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7801C4[0]),
  (VTBL_ENTRY)&_ZN7S7801C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7801C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v8Ev,
};
extern VTBL_ENTRY _ZTI7S7801C4[];
extern  VTBL_ENTRY _ZTV7S7801C4[];
Class_Descriptor cd_S7801C4 = {  "S7801C4", // class name
  0,0,//no base classes
  &(vtc_S7801C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7801C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7801C4),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  S7801C3  : virtual S7801C4 {
  void *s7801c3f0;
  ::S7801C4 s7801c3f1;
  void *s7801c3f2;
  virtual  ~S7801C3(); // _ZN7S7801C3D2Ev
  virtual void  v9(); // _ZN7S7801C32v9Ev
  virtual void  v10(); // _ZN7S7801C33v10Ev
  virtual void  v11(); // _ZN7S7801C33v11Ev
  S7801C3(); // tgen
};
//SIG(-1 S7801C3) C1{ VBC2{ vd v4 v5 v6 v7 v8} vd v1 v2 v3 Fp FC2 Fp}


 S7801C3 ::~S7801C3(){ note_dtor("S7801C3", this);}
void  S7801C3 ::v9(){vfunc_called(this, "_ZN7S7801C32v9Ev");}
void  S7801C3 ::v10(){vfunc_called(this, "_ZN7S7801C33v10Ev");}
void  S7801C3 ::v11(){vfunc_called(this, "_ZN7S7801C33v11Ev");}
S7801C3 ::S7801C3(){ note_ctor("S7801C3", this);} // tgen

static void Test_S7801C3()
{
  extern Class_Descriptor cd_S7801C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S7801C3, buf);
    S7801C3 *dp, &lv = *(dp=new (buf) S7801C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S7801C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7801C3)");
    check_base_class_offset(lv, (S7801C4*), 0, "S7801C3");
    check_field_offset(lv, s7801c3f0, ABISELECT(8,4), "S7801C3.s7801c3f0");
    check_field_offset(lv, s7801c3f1, ABISELECT(16,8), "S7801C3.s7801c3f1");
    check_field_offset(lv, s7801c3f2, ABISELECT(24,12), "S7801C3.s7801c3f2");
    test_class_info(&lv, &cd_S7801C3);
    dp->~S7801C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7801C3(Test_S7801C3, "S7801C3", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S7801C3C1Ev();
extern void _ZN7S7801C3D2Ev();
Name_Map name_map_S7801C3[] = {
  NSPAIR(_ZN7S7801C3C1Ev),
  NSPAIR(_ZN7S7801C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7801C4;
extern VTBL_ENTRY _ZTI7S7801C4[];
extern  VTBL_ENTRY _ZTV7S7801C4[];
static Base_Class bases_S7801C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7801C4,    0, //bcp->offset
    -1, //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 _ZTI7S7801C3[];
extern void _ZN7S7801C3D1Ev();
extern void _ZN7S7801C3D0Ev();
extern void _ZN7S7801C42v4Ev();
extern void _ZN7S7801C42v5Ev();
extern void _ZN7S7801C42v6Ev();
extern void _ZN7S7801C42v7Ev();
extern void _ZN7S7801C42v8Ev();
extern void _ZN7S7801C32v9Ev();
extern void _ZN7S7801C33v10Ev();
extern void _ZN7S7801C33v11Ev();
static  VTBL_ENTRY vtc_S7801C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7801C3[0]),
  (VTBL_ENTRY)&_ZN7S7801C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7801C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7801C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7801C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7801C33v11Ev,
};
extern VTBL_ENTRY _ZTV7S7801C3[];
static  VTT_ENTRY vtt_S7801C3[] = {
  {&(_ZTV7S7801C3[9]),  9,19},
  {&(_ZTV7S7801C3[9]),  9,19},
};
extern VTBL_ENTRY _ZTI7S7801C3[];
extern  VTBL_ENTRY _ZTV7S7801C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7801C3[];
Class_Descriptor cd_S7801C3 = {  "S7801C3", // class name
  bases_S7801C3, 1,
  &(vtc_S7801C3[0]), // expected_vtbl_contents
  &(vtt_S7801C3[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S7801C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7801C3),19, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7801C3),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  S7801C2  : virtual S7801C3 {
  char s7801c2f0;
  virtual  ~S7801C2(); // _ZN7S7801C2D2Ev
  virtual void  v12(); // _ZN7S7801C23v12Ev
  virtual void  v13(); // _ZN7S7801C23v13Ev
  virtual void  v14(); // _ZN7S7801C23v14Ev
  virtual void  v15(); // _ZN7S7801C23v15Ev
  virtual void  v16(); // _ZN7S7801C23v16Ev
  S7801C2(); // tgen
};
//SIG(-1 S7801C2) C1{ VBC2{ VBC3{ vd v6 v7 v8 v9 v10} vd v11 v12 v13 Fp FC3 Fp} vd v1 v2 v3 v4 v5 Fc}


 S7801C2 ::~S7801C2(){ note_dtor("S7801C2", this);}
void  S7801C2 ::v12(){vfunc_called(this, "_ZN7S7801C23v12Ev");}
void  S7801C2 ::v13(){vfunc_called(this, "_ZN7S7801C23v13Ev");}
void  S7801C2 ::v14(){vfunc_called(this, "_ZN7S7801C23v14Ev");}
void  S7801C2 ::v15(){vfunc_called(this, "_ZN7S7801C23v15Ev");}
void  S7801C2 ::v16(){vfunc_called(this, "_ZN7S7801C23v16Ev");}
S7801C2 ::S7801C2(){ note_ctor("S7801C2", this);} // tgen

static void Test_S7801C2()
{
  extern Class_Descriptor cd_S7801C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S7801C2, buf);
    S7801C2 *dp, &lv = *(dp=new (buf) S7801C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S7801C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7801C2)");
    check_base_class_offset(lv, (S7801C4*)(S7801C3*), 0, "S7801C2");
    check_base_class_offset(lv, (S7801C3*), ABISELECT(16,8), "S7801C2");
    check_field_offset(lv, s7801c2f0, ABISELECT(8,4), "S7801C2.s7801c2f0");
    test_class_info(&lv, &cd_S7801C2);
    dp->~S7801C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7801C2(Test_S7801C2, "S7801C2", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S7801C2C1Ev();
extern void _ZN7S7801C2D2Ev();
Name_Map name_map_S7801C2[] = {
  NSPAIR(_ZN7S7801C2C1Ev),
  NSPAIR(_ZN7S7801C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7801C4;
extern VTBL_ENTRY _ZTI7S7801C4[];
extern  VTBL_ENTRY _ZTV7S7801C4[];
extern Class_Descriptor cd_S7801C3;
extern VTBL_ENTRY _ZTI7S7801C3[];
extern  VTBL_ENTRY _ZTV7S7801C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7801C3[];
static Base_Class bases_S7801C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7801C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //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
    1, //immediately_derived
  0, 1},
  {&cd_S7801C3,    ABISELECT(16,8), //bcp->offset
    22, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7801C2[];
extern void _ZN7S7801C2D1Ev();
extern void _ZN7S7801C2D0Ev();
extern void _ZN7S7801C42v4Ev();
extern void _ZN7S7801C42v5Ev();
extern void _ZN7S7801C42v6Ev();
extern void _ZN7S7801C42v7Ev();
extern void _ZN7S7801C42v8Ev();
extern void _ZN7S7801C23v12Ev();
extern void _ZN7S7801C23v13Ev();
extern void _ZN7S7801C23v14Ev();
extern void _ZN7S7801C23v15Ev();
extern void _ZN7S7801C23v16Ev();
extern void ABISELECT(_ZTv0_n24_N7S7801C2D1Ev,_ZTv0_n12_N7S7801C2D1Ev)();
extern void ABISELECT(_ZThn16_N7S7801C2D1Ev,_ZThn8_N7S7801C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7801C2D0Ev,_ZTv0_n12_N7S7801C2D0Ev)();
extern void ABISELECT(_ZThn16_N7S7801C2D0Ev,_ZThn8_N7S7801C2D0Ev)() __attribute__((weak));
extern void _ZN7S7801C42v4Ev();
extern void _ZN7S7801C42v5Ev();
extern void _ZN7S7801C42v6Ev();
extern void _ZN7S7801C42v7Ev();
extern void _ZN7S7801C42v8Ev();
extern void _ZN7S7801C32v9Ev();
extern void _ZN7S7801C33v10Ev();
extern void _ZN7S7801C33v11Ev();
static  VTBL_ENTRY vtc_S7801C2[] = {
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7801C2[0]),
  (VTBL_ENTRY)&_ZN7S7801C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7801C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7801C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7801C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7801C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7801C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7801C23v16Ev,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7801C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7801C2D1Ev,_ZTv0_n12_N7S7801C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7801C2D0Ev,_ZTv0_n12_N7S7801C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7801C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7801C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7801C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7801C33v11Ev,
};
extern VTBL_ENTRY _ZTV7S7801C2[];
extern void ABISELECT(_ZTv0_n24_N7S7801C3D1Ev,_ZTv0_n12_N7S7801C3D1Ev)();
extern void _ZN7S7801C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7801C3D0Ev,_ZTv0_n12_N7S7801C3D0Ev)();
extern void _ZN7S7801C3D0Ev() __attribute__((weak));
extern void _ZN7S7801C42v4Ev();
extern void _ZN7S7801C42v5Ev();
extern void _ZN7S7801C42v6Ev();
extern void _ZN7S7801C42v7Ev();
extern void _ZN7S7801C42v8Ev();
extern void _ZN7S7801C32v9Ev();
extern void _ZN7S7801C33v10Ev();
extern void _ZN7S7801C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7801C3__7S7801C2[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7801C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7801C3D1Ev,_ZTv0_n12_N7S7801C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7801C3D0Ev,_ZTv0_n12_N7S7801C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7801C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7801C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7801C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7801C33v11Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7801C3D1Ev,_ZTv0_n12_N7S7801C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7801C3D0Ev,_ZTv0_n12_N7S7801C3D0Ev)();
extern void _ZN7S7801C42v4Ev();
extern void _ZN7S7801C42v5Ev();
extern void _ZN7S7801C42v6Ev();
extern void _ZN7S7801C42v7Ev();
extern void _ZN7S7801C42v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7801C4__7S7801C3__7S7801C2[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S7801C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7801C3D1Ev,_ZTv0_n12_N7S7801C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7801C3D0Ev,_ZTv0_n12_N7S7801C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7801C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v8Ev,
};
static  VTT_ENTRY vtt_S7801C2[] = {
  {&(_ZTV7S7801C2[10]),  10,44},
  {&(_ZTV7S7801C2[34]),  34,44},
  {&(_ZTV7S7801C2[10]),  10,44},
  {&(_tg__ZTV7S7801C3__7S7801C2[9]),  9,19},
  {&(_tg__ZTV7S7801C4__7S7801C3__7S7801C2[8]),  8,15},
};
extern VTBL_ENTRY _ZTI7S7801C2[];
extern  VTBL_ENTRY _ZTV7S7801C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7801C2[];
static VTBL_ENTRY alt_thunk_names37[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7801C3D0Ev,_ZTv0_n12_N7S7801C3D0Ev), // 
  (VTBL_ENTRY)_ZN7S7801C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7801C3D1Ev,_ZTv0_n12_N7S7801C3D1Ev), // 
  (VTBL_ENTRY)_ZN7S7801C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7801C2D0Ev,_ZTv0_n12_N7S7801C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7801C2D0Ev,_ZThn8_N7S7801C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7801C2D1Ev,_ZTv0_n12_N7S7801C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7801C2D1Ev,_ZThn8_N7S7801C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7801C2 = {  "S7801C2", // class name
  bases_S7801C2, 2,
  &(vtc_S7801C2[0]), // expected_vtbl_contents
  &(vtt_S7801C2[0]), // expected_vtt_contents
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S7801C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7801C2),44, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7801C2),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names37,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7801C1  : S7801C2 {
  int s7801c1f0[2];
  short s7801c1f1;
  virtual void  v1(); // _ZN7S7801C12v1Ev
  virtual void  v2(); // _ZN7S7801C12v2Ev
  virtual void  v3(); // _ZN7S7801C12v3Ev
  ~S7801C1(); // tgen
  S7801C1(); // tgen
};
//SIG(1 S7801C1) C1{ BC2{ VBC3{ VBC4{ vd v4 v5 v6 v7 v8} vd v9 v10 v11 Fp FC4 Fp} vd v12 v13 v14 v15 v16 Fc} v1 v2 v3 Fi[2] Fs}


void  S7801C1 ::v1(){vfunc_called(this, "_ZN7S7801C12v1Ev");}
void  S7801C1 ::v2(){vfunc_called(this, "_ZN7S7801C12v2Ev");}
void  S7801C1 ::v3(){vfunc_called(this, "_ZN7S7801C12v3Ev");}
S7801C1 ::~S7801C1(){ note_dtor("S7801C1", this);} // tgen
S7801C1 ::S7801C1(){ note_ctor("S7801C1", this);} // tgen

static void Test_S7801C1()
{
  extern Class_Descriptor cd_S7801C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S7801C1, buf);
    S7801C1 *dp, &lv = *(dp=new (buf) S7801C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S7801C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7801C1)");
    check_base_class_offset(lv, (S7801C4*)(S7801C3*), 0, "S7801C1");
    check_base_class_offset(lv, (S7801C3*)(S7801C2*), ABISELECT(24,20), "S7801C1");
    check_base_class_offset(lv, (S7801C2*), 0, "S7801C1");
    check_field_offset(lv, s7801c1f0, ABISELECT(12,8), "S7801C1.s7801c1f0");
    check_field_offset(lv, s7801c1f1, ABISELECT(20,16), "S7801C1.s7801c1f1");
    test_class_info(&lv, &cd_S7801C1);
    dp->~S7801C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7801C1(Test_S7801C1, "S7801C1", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN7S7801C1C1Ev();
extern void _ZN7S7801C1D1Ev();
Name_Map name_map_S7801C1[] = {
  NSPAIR(_ZN7S7801C1C1Ev),
  NSPAIR(_ZN7S7801C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7801C4;
extern VTBL_ENTRY _ZTI7S7801C4[];
extern  VTBL_ENTRY _ZTV7S7801C4[];
extern Class_Descriptor cd_S7801C3;
extern VTBL_ENTRY _ZTI7S7801C3[];
extern  VTBL_ENTRY _ZTV7S7801C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7801C3[];
extern Class_Descriptor cd_S7801C2;
extern VTBL_ENTRY _ZTI7S7801C2[];
extern  VTBL_ENTRY _ZTV7S7801C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7801C2[];
static Base_Class bases_S7801C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7801C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //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
    1, //immediately_derived
  0, 1},
  {&cd_S7801C3,    ABISELECT(24,20), //bcp->offset
    25, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7801C2,    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
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7801C1[];
extern void _ZN7S7801C1D1Ev();
extern void _ZN7S7801C1D0Ev();
extern void _ZN7S7801C42v4Ev();
extern void _ZN7S7801C42v5Ev();
extern void _ZN7S7801C42v6Ev();
extern void _ZN7S7801C42v7Ev();
extern void _ZN7S7801C42v8Ev();
extern void _ZN7S7801C23v12Ev();
extern void _ZN7S7801C23v13Ev();
extern void _ZN7S7801C23v14Ev();
extern void _ZN7S7801C23v15Ev();
extern void _ZN7S7801C23v16Ev();
extern void _ZN7S7801C12v1Ev();
extern void _ZN7S7801C12v2Ev();
extern void _ZN7S7801C12v3Ev();
extern void ABISELECT(_ZTv0_n24_N7S7801C1D1Ev,_ZTv0_n12_N7S7801C1D1Ev)();
extern void ABISELECT(_ZThn24_N7S7801C1D1Ev,_ZThn20_N7S7801C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7801C1D0Ev,_ZTv0_n12_N7S7801C1D0Ev)();
extern void ABISELECT(_ZThn24_N7S7801C1D0Ev,_ZThn20_N7S7801C1D0Ev)() __attribute__((weak));
extern void _ZN7S7801C42v4Ev();
extern void _ZN7S7801C42v5Ev();
extern void _ZN7S7801C42v6Ev();
extern void _ZN7S7801C42v7Ev();
extern void _ZN7S7801C42v8Ev();
extern void _ZN7S7801C32v9Ev();
extern void _ZN7S7801C33v10Ev();
extern void _ZN7S7801C33v11Ev();
static  VTBL_ENTRY vtc_S7801C1[] = {
  0,
  ABISELECT(24,20),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7801C1[0]),
  (VTBL_ENTRY)&_ZN7S7801C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7801C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7801C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7801C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7801C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7801C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7801C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7801C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7801C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7801C12v3Ev,
  0,
  0,
  0,
  ABISELECT(-24,-20),
  ABISELECT(-24,-20),
  ABISELECT(-24,-20),
  ABISELECT(-24,-20),
  ABISELECT(-24,-20),
  ABISELECT(-24,-20),
  ABISELECT(-24,-20),
  ABISELECT(-24,-20),
  (VTBL_ENTRY)&(_ZTI7S7801C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7801C1D1Ev,_ZTv0_n12_N7S7801C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7801C1D0Ev,_ZTv0_n12_N7S7801C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7801C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7801C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7801C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7801C33v11Ev,
};
extern VTBL_ENTRY _ZTV7S7801C1[];
extern void _ZN7S7801C2D1Ev();
extern void _ZN7S7801C2D0Ev();
extern void _ZN7S7801C42v4Ev();
extern void _ZN7S7801C42v5Ev();
extern void _ZN7S7801C42v6Ev();
extern void _ZN7S7801C42v7Ev();
extern void _ZN7S7801C42v8Ev();
extern void _ZN7S7801C23v12Ev();
extern void _ZN7S7801C23v13Ev();
extern void _ZN7S7801C23v14Ev();
extern void _ZN7S7801C23v15Ev();
extern void _ZN7S7801C23v16Ev();
static  VTBL_ENTRY _tg__ZTV7S7801C2__7S7801C1[] = {
  0,
  ABISELECT(24,20),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7801C2[0]),
  (VTBL_ENTRY)&_ZN7S7801C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7801C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7801C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7801C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7801C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7801C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7801C23v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7801C2D1Ev,_ZTv0_n12_N7S7801C2D1Ev)();
extern void ABISELECT(_ZThn24_N7S7801C2D1Ev,_ZThn20_N7S7801C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7801C2D0Ev,_ZTv0_n12_N7S7801C2D0Ev)();
extern void ABISELECT(_ZThn24_N7S7801C2D0Ev,_ZThn20_N7S7801C2D0Ev)() __attribute__((weak));
extern void _ZN7S7801C42v4Ev();
extern void _ZN7S7801C42v5Ev();
extern void _ZN7S7801C42v6Ev();
extern void _ZN7S7801C42v7Ev();
extern void _ZN7S7801C42v8Ev();
extern void _ZN7S7801C32v9Ev();
extern void _ZN7S7801C33v10Ev();
extern void _ZN7S7801C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7801C3__7S7801C2__7S7801C1[] = {
  0,
  0,
  0,
  ABISELECT(-24,-20),
  ABISELECT(-24,-20),
  ABISELECT(-24,-20),
  ABISELECT(-24,-20),
  ABISELECT(-24,-20),
  ABISELECT(-24,-20),
  ABISELECT(-24,-20),
  ABISELECT(-24,-20),
  (VTBL_ENTRY)&(_ZTI7S7801C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7801C2D1Ev,_ZTv0_n12_N7S7801C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7801C2D0Ev,_ZTv0_n12_N7S7801C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7801C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7801C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7801C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7801C33v11Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7801C3D1Ev,_ZTv0_n12_N7S7801C3D1Ev)();
extern void _ZN7S7801C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7801C3D0Ev,_ZTv0_n12_N7S7801C3D0Ev)();
extern void _ZN7S7801C3D0Ev() __attribute__((weak));
extern void _ZN7S7801C42v4Ev();
extern void _ZN7S7801C42v5Ev();
extern void _ZN7S7801C42v6Ev();
extern void _ZN7S7801C42v7Ev();
extern void _ZN7S7801C42v8Ev();
extern void _ZN7S7801C32v9Ev();
extern void _ZN7S7801C33v10Ev();
extern void _ZN7S7801C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7801C3__7S7801C1[] = {
  ABISELECT(-24,-20),
  ABISELECT(-24,-20),
  ABISELECT(-24,-20),
  ABISELECT(-24,-20),
  ABISELECT(-24,-20),
  ABISELECT(-24,-20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7801C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7801C3D1Ev,_ZTv0_n12_N7S7801C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7801C3D0Ev,_ZTv0_n12_N7S7801C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7801C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7801C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7801C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7801C33v11Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7801C3D1Ev,_ZTv0_n12_N7S7801C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7801C3D0Ev,_ZTv0_n12_N7S7801C3D0Ev)();
extern void _ZN7S7801C42v4Ev();
extern void _ZN7S7801C42v5Ev();
extern void _ZN7S7801C42v6Ev();
extern void _ZN7S7801C42v7Ev();
extern void _ZN7S7801C42v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7801C4__7S7801C3__7S7801C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(24,20),
  ABISELECT(24,20),
  (VTBL_ENTRY)&(_ZTI7S7801C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7801C3D1Ev,_ZTv0_n12_N7S7801C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7801C3D0Ev,_ZTv0_n12_N7S7801C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7801C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v8Ev,
};
static  VTT_ENTRY vtt_S7801C1[] = {
  {&(_ZTV7S7801C1[10]),  10,47},
  {&(_tg__ZTV7S7801C2__7S7801C1[10]),  10,22},
  {&(_tg__ZTV7S7801C3__7S7801C2__7S7801C1[12]),  12,22},
  {&(_tg__ZTV7S7801C2__7S7801C1[10]),  10,22},
  {&(_ZTV7S7801C1[37]),  37,47},
  {&(_ZTV7S7801C1[10]),  10,47},
  {&(_tg__ZTV7S7801C3__7S7801C1[9]),  9,19},
  {&(_tg__ZTV7S7801C4__7S7801C3__7S7801C1[8]),  8,15},
};
extern VTBL_ENTRY _ZTI7S7801C1[];
extern  VTBL_ENTRY _ZTV7S7801C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7801C1[];
static VTBL_ENTRY alt_thunk_names38[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7801C3D0Ev,_ZTv0_n12_N7S7801C3D0Ev), // 
  (VTBL_ENTRY)_ZN7S7801C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7801C3D1Ev,_ZTv0_n12_N7S7801C3D1Ev), // 
  (VTBL_ENTRY)_ZN7S7801C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7801C2D0Ev,_ZTv0_n12_N7S7801C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7801C2D0Ev,_ZThn20_N7S7801C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7801C2D1Ev,_ZTv0_n12_N7S7801C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7801C2D1Ev,_ZThn20_N7S7801C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7801C1D0Ev,_ZTv0_n12_N7S7801C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7801C1D0Ev,_ZThn20_N7S7801C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7801C1D1Ev,_ZTv0_n12_N7S7801C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7801C1D1Ev,_ZThn20_N7S7801C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7801C1 = {  "S7801C1", // class name
  bases_S7801C1, 3,
  &(vtc_S7801C1[0]), // expected_vtbl_contents
  &(vtt_S7801C1[0]), // expected_vtt_contents
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI7S7801C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7801C1),47, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7801C1),8, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names38,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21835C1  {
  void *s21835c1f0[3];
  ::S21535C2 s21835c1f1;
  ::S2185C10_nt s21835c1f2;
  ::S21811C16 s21835c1f3;
  void  mf21835c1(); // _ZN8S21835C19mf21835c1Ev
  virtual  ~S21835C1(); // _ZN8S21835C1D1Ev
  S21835C1(); // tgen
};
//SIG(1 S21835C1) C1{ vd m Fp[3] FC2{ vd m Fc[3] Fs[2] Fi[4] FC3{ m FC4{ m FL[2]}}} FC5{ m Fp Fi FC6{ m}} FC7{ m Fp Fi[2] FC8{ m}}}


void  S21835C1 ::mf21835c1(){}
 S21835C1 ::~S21835C1(){ note_dtor("S21835C1", this);}
S21835C1 ::S21835C1(){ note_ctor("S21835C1", this);} // tgen

static void Test_S21835C1()
{
  extern Class_Descriptor cd_S21835C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,23)];
    init_test(&cd_S21835C1, buf);
    S21835C1 *dp, &lv = *(dp=new (buf) S21835C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,88), "sizeof(S21835C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21835C1)");
    check_field_offset(lv, s21835c1f0, ABISELECT(8,4), "S21835C1.s21835c1f0");
    check_field_offset(lv, s21835c1f1, ABISELECT(32,16), "S21835C1.s21835c1f1");
    check_field_offset(lv, s21835c1f2, ABISELECT(80,60), "S21835C1.s21835c1f2");
    check_field_offset(lv, s21835c1f3, ABISELECT(96,72), "S21835C1.s21835c1f3");
    test_class_info(&lv, &cd_S21835C1);
    dp->~S21835C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21835C1(Test_S21835C1, "S21835C1", ABISELECT(120,88));

#else // __cplusplus

extern void _ZN8S21835C1C1Ev();
extern void _ZN8S21835C1D1Ev();
Name_Map name_map_S21835C1[] = {
  NSPAIR(_ZN8S21835C1C1Ev),
  NSPAIR(_ZN8S21835C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21835C1[];
extern void _ZN8S21835C1D1Ev();
extern void _ZN8S21835C1D0Ev();
static  VTBL_ENTRY vtc_S21835C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21835C1[0]),
  (VTBL_ENTRY)&_ZN8S21835C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21835C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21835C1[];
extern  VTBL_ENTRY _ZTV8S21835C1[];
Class_Descriptor cd_S21835C1 = {  "S21835C1", // class name
  0,0,//no base classes
  &(vtc_S21835C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,88), // object size
  NSPAIRA(_ZTI8S21835C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21835C1),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  S3566C5  {
  virtual  ~S3566C5(); // _ZN7S3566C5D1Ev
  virtual void  v6(); // _ZN7S3566C52v6Ev
  virtual void  v7(); // _ZN7S3566C52v7Ev
  virtual void  v8(); // _ZN7S3566C52v8Ev
  virtual void  v9(); // _ZN7S3566C52v9Ev
  virtual void  v10(); // _ZN7S3566C53v10Ev
  S3566C5(); // tgen
};
//SIG(-1 S3566C5) C1{ vd v1 v2 v3 v4 v5}


 S3566C5 ::~S3566C5(){ note_dtor("S3566C5", this);}
void  S3566C5 ::v6(){vfunc_called(this, "_ZN7S3566C52v6Ev");}
void  S3566C5 ::v7(){vfunc_called(this, "_ZN7S3566C52v7Ev");}
void  S3566C5 ::v8(){vfunc_called(this, "_ZN7S3566C52v8Ev");}
void  S3566C5 ::v9(){vfunc_called(this, "_ZN7S3566C52v9Ev");}
void  S3566C5 ::v10(){vfunc_called(this, "_ZN7S3566C53v10Ev");}
S3566C5 ::S3566C5(){ note_ctor("S3566C5", this);} // tgen

static void Test_S3566C5()
{
  extern Class_Descriptor cd_S3566C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3566C5, buf);
    S3566C5 *dp, &lv = *(dp=new (buf) S3566C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3566C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3566C5)");
    test_class_info(&lv, &cd_S3566C5);
    dp->~S3566C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3566C5(Test_S3566C5, "S3566C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3566C5C1Ev();
extern void _ZN7S3566C5D1Ev();
Name_Map name_map_S3566C5[] = {
  NSPAIR(_ZN7S3566C5C1Ev),
  NSPAIR(_ZN7S3566C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3566C5[];
extern void _ZN7S3566C5D1Ev();
extern void _ZN7S3566C5D0Ev();
extern void _ZN7S3566C52v6Ev();
extern void _ZN7S3566C52v7Ev();
extern void _ZN7S3566C52v8Ev();
extern void _ZN7S3566C52v9Ev();
extern void _ZN7S3566C53v10Ev();
static  VTBL_ENTRY vtc_S3566C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3566C5[0]),
  (VTBL_ENTRY)&_ZN7S3566C5D1Ev,
  (VTBL_ENTRY)&_ZN7S3566C5D0Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3566C53v10Ev,
};
extern VTBL_ENTRY _ZTI7S3566C5[];
extern  VTBL_ENTRY _ZTV7S3566C5[];
Class_Descriptor cd_S3566C5 = {  "S3566C5", // class name
  0,0,//no base classes
  &(vtc_S3566C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3566C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3566C5),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  S3566C4  : virtual S3566C5 {
  void *s3566c4f0;
  ::S3566C5 s3566c4f1;
  void *s3566c4f2;
  virtual  ~S3566C4(); // _ZN7S3566C4D2Ev
  virtual void  v11(); // _ZN7S3566C43v11Ev
  virtual void  v12(); // _ZN7S3566C43v12Ev
  virtual void  v13(); // _ZN7S3566C43v13Ev
  S3566C4(); // tgen
};
//SIG(-1 S3566C4) C1{ VBC2{ vd v4 v5 v6 v7 v8} vd v1 v2 v3 Fp FC2 Fp}


 S3566C4 ::~S3566C4(){ note_dtor("S3566C4", this);}
void  S3566C4 ::v11(){vfunc_called(this, "_ZN7S3566C43v11Ev");}
void  S3566C4 ::v12(){vfunc_called(this, "_ZN7S3566C43v12Ev");}
void  S3566C4 ::v13(){vfunc_called(this, "_ZN7S3566C43v13Ev");}
S3566C4 ::S3566C4(){ note_ctor("S3566C4", this);} // tgen

static void Test_S3566C4()
{
  extern Class_Descriptor cd_S3566C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S3566C4, buf);
    S3566C4 *dp, &lv = *(dp=new (buf) S3566C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S3566C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3566C4)");
    check_base_class_offset(lv, (S3566C5*), 0, "S3566C4");
    check_field_offset(lv, s3566c4f0, ABISELECT(8,4), "S3566C4.s3566c4f0");
    check_field_offset(lv, s3566c4f1, ABISELECT(16,8), "S3566C4.s3566c4f1");
    check_field_offset(lv, s3566c4f2, ABISELECT(24,12), "S3566C4.s3566c4f2");
    test_class_info(&lv, &cd_S3566C4);
    dp->~S3566C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3566C4(Test_S3566C4, "S3566C4", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S3566C4C1Ev();
extern void _ZN7S3566C4D2Ev();
Name_Map name_map_S3566C4[] = {
  NSPAIR(_ZN7S3566C4C1Ev),
  NSPAIR(_ZN7S3566C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3566C5;
extern VTBL_ENTRY _ZTI7S3566C5[];
extern  VTBL_ENTRY _ZTV7S3566C5[];
static Base_Class bases_S3566C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3566C5,    0, //bcp->offset
    -1, //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 _ZTI7S3566C4[];
extern void _ZN7S3566C4D1Ev();
extern void _ZN7S3566C4D0Ev();
extern void _ZN7S3566C52v6Ev();
extern void _ZN7S3566C52v7Ev();
extern void _ZN7S3566C52v8Ev();
extern void _ZN7S3566C52v9Ev();
extern void _ZN7S3566C53v10Ev();
extern void _ZN7S3566C43v11Ev();
extern void _ZN7S3566C43v12Ev();
extern void _ZN7S3566C43v13Ev();
static  VTBL_ENTRY vtc_S3566C4[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3566C4[0]),
  (VTBL_ENTRY)&_ZN7S3566C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3566C4D0Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3566C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3566C43v11Ev,
  (VTBL_ENTRY)&_ZN7S3566C43v12Ev,
  (VTBL_ENTRY)&_ZN7S3566C43v13Ev,
};
extern VTBL_ENTRY _ZTV7S3566C4[];
static  VTT_ENTRY vtt_S3566C4[] = {
  {&(_ZTV7S3566C4[9]),  9,19},
  {&(_ZTV7S3566C4[9]),  9,19},
};
extern VTBL_ENTRY _ZTI7S3566C4[];
extern  VTBL_ENTRY _ZTV7S3566C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3566C4[];
Class_Descriptor cd_S3566C4 = {  "S3566C4", // class name
  bases_S3566C4, 1,
  &(vtc_S3566C4[0]), // expected_vtbl_contents
  &(vtt_S3566C4[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S3566C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S3566C4),19, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3566C4),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  S3566C3  : virtual S3566C4 {
  virtual  ~S3566C3(); // _ZN7S3566C3D2Ev
  virtual void  v14(); // _ZN7S3566C33v14Ev
  S3566C3(); // tgen
};
//SIG(-1 S3566C3) C1{ VBC2{ VBC3{ vd v2 v3 v4 v5 v6} vd v7 v8 v9 Fp FC3 Fp} vd v1}


 S3566C3 ::~S3566C3(){ note_dtor("S3566C3", this);}
void  S3566C3 ::v14(){vfunc_called(this, "_ZN7S3566C33v14Ev");}
S3566C3 ::S3566C3(){ note_ctor("S3566C3", this);} // tgen

static void Test_S3566C3()
{
  extern Class_Descriptor cd_S3566C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S3566C3, buf);
    S3566C3 *dp, &lv = *(dp=new (buf) S3566C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S3566C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3566C3)");
    check_base_class_offset(lv, (S3566C5*)(S3566C4*), 0, "S3566C3");
    check_base_class_offset(lv, (S3566C4*), ABISELECT(8,4), "S3566C3");
    test_class_info(&lv, &cd_S3566C3);
    dp->~S3566C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3566C3(Test_S3566C3, "S3566C3", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S3566C3C1Ev();
extern void _ZN7S3566C3D2Ev();
Name_Map name_map_S3566C3[] = {
  NSPAIR(_ZN7S3566C3C1Ev),
  NSPAIR(_ZN7S3566C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3566C5;
extern VTBL_ENTRY _ZTI7S3566C5[];
extern  VTBL_ENTRY _ZTV7S3566C5[];
extern Class_Descriptor cd_S3566C4;
extern VTBL_ENTRY _ZTI7S3566C4[];
extern  VTBL_ENTRY _ZTV7S3566C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3566C4[];
static Base_Class bases_S3566C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3566C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //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
    1, //immediately_derived
  0, 1},
  {&cd_S3566C4,    ABISELECT(8,4), //bcp->offset
    18, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3566C3[];
extern void _ZN7S3566C3D1Ev();
extern void _ZN7S3566C3D0Ev();
extern void _ZN7S3566C52v6Ev();
extern void _ZN7S3566C52v7Ev();
extern void _ZN7S3566C52v8Ev();
extern void _ZN7S3566C52v9Ev();
extern void _ZN7S3566C53v10Ev();
extern void _ZN7S3566C33v14Ev();
extern void ABISELECT(_ZTv0_n24_N7S3566C3D1Ev,_ZTv0_n12_N7S3566C3D1Ev)();
extern void ABISELECT(_ZThn8_N7S3566C3D1Ev,_ZThn4_N7S3566C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3566C3D0Ev,_ZTv0_n12_N7S3566C3D0Ev)();
extern void ABISELECT(_ZThn8_N7S3566C3D0Ev,_ZThn4_N7S3566C3D0Ev)() __attribute__((weak));
extern void _ZN7S3566C52v6Ev();
extern void _ZN7S3566C52v7Ev();
extern void _ZN7S3566C52v8Ev();
extern void _ZN7S3566C52v9Ev();
extern void _ZN7S3566C53v10Ev();
extern void _ZN7S3566C43v11Ev();
extern void _ZN7S3566C43v12Ev();
extern void _ZN7S3566C43v13Ev();
static  VTBL_ENTRY vtc_S3566C3[] = {
  0,
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3566C3[0]),
  (VTBL_ENTRY)&_ZN7S3566C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3566C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3566C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3566C33v14Ev,
  0,
  0,
  0,
  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)&(_ZTI7S3566C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C3D1Ev,_ZTv0_n12_N7S3566C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C3D0Ev,_ZTv0_n12_N7S3566C3D0Ev),
  (VTBL_ENTRY)&_ZN7S3566C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3566C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3566C43v11Ev,
  (VTBL_ENTRY)&_ZN7S3566C43v12Ev,
  (VTBL_ENTRY)&_ZN7S3566C43v13Ev,
};
extern VTBL_ENTRY _ZTV7S3566C3[];
extern void ABISELECT(_ZTv0_n24_N7S3566C4D1Ev,_ZTv0_n12_N7S3566C4D1Ev)();
extern void _ZN7S3566C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3566C4D0Ev,_ZTv0_n12_N7S3566C4D0Ev)();
extern void _ZN7S3566C4D0Ev() __attribute__((weak));
extern void _ZN7S3566C52v6Ev();
extern void _ZN7S3566C52v7Ev();
extern void _ZN7S3566C52v8Ev();
extern void _ZN7S3566C52v9Ev();
extern void _ZN7S3566C53v10Ev();
extern void _ZN7S3566C43v11Ev();
extern void _ZN7S3566C43v12Ev();
extern void _ZN7S3566C43v13Ev();
static  VTBL_ENTRY _tg__ZTV7S3566C4__7S3566C3[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3566C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C4D1Ev,_ZTv0_n12_N7S3566C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C4D0Ev,_ZTv0_n12_N7S3566C4D0Ev),
  (VTBL_ENTRY)&_ZN7S3566C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3566C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3566C43v11Ev,
  (VTBL_ENTRY)&_ZN7S3566C43v12Ev,
  (VTBL_ENTRY)&_ZN7S3566C43v13Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3566C4D1Ev,_ZTv0_n12_N7S3566C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3566C4D0Ev,_ZTv0_n12_N7S3566C4D0Ev)();
extern void _ZN7S3566C52v6Ev();
extern void _ZN7S3566C52v7Ev();
extern void _ZN7S3566C52v8Ev();
extern void _ZN7S3566C52v9Ev();
extern void _ZN7S3566C53v10Ev();
static  VTBL_ENTRY _tg__ZTV7S3566C5__7S3566C4__7S3566C3[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S3566C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C4D1Ev,_ZTv0_n12_N7S3566C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C4D0Ev,_ZTv0_n12_N7S3566C4D0Ev),
  (VTBL_ENTRY)&_ZN7S3566C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3566C53v10Ev,
};
static  VTT_ENTRY vtt_S3566C3[] = {
  {&(_ZTV7S3566C3[10]),  10,40},
  {&(_ZTV7S3566C3[30]),  30,40},
  {&(_ZTV7S3566C3[10]),  10,40},
  {&(_tg__ZTV7S3566C4__7S3566C3[9]),  9,19},
  {&(_tg__ZTV7S3566C5__7S3566C4__7S3566C3[8]),  8,15},
};
extern VTBL_ENTRY _ZTI7S3566C3[];
extern  VTBL_ENTRY _ZTV7S3566C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3566C3[];
static VTBL_ENTRY alt_thunk_names39[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3566C4D0Ev,_ZTv0_n12_N7S3566C4D0Ev), // 
  (VTBL_ENTRY)_ZN7S3566C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3566C4D1Ev,_ZTv0_n12_N7S3566C4D1Ev), // 
  (VTBL_ENTRY)_ZN7S3566C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3566C3D0Ev,_ZTv0_n12_N7S3566C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3566C3D0Ev,_ZThn4_N7S3566C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3566C3D1Ev,_ZTv0_n12_N7S3566C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3566C3D1Ev,_ZThn4_N7S3566C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3566C3 = {  "S3566C3", // class name
  bases_S3566C3, 2,
  &(vtc_S3566C3[0]), // expected_vtbl_contents
  &(vtt_S3566C3[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S3566C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S3566C3),40, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3566C3),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names39,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3566C2  : S3566C3 {
  virtual void  v15(); // _ZN7S3566C23v15Ev
  ~S3566C2(); // tgen
  S3566C2(); // tgen
};
//SIG(-1 S3566C2) C1{ BC2{ VBC3{ VBC4{ vd v2 v3 v4 v5 v6} vd v7 v8 v9 Fp FC4 Fp} vd v10} v1}


void  S3566C2 ::v15(){vfunc_called(this, "_ZN7S3566C23v15Ev");}
S3566C2 ::~S3566C2(){ note_dtor("S3566C2", this);} // tgen
S3566C2 ::S3566C2(){ note_ctor("S3566C2", this);} // tgen

static void Test_S3566C2()
{
  extern Class_Descriptor cd_S3566C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S3566C2, buf);
    S3566C2 *dp, &lv = *(dp=new (buf) S3566C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S3566C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3566C2)");
    check_base_class_offset(lv, (S3566C5*)(S3566C4*), 0, "S3566C2");
    check_base_class_offset(lv, (S3566C4*)(S3566C3*), ABISELECT(8,4), "S3566C2");
    check_base_class_offset(lv, (S3566C3*), 0, "S3566C2");
    test_class_info(&lv, &cd_S3566C2);
    dp->~S3566C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3566C2(Test_S3566C2, "S3566C2", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S3566C2C1Ev();
extern void _ZN7S3566C2D1Ev();
Name_Map name_map_S3566C2[] = {
  NSPAIR(_ZN7S3566C2C1Ev),
  NSPAIR(_ZN7S3566C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3566C5;
extern VTBL_ENTRY _ZTI7S3566C5[];
extern  VTBL_ENTRY _ZTV7S3566C5[];
extern Class_Descriptor cd_S3566C4;
extern VTBL_ENTRY _ZTI7S3566C4[];
extern  VTBL_ENTRY _ZTV7S3566C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3566C4[];
extern Class_Descriptor cd_S3566C3;
extern VTBL_ENTRY _ZTI7S3566C3[];
extern  VTBL_ENTRY _ZTV7S3566C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3566C3[];
static Base_Class bases_S3566C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3566C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //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
    1, //immediately_derived
  0, 1},
  {&cd_S3566C4,    ABISELECT(8,4), //bcp->offset
    19, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S3566C3,    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
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3566C2[];
extern void _ZN7S3566C2D1Ev();
extern void _ZN7S3566C2D0Ev();
extern void _ZN7S3566C52v6Ev();
extern void _ZN7S3566C52v7Ev();
extern void _ZN7S3566C52v8Ev();
extern void _ZN7S3566C52v9Ev();
extern void _ZN7S3566C53v10Ev();
extern void _ZN7S3566C33v14Ev();
extern void _ZN7S3566C23v15Ev();
extern void ABISELECT(_ZTv0_n24_N7S3566C2D1Ev,_ZTv0_n12_N7S3566C2D1Ev)();
extern void ABISELECT(_ZThn8_N7S3566C2D1Ev,_ZThn4_N7S3566C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3566C2D0Ev,_ZTv0_n12_N7S3566C2D0Ev)();
extern void ABISELECT(_ZThn8_N7S3566C2D0Ev,_ZThn4_N7S3566C2D0Ev)() __attribute__((weak));
extern void _ZN7S3566C52v6Ev();
extern void _ZN7S3566C52v7Ev();
extern void _ZN7S3566C52v8Ev();
extern void _ZN7S3566C52v9Ev();
extern void _ZN7S3566C53v10Ev();
extern void _ZN7S3566C43v11Ev();
extern void _ZN7S3566C43v12Ev();
extern void _ZN7S3566C43v13Ev();
static  VTBL_ENTRY vtc_S3566C2[] = {
  0,
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3566C2[0]),
  (VTBL_ENTRY)&_ZN7S3566C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3566C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3566C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3566C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3566C23v15Ev,
  0,
  0,
  0,
  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)&(_ZTI7S3566C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C2D1Ev,_ZTv0_n12_N7S3566C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C2D0Ev,_ZTv0_n12_N7S3566C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3566C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3566C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3566C43v11Ev,
  (VTBL_ENTRY)&_ZN7S3566C43v12Ev,
  (VTBL_ENTRY)&_ZN7S3566C43v13Ev,
};
extern VTBL_ENTRY _ZTV7S3566C2[];
extern void _ZN7S3566C3D1Ev();
extern void _ZN7S3566C3D0Ev();
extern void _ZN7S3566C52v6Ev();
extern void _ZN7S3566C52v7Ev();
extern void _ZN7S3566C52v8Ev();
extern void _ZN7S3566C52v9Ev();
extern void _ZN7S3566C53v10Ev();
extern void _ZN7S3566C33v14Ev();
static  VTBL_ENTRY _tg__ZTV7S3566C3__7S3566C2[] = {
  0,
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3566C3[0]),
  (VTBL_ENTRY)&_ZN7S3566C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3566C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3566C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3566C33v14Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3566C3D1Ev,_ZTv0_n12_N7S3566C3D1Ev)();
extern void ABISELECT(_ZThn8_N7S3566C3D1Ev,_ZThn4_N7S3566C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3566C3D0Ev,_ZTv0_n12_N7S3566C3D0Ev)();
extern void ABISELECT(_ZThn8_N7S3566C3D0Ev,_ZThn4_N7S3566C3D0Ev)() __attribute__((weak));
extern void _ZN7S3566C52v6Ev();
extern void _ZN7S3566C52v7Ev();
extern void _ZN7S3566C52v8Ev();
extern void _ZN7S3566C52v9Ev();
extern void _ZN7S3566C53v10Ev();
extern void _ZN7S3566C43v11Ev();
extern void _ZN7S3566C43v12Ev();
extern void _ZN7S3566C43v13Ev();
static  VTBL_ENTRY _tg__ZTV7S3566C4__7S3566C3__7S3566C2[] = {
  0,
  0,
  0,
  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)&(_ZTI7S3566C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C3D1Ev,_ZTv0_n12_N7S3566C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C3D0Ev,_ZTv0_n12_N7S3566C3D0Ev),
  (VTBL_ENTRY)&_ZN7S3566C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3566C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3566C43v11Ev,
  (VTBL_ENTRY)&_ZN7S3566C43v12Ev,
  (VTBL_ENTRY)&_ZN7S3566C43v13Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3566C4D1Ev,_ZTv0_n12_N7S3566C4D1Ev)();
extern void _ZN7S3566C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3566C4D0Ev,_ZTv0_n12_N7S3566C4D0Ev)();
extern void _ZN7S3566C4D0Ev() __attribute__((weak));
extern void _ZN7S3566C52v6Ev();
extern void _ZN7S3566C52v7Ev();
extern void _ZN7S3566C52v8Ev();
extern void _ZN7S3566C52v9Ev();
extern void _ZN7S3566C53v10Ev();
extern void _ZN7S3566C43v11Ev();
extern void _ZN7S3566C43v12Ev();
extern void _ZN7S3566C43v13Ev();
static  VTBL_ENTRY _tg__ZTV7S3566C4__7S3566C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3566C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C4D1Ev,_ZTv0_n12_N7S3566C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C4D0Ev,_ZTv0_n12_N7S3566C4D0Ev),
  (VTBL_ENTRY)&_ZN7S3566C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3566C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3566C43v11Ev,
  (VTBL_ENTRY)&_ZN7S3566C43v12Ev,
  (VTBL_ENTRY)&_ZN7S3566C43v13Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3566C4D1Ev,_ZTv0_n12_N7S3566C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3566C4D0Ev,_ZTv0_n12_N7S3566C4D0Ev)();
extern void _ZN7S3566C52v6Ev();
extern void _ZN7S3566C52v7Ev();
extern void _ZN7S3566C52v8Ev();
extern void _ZN7S3566C52v9Ev();
extern void _ZN7S3566C53v10Ev();
static  VTBL_ENTRY _tg__ZTV7S3566C5__7S3566C4__7S3566C2[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S3566C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C4D1Ev,_ZTv0_n12_N7S3566C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C4D0Ev,_ZTv0_n12_N7S3566C4D0Ev),
  (VTBL_ENTRY)&_ZN7S3566C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3566C53v10Ev,
};
static  VTT_ENTRY vtt_S3566C2[] = {
  {&(_ZTV7S3566C2[10]),  10,41},
  {&(_tg__ZTV7S3566C3__7S3566C2[10]),  10,18},
  {&(_tg__ZTV7S3566C4__7S3566C3__7S3566C2[12]),  12,22},
  {&(_tg__ZTV7S3566C3__7S3566C2[10]),  10,18},
  {&(_ZTV7S3566C2[31]),  31,41},
  {&(_ZTV7S3566C2[10]),  10,41},
  {&(_tg__ZTV7S3566C4__7S3566C2[9]),  9,19},
  {&(_tg__ZTV7S3566C5__7S3566C4__7S3566C2[8]),  8,15},
};
extern VTBL_ENTRY _ZTI7S3566C2[];
extern  VTBL_ENTRY _ZTV7S3566C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3566C2[];
static VTBL_ENTRY alt_thunk_names40[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3566C4D0Ev,_ZTv0_n12_N7S3566C4D0Ev), // 
  (VTBL_ENTRY)_ZN7S3566C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3566C4D1Ev,_ZTv0_n12_N7S3566C4D1Ev), // 
  (VTBL_ENTRY)_ZN7S3566C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3566C3D0Ev,_ZTv0_n12_N7S3566C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3566C3D0Ev,_ZThn4_N7S3566C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3566C3D1Ev,_ZTv0_n12_N7S3566C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3566C3D1Ev,_ZThn4_N7S3566C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3566C2D0Ev,_ZTv0_n12_N7S3566C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3566C2D0Ev,_ZThn4_N7S3566C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3566C2D1Ev,_ZTv0_n12_N7S3566C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3566C2D1Ev,_ZThn4_N7S3566C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3566C2 = {  "S3566C2", // class name
  bases_S3566C2, 3,
  &(vtc_S3566C2[0]), // expected_vtbl_contents
  &(vtt_S3566C2[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S3566C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3566C2),41, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3566C2),8, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names40,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3566C1  : S3566C2 , virtual S3566C3 {
  __tsi64 s3566c1f0;
  virtual  ~S3566C1(); // _ZN7S3566C1D2Ev
  virtual void  v1(); // _ZN7S3566C12v1Ev
  virtual void  v2(); // _ZN7S3566C12v2Ev
  virtual void  v3(); // _ZN7S3566C12v3Ev
  virtual void  v4(); // _ZN7S3566C12v4Ev
  virtual void  v5(); // _ZN7S3566C12v5Ev
  S3566C1(); // tgen
};
//SIG(1 S3566C1) C1{ BC2{ BC3{ VBC4{ VBC5{ vd v6 v7 v8 v9 v10} vd v11 v12 v13 Fp FC5 Fp} vd v14} v15} VBC3 vd v1 v2 v3 v4 v5 FL}


 S3566C1 ::~S3566C1(){ note_dtor("S3566C1", this);}
void  S3566C1 ::v1(){vfunc_called(this, "_ZN7S3566C12v1Ev");}
void  S3566C1 ::v2(){vfunc_called(this, "_ZN7S3566C12v2Ev");}
void  S3566C1 ::v3(){vfunc_called(this, "_ZN7S3566C12v3Ev");}
void  S3566C1 ::v4(){vfunc_called(this, "_ZN7S3566C12v4Ev");}
void  S3566C1 ::v5(){vfunc_called(this, "_ZN7S3566C12v5Ev");}
S3566C1 ::S3566C1(){ note_ctor("S3566C1", this);} // tgen

static void Test_S3566C1()
{
  extern Class_Descriptor cd_S3566C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,9)];
    init_test(&cd_S3566C1, buf);
    S3566C1 *dp, &lv = *(dp=new (buf) S3566C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S3566C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3566C1)");
    check_base_class_offset(lv, (S3566C5*)(S3566C4*), 0, "S3566C1");
    check_base_class_offset(lv, (S3566C4*)(S3566C3*)(S3566C2*), ABISELECT(16,12), "S3566C1");
    /*is_ambiguous_... S3566C1::S3566C3 */ AMB_check_base_class_offset(lv, (S3566C4*)(S3566C3*), ABISELECT(16,12), "S3566C1");
    check_base_class_offset(lv, (S3566C3*)(S3566C2*), 0, "S3566C1");
    check_base_class_offset(lv, (S3566C2*), 0, "S3566C1");
    /*is_ambiguous_... S3566C1::S3566C3 */ AMB_check_base_class_offset(lv, (S3566C3*), ABISELECT(48,28), "S3566C1");
    check_field_offset(lv, s3566c1f0, ABISELECT(8,4), "S3566C1.s3566c1f0");
    test_class_info(&lv, &cd_S3566C1);
    dp->~S3566C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3566C1(Test_S3566C1, "S3566C1", ABISELECT(56,32));

#else // __cplusplus

extern void _ZN7S3566C1C1Ev();
extern void _ZN7S3566C1D2Ev();
Name_Map name_map_S3566C1[] = {
  NSPAIR(_ZN7S3566C1C1Ev),
  NSPAIR(_ZN7S3566C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3566C5;
extern VTBL_ENTRY _ZTI7S3566C5[];
extern  VTBL_ENTRY _ZTV7S3566C5[];
extern Class_Descriptor cd_S3566C4;
extern VTBL_ENTRY _ZTI7S3566C4[];
extern  VTBL_ENTRY _ZTV7S3566C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3566C4[];
extern Class_Descriptor cd_S3566C3;
extern VTBL_ENTRY _ZTI7S3566C3[];
extern  VTBL_ENTRY _ZTV7S3566C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3566C3[];
extern Class_Descriptor cd_S3566C2;
extern VTBL_ENTRY _ZTI7S3566C2[];
extern  VTBL_ENTRY _ZTV7S3566C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3566C2[];
extern Class_Descriptor cd_S3566C3;
extern VTBL_ENTRY _ZTI7S3566C3[];
extern  VTBL_ENTRY _ZTV7S3566C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3566C3[];
static Base_Class bases_S3566C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3566C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //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
    1, //immediately_derived
  0, 1},
  {&cd_S3566C4,    ABISELECT(16,12), //bcp->offset
    25, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S3566C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //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
    3, //immediately_derived
  0, 0},
  {&cd_S3566C2,    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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3566C3,    ABISELECT(48,28), //bcp->offset
    47, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3566C1[];
extern void _ZN7S3566C1D1Ev();
extern void _ZN7S3566C1D0Ev();
extern void _ZN7S3566C52v6Ev();
extern void _ZN7S3566C52v7Ev();
extern void _ZN7S3566C52v8Ev();
extern void _ZN7S3566C52v9Ev();
extern void _ZN7S3566C53v10Ev();
extern void _ZN7S3566C33v14Ev();
extern void _ZN7S3566C23v15Ev();
extern void _ZN7S3566C12v1Ev();
extern void _ZN7S3566C12v2Ev();
extern void _ZN7S3566C12v3Ev();
extern void _ZN7S3566C12v4Ev();
extern void _ZN7S3566C12v5Ev();
extern void ABISELECT(_ZTv0_n24_N7S3566C1D1Ev,_ZTv0_n12_N7S3566C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S3566C1D1Ev,_ZThn12_N7S3566C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3566C1D0Ev,_ZTv0_n12_N7S3566C1D0Ev)();
extern void ABISELECT(_ZThn16_N7S3566C1D0Ev,_ZThn12_N7S3566C1D0Ev)() __attribute__((weak));
extern void _ZN7S3566C52v6Ev();
extern void _ZN7S3566C52v7Ev();
extern void _ZN7S3566C52v8Ev();
extern void _ZN7S3566C52v9Ev();
extern void _ZN7S3566C53v10Ev();
extern void _ZN7S3566C43v11Ev();
extern void _ZN7S3566C43v12Ev();
extern void _ZN7S3566C43v13Ev();
extern void ABISELECT(_ZTv0_n24_N7S3566C1D1Ev,_ZTv0_n12_N7S3566C1D1Ev)();
extern void ABISELECT(_ZThn48_N7S3566C1D1Ev,_ZThn28_N7S3566C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3566C1D0Ev,_ZTv0_n12_N7S3566C1D0Ev)();
extern void ABISELECT(_ZThn48_N7S3566C1D0Ev,_ZThn28_N7S3566C1D0Ev)() __attribute__((weak));
extern void _ZN7S3566C52v6Ev();
extern void _ZN7S3566C52v7Ev();
extern void _ZN7S3566C52v8Ev();
extern void _ZN7S3566C52v9Ev();
extern void _ZN7S3566C53v10Ev();
extern void _ZN7S3566C33v14Ev();
static  VTBL_ENTRY vtc_S3566C1[] = {
  ABISELECT(48,28),
  0,
  ABISELECT(16,12),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3566C1[0]),
  (VTBL_ENTRY)&_ZN7S3566C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3566C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3566C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3566C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3566C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3566C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3566C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3566C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3566C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3566C12v5Ev,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S3566C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C1D1Ev,_ZTv0_n12_N7S3566C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C1D0Ev,_ZTv0_n12_N7S3566C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3566C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3566C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3566C43v11Ev,
  (VTBL_ENTRY)&_ZN7S3566C43v12Ev,
  (VTBL_ENTRY)&_ZN7S3566C43v13Ev,
  0,
  ABISELECT(-48,-28),
  ABISELECT(-32,-16),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S3566C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C1D1Ev,_ZTv0_n12_N7S3566C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C1D0Ev,_ZTv0_n12_N7S3566C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3566C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3566C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3566C33v14Ev,
};
extern VTBL_ENTRY _ZTV7S3566C1[];
extern void _ZN7S3566C2D1Ev();
extern void _ZN7S3566C2D0Ev();
extern void _ZN7S3566C52v6Ev();
extern void _ZN7S3566C52v7Ev();
extern void _ZN7S3566C52v8Ev();
extern void _ZN7S3566C52v9Ev();
extern void _ZN7S3566C53v10Ev();
extern void _ZN7S3566C33v14Ev();
extern void _ZN7S3566C23v15Ev();
static  VTBL_ENTRY _tg__ZTV7S3566C2__7S3566C1[] = {
  0,
  ABISELECT(16,12),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3566C2[0]),
  (VTBL_ENTRY)&_ZN7S3566C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3566C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3566C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3566C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3566C23v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3566C3D1Ev,_ZTv0_n12_N7S3566C3D1Ev)();
extern void _ZN7S3566C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3566C3D0Ev,_ZTv0_n12_N7S3566C3D0Ev)();
extern void _ZN7S3566C3D0Ev() __attribute__((weak));
extern void _ZN7S3566C52v6Ev();
extern void _ZN7S3566C52v7Ev();
extern void _ZN7S3566C52v8Ev();
extern void _ZN7S3566C52v9Ev();
extern void _ZN7S3566C53v10Ev();
extern void _ZN7S3566C33v14Ev();
static  VTBL_ENTRY _tg__ZTV7S3566C37S3566C2__7S3566C1[] = {
  0,
  ABISELECT(16,12),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3566C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C3D1Ev,_ZTv0_n12_N7S3566C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C3D0Ev,_ZTv0_n12_N7S3566C3D0Ev),
  (VTBL_ENTRY)&_ZN7S3566C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3566C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3566C33v14Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3566C3D1Ev,_ZTv0_n12_N7S3566C3D1Ev)();
extern void ABISELECT(_ZThn16_N7S3566C3D1Ev,_ZThn12_N7S3566C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3566C3D0Ev,_ZTv0_n12_N7S3566C3D0Ev)();
extern void ABISELECT(_ZThn16_N7S3566C3D0Ev,_ZThn12_N7S3566C3D0Ev)() __attribute__((weak));
extern void _ZN7S3566C52v6Ev();
extern void _ZN7S3566C52v7Ev();
extern void _ZN7S3566C52v8Ev();
extern void _ZN7S3566C52v9Ev();
extern void _ZN7S3566C53v10Ev();
extern void _ZN7S3566C43v11Ev();
extern void _ZN7S3566C43v12Ev();
extern void _ZN7S3566C43v13Ev();
static  VTBL_ENTRY _tg__ZTV7S3566C4__7S3566C37S3566C2__7S3566C1[] = {
  0,
  0,
  0,
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S3566C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C3D1Ev,_ZTv0_n12_N7S3566C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C3D0Ev,_ZTv0_n12_N7S3566C3D0Ev),
  (VTBL_ENTRY)&_ZN7S3566C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3566C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3566C43v11Ev,
  (VTBL_ENTRY)&_ZN7S3566C43v12Ev,
  (VTBL_ENTRY)&_ZN7S3566C43v13Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3566C2D1Ev,_ZTv0_n12_N7S3566C2D1Ev)();
extern void ABISELECT(_ZThn16_N7S3566C2D1Ev,_ZThn12_N7S3566C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3566C2D0Ev,_ZTv0_n12_N7S3566C2D0Ev)();
extern void ABISELECT(_ZThn16_N7S3566C2D0Ev,_ZThn12_N7S3566C2D0Ev)() __attribute__((weak));
extern void _ZN7S3566C52v6Ev();
extern void _ZN7S3566C52v7Ev();
extern void _ZN7S3566C52v8Ev();
extern void _ZN7S3566C52v9Ev();
extern void _ZN7S3566C53v10Ev();
extern void _ZN7S3566C43v11Ev();
extern void _ZN7S3566C43v12Ev();
extern void _ZN7S3566C43v13Ev();
static  VTBL_ENTRY _tg__ZTV7S3566C4__7S3566C2__7S3566C1[] = {
  0,
  0,
  0,
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S3566C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C2D1Ev,_ZTv0_n12_N7S3566C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C2D0Ev,_ZTv0_n12_N7S3566C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3566C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3566C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3566C43v11Ev,
  (VTBL_ENTRY)&_ZN7S3566C43v12Ev,
  (VTBL_ENTRY)&_ZN7S3566C43v13Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3566C4D1Ev,_ZTv0_n12_N7S3566C4D1Ev)();
extern void _ZN7S3566C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3566C4D0Ev,_ZTv0_n12_N7S3566C4D0Ev)();
extern void _ZN7S3566C4D0Ev() __attribute__((weak));
extern void _ZN7S3566C52v6Ev();
extern void _ZN7S3566C52v7Ev();
extern void _ZN7S3566C52v8Ev();
extern void _ZN7S3566C52v9Ev();
extern void _ZN7S3566C53v10Ev();
extern void _ZN7S3566C43v11Ev();
extern void _ZN7S3566C43v12Ev();
extern void _ZN7S3566C43v13Ev();
static  VTBL_ENTRY _tg__ZTV7S3566C4__7S3566C1[] = {
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3566C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C4D1Ev,_ZTv0_n12_N7S3566C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C4D0Ev,_ZTv0_n12_N7S3566C4D0Ev),
  (VTBL_ENTRY)&_ZN7S3566C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3566C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3566C43v11Ev,
  (VTBL_ENTRY)&_ZN7S3566C43v12Ev,
  (VTBL_ENTRY)&_ZN7S3566C43v13Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3566C4D1Ev,_ZTv0_n12_N7S3566C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3566C4D0Ev,_ZTv0_n12_N7S3566C4D0Ev)();
extern void _ZN7S3566C52v6Ev();
extern void _ZN7S3566C52v7Ev();
extern void _ZN7S3566C52v8Ev();
extern void _ZN7S3566C52v9Ev();
extern void _ZN7S3566C53v10Ev();
static  VTBL_ENTRY _tg__ZTV7S3566C5__7S3566C4__7S3566C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI7S3566C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C4D1Ev,_ZTv0_n12_N7S3566C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C4D0Ev,_ZTv0_n12_N7S3566C4D0Ev),
  (VTBL_ENTRY)&_ZN7S3566C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3566C53v10Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3566C3D1Ev,_ZTv0_n12_N7S3566C3D1Ev)();
extern void _ZN7S3566C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3566C3D0Ev,_ZTv0_n12_N7S3566C3D0Ev)();
extern void _ZN7S3566C3D0Ev() __attribute__((weak));
extern void _ZN7S3566C52v6Ev();
extern void _ZN7S3566C52v7Ev();
extern void _ZN7S3566C52v8Ev();
extern void _ZN7S3566C52v9Ev();
extern void _ZN7S3566C53v10Ev();
extern void _ZN7S3566C33v14Ev();
static  VTBL_ENTRY _tg__ZTV7S3566C3__A1__7S3566C1[] = {
  ABISELECT(-48,-28),
  ABISELECT(-32,-16),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3566C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C3D1Ev,_ZTv0_n12_N7S3566C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C3D0Ev,_ZTv0_n12_N7S3566C3D0Ev),
  (VTBL_ENTRY)&_ZN7S3566C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3566C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3566C33v14Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3566C3D1Ev,_ZTv0_n12_N7S3566C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3566C3D0Ev,_ZTv0_n12_N7S3566C3D0Ev)();
extern void _ZN7S3566C52v6Ev();
extern void _ZN7S3566C52v7Ev();
extern void _ZN7S3566C52v8Ev();
extern void _ZN7S3566C52v9Ev();
extern void _ZN7S3566C53v10Ev();
extern void _ZN7S3566C43v11Ev();
extern void _ZN7S3566C43v12Ev();
extern void _ZN7S3566C43v13Ev();
static  VTBL_ENTRY _tg__ZTV7S3566C4__7S3566C3__A1__7S3566C1[] = {
  0,
  0,
  0,
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(32,16),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI7S3566C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C3D1Ev,_ZTv0_n12_N7S3566C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C3D0Ev,_ZTv0_n12_N7S3566C3D0Ev),
  (VTBL_ENTRY)&_ZN7S3566C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3566C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3566C43v11Ev,
  (VTBL_ENTRY)&_ZN7S3566C43v12Ev,
  (VTBL_ENTRY)&_ZN7S3566C43v13Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3566C3D1Ev,_ZTv0_n12_N7S3566C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3566C3D0Ev,_ZTv0_n12_N7S3566C3D0Ev)();
extern void _ZN7S3566C52v6Ev();
extern void _ZN7S3566C52v7Ev();
extern void _ZN7S3566C52v8Ev();
extern void _ZN7S3566C52v9Ev();
extern void _ZN7S3566C53v10Ev();
static  VTBL_ENTRY _tg__ZTV7S3566C5__7S3566C3__A1__7S3566C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI7S3566C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C3D1Ev,_ZTv0_n12_N7S3566C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C3D0Ev,_ZTv0_n12_N7S3566C3D0Ev),
  (VTBL_ENTRY)&_ZN7S3566C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3566C53v10Ev,
};
static  VTT_ENTRY vtt_S3566C1[] = {
  {&(_ZTV7S3566C1[11]),  11,66},
  {&(_tg__ZTV7S3566C2__7S3566C1[10]),  10,19},
  {&(_tg__ZTV7S3566C37S3566C2__7S3566C1[10]),  10,18},
  {&(_tg__ZTV7S3566C4__7S3566C37S3566C2__7S3566C1[12]),  12,22},
  {&(_tg__ZTV7S3566C37S3566C2__7S3566C1[10]),  10,18},
  {&(_tg__ZTV7S3566C4__7S3566C2__7S3566C1[12]),  12,22},
  {&(_tg__ZTV7S3566C2__7S3566C1[10]),  10,19},
  {&(_ZTV7S3566C1[37]),  37,66},
  {&(_ZTV7S3566C1[11]),  11,66},
  {&(_ZTV7S3566C1[58]),  58,66},
  {&(_tg__ZTV7S3566C4__7S3566C1[9]),  9,19},
  {&(_tg__ZTV7S3566C5__7S3566C4__7S3566C1[8]),  8,15},
  {&(_tg__ZTV7S3566C3__A1__7S3566C1[10]),  10,18},
  {&(_tg__ZTV7S3566C4__7S3566C3__A1__7S3566C1[12]),  12,22},
  {&(_tg__ZTV7S3566C5__7S3566C3__A1__7S3566C1[8]),  8,15},
};
extern VTBL_ENTRY _ZTI7S3566C1[];
extern  VTBL_ENTRY _ZTV7S3566C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3566C1[];
static VTBL_ENTRY alt_thunk_names41[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3566C4D0Ev,_ZTv0_n12_N7S3566C4D0Ev), // 
  (VTBL_ENTRY)_ZN7S3566C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3566C4D1Ev,_ZTv0_n12_N7S3566C4D1Ev), // 
  (VTBL_ENTRY)_ZN7S3566C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3566C2D0Ev,_ZTv0_n12_N7S3566C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3566C2D0Ev,_ZThn12_N7S3566C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3566C2D1Ev,_ZTv0_n12_N7S3566C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3566C2D1Ev,_ZThn12_N7S3566C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3566C3D0Ev,_ZTv0_n12_N7S3566C3D0Ev), // 
  (VTBL_ENTRY)_ZN7S3566C3D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3566C3D0Ev,_ZThn12_N7S3566C3D0Ev),
  (VTBL_ENTRY)_ZN7S3566C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3566C3D1Ev,_ZTv0_n12_N7S3566C3D1Ev), // 
  (VTBL_ENTRY)_ZN7S3566C3D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3566C3D1Ev,_ZThn12_N7S3566C3D1Ev),
  (VTBL_ENTRY)_ZN7S3566C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3566C1D0Ev,_ZTv0_n12_N7S3566C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S3566C1D0Ev,_ZThn28_N7S3566C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3566C1D0Ev,_ZThn12_N7S3566C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3566C1D1Ev,_ZTv0_n12_N7S3566C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S3566C1D1Ev,_ZThn28_N7S3566C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3566C1D1Ev,_ZThn12_N7S3566C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3566C1 = {  "S3566C1", // class name
  bases_S3566C1, 5,
  &(vtc_S3566C1[0]), // expected_vtbl_contents
  &(vtt_S3566C1[0]), // expected_vtt_contents
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI7S3566C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3566C1),66, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3566C1),15, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names41,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1751C3  : S6282C14_nt {
  void *s1751c3f0;
  int s1751c3f1[2];
  unsigned int s1751c3f2:1;
  unsigned int s1751c3f3:1;
  unsigned int s1751c3f4:1;
  unsigned int s1751c3f5:1;
  int s1751c3f6[2];
  virtual  ~S1751C3(); // _ZN7S1751C3D1Ev
  S1751C3(); // tgen
};
//SIG(-1 S1751C3) C1{ BC2{ vd m Fi} vd Fp Fi[2] Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S1751C3 ::~S1751C3(){ note_dtor("S1751C3", this);}
S1751C3 ::S1751C3(){ note_ctor("S1751C3", this);} // tgen

static void Test_S1751C3()
{
  extern Class_Descriptor cd_S1751C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S1751C3, buf);
    S1751C3 *dp, &lv = *(dp=new (buf) S1751C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S1751C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1751C3)");
    check_base_class_offset(lv, (S6282C14_nt*), 0, "S1751C3");
    check_field_offset(lv, s1751c3f0, ABISELECT(16,8), "S1751C3.s1751c3f0");
    check_field_offset(lv, s1751c3f1, ABISELECT(24,12), "S1751C3.s1751c3f1");
    set_bf_and_test(lv, s1751c3f2, ABISELECT(32,20), 0, 1, 1, "S1751C3");
    set_bf_and_test(lv, s1751c3f3, ABISELECT(32,20), 1, 1, 1, "S1751C3");
    set_bf_and_test(lv, s1751c3f4, ABISELECT(32,20), 2, 1, 1, "S1751C3");
    set_bf_and_test(lv, s1751c3f5, ABISELECT(32,20), 3, 1, 1, "S1751C3");
    check_field_offset(lv, s1751c3f6, ABISELECT(36,24), "S1751C3.s1751c3f6");
    test_class_info(&lv, &cd_S1751C3);
    dp->~S1751C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1751C3(Test_S1751C3, "S1751C3", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S1751C3C1Ev();
extern void _ZN7S1751C3D1Ev();
Name_Map name_map_S1751C3[] = {
  NSPAIR(_ZN7S1751C3C1Ev),
  NSPAIR(_ZN7S1751C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6282C14_nt;
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
extern  VTBL_ENTRY _ZTV11S6282C14_nt[];
static Base_Class bases_S1751C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6282C14_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 _ZTI7S1751C3[];
extern void _ZN7S1751C3D1Ev();
extern void _ZN7S1751C3D0Ev();
static  VTBL_ENTRY vtc_S1751C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1751C3[0]),
  (VTBL_ENTRY)&_ZN7S1751C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1751C3D0Ev,
};
extern VTBL_ENTRY _ZTI7S1751C3[];
extern  VTBL_ENTRY _ZTV7S1751C3[];
Class_Descriptor cd_S1751C3 = {  "S1751C3", // class name
  bases_S1751C3, 1,
  &(vtc_S1751C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S1751C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1751C3),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1751C2  : S1751C3 {
  ::S8480C5 s1751c2f0;
  int s1751c2f1[4];
  virtual  ~S1751C2(); // _ZN7S1751C2D1Ev
  S1751C2(); // tgen
};
//SIG(-1 S1751C2) C1{ BC2{ BC3{ vd m Fi} vd Fp Fi[2] Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd FC4{ Fc[4] Fi Fs[3] Fc[2] Fi[2]} Fi[4]}


 S1751C2 ::~S1751C2(){ note_dtor("S1751C2", this);}
S1751C2 ::S1751C2(){ note_ctor("S1751C2", this);} // tgen

static void Test_S1751C2()
{
  extern Class_Descriptor cd_S1751C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,19)];
    init_test(&cd_S1751C2, buf);
    S1751C2 *dp, &lv = *(dp=new (buf) S1751C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,72), "sizeof(S1751C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1751C2)");
    check_base_class_offset(lv, (S6282C14_nt*)(S1751C3*), 0, "S1751C2");
    check_base_class_offset(lv, (S1751C3*), 0, "S1751C2");
    check_field_offset(lv, s1751c2f0, ABISELECT(44,32), "S1751C2.s1751c2f0");
    check_field_offset(lv, s1751c2f1, ABISELECT(68,56), "S1751C2.s1751c2f1");
    test_class_info(&lv, &cd_S1751C2);
    dp->~S1751C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1751C2(Test_S1751C2, "S1751C2", ABISELECT(88,72));

#else // __cplusplus

extern void _ZN7S1751C2C1Ev();
extern void _ZN7S1751C2D1Ev();
Name_Map name_map_S1751C2[] = {
  NSPAIR(_ZN7S1751C2C1Ev),
  NSPAIR(_ZN7S1751C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6282C14_nt;
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
extern  VTBL_ENTRY _ZTV11S6282C14_nt[];
extern Class_Descriptor cd_S1751C3;
extern VTBL_ENTRY _ZTI7S1751C3[];
extern  VTBL_ENTRY _ZTV7S1751C3[];
static Base_Class bases_S1751C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6282C14_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_S1751C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1751C2[];
extern void _ZN7S1751C2D1Ev();
extern void _ZN7S1751C2D0Ev();
static  VTBL_ENTRY vtc_S1751C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1751C2[0]),
  (VTBL_ENTRY)&_ZN7S1751C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1751C2D0Ev,
};
extern VTBL_ENTRY _ZTI7S1751C2[];
extern  VTBL_ENTRY _ZTV7S1751C2[];
Class_Descriptor cd_S1751C2 = {  "S1751C2", // class name
  bases_S1751C2, 2,
  &(vtc_S1751C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,72), // object size
  NSPAIRA(_ZTI7S1751C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1751C2),4, //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  S1751C1  : S1751C2 {
  ~S1751C1(); // tgen
  S1751C1(); // tgen
};
//SIG(1 S1751C1) C1{ BC2{ BC3{ BC4{ vd m Fi} vd Fp Fi[2] Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd FC5{ Fc[4] Fi Fs[3] Fc[2] Fi[2]} Fi[4]}}


S1751C1 ::~S1751C1(){ note_dtor("S1751C1", this);} // tgen
S1751C1 ::S1751C1(){ note_ctor("S1751C1", this);} // tgen

static void Test_S1751C1()
{
  extern Class_Descriptor cd_S1751C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,19)];
    init_test(&cd_S1751C1, buf);
    S1751C1 *dp, &lv = *(dp=new (buf) S1751C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,72), "sizeof(S1751C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1751C1)");
    check_base_class_offset(lv, (S6282C14_nt*)(S1751C3*)(S1751C2*), 0, "S1751C1");
    check_base_class_offset(lv, (S1751C3*)(S1751C2*), 0, "S1751C1");
    check_base_class_offset(lv, (S1751C2*), 0, "S1751C1");
    test_class_info(&lv, &cd_S1751C1);
    dp->~S1751C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1751C1(Test_S1751C1, "S1751C1", ABISELECT(88,72));

#else // __cplusplus

extern void _ZN7S1751C1C1Ev();
extern void _ZN7S1751C1D1Ev();
Name_Map name_map_S1751C1[] = {
  NSPAIR(_ZN7S1751C1C1Ev),
  NSPAIR(_ZN7S1751C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6282C14_nt;
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
extern  VTBL_ENTRY _ZTV11S6282C14_nt[];
extern Class_Descriptor cd_S1751C3;
extern VTBL_ENTRY _ZTI7S1751C3[];
extern  VTBL_ENTRY _ZTV7S1751C3[];
extern Class_Descriptor cd_S1751C2;
extern VTBL_ENTRY _ZTI7S1751C2[];
extern  VTBL_ENTRY _ZTV7S1751C2[];
static Base_Class bases_S1751C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6282C14_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_S1751C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1751C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1751C1[];
extern void _ZN7S1751C1D1Ev();
extern void _ZN7S1751C1D0Ev();
static  VTBL_ENTRY vtc_S1751C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1751C1[0]),
  (VTBL_ENTRY)&_ZN7S1751C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1751C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S1751C1[];
extern  VTBL_ENTRY _ZTV7S1751C1[];
Class_Descriptor cd_S1751C1 = {  "S1751C1", // class name
  bases_S1751C1, 3,
  &(vtc_S1751C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,72), // object size
  NSPAIRA(_ZTI7S1751C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1751C1),4, //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  S21104C4  {
  virtual  ~S21104C4(); // _ZN8S21104C4D1Ev
  virtual void  v9(); // _ZN8S21104C42v9Ev
  virtual void  v10(); // _ZN8S21104C43v10Ev
  virtual void  v11(); // _ZN8S21104C43v11Ev
  virtual void  v12(); // _ZN8S21104C43v12Ev
  virtual void  v13(); // _ZN8S21104C43v13Ev
  S21104C4(); // tgen
};
//SIG(-1 S21104C4) C1{ vd v1 v2 v3 v4 v5}


 S21104C4 ::~S21104C4(){ note_dtor("S21104C4", this);}
void  S21104C4 ::v9(){vfunc_called(this, "_ZN8S21104C42v9Ev");}
void  S21104C4 ::v10(){vfunc_called(this, "_ZN8S21104C43v10Ev");}
void  S21104C4 ::v11(){vfunc_called(this, "_ZN8S21104C43v11Ev");}
void  S21104C4 ::v12(){vfunc_called(this, "_ZN8S21104C43v12Ev");}
void  S21104C4 ::v13(){vfunc_called(this, "_ZN8S21104C43v13Ev");}
S21104C4 ::S21104C4(){ note_ctor("S21104C4", this);} // tgen

static void Test_S21104C4()
{
  extern Class_Descriptor cd_S21104C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S21104C4, buf);
    S21104C4 *dp, &lv = *(dp=new (buf) S21104C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S21104C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21104C4)");
    test_class_info(&lv, &cd_S21104C4);
    dp->~S21104C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21104C4(Test_S21104C4, "S21104C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S21104C4C1Ev();
extern void _ZN8S21104C4D1Ev();
Name_Map name_map_S21104C4[] = {
  NSPAIR(_ZN8S21104C4C1Ev),
  NSPAIR(_ZN8S21104C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21104C4[];
extern void _ZN8S21104C4D1Ev();
extern void _ZN8S21104C4D0Ev();
extern void _ZN8S21104C42v9Ev();
extern void _ZN8S21104C43v10Ev();
extern void _ZN8S21104C43v11Ev();
extern void _ZN8S21104C43v12Ev();
extern void _ZN8S21104C43v13Ev();
static  VTBL_ENTRY vtc_S21104C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21104C4[0]),
  (VTBL_ENTRY)&_ZN8S21104C4D1Ev,
  (VTBL_ENTRY)&_ZN8S21104C4D0Ev,
  (VTBL_ENTRY)&_ZN8S21104C42v9Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v10Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v11Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v12Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v13Ev,
};
extern VTBL_ENTRY _ZTI8S21104C4[];
extern  VTBL_ENTRY _ZTV8S21104C4[];
Class_Descriptor cd_S21104C4 = {  "S21104C4", // class name
  0,0,//no base classes
  &(vtc_S21104C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S21104C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21104C4),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  S21104C3  : virtual S21104C4 {
  void *s21104c3f0;
  ::S21104C4 s21104c3f1;
  void *s21104c3f2;
  virtual  ~S21104C3(); // _ZN8S21104C3D2Ev
  virtual void  v14(); // _ZN8S21104C33v14Ev
  virtual void  v15(); // _ZN8S21104C33v15Ev
  virtual void  v16(); // _ZN8S21104C33v16Ev
  S21104C3(); // tgen
};
//SIG(-1 S21104C3) C1{ VBC2{ vd v4 v5 v6 v7 v8} vd v1 v2 v3 Fp FC2 Fp}


 S21104C3 ::~S21104C3(){ note_dtor("S21104C3", this);}
void  S21104C3 ::v14(){vfunc_called(this, "_ZN8S21104C33v14Ev");}
void  S21104C3 ::v15(){vfunc_called(this, "_ZN8S21104C33v15Ev");}
void  S21104C3 ::v16(){vfunc_called(this, "_ZN8S21104C33v16Ev");}
S21104C3 ::S21104C3(){ note_ctor("S21104C3", this);} // tgen

static void Test_S21104C3()
{
  extern Class_Descriptor cd_S21104C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S21104C3, buf);
    S21104C3 *dp, &lv = *(dp=new (buf) S21104C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S21104C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21104C3)");
    check_base_class_offset(lv, (S21104C4*), 0, "S21104C3");
    check_field_offset(lv, s21104c3f0, ABISELECT(8,4), "S21104C3.s21104c3f0");
    check_field_offset(lv, s21104c3f1, ABISELECT(16,8), "S21104C3.s21104c3f1");
    check_field_offset(lv, s21104c3f2, ABISELECT(24,12), "S21104C3.s21104c3f2");
    test_class_info(&lv, &cd_S21104C3);
    dp->~S21104C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21104C3(Test_S21104C3, "S21104C3", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S21104C3C1Ev();
extern void _ZN8S21104C3D2Ev();
Name_Map name_map_S21104C3[] = {
  NSPAIR(_ZN8S21104C3C1Ev),
  NSPAIR(_ZN8S21104C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S21104C4;
extern VTBL_ENTRY _ZTI8S21104C4[];
extern  VTBL_ENTRY _ZTV8S21104C4[];
static Base_Class bases_S21104C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21104C4,    0, //bcp->offset
    -1, //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 _ZTI8S21104C3[];
extern void _ZN8S21104C3D1Ev();
extern void _ZN8S21104C3D0Ev();
extern void _ZN8S21104C42v9Ev();
extern void _ZN8S21104C43v10Ev();
extern void _ZN8S21104C43v11Ev();
extern void _ZN8S21104C43v12Ev();
extern void _ZN8S21104C43v13Ev();
extern void _ZN8S21104C33v14Ev();
extern void _ZN8S21104C33v15Ev();
extern void _ZN8S21104C33v16Ev();
static  VTBL_ENTRY vtc_S21104C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21104C3[0]),
  (VTBL_ENTRY)&_ZN8S21104C3D1Ev,
  (VTBL_ENTRY)&_ZN8S21104C3D0Ev,
  (VTBL_ENTRY)&_ZN8S21104C42v9Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v10Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v11Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v12Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v13Ev,
  (VTBL_ENTRY)&_ZN8S21104C33v14Ev,
  (VTBL_ENTRY)&_ZN8S21104C33v15Ev,
  (VTBL_ENTRY)&_ZN8S21104C33v16Ev,
};
extern VTBL_ENTRY _ZTV8S21104C3[];
static  VTT_ENTRY vtt_S21104C3[] = {
  {&(_ZTV8S21104C3[9]),  9,19},
  {&(_ZTV8S21104C3[9]),  9,19},
};
extern VTBL_ENTRY _ZTI8S21104C3[];
extern  VTBL_ENTRY _ZTV8S21104C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21104C3[];
Class_Descriptor cd_S21104C3 = {  "S21104C3", // class name
  bases_S21104C3, 1,
  &(vtc_S21104C3[0]), // expected_vtbl_contents
  &(vtt_S21104C3[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S21104C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S21104C3),19, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21104C3),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  S21104C2  : virtual S21104C3 {
  virtual  ~S21104C2(); // _ZN8S21104C2D2Ev
  virtual void  v17(); // _ZN8S21104C23v17Ev
  S21104C2(); // tgen
};
//SIG(-1 S21104C2) C1{ VBC2{ VBC3{ vd v2 v3 v4 v5 v6} vd v7 v8 v9 Fp FC3 Fp} vd v1}


 S21104C2 ::~S21104C2(){ note_dtor("S21104C2", this);}
void  S21104C2 ::v17(){vfunc_called(this, "_ZN8S21104C23v17Ev");}
S21104C2 ::S21104C2(){ note_ctor("S21104C2", this);} // tgen

static void Test_S21104C2()
{
  extern Class_Descriptor cd_S21104C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S21104C2, buf);
    S21104C2 *dp, &lv = *(dp=new (buf) S21104C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S21104C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21104C2)");
    check_base_class_offset(lv, (S21104C4*)(S21104C3*), 0, "S21104C2");
    check_base_class_offset(lv, (S21104C3*), ABISELECT(8,4), "S21104C2");
    test_class_info(&lv, &cd_S21104C2);
    dp->~S21104C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21104C2(Test_S21104C2, "S21104C2", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S21104C2C1Ev();
extern void _ZN8S21104C2D2Ev();
Name_Map name_map_S21104C2[] = {
  NSPAIR(_ZN8S21104C2C1Ev),
  NSPAIR(_ZN8S21104C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S21104C4;
extern VTBL_ENTRY _ZTI8S21104C4[];
extern  VTBL_ENTRY _ZTV8S21104C4[];
extern Class_Descriptor cd_S21104C3;
extern VTBL_ENTRY _ZTI8S21104C3[];
extern  VTBL_ENTRY _ZTV8S21104C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21104C3[];
static Base_Class bases_S21104C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21104C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //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
    1, //immediately_derived
  0, 1},
  {&cd_S21104C3,    ABISELECT(8,4), //bcp->offset
    18, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21104C2[];
extern void _ZN8S21104C2D1Ev();
extern void _ZN8S21104C2D0Ev();
extern void _ZN8S21104C42v9Ev();
extern void _ZN8S21104C43v10Ev();
extern void _ZN8S21104C43v11Ev();
extern void _ZN8S21104C43v12Ev();
extern void _ZN8S21104C43v13Ev();
extern void _ZN8S21104C23v17Ev();
extern void ABISELECT(_ZTv0_n24_N8S21104C2D1Ev,_ZTv0_n12_N8S21104C2D1Ev)();
extern void ABISELECT(_ZThn8_N8S21104C2D1Ev,_ZThn4_N8S21104C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21104C2D0Ev,_ZTv0_n12_N8S21104C2D0Ev)();
extern void ABISELECT(_ZThn8_N8S21104C2D0Ev,_ZThn4_N8S21104C2D0Ev)() __attribute__((weak));
extern void _ZN8S21104C42v9Ev();
extern void _ZN8S21104C43v10Ev();
extern void _ZN8S21104C43v11Ev();
extern void _ZN8S21104C43v12Ev();
extern void _ZN8S21104C43v13Ev();
extern void _ZN8S21104C33v14Ev();
extern void _ZN8S21104C33v15Ev();
extern void _ZN8S21104C33v16Ev();
static  VTBL_ENTRY vtc_S21104C2[] = {
  0,
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21104C2[0]),
  (VTBL_ENTRY)&_ZN8S21104C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21104C2D0Ev,
  (VTBL_ENTRY)&_ZN8S21104C42v9Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v10Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v11Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v12Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v13Ev,
  (VTBL_ENTRY)&_ZN8S21104C23v17Ev,
  0,
  0,
  0,
  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)&(_ZTI8S21104C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21104C2D1Ev,_ZTv0_n12_N8S21104C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21104C2D0Ev,_ZTv0_n12_N8S21104C2D0Ev),
  (VTBL_ENTRY)&_ZN8S21104C42v9Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v10Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v11Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v12Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v13Ev,
  (VTBL_ENTRY)&_ZN8S21104C33v14Ev,
  (VTBL_ENTRY)&_ZN8S21104C33v15Ev,
  (VTBL_ENTRY)&_ZN8S21104C33v16Ev,
};
extern VTBL_ENTRY _ZTV8S21104C2[];
extern void ABISELECT(_ZTv0_n24_N8S21104C3D1Ev,_ZTv0_n12_N8S21104C3D1Ev)();
extern void _ZN8S21104C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21104C3D0Ev,_ZTv0_n12_N8S21104C3D0Ev)();
extern void _ZN8S21104C3D0Ev() __attribute__((weak));
extern void _ZN8S21104C42v9Ev();
extern void _ZN8S21104C43v10Ev();
extern void _ZN8S21104C43v11Ev();
extern void _ZN8S21104C43v12Ev();
extern void _ZN8S21104C43v13Ev();
extern void _ZN8S21104C33v14Ev();
extern void _ZN8S21104C33v15Ev();
extern void _ZN8S21104C33v16Ev();
static  VTBL_ENTRY _tg__ZTV8S21104C3__8S21104C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21104C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21104C3D1Ev,_ZTv0_n12_N8S21104C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21104C3D0Ev,_ZTv0_n12_N8S21104C3D0Ev),
  (VTBL_ENTRY)&_ZN8S21104C42v9Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v10Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v11Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v12Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v13Ev,
  (VTBL_ENTRY)&_ZN8S21104C33v14Ev,
  (VTBL_ENTRY)&_ZN8S21104C33v15Ev,
  (VTBL_ENTRY)&_ZN8S21104C33v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21104C3D1Ev,_ZTv0_n12_N8S21104C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21104C3D0Ev,_ZTv0_n12_N8S21104C3D0Ev)();
extern void _ZN8S21104C42v9Ev();
extern void _ZN8S21104C43v10Ev();
extern void _ZN8S21104C43v11Ev();
extern void _ZN8S21104C43v12Ev();
extern void _ZN8S21104C43v13Ev();
static  VTBL_ENTRY _tg__ZTV8S21104C4__8S21104C3__8S21104C2[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S21104C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21104C3D1Ev,_ZTv0_n12_N8S21104C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21104C3D0Ev,_ZTv0_n12_N8S21104C3D0Ev),
  (VTBL_ENTRY)&_ZN8S21104C42v9Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v10Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v11Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v12Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v13Ev,
};
static  VTT_ENTRY vtt_S21104C2[] = {
  {&(_ZTV8S21104C2[10]),  10,40},
  {&(_ZTV8S21104C2[30]),  30,40},
  {&(_ZTV8S21104C2[10]),  10,40},
  {&(_tg__ZTV8S21104C3__8S21104C2[9]),  9,19},
  {&(_tg__ZTV8S21104C4__8S21104C3__8S21104C2[8]),  8,15},
};
extern VTBL_ENTRY _ZTI8S21104C2[];
extern  VTBL_ENTRY _ZTV8S21104C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21104C2[];
static VTBL_ENTRY alt_thunk_names42[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21104C3D0Ev,_ZTv0_n12_N8S21104C3D0Ev), // 
  (VTBL_ENTRY)_ZN8S21104C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21104C3D1Ev,_ZTv0_n12_N8S21104C3D1Ev), // 
  (VTBL_ENTRY)_ZN8S21104C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21104C2D0Ev,_ZTv0_n12_N8S21104C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21104C2D0Ev,_ZThn4_N8S21104C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21104C2D1Ev,_ZTv0_n12_N8S21104C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21104C2D1Ev,_ZThn4_N8S21104C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21104C2 = {  "S21104C2", // class name
  bases_S21104C2, 2,
  &(vtc_S21104C2[0]), // expected_vtbl_contents
  &(vtt_S21104C2[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S21104C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S21104C2),40, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21104C2),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names42,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21104C1  : virtual S21104C2 {
  virtual  ~S21104C1(); // _ZN8S21104C1D2Ev
  virtual void  v1(); // _ZN8S21104C12v1Ev
  virtual void  v2(); // _ZN8S21104C12v2Ev
  virtual void  v3(); // _ZN8S21104C12v3Ev
  virtual void  v4(); // _ZN8S21104C12v4Ev
  virtual void  v5(); // _ZN8S21104C12v5Ev
  virtual void  v6(); // _ZN8S21104C12v6Ev
  virtual void  v7(); // _ZN8S21104C12v7Ev
  virtual void  v8(); // _ZN8S21104C12v8Ev
  S21104C1(); // tgen
};
//SIG(1 S21104C1) C1{ VBC2{ VBC3{ VBC4{ vd v9 v10 v11 v12 v13} vd v14 v15 v16 Fp FC4 Fp} vd v17} vd v1 v2 v3 v4 v5 v6 v7 v8}


 S21104C1 ::~S21104C1(){ note_dtor("S21104C1", this);}
void  S21104C1 ::v1(){vfunc_called(this, "_ZN8S21104C12v1Ev");}
void  S21104C1 ::v2(){vfunc_called(this, "_ZN8S21104C12v2Ev");}
void  S21104C1 ::v3(){vfunc_called(this, "_ZN8S21104C12v3Ev");}
void  S21104C1 ::v4(){vfunc_called(this, "_ZN8S21104C12v4Ev");}
void  S21104C1 ::v5(){vfunc_called(this, "_ZN8S21104C12v5Ev");}
void  S21104C1 ::v6(){vfunc_called(this, "_ZN8S21104C12v6Ev");}
void  S21104C1 ::v7(){vfunc_called(this, "_ZN8S21104C12v7Ev");}
void  S21104C1 ::v8(){vfunc_called(this, "_ZN8S21104C12v8Ev");}
S21104C1 ::S21104C1(){ note_ctor("S21104C1", this);} // tgen

static void Test_S21104C1()
{
  extern Class_Descriptor cd_S21104C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S21104C1, buf);
    S21104C1 *dp, &lv = *(dp=new (buf) S21104C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S21104C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21104C1)");
    check_base_class_offset(lv, (S21104C4*)(S21104C3*), 0, "S21104C1");
    check_base_class_offset(lv, (S21104C3*)(S21104C2*), ABISELECT(8,4), "S21104C1");
    check_base_class_offset(lv, (S21104C2*), 0, "S21104C1");
    test_class_info(&lv, &cd_S21104C1);
    dp->~S21104C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21104C1(Test_S21104C1, "S21104C1", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S21104C1C1Ev();
extern void _ZN8S21104C1D2Ev();
Name_Map name_map_S21104C1[] = {
  NSPAIR(_ZN8S21104C1C1Ev),
  NSPAIR(_ZN8S21104C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S21104C4;
extern VTBL_ENTRY _ZTI8S21104C4[];
extern  VTBL_ENTRY _ZTV8S21104C4[];
extern Class_Descriptor cd_S21104C3;
extern VTBL_ENTRY _ZTI8S21104C3[];
extern  VTBL_ENTRY _ZTV8S21104C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21104C3[];
extern Class_Descriptor cd_S21104C2;
extern VTBL_ENTRY _ZTI8S21104C2[];
extern  VTBL_ENTRY _ZTV8S21104C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21104C2[];
static Base_Class bases_S21104C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21104C4,    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
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S21104C3,    ABISELECT(8,4), //bcp->offset
    28, //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
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S21104C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //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},
  {0}};
extern VTBL_ENTRY _ZTI8S21104C1[];
extern void _ZN8S21104C1D1Ev();
extern void _ZN8S21104C1D0Ev();
extern void _ZN8S21104C42v9Ev();
extern void _ZN8S21104C43v10Ev();
extern void _ZN8S21104C43v11Ev();
extern void _ZN8S21104C43v12Ev();
extern void _ZN8S21104C43v13Ev();
extern void _ZN8S21104C23v17Ev();
extern void _ZN8S21104C12v1Ev();
extern void _ZN8S21104C12v2Ev();
extern void _ZN8S21104C12v3Ev();
extern void _ZN8S21104C12v4Ev();
extern void _ZN8S21104C12v5Ev();
extern void _ZN8S21104C12v6Ev();
extern void _ZN8S21104C12v7Ev();
extern void _ZN8S21104C12v8Ev();
extern void ABISELECT(_ZTv0_n24_N8S21104C1D1Ev,_ZTv0_n12_N8S21104C1D1Ev)();
extern void ABISELECT(_ZThn8_N8S21104C1D1Ev,_ZThn4_N8S21104C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21104C1D0Ev,_ZTv0_n12_N8S21104C1D0Ev)();
extern void ABISELECT(_ZThn8_N8S21104C1D0Ev,_ZThn4_N8S21104C1D0Ev)() __attribute__((weak));
extern void _ZN8S21104C42v9Ev();
extern void _ZN8S21104C43v10Ev();
extern void _ZN8S21104C43v11Ev();
extern void _ZN8S21104C43v12Ev();
extern void _ZN8S21104C43v13Ev();
extern void _ZN8S21104C33v14Ev();
extern void _ZN8S21104C33v15Ev();
extern void _ZN8S21104C33v16Ev();
static  VTBL_ENTRY vtc_S21104C1[] = {
  0,
  0,
  0,
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21104C1[0]),
  (VTBL_ENTRY)&_ZN8S21104C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21104C1D0Ev,
  (VTBL_ENTRY)&_ZN8S21104C42v9Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v10Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v11Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v12Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v13Ev,
  (VTBL_ENTRY)&_ZN8S21104C23v17Ev,
  (VTBL_ENTRY)&_ZN8S21104C12v1Ev,
  (VTBL_ENTRY)&_ZN8S21104C12v2Ev,
  (VTBL_ENTRY)&_ZN8S21104C12v3Ev,
  (VTBL_ENTRY)&_ZN8S21104C12v4Ev,
  (VTBL_ENTRY)&_ZN8S21104C12v5Ev,
  (VTBL_ENTRY)&_ZN8S21104C12v6Ev,
  (VTBL_ENTRY)&_ZN8S21104C12v7Ev,
  (VTBL_ENTRY)&_ZN8S21104C12v8Ev,
  0,
  0,
  0,
  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)&(_ZTI8S21104C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21104C1D1Ev,_ZTv0_n12_N8S21104C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21104C1D0Ev,_ZTv0_n12_N8S21104C1D0Ev),
  (VTBL_ENTRY)&_ZN8S21104C42v9Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v10Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v11Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v12Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v13Ev,
  (VTBL_ENTRY)&_ZN8S21104C33v14Ev,
  (VTBL_ENTRY)&_ZN8S21104C33v15Ev,
  (VTBL_ENTRY)&_ZN8S21104C33v16Ev,
};
extern VTBL_ENTRY _ZTV8S21104C1[];
extern void ABISELECT(_ZTv0_n24_N8S21104C2D1Ev,_ZTv0_n12_N8S21104C2D1Ev)();
extern void _ZN8S21104C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21104C2D0Ev,_ZTv0_n12_N8S21104C2D0Ev)();
extern void _ZN8S21104C2D0Ev() __attribute__((weak));
extern void _ZN8S21104C42v9Ev();
extern void _ZN8S21104C43v10Ev();
extern void _ZN8S21104C43v11Ev();
extern void _ZN8S21104C43v12Ev();
extern void _ZN8S21104C43v13Ev();
extern void _ZN8S21104C23v17Ev();
static  VTBL_ENTRY _tg__ZTV8S21104C2__8S21104C1[] = {
  0,
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21104C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21104C2D1Ev,_ZTv0_n12_N8S21104C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21104C2D0Ev,_ZTv0_n12_N8S21104C2D0Ev),
  (VTBL_ENTRY)&_ZN8S21104C42v9Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v10Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v11Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v12Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v13Ev,
  (VTBL_ENTRY)&_ZN8S21104C23v17Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21104C2D1Ev,_ZTv0_n12_N8S21104C2D1Ev)();
extern void ABISELECT(_ZThn8_N8S21104C2D1Ev,_ZThn4_N8S21104C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21104C2D0Ev,_ZTv0_n12_N8S21104C2D0Ev)();
extern void ABISELECT(_ZThn8_N8S21104C2D0Ev,_ZThn4_N8S21104C2D0Ev)() __attribute__((weak));
extern void _ZN8S21104C42v9Ev();
extern void _ZN8S21104C43v10Ev();
extern void _ZN8S21104C43v11Ev();
extern void _ZN8S21104C43v12Ev();
extern void _ZN8S21104C43v13Ev();
extern void _ZN8S21104C33v14Ev();
extern void _ZN8S21104C33v15Ev();
extern void _ZN8S21104C33v16Ev();
static  VTBL_ENTRY _tg__ZTV8S21104C3__8S21104C2__8S21104C1[] = {
  0,
  0,
  0,
  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)&(_ZTI8S21104C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21104C2D1Ev,_ZTv0_n12_N8S21104C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21104C2D0Ev,_ZTv0_n12_N8S21104C2D0Ev),
  (VTBL_ENTRY)&_ZN8S21104C42v9Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v10Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v11Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v12Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v13Ev,
  (VTBL_ENTRY)&_ZN8S21104C33v14Ev,
  (VTBL_ENTRY)&_ZN8S21104C33v15Ev,
  (VTBL_ENTRY)&_ZN8S21104C33v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21104C3D1Ev,_ZTv0_n12_N8S21104C3D1Ev)();
extern void _ZN8S21104C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21104C3D0Ev,_ZTv0_n12_N8S21104C3D0Ev)();
extern void _ZN8S21104C3D0Ev() __attribute__((weak));
extern void _ZN8S21104C42v9Ev();
extern void _ZN8S21104C43v10Ev();
extern void _ZN8S21104C43v11Ev();
extern void _ZN8S21104C43v12Ev();
extern void _ZN8S21104C43v13Ev();
extern void _ZN8S21104C33v14Ev();
extern void _ZN8S21104C33v15Ev();
extern void _ZN8S21104C33v16Ev();
static  VTBL_ENTRY _tg__ZTV8S21104C3__8S21104C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21104C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21104C3D1Ev,_ZTv0_n12_N8S21104C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21104C3D0Ev,_ZTv0_n12_N8S21104C3D0Ev),
  (VTBL_ENTRY)&_ZN8S21104C42v9Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v10Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v11Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v12Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v13Ev,
  (VTBL_ENTRY)&_ZN8S21104C33v14Ev,
  (VTBL_ENTRY)&_ZN8S21104C33v15Ev,
  (VTBL_ENTRY)&_ZN8S21104C33v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21104C3D1Ev,_ZTv0_n12_N8S21104C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21104C3D0Ev,_ZTv0_n12_N8S21104C3D0Ev)();
extern void _ZN8S21104C42v9Ev();
extern void _ZN8S21104C43v10Ev();
extern void _ZN8S21104C43v11Ev();
extern void _ZN8S21104C43v12Ev();
extern void _ZN8S21104C43v13Ev();
static  VTBL_ENTRY _tg__ZTV8S21104C4__8S21104C3__8S21104C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S21104C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21104C3D1Ev,_ZTv0_n12_N8S21104C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21104C3D0Ev,_ZTv0_n12_N8S21104C3D0Ev),
  (VTBL_ENTRY)&_ZN8S21104C42v9Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v10Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v11Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v12Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v13Ev,
};
static  VTT_ENTRY vtt_S21104C1[] = {
  {&(_ZTV8S21104C1[12]),  12,50},
  {&(_ZTV8S21104C1[12]),  12,50},
  {&(_ZTV8S21104C1[40]),  40,50},
  {&(_ZTV8S21104C1[12]),  12,50},
  {&(_tg__ZTV8S21104C2__8S21104C1[10]),  10,18},
  {&(_tg__ZTV8S21104C3__8S21104C2__8S21104C1[12]),  12,22},
  {&(_tg__ZTV8S21104C2__8S21104C1[10]),  10,18},
  {&(_tg__ZTV8S21104C3__8S21104C1[9]),  9,19},
  {&(_tg__ZTV8S21104C4__8S21104C3__8S21104C1[8]),  8,15},
};
extern VTBL_ENTRY _ZTI8S21104C1[];
extern  VTBL_ENTRY _ZTV8S21104C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21104C1[];
static VTBL_ENTRY alt_thunk_names43[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21104C3D0Ev,_ZTv0_n12_N8S21104C3D0Ev), // 
  (VTBL_ENTRY)_ZN8S21104C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21104C3D1Ev,_ZTv0_n12_N8S21104C3D1Ev), // 
  (VTBL_ENTRY)_ZN8S21104C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21104C2D0Ev,_ZTv0_n12_N8S21104C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21104C2D0Ev,_ZThn4_N8S21104C2D0Ev),
  (VTBL_ENTRY)_ZN8S21104C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21104C2D1Ev,_ZTv0_n12_N8S21104C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21104C2D1Ev,_ZThn4_N8S21104C2D1Ev),
  (VTBL_ENTRY)_ZN8S21104C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21104C1D0Ev,_ZTv0_n12_N8S21104C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21104C1D0Ev,_ZThn4_N8S21104C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21104C1D1Ev,_ZTv0_n12_N8S21104C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21104C1D1Ev,_ZThn4_N8S21104C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21104C1 = {  "S21104C1", // class name
  bases_S21104C1, 3,
  &(vtc_S21104C1[0]), // expected_vtbl_contents
  &(vtt_S21104C1[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S21104C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S21104C1),50, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21104C1),9, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names43,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16093C1  {
  ::S3350C8_nt s16093c1f0;
  ::S11271C3 s16093c1f1;
  void  mf16093c1(); // _ZN8S16093C19mf16093c1Ev
};
//SIG(1 S16093C1) C1{ m FC2{ m Fi} FC3{ FC4{ FC5{ Fc[20]} Fc[16]} Fs Fc[2] FC6{ Fi Fc[128] FC7{ Fi[2] Fc[320] Fi}} FC8{ Fc[12]}}}


void  S16093C1 ::mf16093c1(){}

static void Test_S16093C1()
{
  {
    init_simple_test("S16093C1");
    S16093C1 lv;
    check2(sizeof(lv), 520, "sizeof(S16093C1)");
    check2(__alignof__(lv), 4, "__alignof__(S16093C1)");
    check_field_offset(lv, s16093c1f0, 0, "S16093C1.s16093c1f0");
    check_field_offset(lv, s16093c1f1, 4, "S16093C1.s16093c1f1");
  }
}
static Arrange_To_Call_Me vS16093C1(Test_S16093C1, "S16093C1", 520);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21077C4  {
  virtual  ~S21077C4(); // _ZN8S21077C4D1Ev
  virtual void  v4(); // _ZN8S21077C42v4Ev
  virtual void  v5(); // _ZN8S21077C42v5Ev
  virtual void  v6(); // _ZN8S21077C42v6Ev
  virtual void  v7(); // _ZN8S21077C42v7Ev
  virtual void  v8(); // _ZN8S21077C42v8Ev
  S21077C4(); // tgen
};
//SIG(-1 S21077C4) C1{ vd v1 v2 v3 v4 v5}


 S21077C4 ::~S21077C4(){ note_dtor("S21077C4", this);}
void  S21077C4 ::v4(){vfunc_called(this, "_ZN8S21077C42v4Ev");}
void  S21077C4 ::v5(){vfunc_called(this, "_ZN8S21077C42v5Ev");}
void  S21077C4 ::v6(){vfunc_called(this, "_ZN8S21077C42v6Ev");}
void  S21077C4 ::v7(){vfunc_called(this, "_ZN8S21077C42v7Ev");}
void  S21077C4 ::v8(){vfunc_called(this, "_ZN8S21077C42v8Ev");}
S21077C4 ::S21077C4(){ note_ctor("S21077C4", this);} // tgen

static void Test_S21077C4()
{
  extern Class_Descriptor cd_S21077C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S21077C4, buf);
    S21077C4 *dp, &lv = *(dp=new (buf) S21077C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S21077C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21077C4)");
    test_class_info(&lv, &cd_S21077C4);
    dp->~S21077C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21077C4(Test_S21077C4, "S21077C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S21077C4C1Ev();
extern void _ZN8S21077C4D1Ev();
Name_Map name_map_S21077C4[] = {
  NSPAIR(_ZN8S21077C4C1Ev),
  NSPAIR(_ZN8S21077C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21077C4[];
extern void _ZN8S21077C4D1Ev();
extern void _ZN8S21077C4D0Ev();
extern void _ZN8S21077C42v4Ev();
extern void _ZN8S21077C42v5Ev();
extern void _ZN8S21077C42v6Ev();
extern void _ZN8S21077C42v7Ev();
extern void _ZN8S21077C42v8Ev();
static  VTBL_ENTRY vtc_S21077C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21077C4[0]),
  (VTBL_ENTRY)&_ZN8S21077C4D1Ev,
  (VTBL_ENTRY)&_ZN8S21077C4D0Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v4Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v5Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v6Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v7Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v8Ev,
};
extern VTBL_ENTRY _ZTI8S21077C4[];
extern  VTBL_ENTRY _ZTV8S21077C4[];
Class_Descriptor cd_S21077C4 = {  "S21077C4", // class name
  0,0,//no base classes
  &(vtc_S21077C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S21077C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21077C4),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  S21077C3  : virtual S21077C4 {
  void *s21077c3f0;
  ::S21077C4 s21077c3f1;
  void *s21077c3f2;
  virtual  ~S21077C3(); // _ZN8S21077C3D2Ev
  virtual void  v9(); // _ZN8S21077C32v9Ev
  virtual void  v10(); // _ZN8S21077C33v10Ev
  virtual void  v11(); // _ZN8S21077C33v11Ev
  S21077C3(); // tgen
};
//SIG(-1 S21077C3) C1{ VBC2{ vd v4 v5 v6 v7 v8} vd v1 v2 v3 Fp FC2 Fp}


 S21077C3 ::~S21077C3(){ note_dtor("S21077C3", this);}
void  S21077C3 ::v9(){vfunc_called(this, "_ZN8S21077C32v9Ev");}
void  S21077C3 ::v10(){vfunc_called(this, "_ZN8S21077C33v10Ev");}
void  S21077C3 ::v11(){vfunc_called(this, "_ZN8S21077C33v11Ev");}
S21077C3 ::S21077C3(){ note_ctor("S21077C3", this);} // tgen

static void Test_S21077C3()
{
  extern Class_Descriptor cd_S21077C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S21077C3, buf);
    S21077C3 *dp, &lv = *(dp=new (buf) S21077C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S21077C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21077C3)");
    check_base_class_offset(lv, (S21077C4*), 0, "S21077C3");
    check_field_offset(lv, s21077c3f0, ABISELECT(8,4), "S21077C3.s21077c3f0");
    check_field_offset(lv, s21077c3f1, ABISELECT(16,8), "S21077C3.s21077c3f1");
    check_field_offset(lv, s21077c3f2, ABISELECT(24,12), "S21077C3.s21077c3f2");
    test_class_info(&lv, &cd_S21077C3);
    dp->~S21077C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21077C3(Test_S21077C3, "S21077C3", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S21077C3C1Ev();
extern void _ZN8S21077C3D2Ev();
Name_Map name_map_S21077C3[] = {
  NSPAIR(_ZN8S21077C3C1Ev),
  NSPAIR(_ZN8S21077C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S21077C4;
extern VTBL_ENTRY _ZTI8S21077C4[];
extern  VTBL_ENTRY _ZTV8S21077C4[];
static Base_Class bases_S21077C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21077C4,    0, //bcp->offset
    -1, //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 _ZTI8S21077C3[];
extern void _ZN8S21077C3D1Ev();
extern void _ZN8S21077C3D0Ev();
extern void _ZN8S21077C42v4Ev();
extern void _ZN8S21077C42v5Ev();
extern void _ZN8S21077C42v6Ev();
extern void _ZN8S21077C42v7Ev();
extern void _ZN8S21077C42v8Ev();
extern void _ZN8S21077C32v9Ev();
extern void _ZN8S21077C33v10Ev();
extern void _ZN8S21077C33v11Ev();
static  VTBL_ENTRY vtc_S21077C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21077C3[0]),
  (VTBL_ENTRY)&_ZN8S21077C3D1Ev,
  (VTBL_ENTRY)&_ZN8S21077C3D0Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v4Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v5Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v6Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v7Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v8Ev,
  (VTBL_ENTRY)&_ZN8S21077C32v9Ev,
  (VTBL_ENTRY)&_ZN8S21077C33v10Ev,
  (VTBL_ENTRY)&_ZN8S21077C33v11Ev,
};
extern VTBL_ENTRY _ZTV8S21077C3[];
static  VTT_ENTRY vtt_S21077C3[] = {
  {&(_ZTV8S21077C3[9]),  9,19},
  {&(_ZTV8S21077C3[9]),  9,19},
};
extern VTBL_ENTRY _ZTI8S21077C3[];
extern  VTBL_ENTRY _ZTV8S21077C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21077C3[];
Class_Descriptor cd_S21077C3 = {  "S21077C3", // class name
  bases_S21077C3, 1,
  &(vtc_S21077C3[0]), // expected_vtbl_contents
  &(vtt_S21077C3[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S21077C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S21077C3),19, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21077C3),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  S21077C2  : virtual S21077C3 {
  char s21077c2f0;
  virtual  ~S21077C2(); // _ZN8S21077C2D2Ev
  virtual void  v12(); // _ZN8S21077C23v12Ev
  virtual void  v13(); // _ZN8S21077C23v13Ev
  virtual void  v14(); // _ZN8S21077C23v14Ev
  virtual void  v15(); // _ZN8S21077C23v15Ev
  virtual void  v16(); // _ZN8S21077C23v16Ev
  S21077C2(); // tgen
};
//SIG(-1 S21077C2) C1{ VBC2{ VBC3{ vd v6 v7 v8 v9 v10} vd v11 v12 v13 Fp FC3 Fp} vd v1 v2 v3 v4 v5 Fc}


 S21077C2 ::~S21077C2(){ note_dtor("S21077C2", this);}
void  S21077C2 ::v12(){vfunc_called(this, "_ZN8S21077C23v12Ev");}
void  S21077C2 ::v13(){vfunc_called(this, "_ZN8S21077C23v13Ev");}
void  S21077C2 ::v14(){vfunc_called(this, "_ZN8S21077C23v14Ev");}
void  S21077C2 ::v15(){vfunc_called(this, "_ZN8S21077C23v15Ev");}
void  S21077C2 ::v16(){vfunc_called(this, "_ZN8S21077C23v16Ev");}
S21077C2 ::S21077C2(){ note_ctor("S21077C2", this);} // tgen

static void Test_S21077C2()
{
  extern Class_Descriptor cd_S21077C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S21077C2, buf);
    S21077C2 *dp, &lv = *(dp=new (buf) S21077C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S21077C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21077C2)");
    check_base_class_offset(lv, (S21077C4*)(S21077C3*), 0, "S21077C2");
    check_base_class_offset(lv, (S21077C3*), ABISELECT(16,8), "S21077C2");
    check_field_offset(lv, s21077c2f0, ABISELECT(8,4), "S21077C2.s21077c2f0");
    test_class_info(&lv, &cd_S21077C2);
    dp->~S21077C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21077C2(Test_S21077C2, "S21077C2", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S21077C2C1Ev();
extern void _ZN8S21077C2D2Ev();
Name_Map name_map_S21077C2[] = {
  NSPAIR(_ZN8S21077C2C1Ev),
  NSPAIR(_ZN8S21077C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S21077C4;
extern VTBL_ENTRY _ZTI8S21077C4[];
extern  VTBL_ENTRY _ZTV8S21077C4[];
extern Class_Descriptor cd_S21077C3;
extern VTBL_ENTRY _ZTI8S21077C3[];
extern  VTBL_ENTRY _ZTV8S21077C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21077C3[];
static Base_Class bases_S21077C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21077C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //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
    1, //immediately_derived
  0, 1},
  {&cd_S21077C3,    ABISELECT(16,8), //bcp->offset
    22, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21077C2[];
extern void _ZN8S21077C2D1Ev();
extern void _ZN8S21077C2D0Ev();
extern void _ZN8S21077C42v4Ev();
extern void _ZN8S21077C42v5Ev();
extern void _ZN8S21077C42v6Ev();
extern void _ZN8S21077C42v7Ev();
extern void _ZN8S21077C42v8Ev();
extern void _ZN8S21077C23v12Ev();
extern void _ZN8S21077C23v13Ev();
extern void _ZN8S21077C23v14Ev();
extern void _ZN8S21077C23v15Ev();
extern void _ZN8S21077C23v16Ev();
extern void ABISELECT(_ZTv0_n24_N8S21077C2D1Ev,_ZTv0_n12_N8S21077C2D1Ev)();
extern void ABISELECT(_ZThn16_N8S21077C2D1Ev,_ZThn8_N8S21077C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21077C2D0Ev,_ZTv0_n12_N8S21077C2D0Ev)();
extern void ABISELECT(_ZThn16_N8S21077C2D0Ev,_ZThn8_N8S21077C2D0Ev)() __attribute__((weak));
extern void _ZN8S21077C42v4Ev();
extern void _ZN8S21077C42v5Ev();
extern void _ZN8S21077C42v6Ev();
extern void _ZN8S21077C42v7Ev();
extern void _ZN8S21077C42v8Ev();
extern void _ZN8S21077C32v9Ev();
extern void _ZN8S21077C33v10Ev();
extern void _ZN8S21077C33v11Ev();
static  VTBL_ENTRY vtc_S21077C2[] = {
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21077C2[0]),
  (VTBL_ENTRY)&_ZN8S21077C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21077C2D0Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v4Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v5Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v6Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v7Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v8Ev,
  (VTBL_ENTRY)&_ZN8S21077C23v12Ev,
  (VTBL_ENTRY)&_ZN8S21077C23v13Ev,
  (VTBL_ENTRY)&_ZN8S21077C23v14Ev,
  (VTBL_ENTRY)&_ZN8S21077C23v15Ev,
  (VTBL_ENTRY)&_ZN8S21077C23v16Ev,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21077C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21077C2D1Ev,_ZTv0_n12_N8S21077C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21077C2D0Ev,_ZTv0_n12_N8S21077C2D0Ev),
  (VTBL_ENTRY)&_ZN8S21077C42v4Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v5Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v6Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v7Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v8Ev,
  (VTBL_ENTRY)&_ZN8S21077C32v9Ev,
  (VTBL_ENTRY)&_ZN8S21077C33v10Ev,
  (VTBL_ENTRY)&_ZN8S21077C33v11Ev,
};
extern VTBL_ENTRY _ZTV8S21077C2[];
extern void ABISELECT(_ZTv0_n24_N8S21077C3D1Ev,_ZTv0_n12_N8S21077C3D1Ev)();
extern void _ZN8S21077C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21077C3D0Ev,_ZTv0_n12_N8S21077C3D0Ev)();
extern void _ZN8S21077C3D0Ev() __attribute__((weak));
extern void _ZN8S21077C42v4Ev();
extern void _ZN8S21077C42v5Ev();
extern void _ZN8S21077C42v6Ev();
extern void _ZN8S21077C42v7Ev();
extern void _ZN8S21077C42v8Ev();
extern void _ZN8S21077C32v9Ev();
extern void _ZN8S21077C33v10Ev();
extern void _ZN8S21077C33v11Ev();
static  VTBL_ENTRY _tg__ZTV8S21077C3__8S21077C2[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21077C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21077C3D1Ev,_ZTv0_n12_N8S21077C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21077C3D0Ev,_ZTv0_n12_N8S21077C3D0Ev),
  (VTBL_ENTRY)&_ZN8S21077C42v4Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v5Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v6Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v7Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v8Ev,
  (VTBL_ENTRY)&_ZN8S21077C32v9Ev,
  (VTBL_ENTRY)&_ZN8S21077C33v10Ev,
  (VTBL_ENTRY)&_ZN8S21077C33v11Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21077C3D1Ev,_ZTv0_n12_N8S21077C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21077C3D0Ev,_ZTv0_n12_N8S21077C3D0Ev)();
extern void _ZN8S21077C42v4Ev();
extern void _ZN8S21077C42v5Ev();
extern void _ZN8S21077C42v6Ev();
extern void _ZN8S21077C42v7Ev();
extern void _ZN8S21077C42v8Ev();
static  VTBL_ENTRY _tg__ZTV8S21077C4__8S21077C3__8S21077C2[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S21077C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21077C3D1Ev,_ZTv0_n12_N8S21077C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21077C3D0Ev,_ZTv0_n12_N8S21077C3D0Ev),
  (VTBL_ENTRY)&_ZN8S21077C42v4Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v5Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v6Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v7Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v8Ev,
};
static  VTT_ENTRY vtt_S21077C2[] = {
  {&(_ZTV8S21077C2[10]),  10,44},
  {&(_ZTV8S21077C2[34]),  34,44},
  {&(_ZTV8S21077C2[10]),  10,44},
  {&(_tg__ZTV8S21077C3__8S21077C2[9]),  9,19},
  {&(_tg__ZTV8S21077C4__8S21077C3__8S21077C2[8]),  8,15},
};
extern VTBL_ENTRY _ZTI8S21077C2[];
extern  VTBL_ENTRY _ZTV8S21077C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21077C2[];
static VTBL_ENTRY alt_thunk_names44[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21077C3D0Ev,_ZTv0_n12_N8S21077C3D0Ev), // 
  (VTBL_ENTRY)_ZN8S21077C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21077C3D1Ev,_ZTv0_n12_N8S21077C3D1Ev), // 
  (VTBL_ENTRY)_ZN8S21077C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21077C2D0Ev,_ZTv0_n12_N8S21077C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21077C2D0Ev,_ZThn8_N8S21077C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21077C2D1Ev,_ZTv0_n12_N8S21077C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21077C2D1Ev,_ZThn8_N8S21077C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21077C2 = {  "S21077C2", // class name
  bases_S21077C2, 2,
  &(vtc_S21077C2[0]), // expected_vtbl_contents
  &(vtt_S21077C2[0]), // expected_vtt_contents
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S21077C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S21077C2),44, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21077C2),5, //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  S21077C1  : virtual S21077C2 {
  void *s21077c1f0;
  virtual void  v1(); // _ZN8S21077C12v1Ev
  virtual void  v2(); // _ZN8S21077C12v2Ev
  virtual void  v3(); // _ZN8S21077C12v3Ev
  ~S21077C1(); // tgen
  S21077C1(); // tgen
};
//SIG(1 S21077C1) C1{ VBC2{ VBC3{ VBC4{ vd v4 v5 v6 v7 v8} vd v9 v10 v11 Fp FC4 Fp} vd v12 v13 v14 v15 v16 Fc} v1 v2 v3 Fp}


void  S21077C1 ::v1(){vfunc_called(this, "_ZN8S21077C12v1Ev");}
void  S21077C1 ::v2(){vfunc_called(this, "_ZN8S21077C12v2Ev");}
void  S21077C1 ::v3(){vfunc_called(this, "_ZN8S21077C12v3Ev");}
S21077C1 ::~S21077C1(){ note_dtor("S21077C1", this);} // tgen
S21077C1 ::S21077C1(){ note_ctor("S21077C1", this);} // tgen

static void Test_S21077C1()
{
  extern Class_Descriptor cd_S21077C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S21077C1, buf);
    S21077C1 *dp, &lv = *(dp=new (buf) S21077C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S21077C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21077C1)");
    check_base_class_offset(lv, (S21077C4*)(S21077C3*), 0, "S21077C1");
    check_base_class_offset(lv, (S21077C3*)(S21077C2*), ABISELECT(32,16), "S21077C1");
    check_base_class_offset(lv, (S21077C2*), ABISELECT(16,8), "S21077C1");
    check_field_offset(lv, s21077c1f0, ABISELECT(8,4), "S21077C1.s21077c1f0");
    test_class_info(&lv, &cd_S21077C1);
    dp->~S21077C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21077C1(Test_S21077C1, "S21077C1", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN8S21077C1C1Ev();
extern void _ZN8S21077C1D1Ev();
Name_Map name_map_S21077C1[] = {
  NSPAIR(_ZN8S21077C1C1Ev),
  NSPAIR(_ZN8S21077C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S21077C4;
extern VTBL_ENTRY _ZTI8S21077C4[];
extern  VTBL_ENTRY _ZTV8S21077C4[];
extern Class_Descriptor cd_S21077C3;
extern VTBL_ENTRY _ZTI8S21077C3[];
extern  VTBL_ENTRY _ZTV8S21077C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21077C3[];
extern Class_Descriptor cd_S21077C2;
extern VTBL_ENTRY _ZTI8S21077C2[];
extern  VTBL_ENTRY _ZTV8S21077C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21077C2[];
static Base_Class bases_S21077C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21077C4,    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
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S21077C3,    ABISELECT(32,16), //bcp->offset
    48, //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
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S21077C2,    ABISELECT(16,8), //bcp->offset
    21, //bcp->virtual_function_table_offset
    15, //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},
  {0}};
extern VTBL_ENTRY _ZTI8S21077C1[];
extern void _ZN8S21077C1D1Ev();
extern void _ZN8S21077C1D0Ev();
extern void _ZN8S21077C42v4Ev();
extern void _ZN8S21077C42v5Ev();
extern void _ZN8S21077C42v6Ev();
extern void _ZN8S21077C42v7Ev();
extern void _ZN8S21077C42v8Ev();
extern void _ZN8S21077C12v1Ev();
extern void _ZN8S21077C12v2Ev();
extern void _ZN8S21077C12v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S21077C1D1Ev,_ZTv0_n12_N8S21077C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S21077C1D1Ev,_ZThn8_N8S21077C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21077C1D0Ev,_ZTv0_n12_N8S21077C1D0Ev)();
extern void ABISELECT(_ZThn16_N8S21077C1D0Ev,_ZThn8_N8S21077C1D0Ev)() __attribute__((weak));
extern void _ZN8S21077C42v4Ev();
extern void _ZN8S21077C42v5Ev();
extern void _ZN8S21077C42v6Ev();
extern void _ZN8S21077C42v7Ev();
extern void _ZN8S21077C42v8Ev();
extern void _ZN8S21077C23v12Ev();
extern void _ZN8S21077C23v13Ev();
extern void _ZN8S21077C23v14Ev();
extern void _ZN8S21077C23v15Ev();
extern void _ZN8S21077C23v16Ev();
extern void ABISELECT(_ZTv0_n24_N8S21077C1D1Ev,_ZTv0_n12_N8S21077C1D1Ev)();
extern void ABISELECT(_ZThn32_N8S21077C1D1Ev,_ZThn16_N8S21077C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21077C1D0Ev,_ZTv0_n12_N8S21077C1D0Ev)();
extern void ABISELECT(_ZThn32_N8S21077C1D0Ev,_ZThn16_N8S21077C1D0Ev)() __attribute__((weak));
extern void _ZN8S21077C42v4Ev();
extern void _ZN8S21077C42v5Ev();
extern void _ZN8S21077C42v6Ev();
extern void _ZN8S21077C42v7Ev();
extern void _ZN8S21077C42v8Ev();
extern void _ZN8S21077C32v9Ev();
extern void _ZN8S21077C33v10Ev();
extern void _ZN8S21077C33v11Ev();
static  VTBL_ENTRY vtc_S21077C1[] = {
  0,
  ABISELECT(32,16),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21077C1[0]),
  (VTBL_ENTRY)&_ZN8S21077C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21077C1D0Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v4Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v5Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v6Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v7Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v8Ev,
  (VTBL_ENTRY)&_ZN8S21077C12v1Ev,
  (VTBL_ENTRY)&_ZN8S21077C12v2Ev,
  (VTBL_ENTRY)&_ZN8S21077C12v3Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(16,8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21077C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21077C1D1Ev,_ZTv0_n12_N8S21077C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21077C1D0Ev,_ZTv0_n12_N8S21077C1D0Ev),
  (VTBL_ENTRY)&_ZN8S21077C42v4Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v5Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v6Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v7Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v8Ev,
  (VTBL_ENTRY)&_ZN8S21077C23v12Ev,
  (VTBL_ENTRY)&_ZN8S21077C23v13Ev,
  (VTBL_ENTRY)&_ZN8S21077C23v14Ev,
  (VTBL_ENTRY)&_ZN8S21077C23v15Ev,
  (VTBL_ENTRY)&_ZN8S21077C23v16Ev,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S21077C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21077C1D1Ev,_ZTv0_n12_N8S21077C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21077C1D0Ev,_ZTv0_n12_N8S21077C1D0Ev),
  (VTBL_ENTRY)&_ZN8S21077C42v4Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v5Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v6Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v7Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v8Ev,
  (VTBL_ENTRY)&_ZN8S21077C32v9Ev,
  (VTBL_ENTRY)&_ZN8S21077C33v10Ev,
  (VTBL_ENTRY)&_ZN8S21077C33v11Ev,
};
extern VTBL_ENTRY _ZTV8S21077C1[];
extern void ABISELECT(_ZTv0_n24_N8S21077C2D1Ev,_ZTv0_n12_N8S21077C2D1Ev)();
extern void _ZN8S21077C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21077C2D0Ev,_ZTv0_n12_N8S21077C2D0Ev)();
extern void _ZN8S21077C2D0Ev() __attribute__((weak));
extern void _ZN8S21077C42v4Ev();
extern void _ZN8S21077C42v5Ev();
extern void _ZN8S21077C42v6Ev();
extern void _ZN8S21077C42v7Ev();
extern void _ZN8S21077C42v8Ev();
extern void _ZN8S21077C23v12Ev();
extern void _ZN8S21077C23v13Ev();
extern void _ZN8S21077C23v14Ev();
extern void _ZN8S21077C23v15Ev();
extern void _ZN8S21077C23v16Ev();
static  VTBL_ENTRY _tg__ZTV8S21077C2__8S21077C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(16,8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21077C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21077C2D1Ev,_ZTv0_n12_N8S21077C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21077C2D0Ev,_ZTv0_n12_N8S21077C2D0Ev),
  (VTBL_ENTRY)&_ZN8S21077C42v4Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v5Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v6Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v7Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v8Ev,
  (VTBL_ENTRY)&_ZN8S21077C23v12Ev,
  (VTBL_ENTRY)&_ZN8S21077C23v13Ev,
  (VTBL_ENTRY)&_ZN8S21077C23v14Ev,
  (VTBL_ENTRY)&_ZN8S21077C23v15Ev,
  (VTBL_ENTRY)&_ZN8S21077C23v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21077C2D1Ev,_ZTv0_n12_N8S21077C2D1Ev)();
extern void ABISELECT(_ZThn16_N8S21077C2D1Ev,_ZThn8_N8S21077C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21077C2D0Ev,_ZTv0_n12_N8S21077C2D0Ev)();
extern void ABISELECT(_ZThn16_N8S21077C2D0Ev,_ZThn8_N8S21077C2D0Ev)() __attribute__((weak));
extern void _ZN8S21077C42v4Ev();
extern void _ZN8S21077C42v5Ev();
extern void _ZN8S21077C42v6Ev();
extern void _ZN8S21077C42v7Ev();
extern void _ZN8S21077C42v8Ev();
extern void _ZN8S21077C32v9Ev();
extern void _ZN8S21077C33v10Ev();
extern void _ZN8S21077C33v11Ev();
static  VTBL_ENTRY _tg__ZTV8S21077C3__8S21077C2__8S21077C1[] = {
  0,
  0,
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21077C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21077C2D1Ev,_ZTv0_n12_N8S21077C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21077C2D0Ev,_ZTv0_n12_N8S21077C2D0Ev),
  (VTBL_ENTRY)&_ZN8S21077C42v4Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v5Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v6Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v7Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v8Ev,
  (VTBL_ENTRY)&_ZN8S21077C32v9Ev,
  (VTBL_ENTRY)&_ZN8S21077C33v10Ev,
  (VTBL_ENTRY)&_ZN8S21077C33v11Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21077C2D1Ev,_ZTv0_n12_N8S21077C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21077C2D0Ev,_ZTv0_n12_N8S21077C2D0Ev)();
extern void _ZN8S21077C42v4Ev();
extern void _ZN8S21077C42v5Ev();
extern void _ZN8S21077C42v6Ev();
extern void _ZN8S21077C42v7Ev();
extern void _ZN8S21077C42v8Ev();
static  VTBL_ENTRY _tg__ZTV8S21077C4__8S21077C2__8S21077C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S21077C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21077C2D1Ev,_ZTv0_n12_N8S21077C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21077C2D0Ev,_ZTv0_n12_N8S21077C2D0Ev),
  (VTBL_ENTRY)&_ZN8S21077C42v4Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v5Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v6Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v7Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v8Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21077C3D1Ev,_ZTv0_n12_N8S21077C3D1Ev)();
extern void _ZN8S21077C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21077C3D0Ev,_ZTv0_n12_N8S21077C3D0Ev)();
extern void _ZN8S21077C3D0Ev() __attribute__((weak));
extern void _ZN8S21077C42v4Ev();
extern void _ZN8S21077C42v5Ev();
extern void _ZN8S21077C42v6Ev();
extern void _ZN8S21077C42v7Ev();
extern void _ZN8S21077C42v8Ev();
extern void _ZN8S21077C32v9Ev();
extern void _ZN8S21077C33v10Ev();
extern void _ZN8S21077C33v11Ev();
static  VTBL_ENTRY _tg__ZTV8S21077C3__8S21077C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21077C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21077C3D1Ev,_ZTv0_n12_N8S21077C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21077C3D0Ev,_ZTv0_n12_N8S21077C3D0Ev),
  (VTBL_ENTRY)&_ZN8S21077C42v4Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v5Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v6Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v7Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v8Ev,
  (VTBL_ENTRY)&_ZN8S21077C32v9Ev,
  (VTBL_ENTRY)&_ZN8S21077C33v10Ev,
  (VTBL_ENTRY)&_ZN8S21077C33v11Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21077C3D1Ev,_ZTv0_n12_N8S21077C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21077C3D0Ev,_ZTv0_n12_N8S21077C3D0Ev)();
extern void _ZN8S21077C42v4Ev();
extern void _ZN8S21077C42v5Ev();
extern void _ZN8S21077C42v6Ev();
extern void _ZN8S21077C42v7Ev();
extern void _ZN8S21077C42v8Ev();
static  VTBL_ENTRY _tg__ZTV8S21077C4__8S21077C3__8S21077C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,16),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S21077C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21077C3D1Ev,_ZTv0_n12_N8S21077C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21077C3D0Ev,_ZTv0_n12_N8S21077C3D0Ev),
  (VTBL_ENTRY)&_ZN8S21077C42v4Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v5Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v6Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v7Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v8Ev,
};
static  VTT_ENTRY vtt_S21077C1[] = {
  {&(_ZTV8S21077C1[11]),  11,70},
  {&(_ZTV8S21077C1[36]),  36,70},
  {&(_ZTV8S21077C1[60]),  60,70},
  {&(_ZTV8S21077C1[11]),  11,70},
  {&(_tg__ZTV8S21077C2__8S21077C1[10]),  10,22},
  {&(_tg__ZTV8S21077C3__8S21077C2__8S21077C1[12]),  12,22},
  {&(_tg__ZTV8S21077C4__8S21077C2__8S21077C1[8]),  8,15},
  {&(_tg__ZTV8S21077C3__8S21077C1[9]),  9,19},
  {&(_tg__ZTV8S21077C4__8S21077C3__8S21077C1[8]),  8,15},
};
extern VTBL_ENTRY _ZTI8S21077C1[];
extern  VTBL_ENTRY _ZTV8S21077C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21077C1[];
static VTBL_ENTRY alt_thunk_names45[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21077C3D0Ev,_ZTv0_n12_N8S21077C3D0Ev), // 
  (VTBL_ENTRY)_ZN8S21077C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21077C3D1Ev,_ZTv0_n12_N8S21077C3D1Ev), // 
  (VTBL_ENTRY)_ZN8S21077C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21077C2D0Ev,_ZTv0_n12_N8S21077C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21077C2D0Ev,_ZThn8_N8S21077C2D0Ev),
  (VTBL_ENTRY)_ZN8S21077C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21077C2D1Ev,_ZTv0_n12_N8S21077C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21077C2D1Ev,_ZThn8_N8S21077C2D1Ev),
  (VTBL_ENTRY)_ZN8S21077C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21077C1D0Ev,_ZTv0_n12_N8S21077C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S21077C1D0Ev,_ZThn16_N8S21077C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21077C1D0Ev,_ZThn8_N8S21077C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21077C1D1Ev,_ZTv0_n12_N8S21077C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S21077C1D1Ev,_ZThn16_N8S21077C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21077C1D1Ev,_ZThn8_N8S21077C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21077C1 = {  "S21077C1", // class name
  bases_S21077C1, 3,
  &(vtc_S21077C1[0]), // expected_vtbl_contents
  &(vtt_S21077C1[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI8S21077C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S21077C1),70, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21077C1),9, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names45,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1754C3  : S6282C14_nt {
  void *s1754c3f0;
  int s1754c3f1[2];
  unsigned int s1754c3f2:1;
  unsigned int s1754c3f3:1;
  unsigned int s1754c3f4:1;
  unsigned int s1754c3f5:1;
  int s1754c3f6[2];
  virtual  ~S1754C3(); // _ZN7S1754C3D1Ev
  S1754C3(); // tgen
};
//SIG(-1 S1754C3) C1{ BC2{ vd m Fi} vd Fp Fi[2] Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S1754C3 ::~S1754C3(){ note_dtor("S1754C3", this);}
S1754C3 ::S1754C3(){ note_ctor("S1754C3", this);} // tgen

static void Test_S1754C3()
{
  extern Class_Descriptor cd_S1754C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S1754C3, buf);
    S1754C3 *dp, &lv = *(dp=new (buf) S1754C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S1754C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1754C3)");
    check_base_class_offset(lv, (S6282C14_nt*), 0, "S1754C3");
    check_field_offset(lv, s1754c3f0, ABISELECT(16,8), "S1754C3.s1754c3f0");
    check_field_offset(lv, s1754c3f1, ABISELECT(24,12), "S1754C3.s1754c3f1");
    set_bf_and_test(lv, s1754c3f2, ABISELECT(32,20), 0, 1, 1, "S1754C3");
    set_bf_and_test(lv, s1754c3f3, ABISELECT(32,20), 1, 1, 1, "S1754C3");
    set_bf_and_test(lv, s1754c3f4, ABISELECT(32,20), 2, 1, 1, "S1754C3");
    set_bf_and_test(lv, s1754c3f5, ABISELECT(32,20), 3, 1, 1, "S1754C3");
    check_field_offset(lv, s1754c3f6, ABISELECT(36,24), "S1754C3.s1754c3f6");
    test_class_info(&lv, &cd_S1754C3);
    dp->~S1754C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1754C3(Test_S1754C3, "S1754C3", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S1754C3C1Ev();
extern void _ZN7S1754C3D1Ev();
Name_Map name_map_S1754C3[] = {
  NSPAIR(_ZN7S1754C3C1Ev),
  NSPAIR(_ZN7S1754C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6282C14_nt;
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
extern  VTBL_ENTRY _ZTV11S6282C14_nt[];
static Base_Class bases_S1754C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6282C14_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 _ZTI7S1754C3[];
extern void _ZN7S1754C3D1Ev();
extern void _ZN7S1754C3D0Ev();
static  VTBL_ENTRY vtc_S1754C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1754C3[0]),
  (VTBL_ENTRY)&_ZN7S1754C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1754C3D0Ev,
};
extern VTBL_ENTRY _ZTI7S1754C3[];
extern  VTBL_ENTRY _ZTV7S1754C3[];
Class_Descriptor cd_S1754C3 = {  "S1754C3", // class name
  bases_S1754C3, 1,
  &(vtc_S1754C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S1754C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1754C3),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1754C2  : S1754C3 {
  void *s1754c2f0;
  virtual  ~S1754C2(); // _ZN7S1754C2D1Ev
  S1754C2(); // tgen
};
//SIG(-1 S1754C2) C1{ BC2{ BC3{ vd m Fi} vd Fp Fi[2] Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd Fp}


 S1754C2 ::~S1754C2(){ note_dtor("S1754C2", this);}
S1754C2 ::S1754C2(){ note_ctor("S1754C2", this);} // tgen

static void Test_S1754C2()
{
  extern Class_Descriptor cd_S1754C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S1754C2, buf);
    S1754C2 *dp, &lv = *(dp=new (buf) S1754C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S1754C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1754C2)");
    check_base_class_offset(lv, (S6282C14_nt*)(S1754C3*), 0, "S1754C2");
    check_base_class_offset(lv, (S1754C3*), 0, "S1754C2");
    check_field_offset(lv, s1754c2f0, ABISELECT(48,32), "S1754C2.s1754c2f0");
    test_class_info(&lv, &cd_S1754C2);
    dp->~S1754C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1754C2(Test_S1754C2, "S1754C2", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN7S1754C2C1Ev();
extern void _ZN7S1754C2D1Ev();
Name_Map name_map_S1754C2[] = {
  NSPAIR(_ZN7S1754C2C1Ev),
  NSPAIR(_ZN7S1754C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6282C14_nt;
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
extern  VTBL_ENTRY _ZTV11S6282C14_nt[];
extern Class_Descriptor cd_S1754C3;
extern VTBL_ENTRY _ZTI7S1754C3[];
extern  VTBL_ENTRY _ZTV7S1754C3[];
static Base_Class bases_S1754C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6282C14_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_S1754C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1754C2[];
extern void _ZN7S1754C2D1Ev();
extern void _ZN7S1754C2D0Ev();
static  VTBL_ENTRY vtc_S1754C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1754C2[0]),
  (VTBL_ENTRY)&_ZN7S1754C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1754C2D0Ev,
};
extern VTBL_ENTRY _ZTI7S1754C2[];
extern  VTBL_ENTRY _ZTV7S1754C2[];
Class_Descriptor cd_S1754C2 = {  "S1754C2", // class name
  bases_S1754C2, 2,
  &(vtc_S1754C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI7S1754C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1754C2),4, //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  S1754C5  {
  int s1754c5f0[3];
  short s1754c5f1[2];
};
//SIG(-1 S1754C5) C1{ Fi[3] Fs[2]}



static void Test_S1754C5()
{
  {
    init_simple_test("S1754C5");
    S1754C5 lv;
    check2(sizeof(lv), 16, "sizeof(S1754C5)");
    check2(__alignof__(lv), 4, "__alignof__(S1754C5)");
    check_field_offset(lv, s1754c5f0, 0, "S1754C5.s1754c5f0");
    check_field_offset(lv, s1754c5f1, 12, "S1754C5.s1754c5f1");
  }
}
static Arrange_To_Call_Me vS1754C5(Test_S1754C5, "S1754C5", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1754C1  : S1754C2 {
  ::S1754C5 s1754c1f0;
  void *s1754c1f1;
  char s1754c1f2[16];
  virtual  ~S1754C1(); // _ZN7S1754C1D1Ev
  S1754C1(); // tgen
};
//SIG(1 S1754C1) C1{ BC2{ BC3{ BC4{ vd m Fi} vd Fp Fi[2] Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd Fp} vd FC5{ Fi[3] Fs[2]} Fp Fc[16]}


 S1754C1 ::~S1754C1(){ note_dtor("S1754C1", this);}
S1754C1 ::S1754C1(){ note_ctor("S1754C1", this);} // tgen

static void Test_S1754C1()
{
  extern Class_Descriptor cd_S1754C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,19)];
    init_test(&cd_S1754C1, buf);
    S1754C1 *dp, &lv = *(dp=new (buf) S1754C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,72), "sizeof(S1754C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1754C1)");
    check_base_class_offset(lv, (S6282C14_nt*)(S1754C3*)(S1754C2*), 0, "S1754C1");
    check_base_class_offset(lv, (S1754C3*)(S1754C2*), 0, "S1754C1");
    check_base_class_offset(lv, (S1754C2*), 0, "S1754C1");
    check_field_offset(lv, s1754c1f0, ABISELECT(56,36), "S1754C1.s1754c1f0");
    check_field_offset(lv, s1754c1f1, ABISELECT(72,52), "S1754C1.s1754c1f1");
    check_field_offset(lv, s1754c1f2, ABISELECT(80,56), "S1754C1.s1754c1f2");
    test_class_info(&lv, &cd_S1754C1);
    dp->~S1754C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1754C1(Test_S1754C1, "S1754C1", ABISELECT(96,72));

#else // __cplusplus

extern void _ZN7S1754C1C1Ev();
extern void _ZN7S1754C1D1Ev();
Name_Map name_map_S1754C1[] = {
  NSPAIR(_ZN7S1754C1C1Ev),
  NSPAIR(_ZN7S1754C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6282C14_nt;
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
extern  VTBL_ENTRY _ZTV11S6282C14_nt[];
extern Class_Descriptor cd_S1754C3;
extern VTBL_ENTRY _ZTI7S1754C3[];
extern  VTBL_ENTRY _ZTV7S1754C3[];
extern Class_Descriptor cd_S1754C2;
extern VTBL_ENTRY _ZTI7S1754C2[];
extern  VTBL_ENTRY _ZTV7S1754C2[];
static Base_Class bases_S1754C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6282C14_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_S1754C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1754C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1754C1[];
extern void _ZN7S1754C1D1Ev();
extern void _ZN7S1754C1D0Ev();
static  VTBL_ENTRY vtc_S1754C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1754C1[0]),
  (VTBL_ENTRY)&_ZN7S1754C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1754C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S1754C1[];
extern  VTBL_ENTRY _ZTV7S1754C1[];
Class_Descriptor cd_S1754C1 = {  "S1754C1", // class name
  bases_S1754C1, 3,
  &(vtc_S1754C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,72), // object size
  NSPAIRA(_ZTI7S1754C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1754C1),4, //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  S7499C2  : virtual S2121C38 {
  ~S7499C2(); // tgen
  S7499C2(); // tgen
};
//SIG(-1 S7499C2) C1{ VBC2{ m}}


S7499C2 ::~S7499C2(){ note_dtor("S7499C2", this);} // tgen
S7499C2 ::S7499C2(){ note_ctor("S7499C2", this);} // tgen

static void Test_S7499C2()
{
  extern Class_Descriptor cd_S7499C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7499C2, buf);
    S7499C2 *dp, &lv = *(dp=new (buf) S7499C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7499C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7499C2)");
    check_base_class_offset(lv, (S2121C38*), 0, "S7499C2");
    test_class_info(&lv, &cd_S7499C2);
    dp->~S7499C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7499C2(Test_S7499C2, "S7499C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7499C2C1Ev();
extern void _ZN7S7499C2D1Ev();
Name_Map name_map_S7499C2[] = {
  NSPAIR(_ZN7S7499C2C1Ev),
  NSPAIR(_ZN7S7499C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
static Base_Class bases_S7499C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S7499C2[];
static  VTBL_ENTRY vtc_S7499C2[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7499C2[0]),
};
extern VTBL_ENTRY _ZTV7S7499C2[];
static  VTT_ENTRY vtt_S7499C2[] = {
  {&(_ZTV7S7499C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7499C2[];
extern  VTBL_ENTRY _ZTV7S7499C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7499C2[];
Class_Descriptor cd_S7499C2 = {  "S7499C2", // class name
  bases_S7499C2, 1,
  &(vtc_S7499C2[0]), // expected_vtbl_contents
  &(vtt_S7499C2[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7499C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7499C2),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7499C2),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  S7499C9  {
  virtual void  v1(); // _ZN7S7499C92v1Ev
  ~S7499C9(); // tgen
  S7499C9(); // tgen
};
//SIG(-1 S7499C9) C1{ v1}


void  S7499C9 ::v1(){vfunc_called(this, "_ZN7S7499C92v1Ev");}
S7499C9 ::~S7499C9(){ note_dtor("S7499C9", this);} // tgen
S7499C9 ::S7499C9(){ note_ctor("S7499C9", this);} // tgen

static void Test_S7499C9()
{
  extern Class_Descriptor cd_S7499C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7499C9, buf);
    S7499C9 *dp, &lv = *(dp=new (buf) S7499C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7499C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7499C9)");
    test_class_info(&lv, &cd_S7499C9);
    dp->~S7499C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7499C9(Test_S7499C9, "S7499C9", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7499C9C1Ev();
extern void _ZN7S7499C9D1Ev();
Name_Map name_map_S7499C9[] = {
  NSPAIR(_ZN7S7499C9C1Ev),
  NSPAIR(_ZN7S7499C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7499C9[];
extern void _ZN7S7499C92v1Ev();
static  VTBL_ENTRY vtc_S7499C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7499C9[0]),
  (VTBL_ENTRY)&_ZN7S7499C92v1Ev,
};
extern VTBL_ENTRY _ZTI7S7499C9[];
extern  VTBL_ENTRY _ZTV7S7499C9[];
Class_Descriptor cd_S7499C9 = {  "S7499C9", // class name
  0,0,//no base classes
  &(vtc_S7499C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7499C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7499C9),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  S7499C8  : virtual S2121C38 , S7499C9 , virtual S2121C28 {
  ~S7499C8(); // tgen
  S7499C8(); // tgen
};
//SIG(-1 S7499C8) C1{ VBC2{ m} BC3{ v1} VBC4{ m}}


S7499C8 ::~S7499C8(){ note_dtor("S7499C8", this);} // tgen
S7499C8 ::S7499C8(){ note_ctor("S7499C8", this);} // tgen

static void Test_S7499C8()
{
  extern Class_Descriptor cd_S7499C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7499C8, buf);
    S7499C8 *dp, &lv = *(dp=new (buf) S7499C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7499C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7499C8)");
    check_base_class_offset(lv, (S2121C38*), 0, "S7499C8");
    check_base_class_offset(lv, (S7499C9*), 0, "S7499C8");
    check_base_class_offset(lv, (S2121C28*), 0, "S7499C8");
    test_class_info(&lv, &cd_S7499C8);
    dp->~S7499C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7499C8(Test_S7499C8, "S7499C8", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7499C8C1Ev();
extern void _ZN7S7499C8D1Ev();
Name_Map name_map_S7499C8[] = {
  NSPAIR(_ZN7S7499C8C1Ev),
  NSPAIR(_ZN7S7499C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S7499C9;
extern VTBL_ENTRY _ZTI7S7499C9[];
extern  VTBL_ENTRY _ZTV7S7499C9[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
static Base_Class bases_S7499C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S7499C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S7499C8[];
extern void _ZN7S7499C92v1Ev();
static  VTBL_ENTRY vtc_S7499C8[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7499C8[0]),
  (VTBL_ENTRY)&_ZN7S7499C92v1Ev,
};
extern VTBL_ENTRY _ZTV7S7499C8[];
static  VTT_ENTRY vtt_S7499C8[] = {
  {&(_ZTV7S7499C8[4]),  4,5},
};
extern VTBL_ENTRY _ZTI7S7499C8[];
extern  VTBL_ENTRY _ZTV7S7499C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7499C8[];
Class_Descriptor cd_S7499C8 = {  "S7499C8", // class name
  bases_S7499C8, 3,
  &(vtc_S7499C8[0]), // expected_vtbl_contents
  &(vtt_S7499C8[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7499C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7499C8),5, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7499C8),1, //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  S7499C7  : S2121C38 , S7499C8 {
  virtual void  v2(); // _ZN7S7499C72v2Ev
  ~S7499C7(); // tgen
  S7499C7(); // tgen
};
//SIG(-1 S7499C7) C1{ BC2{ m} BC3{ VBC2 BC4{ v2} VBC5{ m}} v1}


void  S7499C7 ::v2(){vfunc_called(this, "_ZN7S7499C72v2Ev");}
S7499C7 ::~S7499C7(){ note_dtor("S7499C7", this);} // tgen
S7499C7 ::S7499C7(){ note_ctor("S7499C7", this);} // tgen

static void Test_S7499C7()
{
  extern Class_Descriptor cd_S7499C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7499C7, buf);
    S7499C7 *dp, &lv = *(dp=new (buf) S7499C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7499C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7499C7)");
    /*is_ambiguous_... S7499C7::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*), 0, "S7499C7");
    check_base_class_offset(lv, (S2121C38*)(S7499C8*), ABISELECT(8,4), "S7499C7");
    check_base_class_offset(lv, (S7499C9*)(S7499C8*), 0, "S7499C7");
    check_base_class_offset(lv, (S2121C28*)(S7499C8*), 0, "S7499C7");
    check_base_class_offset(lv, (S7499C8*), 0, "S7499C7");
    test_class_info(&lv, &cd_S7499C7);
    dp->~S7499C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7499C7(Test_S7499C7, "S7499C7", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7499C7C1Ev();
extern void _ZN7S7499C7D1Ev();
Name_Map name_map_S7499C7[] = {
  NSPAIR(_ZN7S7499C7C1Ev),
  NSPAIR(_ZN7S7499C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S7499C9;
extern VTBL_ENTRY _ZTI7S7499C9[];
extern  VTBL_ENTRY _ZTV7S7499C9[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S7499C8;
extern VTBL_ENTRY _ZTI7S7499C8[];
extern  VTBL_ENTRY _ZTV7S7499C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7499C8[];
static Base_Class bases_S7499C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2121C38,    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, 1},
  {&cd_S7499C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7499C8,    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 _ZTI7S7499C7[];
extern void _ZN7S7499C92v1Ev();
extern void _ZN7S7499C72v2Ev();
static  VTBL_ENTRY vtc_S7499C7[] = {
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7499C7[0]),
  (VTBL_ENTRY)&_ZN7S7499C92v1Ev,
  (VTBL_ENTRY)&_ZN7S7499C72v2Ev,
};
extern VTBL_ENTRY _ZTV7S7499C7[];
extern void _ZN7S7499C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7499C8__7S7499C7[] = {
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7499C8[0]),
  (VTBL_ENTRY)&_ZN7S7499C92v1Ev,
};
static  VTT_ENTRY vtt_S7499C7[] = {
  {&(_ZTV7S7499C7[4]),  4,6},
  {&(_tg__ZTV7S7499C8__7S7499C7[4]),  4,5},
};
extern VTBL_ENTRY _ZTI7S7499C7[];
extern  VTBL_ENTRY _ZTV7S7499C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7499C7[];
Class_Descriptor cd_S7499C7 = {  "S7499C7", // class name
  bases_S7499C7, 5,
  &(vtc_S7499C7[0]), // expected_vtbl_contents
  &(vtt_S7499C7[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7499C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7499C7),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7499C7),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  S7499C6  : virtual S7499C7 {
  int s7499c6f0;
  ~S7499C6(); // tgen
  S7499C6(); // tgen
};
//SIG(-1 S7499C6) C1{ VBC2{ BC3{ m} BC4{ VBC3 BC5{ v1} VBC6{ m}} v2} Fi}


S7499C6 ::~S7499C6(){ note_dtor("S7499C6", this);} // tgen
S7499C6 ::S7499C6(){ note_ctor("S7499C6", this);} // tgen

static void Test_S7499C6()
{
  extern Class_Descriptor cd_S7499C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S7499C6, buf);
    S7499C6 *dp, &lv = *(dp=new (buf) S7499C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S7499C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7499C6)");
    /*is_ambiguous_... S7499C7::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S7499C7*), 0, "S7499C6");
    check_base_class_offset(lv, (S2121C38*)(S7499C8*)(S7499C7*), ABISELECT(12,8), "S7499C6");
    check_base_class_offset(lv, (S7499C9*)(S7499C8*)(S7499C7*), 0, "S7499C6");
    check_base_class_offset(lv, (S2121C28*)(S7499C8*)(S7499C7*), 0, "S7499C6");
    check_base_class_offset(lv, (S7499C8*)(S7499C7*), 0, "S7499C6");
    check_base_class_offset(lv, (S7499C7*), 0, "S7499C6");
    check_field_offset(lv, s7499c6f0, ABISELECT(8,4), "S7499C6.s7499c6f0");
    test_class_info(&lv, &cd_S7499C6);
    dp->~S7499C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7499C6(Test_S7499C6, "S7499C6", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S7499C6C1Ev();
extern void _ZN7S7499C6D1Ev();
Name_Map name_map_S7499C6[] = {
  NSPAIR(_ZN7S7499C6C1Ev),
  NSPAIR(_ZN7S7499C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S7499C9;
extern VTBL_ENTRY _ZTI7S7499C9[];
extern  VTBL_ENTRY _ZTV7S7499C9[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S7499C8;
extern VTBL_ENTRY _ZTI7S7499C8[];
extern  VTBL_ENTRY _ZTV7S7499C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7499C8[];
extern Class_Descriptor cd_S7499C7;
extern VTBL_ENTRY _ZTI7S7499C7[];
extern  VTBL_ENTRY _ZTV7S7499C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7499C7[];
static Base_Class bases_S7499C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2121C38,    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
    4, //immediately_derived
  0, 1},
  {&cd_S7499C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7499C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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
    5, //immediately_derived
  0, 0},
  {&cd_S7499C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //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 _ZTI7S7499C6[];
extern void _ZN7S7499C92v1Ev();
extern void _ZN7S7499C72v2Ev();
static  VTBL_ENTRY vtc_S7499C6[] = {
  0,
  0,
  0,
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7499C6[0]),
  (VTBL_ENTRY)&_ZN7S7499C92v1Ev,
  (VTBL_ENTRY)&_ZN7S7499C72v2Ev,
};
extern VTBL_ENTRY _ZTV7S7499C6[];
extern void _ZN7S7499C92v1Ev();
extern void _ZN7S7499C72v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7499C7__7S7499C6[] = {
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7499C7[0]),
  (VTBL_ENTRY)&_ZN7S7499C92v1Ev,
  (VTBL_ENTRY)&_ZN7S7499C72v2Ev,
};
extern void _ZN7S7499C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7499C87S7499C7__7S7499C6[] = {
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7499C8[0]),
  (VTBL_ENTRY)&_ZN7S7499C92v1Ev,
};
static  VTT_ENTRY vtt_S7499C6[] = {
  {&(_ZTV7S7499C6[7]),  7,9},
  {&(_ZTV7S7499C6[7]),  7,9},
  {&(_tg__ZTV7S7499C7__7S7499C6[4]),  4,6},
  {&(_tg__ZTV7S7499C87S7499C7__7S7499C6[4]),  4,5},
};
extern VTBL_ENTRY _ZTI7S7499C6[];
extern  VTBL_ENTRY _ZTV7S7499C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7499C6[];
Class_Descriptor cd_S7499C6 = {  "S7499C6", // class name
  bases_S7499C6, 6,
  &(vtc_S7499C6[0]), // expected_vtbl_contents
  &(vtt_S7499C6[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S7499C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7499C6),9, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7499C6),4, //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  S7499C5  : S7499C6 , virtual S7499C9 {
  __tsu64 s7499c5f0:1;
  ~S7499C5(); // tgen
  S7499C5(); // tgen
};
//SIG(-1 S7499C5) C1{ BC2{ VBC3{ BC4{ m} BC5{ VBC4 BC6{ v1} VBC7{ m}} v2} Fi} VBC6 FL:1}


S7499C5 ::~S7499C5(){ note_dtor("S7499C5", this);} // tgen
S7499C5 ::S7499C5(){ note_ctor("S7499C5", this);} // tgen

static void Test_S7499C5()
{
  extern Class_Descriptor cd_S7499C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S7499C5, buf);
    S7499C5 *dp, &lv = *(dp=new (buf) S7499C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S7499C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7499C5)");
    /*is_ambiguous_... S7499C7::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S7499C7*), 0, "S7499C5");
    check_base_class_offset(lv, (S2121C38*)(S7499C8*)(S7499C7*), ABISELECT(13,9), "S7499C5");
    check_base_class_offset(lv, (S7499C9*)(S7499C8*)(S7499C7*), 0, "S7499C5");
    check_base_class_offset(lv, (S2121C28*)(S7499C8*)(S7499C7*), 0, "S7499C5");
    check_base_class_offset(lv, (S7499C8*)(S7499C7*), 0, "S7499C5");
    check_base_class_offset(lv, (S7499C7*)(S7499C6*), 0, "S7499C5");
    check_base_class_offset(lv, (S7499C6*), 0, "S7499C5");
    /*is_ambiguous_... S7499C5::S7499C9 */ AMB_check_base_class_offset(lv, (S7499C9*), ABISELECT(16,12), "S7499C5");
    set_bf_and_test(lv, s7499c5f0, ABISELECT(12,8), 0, 1, 1, "S7499C5");
    test_class_info(&lv, &cd_S7499C5);
    dp->~S7499C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7499C5(Test_S7499C5, "S7499C5", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S7499C5C1Ev();
extern void _ZN7S7499C5D1Ev();
Name_Map name_map_S7499C5[] = {
  NSPAIR(_ZN7S7499C5C1Ev),
  NSPAIR(_ZN7S7499C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S7499C9;
extern VTBL_ENTRY _ZTI7S7499C9[];
extern  VTBL_ENTRY _ZTV7S7499C9[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S7499C8;
extern VTBL_ENTRY _ZTI7S7499C8[];
extern  VTBL_ENTRY _ZTV7S7499C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7499C8[];
extern Class_Descriptor cd_S7499C7;
extern VTBL_ENTRY _ZTI7S7499C7[];
extern  VTBL_ENTRY _ZTV7S7499C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7499C7[];
extern Class_Descriptor cd_S7499C6;
extern VTBL_ENTRY _ZTI7S7499C6[];
extern  VTBL_ENTRY _ZTV7S7499C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7499C6[];
extern Class_Descriptor cd_S7499C9;
extern VTBL_ENTRY _ZTI7S7499C9[];
extern  VTBL_ENTRY _ZTV7S7499C9[];
static Base_Class bases_S7499C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2121C38,    ABISELECT(13,9), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7499C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7499C8,    0, //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
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7499C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7499C6,    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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7499C9,    ABISELECT(16,12), //bcp->offset
    10, //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
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7499C5[];
extern void _ZN7S7499C92v1Ev();
extern void _ZN7S7499C72v2Ev();
extern void _ZN7S7499C92v1Ev();
static  VTBL_ENTRY vtc_S7499C5[] = {
  ABISELECT(16,12),
  0,
  0,
  0,
  0,
  ABISELECT(13,9),
  0,
  (VTBL_ENTRY)&(_ZTI7S7499C5[0]),
  (VTBL_ENTRY)&_ZN7S7499C92v1Ev,
  (VTBL_ENTRY)&_ZN7S7499C72v2Ev,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S7499C5[0]),
  (VTBL_ENTRY)&_ZN7S7499C92v1Ev,
};
extern VTBL_ENTRY _ZTV7S7499C5[];
extern void _ZN7S7499C92v1Ev();
extern void _ZN7S7499C72v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7499C6__7S7499C5[] = {
  0,
  0,
  0,
  0,
  ABISELECT(13,9),
  0,
  (VTBL_ENTRY)&(_ZTI7S7499C6[0]),
  (VTBL_ENTRY)&_ZN7S7499C92v1Ev,
  (VTBL_ENTRY)&_ZN7S7499C72v2Ev,
};
extern void _ZN7S7499C92v1Ev();
extern void _ZN7S7499C72v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7499C7__7S7499C5[] = {
  0,
  ABISELECT(13,9),
  0,
  (VTBL_ENTRY)&(_ZTI7S7499C7[0]),
  (VTBL_ENTRY)&_ZN7S7499C92v1Ev,
  (VTBL_ENTRY)&_ZN7S7499C72v2Ev,
};
extern void _ZN7S7499C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7499C87S7499C7__7S7499C5[] = {
  0,
  ABISELECT(13,9),
  0,
  (VTBL_ENTRY)&(_ZTI7S7499C8[0]),
  (VTBL_ENTRY)&_ZN7S7499C92v1Ev,
};
static  VTT_ENTRY vtt_S7499C5[] = {
  {&(_ZTV7S7499C5[8]),  8,14},
  {&(_tg__ZTV7S7499C6__7S7499C5[7]),  7,9},
  {&(_tg__ZTV7S7499C6__7S7499C5[7]),  7,9},
  {&(_ZTV7S7499C5[8]),  8,14},
  {&(_ZTV7S7499C5[13]),  13,14},
  {&(_tg__ZTV7S7499C7__7S7499C5[4]),  4,6},
  {&(_tg__ZTV7S7499C87S7499C7__7S7499C5[4]),  4,5},
};
extern VTBL_ENTRY _ZTI7S7499C5[];
extern  VTBL_ENTRY _ZTV7S7499C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7499C5[];
Class_Descriptor cd_S7499C5 = {  "S7499C5", // class name
  bases_S7499C5, 8,
  &(vtc_S7499C5[0]), // expected_vtbl_contents
  &(vtt_S7499C5[0]), // expected_vtt_contents
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S7499C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7499C5),14, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7499C5),7, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7499C4  : virtual S7499C5 , S2121C38 , S7499C2 {
  virtual  ~S7499C4(); // _ZN7S7499C4D2Ev
  S7499C4(); // tgen
};
//SIG(-1 S7499C4) C1{ VBC2{ BC3{ VBC4{ BC5{ m} BC6{ VBC5 BC7{ v1} VBC8{ m}} v2} Fi} VBC7 FL:1} BC5 BC9{ VBC5} vd}


 S7499C4 ::~S7499C4(){ note_dtor("S7499C4", this);}
S7499C4 ::S7499C4(){ note_ctor("S7499C4", this);} // tgen

static void Test_S7499C4()
{
  extern Class_Descriptor cd_S7499C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S7499C4, buf);
    S7499C4 *dp, &lv = *(dp=new (buf) S7499C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S7499C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7499C4)");
    /*is_ambiguous_... S7499C7::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S7499C7*), ABISELECT(8,4), "S7499C4");
    check_base_class_offset(lv, (S2121C38*)(S7499C8*)(S7499C7*), ABISELECT(21,13), "S7499C4");
    check_base_class_offset(lv, (S2121C38*)(S7499C2*), ABISELECT(21,13), "S7499C4");
    check_base_class_offset(lv, (S7499C9*)(S7499C8*)(S7499C7*), ABISELECT(8,4), "S7499C4");
    check_base_class_offset(lv, (S2121C28*)(S7499C8*)(S7499C7*), 0, "S7499C4");
    check_base_class_offset(lv, (S7499C8*)(S7499C7*), ABISELECT(8,4), "S7499C4");
    check_base_class_offset(lv, (S7499C7*)(S7499C6*)(S7499C5*), ABISELECT(8,4), "S7499C4");
    check_base_class_offset(lv, (S7499C6*)(S7499C5*), ABISELECT(8,4), "S7499C4");
    /*is_ambiguous_... S7499C5::S7499C9 */ AMB_check_base_class_offset(lv, (S7499C9*)(S7499C5*), ABISELECT(24,16), "S7499C4");
    check_base_class_offset(lv, (S7499C5*), ABISELECT(8,4), "S7499C4");
    /*is_ambiguous_... S7499C4::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*), 0, "S7499C4");
    check_base_class_offset(lv, (S7499C2*), 0, "S7499C4");
    test_class_info(&lv, &cd_S7499C4);
    dp->~S7499C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7499C4(Test_S7499C4, "S7499C4", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S7499C4C1Ev();
extern void _ZN7S7499C4D2Ev();
Name_Map name_map_S7499C4[] = {
  NSPAIR(_ZN7S7499C4C1Ev),
  NSPAIR(_ZN7S7499C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S7499C9;
extern VTBL_ENTRY _ZTI7S7499C9[];
extern  VTBL_ENTRY _ZTV7S7499C9[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S7499C8;
extern VTBL_ENTRY _ZTI7S7499C8[];
extern  VTBL_ENTRY _ZTV7S7499C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7499C8[];
extern Class_Descriptor cd_S7499C7;
extern VTBL_ENTRY _ZTI7S7499C7[];
extern  VTBL_ENTRY _ZTV7S7499C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7499C7[];
extern Class_Descriptor cd_S7499C6;
extern VTBL_ENTRY _ZTI7S7499C6[];
extern  VTBL_ENTRY _ZTV7S7499C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7499C6[];
extern Class_Descriptor cd_S7499C9;
extern VTBL_ENTRY _ZTI7S7499C9[];
extern  VTBL_ENTRY _ZTV7S7499C9[];
extern Class_Descriptor cd_S7499C5;
extern VTBL_ENTRY _ZTI7S7499C5[];
extern  VTBL_ENTRY _ZTV7S7499C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7499C5[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S7499C2;
extern VTBL_ENTRY _ZTI7S7499C2[];
extern  VTBL_ENTRY _ZTV7S7499C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7499C2[];
static Base_Class bases_S7499C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    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_S2121C38,    ABISELECT(21,13), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7499C9,    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_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7499C8,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7499C7,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7499C6,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7499C9,    ABISELECT(24,16), //bcp->offset
    19, //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
    4, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S7499C5,    ABISELECT(8,4), //bcp->offset
    9, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S7499C2,    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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7499C4[];
extern void _ZN7S7499C4D1Ev();
extern void _ZN7S7499C4D0Ev();
extern void _ZN7S7499C92v1Ev();
extern void _ZN7S7499C72v2Ev();
extern void _ZN7S7499C92v1Ev();
static  VTBL_ENTRY vtc_S7499C4[] = {
  ABISELECT(24,16),
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(21,13),
  0,
  (VTBL_ENTRY)&(_ZTI7S7499C4[0]),
  (VTBL_ENTRY)&_ZN7S7499C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7499C4D0Ev,
  ABISELECT(16,12),
  0,
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(13,9),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7499C4[0]),
  (VTBL_ENTRY)&_ZN7S7499C92v1Ev,
  (VTBL_ENTRY)&_ZN7S7499C72v2Ev,
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S7499C4[0]),
  (VTBL_ENTRY)&_ZN7S7499C92v1Ev,
};
extern VTBL_ENTRY _ZTV7S7499C4[];
static  VTBL_ENTRY _tg__ZTV7S7499C2__7S7499C4[] = {
  ABISELECT(21,13),
  0,
  (VTBL_ENTRY)&(_ZTI7S7499C2[0]),
};
extern void _ZN7S7499C92v1Ev();
extern void _ZN7S7499C72v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7499C5__7S7499C4[] = {
  ABISELECT(16,12),
  0,
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(13,9),
  0,
  (VTBL_ENTRY)&(_ZTI7S7499C5[0]),
  (VTBL_ENTRY)&_ZN7S7499C92v1Ev,
  (VTBL_ENTRY)&_ZN7S7499C72v2Ev,
};
extern void _ZN7S7499C92v1Ev();
extern void _ZN7S7499C72v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7499C67S7499C5__7S7499C4[] = {
  0,
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(13,9),
  0,
  (VTBL_ENTRY)&(_ZTI7S7499C6[0]),
  (VTBL_ENTRY)&_ZN7S7499C92v1Ev,
  (VTBL_ENTRY)&_ZN7S7499C72v2Ev,
};
extern void _ZN7S7499C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7499C9__A1__7S7499C5__7S7499C4[] = {
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S7499C5[0]),
  (VTBL_ENTRY)&_ZN7S7499C92v1Ev,
};
extern void _ZN7S7499C92v1Ev();
extern void _ZN7S7499C72v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7499C7__7S7499C4[] = {
  ABISELECT(-8,-4),
  ABISELECT(13,9),
  0,
  (VTBL_ENTRY)&(_ZTI7S7499C7[0]),
  (VTBL_ENTRY)&_ZN7S7499C92v1Ev,
  (VTBL_ENTRY)&_ZN7S7499C72v2Ev,
};
extern void _ZN7S7499C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7499C87S7499C7__7S7499C4[] = {
  ABISELECT(-8,-4),
  ABISELECT(13,9),
  0,
  (VTBL_ENTRY)&(_ZTI7S7499C8[0]),
  (VTBL_ENTRY)&_ZN7S7499C92v1Ev,
};
static  VTT_ENTRY vtt_S7499C4[] = {
  {&(_ZTV7S7499C4[7]),  7,23},
  {&(_tg__ZTV7S7499C2__7S7499C4[3]),  3,3},
  {&(_ZTV7S7499C4[17]),  17,23},
  {&(_ZTV7S7499C4[17]),  17,23},
  {&(_ZTV7S7499C4[22]),  22,23},
  {&(_tg__ZTV7S7499C5__7S7499C4[8]),  8,10},
  {&(_tg__ZTV7S7499C67S7499C5__7S7499C4[7]),  7,9},
  {&(_tg__ZTV7S7499C67S7499C5__7S7499C4[7]),  7,9},
  {&(_tg__ZTV7S7499C5__7S7499C4[8]),  8,10},
  {&(_tg__ZTV7S7499C9__A1__7S7499C5__7S7499C4[3]),  3,4},
  {&(_tg__ZTV7S7499C7__7S7499C4[4]),  4,6},
  {&(_tg__ZTV7S7499C87S7499C7__7S7499C4[4]),  4,5},
};
extern VTBL_ENTRY _ZTI7S7499C4[];
extern  VTBL_ENTRY _ZTV7S7499C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7499C4[];
Class_Descriptor cd_S7499C4 = {  "S7499C4", // class name
  bases_S7499C4, 11,
  &(vtc_S7499C4[0]), // expected_vtbl_contents
  &(vtt_S7499C4[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S7499C4),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7499C4),23, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7499C4),12, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7499C1  : S7499C2 , S7499C4 {
  int s7499c1f0;
  virtual  ~S7499C1(); // _ZN7S7499C1D2Ev
  S7499C1(); // tgen
};
//SIG(1 S7499C1) C1{ BC2{ VBC3{ m}} BC4{ VBC5{ BC6{ VBC7{ BC3 BC8{ VBC3 BC9{ v1} VBC10{ m}} v2} Fi} VBC9 FL:1} BC3 BC2 vd} vd Fi}


 S7499C1 ::~S7499C1(){ note_dtor("S7499C1", this);}
S7499C1 ::S7499C1(){ note_ctor("S7499C1", this);} // tgen

static void Test_S7499C1()
{
  extern Class_Descriptor cd_S7499C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S7499C1, buf);
    S7499C1 *dp, &lv = *(dp=new (buf) S7499C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S7499C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7499C1)");
    /*is_ambiguous_... S7499C1::S7499C2 */ AMB_check_base_class_offset(lv, (S2121C38*)(S7499C2*), 0, "S7499C1");
    check_base_class_offset(lv, (S2121C38*)(S7499C8*)(S7499C7*), 0, "S7499C1");
    check_base_class_offset(lv, (S2121C38*)(S7499C2*)(S7499C4*), 0, "S7499C1");
    /*is_ambiguous_... S7499C1::S7499C2 */ AMB_check_base_class_offset(lv, (S7499C2*), 0, "S7499C1");
    /*is_ambiguous_... S7499C7::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S7499C7*), ABISELECT(24,12), "S7499C1");
    check_base_class_offset(lv, (S7499C9*)(S7499C8*)(S7499C7*), ABISELECT(24,12), "S7499C1");
    check_base_class_offset(lv, (S2121C28*)(S7499C8*)(S7499C7*), 0, "S7499C1");
    check_base_class_offset(lv, (S7499C8*)(S7499C7*), ABISELECT(24,12), "S7499C1");
    check_base_class_offset(lv, (S7499C7*)(S7499C6*)(S7499C5*), ABISELECT(24,12), "S7499C1");
    check_base_class_offset(lv, (S7499C6*)(S7499C5*), ABISELECT(24,12), "S7499C1");
    /*is_ambiguous_... S7499C5::S7499C9 */ AMB_check_base_class_offset(lv, (S7499C9*)(S7499C5*), ABISELECT(40,24), "S7499C1");
    check_base_class_offset(lv, (S7499C5*)(S7499C4*), ABISELECT(24,12), "S7499C1");
    /*is_ambiguous_... S7499C4::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S7499C4*), ABISELECT(8,4), "S7499C1");
    check_base_class_offset(lv, (S7499C2*)(S7499C4*), ABISELECT(8,4), "S7499C1");
    check_base_class_offset(lv, (S7499C4*), ABISELECT(8,4), "S7499C1");
    check_field_offset(lv, s7499c1f0, ABISELECT(16,8), "S7499C1.s7499c1f0");
    test_class_info(&lv, &cd_S7499C1);
    dp->~S7499C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7499C1(Test_S7499C1, "S7499C1", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S7499C1C1Ev();
extern void _ZN7S7499C1D2Ev();
Name_Map name_map_S7499C1[] = {
  NSPAIR(_ZN7S7499C1C1Ev),
  NSPAIR(_ZN7S7499C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S7499C2;
extern VTBL_ENTRY _ZTI7S7499C2[];
extern  VTBL_ENTRY _ZTV7S7499C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7499C2[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S7499C9;
extern VTBL_ENTRY _ZTI7S7499C9[];
extern  VTBL_ENTRY _ZTV7S7499C9[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S7499C8;
extern VTBL_ENTRY _ZTI7S7499C8[];
extern  VTBL_ENTRY _ZTV7S7499C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7499C8[];
extern Class_Descriptor cd_S7499C7;
extern VTBL_ENTRY _ZTI7S7499C7[];
extern  VTBL_ENTRY _ZTV7S7499C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7499C7[];
extern Class_Descriptor cd_S7499C6;
extern VTBL_ENTRY _ZTI7S7499C6[];
extern  VTBL_ENTRY _ZTV7S7499C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7499C6[];
extern Class_Descriptor cd_S7499C9;
extern VTBL_ENTRY _ZTI7S7499C9[];
extern  VTBL_ENTRY _ZTV7S7499C9[];
extern Class_Descriptor cd_S7499C5;
extern VTBL_ENTRY _ZTI7S7499C5[];
extern  VTBL_ENTRY _ZTV7S7499C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7499C5[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S7499C2;
extern VTBL_ENTRY _ZTI7S7499C2[];
extern  VTBL_ENTRY _ZTV7S7499C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7499C2[];
extern Class_Descriptor cd_S7499C4;
extern VTBL_ENTRY _ZTI7S7499C4[];
extern  VTBL_ENTRY _ZTV7S7499C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7499C4[];
static Base_Class bases_S7499C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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, 1},
  {&cd_S7499C2,    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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C38,    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
    6, //immediately_derived
  0, 0},
  {&cd_S7499C9,    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
    5, //immediately_derived
  0, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7499C8,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7499C7,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7499C6,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7499C9,    ABISELECT(40,24), //bcp->offset
    28, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7499C5,    ABISELECT(24,12), //bcp->offset
    18, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S2121C38,    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
    12, //immediately_derived
  0, 0},
  {&cd_S7499C2,    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
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7499C4,    ABISELECT(8,4), //bcp->offset
    9, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7499C1[];
extern void _ZN7S7499C1D1Ev();
extern void _ZN7S7499C1D0Ev();
extern void ABISELECT(_ZThn8_N7S7499C1D1Ev,_ZThn4_N7S7499C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S7499C1D0Ev,_ZThn4_N7S7499C1D0Ev)();
extern void _ZN7S7499C92v1Ev();
extern void _ZN7S7499C72v2Ev();
extern void _ZN7S7499C92v1Ev();
static  VTBL_ENTRY vtc_S7499C1[] = {
  ABISELECT(40,24),
  0,
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7499C1[0]),
  (VTBL_ENTRY)&_ZN7S7499C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7499C1D0Ev,
  ABISELECT(32,20),
  ABISELECT(-8,-4),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7499C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7499C1D1Ev,_ZThn4_N7S7499C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7499C1D0Ev,_ZThn4_N7S7499C1D0Ev),
  ABISELECT(16,12),
  0,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7499C1[0]),
  (VTBL_ENTRY)&_ZN7S7499C92v1Ev,
  (VTBL_ENTRY)&_ZN7S7499C72v2Ev,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7499C1[0]),
  (VTBL_ENTRY)&_ZN7S7499C92v1Ev,
};
extern VTBL_ENTRY _ZTV7S7499C1[];
static  VTBL_ENTRY _tg__ZTV7S7499C2__7S7499C1[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7499C2[0]),
};
extern void _ZN7S7499C4D1Ev();
extern void _ZN7S7499C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7499C4__7S7499C1[] = {
  ABISELECT(32,20),
  ABISELECT(-8,-4),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7499C4[0]),
  (VTBL_ENTRY)&_ZN7S7499C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7499C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7499C27S7499C4__A1__7S7499C1[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7499C2[0]),
};
extern void _ZN7S7499C92v1Ev();
extern void _ZN7S7499C72v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7499C5__7S7499C4__7S7499C1[] = {
  ABISELECT(16,12),
  0,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7499C4[0]),
  (VTBL_ENTRY)&_ZN7S7499C92v1Ev,
  (VTBL_ENTRY)&_ZN7S7499C72v2Ev,
};
extern void _ZN7S7499C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7499C9__A1__7S7499C4__7S7499C1[] = {
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S7499C4[0]),
  (VTBL_ENTRY)&_ZN7S7499C92v1Ev,
};
extern void _ZN7S7499C92v1Ev();
extern void _ZN7S7499C72v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7499C5__7S7499C1[] = {
  ABISELECT(16,12),
  0,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7499C5[0]),
  (VTBL_ENTRY)&_ZN7S7499C92v1Ev,
  (VTBL_ENTRY)&_ZN7S7499C72v2Ev,
};
extern void _ZN7S7499C92v1Ev();
extern void _ZN7S7499C72v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7499C67S7499C5__7S7499C1[] = {
  0,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7499C6[0]),
  (VTBL_ENTRY)&_ZN7S7499C92v1Ev,
  (VTBL_ENTRY)&_ZN7S7499C72v2Ev,
};
extern void _ZN7S7499C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7499C9__A1__7S7499C5__7S7499C1[] = {
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S7499C5[0]),
  (VTBL_ENTRY)&_ZN7S7499C92v1Ev,
};
extern void _ZN7S7499C92v1Ev();
extern void _ZN7S7499C72v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7499C7__7S7499C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7499C7[0]),
  (VTBL_ENTRY)&_ZN7S7499C92v1Ev,
  (VTBL_ENTRY)&_ZN7S7499C72v2Ev,
};
extern void _ZN7S7499C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7499C87S7499C7__7S7499C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7499C8[0]),
  (VTBL_ENTRY)&_ZN7S7499C92v1Ev,
};
static  VTT_ENTRY vtt_S7499C1[] = {
  {&(_ZTV7S7499C1[7]),  7,32},
  {&(_tg__ZTV7S7499C2__7S7499C1[3]),  3,3},
  {&(_tg__ZTV7S7499C4__7S7499C1[7]),  7,9},
  {&(_tg__ZTV7S7499C27S7499C4__A1__7S7499C1[3]),  3,3},
  {&(_tg__ZTV7S7499C5__7S7499C4__7S7499C1[8]),  8,10},
  {&(_tg__ZTV7S7499C5__7S7499C4__7S7499C1[8]),  8,10},
  {&(_tg__ZTV7S7499C9__A1__7S7499C4__7S7499C1[3]),  3,4},
  {&(_ZTV7S7499C1[16]),  16,32},
  {&(_ZTV7S7499C1[26]),  26,32},
  {&(_ZTV7S7499C1[26]),  26,32},
  {&(_ZTV7S7499C1[31]),  31,32},
  {&(_tg__ZTV7S7499C5__7S7499C1[8]),  8,10},
  {&(_tg__ZTV7S7499C67S7499C5__7S7499C1[7]),  7,9},
  {&(_tg__ZTV7S7499C67S7499C5__7S7499C1[7]),  7,9},
  {&(_tg__ZTV7S7499C5__7S7499C1[8]),  8,10},
  {&(_tg__ZTV7S7499C9__A1__7S7499C5__7S7499C1[3]),  3,4},
  {&(_tg__ZTV7S7499C7__7S7499C1[4]),  4,6},
  {&(_tg__ZTV7S7499C87S7499C7__7S7499C1[4]),  4,5},
};
extern VTBL_ENTRY _ZTI7S7499C1[];
extern  VTBL_ENTRY _ZTV7S7499C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7499C1[];
Class_Descriptor cd_S7499C1 = {  "S7499C1", // class name
  bases_S7499C1, 13,
  &(vtc_S7499C1[0]), // expected_vtbl_contents
  &(vtt_S7499C1[0]), // expected_vtt_contents
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S7499C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7499C1),32, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7499C1),18, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16086C1  {
  ::S3350C8_nt s16086c1f0;
  ::S4846C6_nt s16086c1f1;
  ::S4846C9_nt s16086c1f2;
  ::S4846C9_nt s16086c1f3;
  char s16086c1f4;
  ::S4846C10_nt s16086c1f5;
  void  mf16086c1(); // _ZN8S16086C19mf16086c1Ev
};
//SIG(1 S16086C1) C1{ m FC2{ m Fi} FC3{ FC4{ Fc[20]} Fc[16]} FC5{ Fc[12]} FC5 Fc FC6{ Fi Fc[128] FC7{ Fi[2] Fc[320] Fi}}}


void  S16086C1 ::mf16086c1(){}

static void Test_S16086C1()
{
  {
    init_simple_test("S16086C1");
    S16086C1 lv;
    check2(sizeof(lv), 532, "sizeof(S16086C1)");
    check2(__alignof__(lv), 4, "__alignof__(S16086C1)");
    check_field_offset(lv, s16086c1f0, 0, "S16086C1.s16086c1f0");
    check_field_offset(lv, s16086c1f1, 4, "S16086C1.s16086c1f1");
    check_field_offset(lv, s16086c1f2, 40, "S16086C1.s16086c1f2");
    check_field_offset(lv, s16086c1f3, 52, "S16086C1.s16086c1f3");
    check_field_offset(lv, s16086c1f4, 64, "S16086C1.s16086c1f4");
    check_field_offset(lv, s16086c1f5, 68, "S16086C1.s16086c1f5");
  }
}
static Arrange_To_Call_Me vS16086C1(Test_S16086C1, "S16086C1", 532);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20734C6  {
  virtual void  v1(); // _ZN8S20734C62v1Ev
  ~S20734C6(); // tgen
  S20734C6(); // tgen
};
//SIG(-1 S20734C6) C1{ v1}


void  S20734C6 ::v1(){vfunc_called(this, "_ZN8S20734C62v1Ev");}
S20734C6 ::~S20734C6(){ note_dtor("S20734C6", this);} // tgen
S20734C6 ::S20734C6(){ note_ctor("S20734C6", this);} // tgen

static void Test_S20734C6()
{
  extern Class_Descriptor cd_S20734C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20734C6, buf);
    S20734C6 *dp, &lv = *(dp=new (buf) S20734C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20734C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20734C6)");
    test_class_info(&lv, &cd_S20734C6);
    dp->~S20734C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20734C6(Test_S20734C6, "S20734C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20734C6C1Ev();
extern void _ZN8S20734C6D1Ev();
Name_Map name_map_S20734C6[] = {
  NSPAIR(_ZN8S20734C6C1Ev),
  NSPAIR(_ZN8S20734C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20734C6[];
extern void _ZN8S20734C62v1Ev();
static  VTBL_ENTRY vtc_S20734C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20734C6[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
};
extern VTBL_ENTRY _ZTI8S20734C6[];
extern  VTBL_ENTRY _ZTV8S20734C6[];
Class_Descriptor cd_S20734C6 = {  "S20734C6", // class name
  0,0,//no base classes
  &(vtc_S20734C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20734C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20734C6),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  S20734C5  : virtual S2121C38 , S20734C6 , virtual S2121C28 {
  ~S20734C5(); // tgen
  S20734C5(); // tgen
};
//SIG(-1 S20734C5) C1{ VBC2{ m} BC3{ v1} VBC4{ m}}


S20734C5 ::~S20734C5(){ note_dtor("S20734C5", this);} // tgen
S20734C5 ::S20734C5(){ note_ctor("S20734C5", this);} // tgen

static void Test_S20734C5()
{
  extern Class_Descriptor cd_S20734C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20734C5, buf);
    S20734C5 *dp, &lv = *(dp=new (buf) S20734C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20734C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20734C5)");
    check_base_class_offset(lv, (S2121C38*), 0, "S20734C5");
    check_base_class_offset(lv, (S20734C6*), 0, "S20734C5");
    check_base_class_offset(lv, (S2121C28*), 0, "S20734C5");
    test_class_info(&lv, &cd_S20734C5);
    dp->~S20734C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20734C5(Test_S20734C5, "S20734C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20734C5C1Ev();
extern void _ZN8S20734C5D1Ev();
Name_Map name_map_S20734C5[] = {
  NSPAIR(_ZN8S20734C5C1Ev),
  NSPAIR(_ZN8S20734C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20734C6;
extern VTBL_ENTRY _ZTI8S20734C6[];
extern  VTBL_ENTRY _ZTV8S20734C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
static Base_Class bases_S20734C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20734C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S20734C5[];
extern void _ZN8S20734C62v1Ev();
static  VTBL_ENTRY vtc_S20734C5[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20734C5[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
};
extern VTBL_ENTRY _ZTV8S20734C5[];
static  VTT_ENTRY vtt_S20734C5[] = {
  {&(_ZTV8S20734C5[4]),  4,5},
};
extern VTBL_ENTRY _ZTI8S20734C5[];
extern  VTBL_ENTRY _ZTV8S20734C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20734C5[];
Class_Descriptor cd_S20734C5 = {  "S20734C5", // class name
  bases_S20734C5, 3,
  &(vtc_S20734C5[0]), // expected_vtbl_contents
  &(vtt_S20734C5[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20734C5),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20734C5),5, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20734C5),1, //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  S20734C4  : S20734C5 , S20734C6 {
  ~S20734C4(); // tgen
  S20734C4(); // tgen
};
//SIG(-1 S20734C4) C1{ BC2{ VBC3{ m} BC4{ v1} VBC5{ m}} BC4}


S20734C4 ::~S20734C4(){ note_dtor("S20734C4", this);} // tgen
S20734C4 ::S20734C4(){ note_ctor("S20734C4", this);} // tgen

static void Test_S20734C4()
{
  extern Class_Descriptor cd_S20734C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20734C4, buf);
    S20734C4 *dp, &lv = *(dp=new (buf) S20734C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20734C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20734C4)");
    check_base_class_offset(lv, (S2121C38*)(S20734C5*), 0, "S20734C4");
    check_base_class_offset(lv, (S20734C6*)(S20734C5*), 0, "S20734C4");
    check_base_class_offset(lv, (S2121C28*)(S20734C5*), 0, "S20734C4");
    check_base_class_offset(lv, (S20734C5*), 0, "S20734C4");
    /*is_ambiguous_... S20734C4::S20734C6 */ AMB_check_base_class_offset(lv, (S20734C6*), ABISELECT(8,4), "S20734C4");
    test_class_info(&lv, &cd_S20734C4);
    dp->~S20734C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20734C4(Test_S20734C4, "S20734C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S20734C4C1Ev();
extern void _ZN8S20734C4D1Ev();
Name_Map name_map_S20734C4[] = {
  NSPAIR(_ZN8S20734C4C1Ev),
  NSPAIR(_ZN8S20734C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20734C6;
extern VTBL_ENTRY _ZTI8S20734C6[];
extern  VTBL_ENTRY _ZTV8S20734C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20734C5;
extern VTBL_ENTRY _ZTI8S20734C5[];
extern  VTBL_ENTRY _ZTV8S20734C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20734C5[];
extern Class_Descriptor cd_S20734C6;
extern VTBL_ENTRY _ZTI8S20734C6[];
extern  VTBL_ENTRY _ZTV8S20734C6[];
static Base_Class bases_S20734C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20734C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20734C5,    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_S20734C6,    ABISELECT(8,4), //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
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20734C4[];
extern void _ZN8S20734C62v1Ev();
extern void _ZN8S20734C62v1Ev();
static  VTBL_ENTRY vtc_S20734C4[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20734C4[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20734C4[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
};
extern VTBL_ENTRY _ZTV8S20734C4[];
extern void _ZN8S20734C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20734C5__8S20734C4[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20734C5[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
};
static  VTT_ENTRY vtt_S20734C4[] = {
  {&(_ZTV8S20734C4[4]),  4,8},
  {&(_tg__ZTV8S20734C5__8S20734C4[4]),  4,5},
};
extern VTBL_ENTRY _ZTI8S20734C4[];
extern  VTBL_ENTRY _ZTV8S20734C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20734C4[];
Class_Descriptor cd_S20734C4 = {  "S20734C4", // class name
  bases_S20734C4, 5,
  &(vtc_S20734C4[0]), // expected_vtbl_contents
  &(vtt_S20734C4[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20734C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20734C4),8, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20734C4),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  S20734C8  : S2121C38 , S20734C5 {
  virtual void  v2(); // _ZN8S20734C82v2Ev
  ~S20734C8(); // tgen
  S20734C8(); // tgen
};
//SIG(-1 S20734C8) C1{ BC2{ m} BC3{ VBC2 BC4{ v2} VBC5{ m}} v1}


void  S20734C8 ::v2(){vfunc_called(this, "_ZN8S20734C82v2Ev");}
S20734C8 ::~S20734C8(){ note_dtor("S20734C8", this);} // tgen
S20734C8 ::S20734C8(){ note_ctor("S20734C8", this);} // tgen

static void Test_S20734C8()
{
  extern Class_Descriptor cd_S20734C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20734C8, buf);
    S20734C8 *dp, &lv = *(dp=new (buf) S20734C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20734C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20734C8)");
    /*is_ambiguous_... S20734C8::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*), 0, "S20734C8");
    check_base_class_offset(lv, (S2121C38*)(S20734C5*), ABISELECT(8,4), "S20734C8");
    check_base_class_offset(lv, (S20734C6*)(S20734C5*), 0, "S20734C8");
    check_base_class_offset(lv, (S2121C28*)(S20734C5*), 0, "S20734C8");
    check_base_class_offset(lv, (S20734C5*), 0, "S20734C8");
    test_class_info(&lv, &cd_S20734C8);
    dp->~S20734C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20734C8(Test_S20734C8, "S20734C8", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S20734C8C1Ev();
extern void _ZN8S20734C8D1Ev();
Name_Map name_map_S20734C8[] = {
  NSPAIR(_ZN8S20734C8C1Ev),
  NSPAIR(_ZN8S20734C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20734C6;
extern VTBL_ENTRY _ZTI8S20734C6[];
extern  VTBL_ENTRY _ZTV8S20734C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20734C5;
extern VTBL_ENTRY _ZTI8S20734C5[];
extern  VTBL_ENTRY _ZTV8S20734C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20734C5[];
static Base_Class bases_S20734C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2121C38,    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, 1},
  {&cd_S20734C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20734C5,    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 _ZTI8S20734C8[];
extern void _ZN8S20734C62v1Ev();
extern void _ZN8S20734C82v2Ev();
static  VTBL_ENTRY vtc_S20734C8[] = {
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20734C8[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20734C82v2Ev,
};
extern VTBL_ENTRY _ZTV8S20734C8[];
extern void _ZN8S20734C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20734C5__8S20734C8[] = {
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20734C5[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
};
static  VTT_ENTRY vtt_S20734C8[] = {
  {&(_ZTV8S20734C8[4]),  4,6},
  {&(_tg__ZTV8S20734C5__8S20734C8[4]),  4,5},
};
extern VTBL_ENTRY _ZTI8S20734C8[];
extern  VTBL_ENTRY _ZTV8S20734C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20734C8[];
Class_Descriptor cd_S20734C8 = {  "S20734C8", // class name
  bases_S20734C8, 5,
  &(vtc_S20734C8[0]), // expected_vtbl_contents
  &(vtt_S20734C8[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20734C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20734C8),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20734C8),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  S20734C9  : S20734C6 , S2121C28 , virtual S2121C38 {
  ~S20734C9(); // tgen
  S20734C9(); // tgen
};
//SIG(-1 S20734C9) C1{ BC2{ v1} BC3{ m} VBC4{ m}}


S20734C9 ::~S20734C9(){ note_dtor("S20734C9", this);} // tgen
S20734C9 ::S20734C9(){ note_ctor("S20734C9", this);} // tgen

static void Test_S20734C9()
{
  extern Class_Descriptor cd_S20734C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20734C9, buf);
    S20734C9 *dp, &lv = *(dp=new (buf) S20734C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20734C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20734C9)");
    check_base_class_offset(lv, (S20734C6*), 0, "S20734C9");
    check_base_class_offset(lv, (S2121C28*), 0, "S20734C9");
    check_base_class_offset(lv, (S2121C38*), 0, "S20734C9");
    test_class_info(&lv, &cd_S20734C9);
    dp->~S20734C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20734C9(Test_S20734C9, "S20734C9", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20734C9C1Ev();
extern void _ZN8S20734C9D1Ev();
Name_Map name_map_S20734C9[] = {
  NSPAIR(_ZN8S20734C9C1Ev),
  NSPAIR(_ZN8S20734C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20734C6;
extern VTBL_ENTRY _ZTI8S20734C6[];
extern  VTBL_ENTRY _ZTV8S20734C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
static Base_Class bases_S20734C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20734C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S20734C9[];
extern void _ZN8S20734C62v1Ev();
static  VTBL_ENTRY vtc_S20734C9[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20734C9[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
};
extern VTBL_ENTRY _ZTV8S20734C9[];
static  VTT_ENTRY vtt_S20734C9[] = {
  {&(_ZTV8S20734C9[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20734C9[];
extern  VTBL_ENTRY _ZTV8S20734C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20734C9[];
Class_Descriptor cd_S20734C9 = {  "S20734C9", // class name
  bases_S20734C9, 3,
  &(vtc_S20734C9[0]), // expected_vtbl_contents
  &(vtt_S20734C9[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20734C9),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20734C9),4, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20734C9),1, //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  S20734C2  : virtual S2121C38 , virtual S20734C4 , virtual S20734C8 , virtual S20734C9 , S20734C6 {
  ~S20734C2(); // tgen
  S20734C2(); // tgen
};
//SIG(-1 S20734C2) C1{ VBC2{ m} VBC3{ BC4{ VBC2 BC5{ v1} VBC6{ m}} BC5} VBC7{ BC2 BC4 v2} VBC8{ BC5 BC6 VBC2} BC5}


S20734C2 ::~S20734C2(){ note_dtor("S20734C2", this);} // tgen
S20734C2 ::S20734C2(){ note_ctor("S20734C2", this);} // tgen

static void Test_S20734C2()
{
  extern Class_Descriptor cd_S20734C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S20734C2, buf);
    S20734C2 *dp, &lv = *(dp=new (buf) S20734C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S20734C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20734C2)");
    /*is_ambiguous_... S20734C2::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*), 0, "S20734C2");
    check_base_class_offset(lv, (S2121C38*)(S20734C5*)(S20734C4*), 0, "S20734C2");
    check_base_class_offset(lv, (S2121C38*)(S20734C5*)(S20734C8*), 0, "S20734C2");
    check_base_class_offset(lv, (S2121C38*)(S20734C9*), 0, "S20734C2");
    check_base_class_offset(lv, (S20734C6*)(S20734C5*)(S20734C4*), ABISELECT(8,4), "S20734C2");
    check_base_class_offset(lv, (S2121C28*)(S20734C5*)(S20734C4*), 0, "S20734C2");
    check_base_class_offset(lv, (S2121C28*)(S20734C5*)(S20734C8*), 0, "S20734C2");
    check_base_class_offset(lv, (S20734C5*)(S20734C4*), ABISELECT(8,4), "S20734C2");
    /*is_ambiguous_... S20734C4::S20734C6 */ AMB_check_base_class_offset(lv, (S20734C6*)(S20734C4*), ABISELECT(16,8), "S20734C2");
    check_base_class_offset(lv, (S20734C4*), ABISELECT(8,4), "S20734C2");
    /*is_ambiguous_... S20734C8::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20734C8*), ABISELECT(24,12), "S20734C2");
    check_base_class_offset(lv, (S20734C6*)(S20734C5*)(S20734C8*), ABISELECT(24,12), "S20734C2");
    check_base_class_offset(lv, (S20734C5*)(S20734C8*), ABISELECT(24,12), "S20734C2");
    check_base_class_offset(lv, (S20734C8*), ABISELECT(24,12), "S20734C2");
    check_base_class_offset(lv, (S20734C6*)(S20734C9*), ABISELECT(32,16), "S20734C2");
    check_base_class_offset(lv, (S2121C28*)(S20734C9*), ABISELECT(32,16), "S20734C2");
    check_base_class_offset(lv, (S20734C9*), ABISELECT(32,16), "S20734C2");
    /*is_ambiguous_... S20734C2::S20734C6 */ AMB_check_base_class_offset(lv, (S20734C6*), 0, "S20734C2");
    test_class_info(&lv, &cd_S20734C2);
    dp->~S20734C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20734C2(Test_S20734C2, "S20734C2", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S20734C2C1Ev();
extern void _ZN8S20734C2D1Ev();
Name_Map name_map_S20734C2[] = {
  NSPAIR(_ZN8S20734C2C1Ev),
  NSPAIR(_ZN8S20734C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20734C6;
extern VTBL_ENTRY _ZTI8S20734C6[];
extern  VTBL_ENTRY _ZTV8S20734C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20734C5;
extern VTBL_ENTRY _ZTI8S20734C5[];
extern  VTBL_ENTRY _ZTV8S20734C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20734C5[];
extern Class_Descriptor cd_S20734C6;
extern VTBL_ENTRY _ZTI8S20734C6[];
extern  VTBL_ENTRY _ZTV8S20734C6[];
extern Class_Descriptor cd_S20734C4;
extern VTBL_ENTRY _ZTI8S20734C4[];
extern  VTBL_ENTRY _ZTV8S20734C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20734C4[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20734C6;
extern VTBL_ENTRY _ZTI8S20734C6[];
extern  VTBL_ENTRY _ZTV8S20734C6[];
extern Class_Descriptor cd_S20734C5;
extern VTBL_ENTRY _ZTI8S20734C5[];
extern  VTBL_ENTRY _ZTV8S20734C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20734C5[];
extern Class_Descriptor cd_S20734C8;
extern VTBL_ENTRY _ZTI8S20734C8[];
extern  VTBL_ENTRY _ZTV8S20734C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20734C8[];
extern Class_Descriptor cd_S20734C6;
extern VTBL_ENTRY _ZTI8S20734C6[];
extern  VTBL_ENTRY _ZTV8S20734C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20734C9;
extern VTBL_ENTRY _ZTI8S20734C9[];
extern  VTBL_ENTRY _ZTV8S20734C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20734C9[];
extern Class_Descriptor cd_S20734C6;
extern VTBL_ENTRY _ZTI8S20734C6[];
extern  VTBL_ENTRY _ZTV8S20734C6[];
static Base_Class bases_S20734C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20734C6,    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
    3, //immediately_derived
  0, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20734C5,    ABISELECT(8,4), //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
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20734C6,    ABISELECT(16,8), //bcp->offset
    14, //bcp->virtual_function_table_offset
    2, //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
    5, //immediately_derived
  0, 0},
  {&cd_S20734C4,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2121C38,    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
    9, //immediately_derived
  0, 0},
  {&cd_S20734C6,    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
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20734C5,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20734C8,    ABISELECT(24,12), //bcp->offset
    17, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20734C6,    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
    8, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2121C28,    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
    12, //immediately_derived
  0, 0},
  {&cd_S20734C9,    ABISELECT(32,16), //bcp->offset
    25, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20734C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20734C2[];
extern void _ZN8S20734C62v1Ev();
extern void _ZN8S20734C62v1Ev();
extern void _ZN8S20734C62v1Ev();
extern void _ZN8S20734C62v1Ev();
extern void _ZN8S20734C82v2Ev();
extern void _ZN8S20734C62v1Ev();
static  VTBL_ENTRY vtc_S20734C2[] = {
  ABISELECT(32,16),
  ABISELECT(24,12),
  0,
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20734C2[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20734C2[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20734C2[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20734C2[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20734C82v2Ev,
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20734C2[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
};
extern VTBL_ENTRY _ZTV8S20734C2[];
extern void _ZN8S20734C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20734C4__8S20734C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20734C4[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
};
extern void _ZN8S20734C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20734C58S20734C4__8S20734C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20734C5[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
};
extern void _ZN8S20734C62v1Ev();
extern void _ZN8S20734C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20734C8__8S20734C2[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20734C8[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20734C82v2Ev,
};
extern void _ZN8S20734C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20734C58S20734C8__A1__8S20734C2[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20734C5[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
};
extern void _ZN8S20734C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20734C9__8S20734C2[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20734C9[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
};
static  VTT_ENTRY vtt_S20734C2[] = {
  {&(_ZTV8S20734C2[7]),  7,30},
  {&(_ZTV8S20734C2[13]),  13,30},
  {&(_ZTV8S20734C2[16]),  16,30},
  {&(_ZTV8S20734C2[23]),  23,30},
  {&(_ZTV8S20734C2[29]),  29,30},
  {&(_tg__ZTV8S20734C4__8S20734C2[4]),  4,5},
  {&(_tg__ZTV8S20734C58S20734C4__8S20734C2[4]),  4,5},
  {&(_tg__ZTV8S20734C8__8S20734C2[4]),  4,6},
  {&(_tg__ZTV8S20734C58S20734C8__A1__8S20734C2[4]),  4,5},
  {&(_tg__ZTV8S20734C9__8S20734C2[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20734C2[];
extern  VTBL_ENTRY _ZTV8S20734C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20734C2[];
Class_Descriptor cd_S20734C2 = {  "S20734C2", // class name
  bases_S20734C2, 14,
  &(vtc_S20734C2[0]), // expected_vtbl_contents
  &(vtt_S20734C2[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S20734C2),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S20734C2),30, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20734C2),10, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20734C1  : virtual S20734C2 , S20734C6 {
  ~S20734C1(); // tgen
  S20734C1(); // tgen
};
//SIG(1 S20734C1) C1{ VBC2{ VBC3{ m} VBC4{ BC5{ VBC3 BC6{ v1} VBC7{ m}} BC6} VBC8{ BC3 BC5 v2} VBC9{ BC6 BC7 VBC3} BC6} BC6}


S20734C1 ::~S20734C1(){ note_dtor("S20734C1", this);} // tgen
S20734C1 ::S20734C1(){ note_ctor("S20734C1", this);} // tgen

static void Test_S20734C1()
{
  extern Class_Descriptor cd_S20734C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S20734C1, buf);
    S20734C1 *dp, &lv = *(dp=new (buf) S20734C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S20734C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20734C1)");
    /*is_ambiguous_... S20734C2::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20734C2*), 0, "S20734C1");
    check_base_class_offset(lv, (S2121C38*)(S20734C5*)(S20734C4*), 0, "S20734C1");
    check_base_class_offset(lv, (S2121C38*)(S20734C5*)(S20734C8*), 0, "S20734C1");
    check_base_class_offset(lv, (S2121C38*)(S20734C9*), 0, "S20734C1");
    check_base_class_offset(lv, (S20734C6*)(S20734C5*)(S20734C4*), ABISELECT(16,8), "S20734C1");
    check_base_class_offset(lv, (S2121C28*)(S20734C5*)(S20734C4*), 0, "S20734C1");
    check_base_class_offset(lv, (S2121C28*)(S20734C5*)(S20734C8*), 0, "S20734C1");
    check_base_class_offset(lv, (S20734C5*)(S20734C4*), ABISELECT(16,8), "S20734C1");
    /*is_ambiguous_... S20734C4::S20734C6 */ AMB_check_base_class_offset(lv, (S20734C6*)(S20734C4*), ABISELECT(24,12), "S20734C1");
    check_base_class_offset(lv, (S20734C4*)(S20734C2*), ABISELECT(16,8), "S20734C1");
    /*is_ambiguous_... S20734C8::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20734C8*), ABISELECT(32,16), "S20734C1");
    check_base_class_offset(lv, (S20734C6*)(S20734C5*)(S20734C8*), ABISELECT(32,16), "S20734C1");
    check_base_class_offset(lv, (S20734C5*)(S20734C8*), ABISELECT(32,16), "S20734C1");
    check_base_class_offset(lv, (S20734C8*)(S20734C2*), ABISELECT(32,16), "S20734C1");
    check_base_class_offset(lv, (S20734C6*)(S20734C9*), ABISELECT(40,20), "S20734C1");
    check_base_class_offset(lv, (S2121C28*)(S20734C9*), ABISELECT(40,20), "S20734C1");
    check_base_class_offset(lv, (S20734C9*)(S20734C2*), ABISELECT(40,20), "S20734C1");
    /*is_ambiguous_... S20734C2::S20734C6 */ AMB_check_base_class_offset(lv, (S20734C6*)(S20734C2*), ABISELECT(8,4), "S20734C1");
    check_base_class_offset(lv, (S20734C2*), ABISELECT(8,4), "S20734C1");
    /*is_ambiguous_... S20734C1::S20734C6 */ AMB_check_base_class_offset(lv, (S20734C6*), 0, "S20734C1");
    test_class_info(&lv, &cd_S20734C1);
    dp->~S20734C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20734C1(Test_S20734C1, "S20734C1", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S20734C1C1Ev();
extern void _ZN8S20734C1D1Ev();
Name_Map name_map_S20734C1[] = {
  NSPAIR(_ZN8S20734C1C1Ev),
  NSPAIR(_ZN8S20734C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20734C6;
extern VTBL_ENTRY _ZTI8S20734C6[];
extern  VTBL_ENTRY _ZTV8S20734C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20734C5;
extern VTBL_ENTRY _ZTI8S20734C5[];
extern  VTBL_ENTRY _ZTV8S20734C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20734C5[];
extern Class_Descriptor cd_S20734C6;
extern VTBL_ENTRY _ZTI8S20734C6[];
extern  VTBL_ENTRY _ZTV8S20734C6[];
extern Class_Descriptor cd_S20734C4;
extern VTBL_ENTRY _ZTI8S20734C4[];
extern  VTBL_ENTRY _ZTV8S20734C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20734C4[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20734C6;
extern VTBL_ENTRY _ZTI8S20734C6[];
extern  VTBL_ENTRY _ZTV8S20734C6[];
extern Class_Descriptor cd_S20734C5;
extern VTBL_ENTRY _ZTI8S20734C5[];
extern  VTBL_ENTRY _ZTV8S20734C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20734C5[];
extern Class_Descriptor cd_S20734C8;
extern VTBL_ENTRY _ZTI8S20734C8[];
extern  VTBL_ENTRY _ZTV8S20734C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20734C8[];
extern Class_Descriptor cd_S20734C6;
extern VTBL_ENTRY _ZTI8S20734C6[];
extern  VTBL_ENTRY _ZTV8S20734C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20734C9;
extern VTBL_ENTRY _ZTI8S20734C9[];
extern  VTBL_ENTRY _ZTV8S20734C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20734C9[];
extern Class_Descriptor cd_S20734C6;
extern VTBL_ENTRY _ZTI8S20734C6[];
extern  VTBL_ENTRY _ZTV8S20734C6[];
extern Class_Descriptor cd_S20734C2;
extern VTBL_ENTRY _ZTI8S20734C2[];
extern  VTBL_ENTRY _ZTV8S20734C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20734C2[];
extern Class_Descriptor cd_S20734C6;
extern VTBL_ENTRY _ZTI8S20734C6[];
extern  VTBL_ENTRY _ZTV8S20734C6[];
static Base_Class bases_S20734C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20734C6,    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_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20734C5,    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
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20734C6,    ABISELECT(24,12), //bcp->offset
    24, //bcp->virtual_function_table_offset
    2, //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
    5, //immediately_derived
  0, 0},
  {&cd_S20734C4,    ABISELECT(16,8), //bcp->offset
    18, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S2121C38,    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
    9, //immediately_derived
  0, 0},
  {&cd_S20734C6,    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
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20734C5,    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
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20734C8,    ABISELECT(32,16), //bcp->offset
    27, //bcp->virtual_function_table_offset
    6, //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
    14, //immediately_derived
  0, 1},
  {&cd_S20734C6,    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
    8, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2121C28,    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
    12, //immediately_derived
  0, 0},
  {&cd_S20734C9,    ABISELECT(40,20), //bcp->offset
    35, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20734C6,    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
    10, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20734C2,    ABISELECT(8,4), //bcp->offset
    9, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20734C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20734C1[];
extern void _ZN8S20734C62v1Ev();
extern void _ZN8S20734C62v1Ev();
extern void _ZN8S20734C62v1Ev();
extern void _ZN8S20734C62v1Ev();
extern void _ZN8S20734C62v1Ev();
extern void _ZN8S20734C82v2Ev();
extern void _ZN8S20734C62v1Ev();
static  VTBL_ENTRY vtc_S20734C1[] = {
  ABISELECT(40,20),
  ABISELECT(32,16),
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20734C1[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
  0,
  ABISELECT(32,16),
  ABISELECT(24,12),
  ABISELECT(-8,-4),
  ABISELECT(8,4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20734C1[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20734C1[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20734C1[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
  0,
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20734C1[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20734C82v2Ev,
  0,
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20734C1[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
};
extern VTBL_ENTRY _ZTV8S20734C1[];
extern void _ZN8S20734C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20734C2__8S20734C1[] = {
  ABISELECT(32,16),
  ABISELECT(24,12),
  ABISELECT(-8,-4),
  ABISELECT(8,4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20734C2[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
};
extern void _ZN8S20734C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20734C4__8S20734C2__8S20734C1[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20734C2[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
};
extern void _ZN8S20734C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20734C68S20734C4__A1__8S20734C2__8S20734C1[] = {
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20734C2[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
};
extern void _ZN8S20734C62v1Ev();
extern void _ZN8S20734C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20734C8__8S20734C2__8S20734C1[] = {
  0,
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20734C2[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20734C82v2Ev,
};
extern void _ZN8S20734C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20734C9__8S20734C2__8S20734C1[] = {
  0,
  ABISELECT(-40,-20),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20734C2[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
};
extern void _ZN8S20734C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20734C4__8S20734C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20734C4[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
};
extern void _ZN8S20734C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20734C58S20734C4__8S20734C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20734C5[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
};
extern void _ZN8S20734C62v1Ev();
extern void _ZN8S20734C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20734C8__8S20734C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20734C8[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20734C82v2Ev,
};
extern void _ZN8S20734C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20734C58S20734C8__A1__8S20734C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20734C5[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
};
extern void _ZN8S20734C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20734C9__8S20734C1[] = {
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20734C9[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
};
static  VTT_ENTRY vtt_S20734C1[] = {
  {&(_ZTV8S20734C1[8]),  8,40},
  {&(_ZTV8S20734C1[17]),  17,40},
  {&(_ZTV8S20734C1[23]),  23,40},
  {&(_ZTV8S20734C1[26]),  26,40},
  {&(_ZTV8S20734C1[33]),  33,40},
  {&(_ZTV8S20734C1[39]),  39,40},
  {&(_tg__ZTV8S20734C2__8S20734C1[7]),  7,8},
  {&(_tg__ZTV8S20734C4__8S20734C2__8S20734C1[5]),  5,6},
  {&(_tg__ZTV8S20734C68S20734C4__A1__8S20734C2__8S20734C1[2]),  2,3},
  {&(_tg__ZTV8S20734C8__8S20734C2__8S20734C1[6]),  6,8},
  {&(_tg__ZTV8S20734C9__8S20734C2__8S20734C1[4]),  4,5},
  {&(_tg__ZTV8S20734C4__8S20734C1[4]),  4,5},
  {&(_tg__ZTV8S20734C58S20734C4__8S20734C1[4]),  4,5},
  {&(_tg__ZTV8S20734C8__8S20734C1[4]),  4,6},
  {&(_tg__ZTV8S20734C58S20734C8__A1__8S20734C1[4]),  4,5},
  {&(_tg__ZTV8S20734C9__8S20734C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20734C1[];
extern  VTBL_ENTRY _ZTV8S20734C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20734C1[];
Class_Descriptor cd_S20734C1 = {  "S20734C1", // class name
  bases_S20734C1, 16,
  &(vtc_S20734C1[0]), // expected_vtbl_contents
  &(vtt_S20734C1[0]), // expected_vtt_contents
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S20734C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20734C1),40, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20734C1),16, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18978C6  {
  short  :0;
  short s18978c6f1;
  int s18978c6f2;
  __tsi64 s18978c6f3;
  int s18978c6f4;
  virtual void  v2(); // _ZN8S18978C62v2Ev
  ~S18978C6(); // tgen
  S18978C6(); // tgen
};
//SIG(-1 S18978C6) C1{ v1 Fs:0 Fs Fi FL Fi}


void  S18978C6 ::v2(){vfunc_called(this, "_ZN8S18978C62v2Ev");}
S18978C6 ::~S18978C6(){ note_dtor("S18978C6", this);} // tgen
S18978C6 ::S18978C6(){ note_ctor("S18978C6", this);} // tgen

static void Test_S18978C6()
{
  extern Class_Descriptor cd_S18978C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,7)];
    init_test(&cd_S18978C6, buf);
    S18978C6 *dp, &lv = *(dp=new (buf) S18978C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S18978C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18978C6)");
    check_field_offset(lv, s18978c6f1, ABISELECT(8,4), "S18978C6.s18978c6f1");
    check_field_offset(lv, s18978c6f2, ABISELECT(12,8), "S18978C6.s18978c6f2");
    check_field_offset(lv, s18978c6f3, ABISELECT(16,12), "S18978C6.s18978c6f3");
    check_field_offset(lv, s18978c6f4, ABISELECT(24,20), "S18978C6.s18978c6f4");
    test_class_info(&lv, &cd_S18978C6);
    dp->~S18978C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18978C6(Test_S18978C6, "S18978C6", ABISELECT(32,24));

#else // __cplusplus

extern void _ZN8S18978C6C1Ev();
extern void _ZN8S18978C6D1Ev();
Name_Map name_map_S18978C6[] = {
  NSPAIR(_ZN8S18978C6C1Ev),
  NSPAIR(_ZN8S18978C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18978C6[];
extern void _ZN8S18978C62v2Ev();
static  VTBL_ENTRY vtc_S18978C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18978C6[0]),
  (VTBL_ENTRY)&_ZN8S18978C62v2Ev,
};
extern VTBL_ENTRY _ZTI8S18978C6[];
extern  VTBL_ENTRY _ZTV8S18978C6[];
Class_Descriptor cd_S18978C6 = {  "S18978C6", // class name
  0,0,//no base classes
  &(vtc_S18978C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,24), // object size
  NSPAIRA(_ZTI8S18978C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18978C6),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  S18978C4  : S2514C3_nt , S18978C6 {
  int s18978c4f0;
  ~S18978C4(); // tgen
  S18978C4(); // tgen
};
//SIG(-1 S18978C4) C1{ BC2{ m FD} BC3{ v1 Fs:0 Fs Fi FL Fi} Fi}


S18978C4 ::~S18978C4(){ note_dtor("S18978C4", this);} // tgen
S18978C4 ::S18978C4(){ note_ctor("S18978C4", this);} // tgen

static void Test_S18978C4()
{
  extern Class_Descriptor cd_S18978C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5,11)];
    init_test(&cd_S18978C4, buf);
    S18978C4 *dp, &lv = *(dp=new (buf) S18978C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S18978C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18978C4)");
    check_base_class_offset(lv, (S2514C3_nt*), ABISELECT(32,24), "S18978C4");
    check_base_class_offset(lv, (S18978C6*), 0, "S18978C4");
    check_field_offset(lv, s18978c4f0, ABISELECT(48,36), "S18978C4.s18978c4f0");
    test_class_info(&lv, &cd_S18978C4);
    dp->~S18978C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18978C4(Test_S18978C4, "S18978C4", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN8S18978C4C1Ev();
extern void _ZN8S18978C4D1Ev();
Name_Map name_map_S18978C4[] = {
  NSPAIR(_ZN8S18978C4C1Ev),
  NSPAIR(_ZN8S18978C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2514C3_nt;
extern VTBL_ENTRY _ZTI10S2514C3_nt[];
extern Class_Descriptor cd_S18978C6;
extern VTBL_ENTRY _ZTI8S18978C6[];
extern  VTBL_ENTRY _ZTV8S18978C6[];
static Base_Class bases_S18978C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2514C3_nt,    ABISELECT(32,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, 0},
  {&cd_S18978C6,    0, //bcp->offset
    0, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S18978C4[];
extern void _ZN8S18978C62v2Ev();
static  VTBL_ENTRY vtc_S18978C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18978C4[0]),
  (VTBL_ENTRY)&_ZN8S18978C62v2Ev,
};
extern VTBL_ENTRY _ZTI8S18978C4[];
extern  VTBL_ENTRY _ZTV8S18978C4[];
Class_Descriptor cd_S18978C4 = {  "S18978C4", // class name
  bases_S18978C4, 2,
  &(vtc_S18978C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI8S18978C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S18978C4),3, //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  S18978C3  : S18978C4 {
  void *s18978c3f0;
  long double s18978c3f1;
  virtual void  v3(); // _ZN8S18978C32v3Ev
  virtual void  v4(); // _ZN8S18978C32v4Ev
  virtual void  v5(); // _ZN8S18978C32v5Ev
  ~S18978C3(); // tgen
  S18978C3(); // tgen
};
//SIG(-1 S18978C3) C1{ BC2{ BC3{ m FD} BC4{ v4 Fs:0 Fs Fi FL Fi} Fi} v1 v2 v3 Fp FD}


void  S18978C3 ::v3(){vfunc_called(this, "_ZN8S18978C32v3Ev");}
void  S18978C3 ::v4(){vfunc_called(this, "_ZN8S18978C32v4Ev");}
void  S18978C3 ::v5(){vfunc_called(this, "_ZN8S18978C32v5Ev");}
S18978C3 ::~S18978C3(){ note_dtor("S18978C3", this);} // tgen
S18978C3 ::S18978C3(){ note_ctor("S18978C3", this);} // tgen

static void Test_S18978C3()
{
  extern Class_Descriptor cd_S18978C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,15)];
    init_test(&cd_S18978C3, buf);
    S18978C3 *dp, &lv = *(dp=new (buf) S18978C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,56), "sizeof(S18978C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18978C3)");
    check_base_class_offset(lv, (S2514C3_nt*)(S18978C4*), ABISELECT(32,24), "S18978C3");
    check_base_class_offset(lv, (S18978C6*)(S18978C4*), 0, "S18978C3");
    check_base_class_offset(lv, (S18978C4*), 0, "S18978C3");
    check_field_offset(lv, s18978c3f0, ABISELECT(56,40), "S18978C3.s18978c3f0");
    check_field_offset(lv, s18978c3f1, ABISELECT(64,44), "S18978C3.s18978c3f1");
    test_class_info(&lv, &cd_S18978C3);
    dp->~S18978C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18978C3(Test_S18978C3, "S18978C3", ABISELECT(80,56));

#else // __cplusplus

extern void _ZN8S18978C3C1Ev();
extern void _ZN8S18978C3D1Ev();
Name_Map name_map_S18978C3[] = {
  NSPAIR(_ZN8S18978C3C1Ev),
  NSPAIR(_ZN8S18978C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2514C3_nt;
extern VTBL_ENTRY _ZTI10S2514C3_nt[];
extern Class_Descriptor cd_S18978C6;
extern VTBL_ENTRY _ZTI8S18978C6[];
extern  VTBL_ENTRY _ZTV8S18978C6[];
extern Class_Descriptor cd_S18978C4;
extern VTBL_ENTRY _ZTI8S18978C4[];
extern  VTBL_ENTRY _ZTV8S18978C4[];
static Base_Class bases_S18978C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2514C3_nt,    ABISELECT(32,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
    2, //immediately_derived
  0, 0},
  {&cd_S18978C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S18978C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S18978C3[];
extern void _ZN8S18978C62v2Ev();
extern void _ZN8S18978C32v3Ev();
extern void _ZN8S18978C32v4Ev();
extern void _ZN8S18978C32v5Ev();
static  VTBL_ENTRY vtc_S18978C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18978C3[0]),
  (VTBL_ENTRY)&_ZN8S18978C62v2Ev,
  (VTBL_ENTRY)&_ZN8S18978C32v3Ev,
  (VTBL_ENTRY)&_ZN8S18978C32v4Ev,
  (VTBL_ENTRY)&_ZN8S18978C32v5Ev,
};
extern VTBL_ENTRY _ZTI8S18978C3[];
extern  VTBL_ENTRY _ZTV8S18978C3[];
Class_Descriptor cd_S18978C3 = {  "S18978C3", // class name
  bases_S18978C3, 3,
  &(vtc_S18978C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,56), // object size
  NSPAIRA(_ZTI8S18978C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S18978C3),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18978C2  : S18978C3 , virtual S18978C6 , virtual S2514C3_nt {
  void *s18978c2f0[8];
  long double s18978c2f1;
  ~S18978C2(); // tgen
  S18978C2(); // tgen
};
//SIG(-1 S18978C2) C1{ BC2{ BC3{ BC4{ m FD} BC5{ v1 Fs:0 Fs Fi FL Fi} Fi} v2 v3 v4 Fp FD} VBC5 VBC4 Fp[8] FD}


S18978C2 ::~S18978C2(){ note_dtor("S18978C2", this);} // tgen
S18978C2 ::S18978C2(){ note_ctor("S18978C2", this);} // tgen

static void Test_S18978C2()
{
  extern Class_Descriptor cd_S18978C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,35)];
    init_test(&cd_S18978C2, buf);
    S18978C2 *dp, &lv = *(dp=new (buf) S18978C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,136), "sizeof(S18978C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18978C2)");
    check_base_class_offset(lv, (S2514C3_nt*)(S18978C4*)(S18978C3*), ABISELECT(32,24), "S18978C2");
    check_base_class_offset(lv, (S18978C6*)(S18978C4*)(S18978C3*), 0, "S18978C2");
    check_base_class_offset(lv, (S18978C4*)(S18978C3*), 0, "S18978C2");
    check_base_class_offset(lv, (S18978C3*), 0, "S18978C2");
    /*is_ambiguous_... S18978C2::S18978C6 */ AMB_check_base_class_offset(lv, (S18978C6*), ABISELECT(160,100), "S18978C2");
    /*is_ambiguous_... S18978C2::S2514C3_nt */ AMB_check_base_class_offset(lv, (S2514C3_nt*), ABISELECT(192,124), "S18978C2");
    check_field_offset(lv, s18978c2f0, ABISELECT(80,56), "S18978C2.s18978c2f0");
    check_field_offset(lv, s18978c2f1, ABISELECT(144,88), "S18978C2.s18978c2f1");
    test_class_info(&lv, &cd_S18978C2);
    dp->~S18978C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18978C2(Test_S18978C2, "S18978C2", ABISELECT(208,136));

#else // __cplusplus

extern void _ZN8S18978C2C1Ev();
extern void _ZN8S18978C2D1Ev();
Name_Map name_map_S18978C2[] = {
  NSPAIR(_ZN8S18978C2C1Ev),
  NSPAIR(_ZN8S18978C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2514C3_nt;
extern VTBL_ENTRY _ZTI10S2514C3_nt[];
extern Class_Descriptor cd_S18978C6;
extern VTBL_ENTRY _ZTI8S18978C6[];
extern  VTBL_ENTRY _ZTV8S18978C6[];
extern Class_Descriptor cd_S18978C4;
extern VTBL_ENTRY _ZTI8S18978C4[];
extern  VTBL_ENTRY _ZTV8S18978C4[];
extern Class_Descriptor cd_S18978C3;
extern VTBL_ENTRY _ZTI8S18978C3[];
extern  VTBL_ENTRY _ZTV8S18978C3[];
extern Class_Descriptor cd_S18978C6;
extern VTBL_ENTRY _ZTI8S18978C6[];
extern  VTBL_ENTRY _ZTV8S18978C6[];
extern Class_Descriptor cd_S2514C3_nt;
extern VTBL_ENTRY _ZTI10S2514C3_nt[];
static Base_Class bases_S18978C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2514C3_nt,    ABISELECT(32,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
    2, //immediately_derived
  0, 0},
  {&cd_S18978C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S18978C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S18978C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S18978C6,    ABISELECT(160,100), //bcp->offset
    8, //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_S2514C3_nt,    ABISELECT(192,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},
  {0}};
extern VTBL_ENTRY _ZTI8S18978C2[];
extern void _ZN8S18978C62v2Ev();
extern void _ZN8S18978C32v3Ev();
extern void _ZN8S18978C32v4Ev();
extern void _ZN8S18978C32v5Ev();
extern void _ZN8S18978C62v2Ev();
static  VTBL_ENTRY vtc_S18978C2[] = {
  ABISELECT(192,124),
  ABISELECT(160,100),
  0,
  (VTBL_ENTRY)&(_ZTI8S18978C2[0]),
  (VTBL_ENTRY)&_ZN8S18978C62v2Ev,
  (VTBL_ENTRY)&_ZN8S18978C32v3Ev,
  (VTBL_ENTRY)&_ZN8S18978C32v4Ev,
  (VTBL_ENTRY)&_ZN8S18978C32v5Ev,
  0,
  ABISELECT(-160,-100),
  (VTBL_ENTRY)&(_ZTI8S18978C2[0]),
  (VTBL_ENTRY)&_ZN8S18978C62v2Ev,
};
extern VTBL_ENTRY _ZTV8S18978C2[];
static  VTT_ENTRY vtt_S18978C2[] = {
  {&(_ZTV8S18978C2[4]),  4,12},
  {&(_ZTV8S18978C2[11]),  11,12},
};
extern VTBL_ENTRY _ZTI8S18978C2[];
extern  VTBL_ENTRY _ZTV8S18978C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18978C2[];
Class_Descriptor cd_S18978C2 = {  "S18978C2", // class name
  bases_S18978C2, 6,
  &(vtc_S18978C2[0]), // expected_vtbl_contents
  &(vtt_S18978C2[0]), // expected_vtt_contents
  ABISELECT(208,136), // object size
  NSPAIRA(_ZTI8S18978C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S18978C2),12, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S18978C2),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  S18978C1  : virtual S18978C2 {
  virtual void  v1(); // _ZN8S18978C12v1Ev
  ~S18978C1(); // tgen
  S18978C1(); // tgen
};
//SIG(1 S18978C1) C1{ VBC2{ BC3{ BC4{ BC5{ m FD} BC6{ v2 Fs:0 Fs Fi FL Fi} Fi} v3 v4 v5 Fp FD} VBC6 VBC5 Fp[8] FD} v1}


void  S18978C1 ::v1(){vfunc_called(this, "_ZN8S18978C12v1Ev");}
S18978C1 ::~S18978C1(){ note_dtor("S18978C1", this);} // tgen
S18978C1 ::S18978C1(){ note_ctor("S18978C1", this);} // tgen

static void Test_S18978C1()
{
  extern Class_Descriptor cd_S18978C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(15,36)];
    init_test(&cd_S18978C1, buf);
    S18978C1 *dp, &lv = *(dp=new (buf) S18978C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,140), "sizeof(S18978C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18978C1)");
    check_base_class_offset(lv, (S2514C3_nt*)(S18978C4*)(S18978C3*)(S18978C2*), ABISELECT(48,28), "S18978C1");
    check_base_class_offset(lv, (S18978C6*)(S18978C4*)(S18978C3*)(S18978C2*), ABISELECT(16,4), "S18978C1");
    check_base_class_offset(lv, (S18978C4*)(S18978C3*)(S18978C2*), ABISELECT(16,4), "S18978C1");
    check_base_class_offset(lv, (S18978C3*)(S18978C2*), ABISELECT(16,4), "S18978C1");
    /*is_ambiguous_... S18978C2::S18978C6 */ AMB_check_base_class_offset(lv, (S18978C6*)(S18978C2*), ABISELECT(176,104), "S18978C1");
    /*is_ambiguous_... S18978C2::S2514C3_nt */ AMB_check_base_class_offset(lv, (S2514C3_nt*)(S18978C2*), ABISELECT(208,128), "S18978C1");
    check_base_class_offset(lv, (S18978C2*), ABISELECT(16,4), "S18978C1");
    test_class_info(&lv, &cd_S18978C1);
    dp->~S18978C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18978C1(Test_S18978C1, "S18978C1", ABISELECT(224,140));

#else // __cplusplus

extern void _ZN8S18978C1C1Ev();
extern void _ZN8S18978C1D1Ev();
Name_Map name_map_S18978C1[] = {
  NSPAIR(_ZN8S18978C1C1Ev),
  NSPAIR(_ZN8S18978C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2514C3_nt;
extern VTBL_ENTRY _ZTI10S2514C3_nt[];
extern Class_Descriptor cd_S18978C6;
extern VTBL_ENTRY _ZTI8S18978C6[];
extern  VTBL_ENTRY _ZTV8S18978C6[];
extern Class_Descriptor cd_S18978C4;
extern VTBL_ENTRY _ZTI8S18978C4[];
extern  VTBL_ENTRY _ZTV8S18978C4[];
extern Class_Descriptor cd_S18978C3;
extern VTBL_ENTRY _ZTI8S18978C3[];
extern  VTBL_ENTRY _ZTV8S18978C3[];
extern Class_Descriptor cd_S18978C6;
extern VTBL_ENTRY _ZTI8S18978C6[];
extern  VTBL_ENTRY _ZTV8S18978C6[];
extern Class_Descriptor cd_S2514C3_nt;
extern VTBL_ENTRY _ZTI10S2514C3_nt[];
extern Class_Descriptor cd_S18978C2;
extern VTBL_ENTRY _ZTI8S18978C2[];
extern  VTBL_ENTRY _ZTV8S18978C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18978C2[];
static Base_Class bases_S18978C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2514C3_nt,    ABISELECT(48,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
    2, //immediately_derived
  0, 0},
  {&cd_S18978C6,    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_S18978C4,    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
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S18978C3,    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
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S18978C6,    ABISELECT(176,104), //bcp->offset
    18, //bcp->virtual_function_table_offset
    3, //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
    6, //immediately_derived
  0, 1},
  {&cd_S2514C3_nt,    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
    6, //immediately_derived
  0, 1},
  {&cd_S18978C2,    ABISELECT(16,4), //bcp->offset
    6, //bcp->virtual_function_table_offset
    8, //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 _ZTI8S18978C1[];
extern void _ZN8S18978C12v1Ev();
extern void _ZN8S18978C62v2Ev();
extern void _ZN8S18978C32v3Ev();
extern void _ZN8S18978C32v4Ev();
extern void _ZN8S18978C32v5Ev();
extern void _ZN8S18978C62v2Ev();
static  VTBL_ENTRY vtc_S18978C1[] = {
  ABISELECT(208,128),
  ABISELECT(176,104),
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S18978C1[0]),
  (VTBL_ENTRY)&_ZN8S18978C12v1Ev,
  0,
  0,
  0,
  0,
  ABISELECT(192,124),
  ABISELECT(160,100),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S18978C1[0]),
  (VTBL_ENTRY)&_ZN8S18978C62v2Ev,
  (VTBL_ENTRY)&_ZN8S18978C32v3Ev,
  (VTBL_ENTRY)&_ZN8S18978C32v4Ev,
  (VTBL_ENTRY)&_ZN8S18978C32v5Ev,
  0,
  ABISELECT(-176,-104),
  (VTBL_ENTRY)&(_ZTI8S18978C1[0]),
  (VTBL_ENTRY)&_ZN8S18978C62v2Ev,
};
extern VTBL_ENTRY _ZTV8S18978C1[];
extern void _ZN8S18978C62v2Ev();
extern void _ZN8S18978C32v3Ev();
extern void _ZN8S18978C32v4Ev();
extern void _ZN8S18978C32v5Ev();
static  VTBL_ENTRY _tg__ZTV8S18978C2__8S18978C1[] = {
  ABISELECT(192,124),
  ABISELECT(160,100),
  0,
  (VTBL_ENTRY)&(_ZTI8S18978C2[0]),
  (VTBL_ENTRY)&_ZN8S18978C62v2Ev,
  (VTBL_ENTRY)&_ZN8S18978C32v3Ev,
  (VTBL_ENTRY)&_ZN8S18978C32v4Ev,
  (VTBL_ENTRY)&_ZN8S18978C32v5Ev,
};
extern void _ZN8S18978C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S18978C6__A1__8S18978C2__8S18978C1[] = {
  0,
  ABISELECT(-160,-100),
  (VTBL_ENTRY)&(_ZTI8S18978C2[0]),
  (VTBL_ENTRY)&_ZN8S18978C62v2Ev,
};
static  VTT_ENTRY vtt_S18978C1[] = {
  {&(_ZTV8S18978C1[5]),  5,22},
  {&(_ZTV8S18978C1[14]),  14,22},
  {&(_ZTV8S18978C1[21]),  21,22},
  {&(_tg__ZTV8S18978C2__8S18978C1[4]),  4,8},
  {&(_tg__ZTV8S18978C6__A1__8S18978C2__8S18978C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S18978C1[];
extern  VTBL_ENTRY _ZTV8S18978C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18978C1[];
Class_Descriptor cd_S18978C1 = {  "S18978C1", // class name
  bases_S18978C1, 7,
  &(vtc_S18978C1[0]), // expected_vtbl_contents
  &(vtt_S18978C1[0]), // expected_vtt_contents
  ABISELECT(224,140), // object size
  NSPAIRA(_ZTI8S18978C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S18978C1),22, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S18978C1),5, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1752C3  : S6282C14_nt {
  void *s1752c3f0;
  int s1752c3f1[2];
  unsigned int s1752c3f2:1;
  unsigned int s1752c3f3:1;
  unsigned int s1752c3f4:1;
  unsigned int s1752c3f5:1;
  int s1752c3f6[2];
  virtual  ~S1752C3(); // _ZN7S1752C3D1Ev
  S1752C3(); // tgen
};
//SIG(-1 S1752C3) C1{ BC2{ vd m Fi} vd Fp Fi[2] Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S1752C3 ::~S1752C3(){ note_dtor("S1752C3", this);}
S1752C3 ::S1752C3(){ note_ctor("S1752C3", this);} // tgen

static void Test_S1752C3()
{
  extern Class_Descriptor cd_S1752C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S1752C3, buf);
    S1752C3 *dp, &lv = *(dp=new (buf) S1752C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S1752C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1752C3)");
    check_base_class_offset(lv, (S6282C14_nt*), 0, "S1752C3");
    check_field_offset(lv, s1752c3f0, ABISELECT(16,8), "S1752C3.s1752c3f0");
    check_field_offset(lv, s1752c3f1, ABISELECT(24,12), "S1752C3.s1752c3f1");
    set_bf_and_test(lv, s1752c3f2, ABISELECT(32,20), 0, 1, 1, "S1752C3");
    set_bf_and_test(lv, s1752c3f3, ABISELECT(32,20), 1, 1, 1, "S1752C3");
    set_bf_and_test(lv, s1752c3f4, ABISELECT(32,20), 2, 1, 1, "S1752C3");
    set_bf_and_test(lv, s1752c3f5, ABISELECT(32,20), 3, 1, 1, "S1752C3");
    check_field_offset(lv, s1752c3f6, ABISELECT(36,24), "S1752C3.s1752c3f6");
    test_class_info(&lv, &cd_S1752C3);
    dp->~S1752C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1752C3(Test_S1752C3, "S1752C3", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S1752C3C1Ev();
extern void _ZN7S1752C3D1Ev();
Name_Map name_map_S1752C3[] = {
  NSPAIR(_ZN7S1752C3C1Ev),
  NSPAIR(_ZN7S1752C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6282C14_nt;
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
extern  VTBL_ENTRY _ZTV11S6282C14_nt[];
static Base_Class bases_S1752C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6282C14_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 _ZTI7S1752C3[];
extern void _ZN7S1752C3D1Ev();
extern void _ZN7S1752C3D0Ev();
static  VTBL_ENTRY vtc_S1752C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1752C3[0]),
  (VTBL_ENTRY)&_ZN7S1752C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1752C3D0Ev,
};
extern VTBL_ENTRY _ZTI7S1752C3[];
extern  VTBL_ENTRY _ZTV7S1752C3[];
Class_Descriptor cd_S1752C3 = {  "S1752C3", // class name
  bases_S1752C3, 1,
  &(vtc_S1752C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S1752C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1752C3),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1752C2  : S1752C3 {
  int s1752c2f0;
  void *s1752c2f1[2];
  int s1752c2f2[2];
  virtual  ~S1752C2(); // _ZN7S1752C2D1Ev
  S1752C2(); // tgen
};
//SIG(-1 S1752C2) C1{ BC2{ BC3{ vd m Fi} vd Fp Fi[2] Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd Fi Fp[2] Fi[2]}


 S1752C2 ::~S1752C2(){ note_dtor("S1752C2", this);}
S1752C2 ::S1752C2(){ note_ctor("S1752C2", this);} // tgen

static void Test_S1752C2()
{
  extern Class_Descriptor cd_S1752C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,14)];
    init_test(&cd_S1752C2, buf);
    S1752C2 *dp, &lv = *(dp=new (buf) S1752C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S1752C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1752C2)");
    check_base_class_offset(lv, (S6282C14_nt*)(S1752C3*), 0, "S1752C2");
    check_base_class_offset(lv, (S1752C3*), 0, "S1752C2");
    check_field_offset(lv, s1752c2f0, ABISELECT(44,32), "S1752C2.s1752c2f0");
    check_field_offset(lv, s1752c2f1, ABISELECT(48,36), "S1752C2.s1752c2f1");
    check_field_offset(lv, s1752c2f2, ABISELECT(64,44), "S1752C2.s1752c2f2");
    test_class_info(&lv, &cd_S1752C2);
    dp->~S1752C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1752C2(Test_S1752C2, "S1752C2", ABISELECT(72,52));

#else // __cplusplus

extern void _ZN7S1752C2C1Ev();
extern void _ZN7S1752C2D1Ev();
Name_Map name_map_S1752C2[] = {
  NSPAIR(_ZN7S1752C2C1Ev),
  NSPAIR(_ZN7S1752C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6282C14_nt;
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
extern  VTBL_ENTRY _ZTV11S6282C14_nt[];
extern Class_Descriptor cd_S1752C3;
extern VTBL_ENTRY _ZTI7S1752C3[];
extern  VTBL_ENTRY _ZTV7S1752C3[];
static Base_Class bases_S1752C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6282C14_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_S1752C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1752C2[];
extern void _ZN7S1752C2D1Ev();
extern void _ZN7S1752C2D0Ev();
static  VTBL_ENTRY vtc_S1752C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1752C2[0]),
  (VTBL_ENTRY)&_ZN7S1752C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1752C2D0Ev,
};
extern VTBL_ENTRY _ZTI7S1752C2[];
extern  VTBL_ENTRY _ZTV7S1752C2[];
Class_Descriptor cd_S1752C2 = {  "S1752C2", // class name
  bases_S1752C2, 2,
  &(vtc_S1752C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,52), // object size
  NSPAIRA(_ZTI7S1752C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1752C2),4, //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  S1752C1  : S1752C2 , S2121C38 {
  char s1752c1f0;
  ~S1752C1(); // tgen
  S1752C1(); // tgen
};
//SIG(1 S1752C1) C1{ BC2{ BC3{ BC4{ vd m Fi} vd Fp Fi[2] Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd Fi Fp[2] Fi[2]} BC5{ m} Fc}


S1752C1 ::~S1752C1(){ note_dtor("S1752C1", this);} // tgen
S1752C1 ::S1752C1(){ note_ctor("S1752C1", this);} // tgen

static void Test_S1752C1()
{
  extern Class_Descriptor cd_S1752C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,15)];
    init_test(&cd_S1752C1, buf);
    S1752C1 *dp, &lv = *(dp=new (buf) S1752C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,56), "sizeof(S1752C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1752C1)");
    check_base_class_offset(lv, (S6282C14_nt*)(S1752C3*)(S1752C2*), 0, "S1752C1");
    check_base_class_offset(lv, (S1752C3*)(S1752C2*), 0, "S1752C1");
    check_base_class_offset(lv, (S1752C2*), 0, "S1752C1");
    check_base_class_offset(lv, (S2121C38*), 0, "S1752C1");
    check_field_offset(lv, s1752c1f0, ABISELECT(72,52), "S1752C1.s1752c1f0");
    test_class_info(&lv, &cd_S1752C1);
    dp->~S1752C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1752C1(Test_S1752C1, "S1752C1", ABISELECT(80,56));

#else // __cplusplus

extern void _ZN7S1752C1C1Ev();
extern void _ZN7S1752C1D1Ev();
Name_Map name_map_S1752C1[] = {
  NSPAIR(_ZN7S1752C1C1Ev),
  NSPAIR(_ZN7S1752C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6282C14_nt;
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
extern  VTBL_ENTRY _ZTV11S6282C14_nt[];
extern Class_Descriptor cd_S1752C3;
extern VTBL_ENTRY _ZTI7S1752C3[];
extern  VTBL_ENTRY _ZTV7S1752C3[];
extern Class_Descriptor cd_S1752C2;
extern VTBL_ENTRY _ZTI7S1752C2[];
extern  VTBL_ENTRY _ZTV7S1752C2[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
static Base_Class bases_S1752C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6282C14_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_S1752C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1752C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S1752C1[];
extern void _ZN7S1752C1D1Ev();
extern void _ZN7S1752C1D0Ev();
static  VTBL_ENTRY vtc_S1752C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1752C1[0]),
  (VTBL_ENTRY)&_ZN7S1752C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1752C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S1752C1[];
extern  VTBL_ENTRY _ZTV7S1752C1[];
Class_Descriptor cd_S1752C1 = {  "S1752C1", // class name
  bases_S1752C1, 4,
  &(vtc_S1752C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,56), // object size
  NSPAIRA(_ZTI7S1752C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S1752C1),4, //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  S16095C1  {
  ::S3350C8_nt s16095c1f0;
  ::S4846C8 s16095c1f1;
  void  mf16095c1(); // _ZN8S16095C19mf16095c1Ev
};
//SIG(1 S16095C1) C1{ m FC2{ m Fi} FC3{ Fi FC4{ Fc[12]} Fc[48] FC4 FC4 FC5{ Fi Fc[128] FC6{ Fi[2] Fc[320] Fi}}}}


void  S16095C1 ::mf16095c1(){}

static void Test_S16095C1()
{
  {
    init_simple_test("S16095C1");
    S16095C1 lv;
    check2(sizeof(lv), 556, "sizeof(S16095C1)");
    check2(__alignof__(lv), 4, "__alignof__(S16095C1)");
    check_field_offset(lv, s16095c1f0, 0, "S16095C1.s16095c1f0");
    check_field_offset(lv, s16095c1f1, 4, "S16095C1.s16095c1f1");
  }
}
static Arrange_To_Call_Me vS16095C1(Test_S16095C1, "S16095C1", 556);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1753C3  : S6282C14_nt {
  void *s1753c3f0;
  int s1753c3f1[2];
  unsigned int s1753c3f2:1;
  unsigned int s1753c3f3:1;
  unsigned int s1753c3f4:1;
  unsigned int s1753c3f5:1;
  int s1753c3f6[2];
  virtual  ~S1753C3(); // _ZN7S1753C3D1Ev
  S1753C3(); // tgen
};
//SIG(-1 S1753C3) C1{ BC2{ vd m Fi} vd Fp Fi[2] Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S1753C3 ::~S1753C3(){ note_dtor("S1753C3", this);}
S1753C3 ::S1753C3(){ note_ctor("S1753C3", this);} // tgen

static void Test_S1753C3()
{
  extern Class_Descriptor cd_S1753C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S1753C3, buf);
    S1753C3 *dp, &lv = *(dp=new (buf) S1753C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S1753C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1753C3)");
    check_base_class_offset(lv, (S6282C14_nt*), 0, "S1753C3");
    check_field_offset(lv, s1753c3f0, ABISELECT(16,8), "S1753C3.s1753c3f0");
    check_field_offset(lv, s1753c3f1, ABISELECT(24,12), "S1753C3.s1753c3f1");
    set_bf_and_test(lv, s1753c3f2, ABISELECT(32,20), 0, 1, 1, "S1753C3");
    set_bf_and_test(lv, s1753c3f3, ABISELECT(32,20), 1, 1, 1, "S1753C3");
    set_bf_and_test(lv, s1753c3f4, ABISELECT(32,20), 2, 1, 1, "S1753C3");
    set_bf_and_test(lv, s1753c3f5, ABISELECT(32,20), 3, 1, 1, "S1753C3");
    check_field_offset(lv, s1753c3f6, ABISELECT(36,24), "S1753C3.s1753c3f6");
    test_class_info(&lv, &cd_S1753C3);
    dp->~S1753C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1753C3(Test_S1753C3, "S1753C3", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S1753C3C1Ev();
extern void _ZN7S1753C3D1Ev();
Name_Map name_map_S1753C3[] = {
  NSPAIR(_ZN7S1753C3C1Ev),
  NSPAIR(_ZN7S1753C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6282C14_nt;
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
extern  VTBL_ENTRY _ZTV11S6282C14_nt[];
static Base_Class bases_S1753C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6282C14_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 _ZTI7S1753C3[];
extern void _ZN7S1753C3D1Ev();
extern void _ZN7S1753C3D0Ev();
static  VTBL_ENTRY vtc_S1753C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1753C3[0]),
  (VTBL_ENTRY)&_ZN7S1753C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1753C3D0Ev,
};
extern VTBL_ENTRY _ZTI7S1753C3[];
extern  VTBL_ENTRY _ZTV7S1753C3[];
Class_Descriptor cd_S1753C3 = {  "S1753C3", // class name
  bases_S1753C3, 1,
  &(vtc_S1753C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S1753C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1753C3),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1753C2  : S1753C3 {
  int s1753c2f0;
  void *s1753c2f1[2];
  int s1753c2f2[2];
  virtual  ~S1753C2(); // _ZN7S1753C2D1Ev
  S1753C2(); // tgen
};
//SIG(-1 S1753C2) C1{ BC2{ BC3{ vd m Fi} vd Fp Fi[2] Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd Fi Fp[2] Fi[2]}


 S1753C2 ::~S1753C2(){ note_dtor("S1753C2", this);}
S1753C2 ::S1753C2(){ note_ctor("S1753C2", this);} // tgen

static void Test_S1753C2()
{
  extern Class_Descriptor cd_S1753C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,14)];
    init_test(&cd_S1753C2, buf);
    S1753C2 *dp, &lv = *(dp=new (buf) S1753C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S1753C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1753C2)");
    check_base_class_offset(lv, (S6282C14_nt*)(S1753C3*), 0, "S1753C2");
    check_base_class_offset(lv, (S1753C3*), 0, "S1753C2");
    check_field_offset(lv, s1753c2f0, ABISELECT(44,32), "S1753C2.s1753c2f0");
    check_field_offset(lv, s1753c2f1, ABISELECT(48,36), "S1753C2.s1753c2f1");
    check_field_offset(lv, s1753c2f2, ABISELECT(64,44), "S1753C2.s1753c2f2");
    test_class_info(&lv, &cd_S1753C2);
    dp->~S1753C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1753C2(Test_S1753C2, "S1753C2", ABISELECT(72,52));

#else // __cplusplus

extern void _ZN7S1753C2C1Ev();
extern void _ZN7S1753C2D1Ev();
Name_Map name_map_S1753C2[] = {
  NSPAIR(_ZN7S1753C2C1Ev),
  NSPAIR(_ZN7S1753C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6282C14_nt;
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
extern  VTBL_ENTRY _ZTV11S6282C14_nt[];
extern Class_Descriptor cd_S1753C3;
extern VTBL_ENTRY _ZTI7S1753C3[];
extern  VTBL_ENTRY _ZTV7S1753C3[];
static Base_Class bases_S1753C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6282C14_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_S1753C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1753C2[];
extern void _ZN7S1753C2D1Ev();
extern void _ZN7S1753C2D0Ev();
static  VTBL_ENTRY vtc_S1753C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1753C2[0]),
  (VTBL_ENTRY)&_ZN7S1753C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1753C2D0Ev,
};
extern VTBL_ENTRY _ZTI7S1753C2[];
extern  VTBL_ENTRY _ZTV7S1753C2[];
Class_Descriptor cd_S1753C2 = {  "S1753C2", // class name
  bases_S1753C2, 2,
  &(vtc_S1753C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,52), // object size
  NSPAIRA(_ZTI7S1753C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1753C2),4, //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  S1753C1  : S1753C2 , S2121C38 {
  ~S1753C1(); // tgen
  S1753C1(); // tgen
};
//SIG(1 S1753C1) C1{ BC2{ BC3{ BC4{ vd m Fi} vd Fp Fi[2] Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd Fi Fp[2] Fi[2]} BC5{ m}}


S1753C1 ::~S1753C1(){ note_dtor("S1753C1", this);} // tgen
S1753C1 ::S1753C1(){ note_ctor("S1753C1", this);} // tgen

static void Test_S1753C1()
{
  extern Class_Descriptor cd_S1753C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,14)];
    init_test(&cd_S1753C1, buf);
    S1753C1 *dp, &lv = *(dp=new (buf) S1753C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S1753C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1753C1)");
    check_base_class_offset(lv, (S6282C14_nt*)(S1753C3*)(S1753C2*), 0, "S1753C1");
    check_base_class_offset(lv, (S1753C3*)(S1753C2*), 0, "S1753C1");
    check_base_class_offset(lv, (S1753C2*), 0, "S1753C1");
    check_base_class_offset(lv, (S2121C38*), 0, "S1753C1");
    test_class_info(&lv, &cd_S1753C1);
    dp->~S1753C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1753C1(Test_S1753C1, "S1753C1", ABISELECT(72,52));

#else // __cplusplus

extern void _ZN7S1753C1C1Ev();
extern void _ZN7S1753C1D1Ev();
Name_Map name_map_S1753C1[] = {
  NSPAIR(_ZN7S1753C1C1Ev),
  NSPAIR(_ZN7S1753C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6282C14_nt;
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
extern  VTBL_ENTRY _ZTV11S6282C14_nt[];
extern Class_Descriptor cd_S1753C3;
extern VTBL_ENTRY _ZTI7S1753C3[];
extern  VTBL_ENTRY _ZTV7S1753C3[];
extern Class_Descriptor cd_S1753C2;
extern VTBL_ENTRY _ZTI7S1753C2[];
extern  VTBL_ENTRY _ZTV7S1753C2[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
static Base_Class bases_S1753C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6282C14_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_S1753C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1753C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S1753C1[];
extern void _ZN7S1753C1D1Ev();
extern void _ZN7S1753C1D0Ev();
static  VTBL_ENTRY vtc_S1753C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1753C1[0]),
  (VTBL_ENTRY)&_ZN7S1753C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1753C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S1753C1[];
extern  VTBL_ENTRY _ZTV7S1753C1[];
Class_Descriptor cd_S1753C1 = {  "S1753C1", // class name
  bases_S1753C1, 4,
  &(vtc_S1753C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,52), // object size
  NSPAIRA(_ZTI7S1753C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S1753C1),4, //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  S1755C3  : S6282C14_nt {
  void *s1755c3f0;
  int s1755c3f1[2];
  unsigned int s1755c3f2:1;
  unsigned int s1755c3f3:1;
  unsigned int s1755c3f4:1;
  unsigned int s1755c3f5:1;
  int s1755c3f6[2];
  virtual  ~S1755C3(); // _ZN7S1755C3D1Ev
  S1755C3(); // tgen
};
//SIG(-1 S1755C3) C1{ BC2{ vd m Fi} vd Fp Fi[2] Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S1755C3 ::~S1755C3(){ note_dtor("S1755C3", this);}
S1755C3 ::S1755C3(){ note_ctor("S1755C3", this);} // tgen

static void Test_S1755C3()
{
  extern Class_Descriptor cd_S1755C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S1755C3, buf);
    S1755C3 *dp, &lv = *(dp=new (buf) S1755C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S1755C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1755C3)");
    check_base_class_offset(lv, (S6282C14_nt*), 0, "S1755C3");
    check_field_offset(lv, s1755c3f0, ABISELECT(16,8), "S1755C3.s1755c3f0");
    check_field_offset(lv, s1755c3f1, ABISELECT(24,12), "S1755C3.s1755c3f1");
    set_bf_and_test(lv, s1755c3f2, ABISELECT(32,20), 0, 1, 1, "S1755C3");
    set_bf_and_test(lv, s1755c3f3, ABISELECT(32,20), 1, 1, 1, "S1755C3");
    set_bf_and_test(lv, s1755c3f4, ABISELECT(32,20), 2, 1, 1, "S1755C3");
    set_bf_and_test(lv, s1755c3f5, ABISELECT(32,20), 3, 1, 1, "S1755C3");
    check_field_offset(lv, s1755c3f6, ABISELECT(36,24), "S1755C3.s1755c3f6");
    test_class_info(&lv, &cd_S1755C3);
    dp->~S1755C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1755C3(Test_S1755C3, "S1755C3", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S1755C3C1Ev();
extern void _ZN7S1755C3D1Ev();
Name_Map name_map_S1755C3[] = {
  NSPAIR(_ZN7S1755C3C1Ev),
  NSPAIR(_ZN7S1755C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6282C14_nt;
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
extern  VTBL_ENTRY _ZTV11S6282C14_nt[];
static Base_Class bases_S1755C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6282C14_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 _ZTI7S1755C3[];
extern void _ZN7S1755C3D1Ev();
extern void _ZN7S1755C3D0Ev();
static  VTBL_ENTRY vtc_S1755C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1755C3[0]),
  (VTBL_ENTRY)&_ZN7S1755C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1755C3D0Ev,
};
extern VTBL_ENTRY _ZTI7S1755C3[];
extern  VTBL_ENTRY _ZTV7S1755C3[];
Class_Descriptor cd_S1755C3 = {  "S1755C3", // class name
  bases_S1755C3, 1,
  &(vtc_S1755C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S1755C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1755C3),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1755C2  : S1755C3 {
  void *s1755c2f0;
  virtual  ~S1755C2(); // _ZN7S1755C2D1Ev
  S1755C2(); // tgen
};
//SIG(-1 S1755C2) C1{ BC2{ BC3{ vd m Fi} vd Fp Fi[2] Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd Fp}


 S1755C2 ::~S1755C2(){ note_dtor("S1755C2", this);}
S1755C2 ::S1755C2(){ note_ctor("S1755C2", this);} // tgen

static void Test_S1755C2()
{
  extern Class_Descriptor cd_S1755C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S1755C2, buf);
    S1755C2 *dp, &lv = *(dp=new (buf) S1755C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S1755C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1755C2)");
    check_base_class_offset(lv, (S6282C14_nt*)(S1755C3*), 0, "S1755C2");
    check_base_class_offset(lv, (S1755C3*), 0, "S1755C2");
    check_field_offset(lv, s1755c2f0, ABISELECT(48,32), "S1755C2.s1755c2f0");
    test_class_info(&lv, &cd_S1755C2);
    dp->~S1755C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1755C2(Test_S1755C2, "S1755C2", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN7S1755C2C1Ev();
extern void _ZN7S1755C2D1Ev();
Name_Map name_map_S1755C2[] = {
  NSPAIR(_ZN7S1755C2C1Ev),
  NSPAIR(_ZN7S1755C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6282C14_nt;
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
extern  VTBL_ENTRY _ZTV11S6282C14_nt[];
extern Class_Descriptor cd_S1755C3;
extern VTBL_ENTRY _ZTI7S1755C3[];
extern  VTBL_ENTRY _ZTV7S1755C3[];
static Base_Class bases_S1755C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6282C14_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_S1755C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1755C2[];
extern void _ZN7S1755C2D1Ev();
extern void _ZN7S1755C2D0Ev();
static  VTBL_ENTRY vtc_S1755C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1755C2[0]),
  (VTBL_ENTRY)&_ZN7S1755C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1755C2D0Ev,
};
extern VTBL_ENTRY _ZTI7S1755C2[];
extern  VTBL_ENTRY _ZTV7S1755C2[];
Class_Descriptor cd_S1755C2 = {  "S1755C2", // class name
  bases_S1755C2, 2,
  &(vtc_S1755C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI7S1755C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1755C2),4, //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  S1755C1  : S1755C2 {
  void *s1755c1f0;
  int s1755c1f1;
  void *s1755c1f2[4];
  virtual  ~S1755C1(); // _ZN7S1755C1D1Ev
  S1755C1(); // tgen
};
//SIG(1 S1755C1) C1{ BC2{ BC3{ BC4{ vd m Fi} vd Fp Fi[2] Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd Fp} vd Fp Fi Fp[4]}


 S1755C1 ::~S1755C1(){ note_dtor("S1755C1", this);}
S1755C1 ::S1755C1(){ note_ctor("S1755C1", this);} // tgen

static void Test_S1755C1()
{
  extern Class_Descriptor cd_S1755C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,16)];
    init_test(&cd_S1755C1, buf);
    S1755C1 *dp, &lv = *(dp=new (buf) S1755C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,60), "sizeof(S1755C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1755C1)");
    check_base_class_offset(lv, (S6282C14_nt*)(S1755C3*)(S1755C2*), 0, "S1755C1");
    check_base_class_offset(lv, (S1755C3*)(S1755C2*), 0, "S1755C1");
    check_base_class_offset(lv, (S1755C2*), 0, "S1755C1");
    check_field_offset(lv, s1755c1f0, ABISELECT(56,36), "S1755C1.s1755c1f0");
    check_field_offset(lv, s1755c1f1, ABISELECT(64,40), "S1755C1.s1755c1f1");
    check_field_offset(lv, s1755c1f2, ABISELECT(72,44), "S1755C1.s1755c1f2");
    test_class_info(&lv, &cd_S1755C1);
    dp->~S1755C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1755C1(Test_S1755C1, "S1755C1", ABISELECT(104,60));

#else // __cplusplus

extern void _ZN7S1755C1C1Ev();
extern void _ZN7S1755C1D1Ev();
Name_Map name_map_S1755C1[] = {
  NSPAIR(_ZN7S1755C1C1Ev),
  NSPAIR(_ZN7S1755C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6282C14_nt;
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
extern  VTBL_ENTRY _ZTV11S6282C14_nt[];
extern Class_Descriptor cd_S1755C3;
extern VTBL_ENTRY _ZTI7S1755C3[];
extern  VTBL_ENTRY _ZTV7S1755C3[];
extern Class_Descriptor cd_S1755C2;
extern VTBL_ENTRY _ZTI7S1755C2[];
extern  VTBL_ENTRY _ZTV7S1755C2[];
static Base_Class bases_S1755C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6282C14_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_S1755C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1755C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1755C1[];
extern void _ZN7S1755C1D1Ev();
extern void _ZN7S1755C1D0Ev();
static  VTBL_ENTRY vtc_S1755C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1755C1[0]),
  (VTBL_ENTRY)&_ZN7S1755C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1755C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S1755C1[];
extern  VTBL_ENTRY _ZTV7S1755C1[];
Class_Descriptor cd_S1755C1 = {  "S1755C1", // class name
  bases_S1755C1, 3,
  &(vtc_S1755C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,60), // object size
  NSPAIRA(_ZTI7S1755C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1755C1),4, //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  S10089C2  {
  virtual  ~S10089C2(); // _ZN8S10089C2D1Ev
  virtual void  v6(); // _ZN8S10089C22v6Ev
  virtual void  v7(); // _ZN8S10089C22v7Ev
  virtual void  v8(); // _ZN8S10089C22v8Ev
  virtual void  v9(); // _ZN8S10089C22v9Ev
  virtual void  v10(); // _ZN8S10089C23v10Ev
  S10089C2(); // tgen
};
//SIG(-1 S10089C2) C1{ vd v1 v2 v3 v4 v5}


 S10089C2 ::~S10089C2(){ note_dtor("S10089C2", this);}
void  S10089C2 ::v6(){vfunc_called(this, "_ZN8S10089C22v6Ev");}
void  S10089C2 ::v7(){vfunc_called(this, "_ZN8S10089C22v7Ev");}
void  S10089C2 ::v8(){vfunc_called(this, "_ZN8S10089C22v8Ev");}
void  S10089C2 ::v9(){vfunc_called(this, "_ZN8S10089C22v9Ev");}
void  S10089C2 ::v10(){vfunc_called(this, "_ZN8S10089C23v10Ev");}
S10089C2 ::S10089C2(){ note_ctor("S10089C2", this);} // tgen

static void Test_S10089C2()
{
  extern Class_Descriptor cd_S10089C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S10089C2, buf);
    S10089C2 *dp, &lv = *(dp=new (buf) S10089C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S10089C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10089C2)");
    test_class_info(&lv, &cd_S10089C2);
    dp->~S10089C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10089C2(Test_S10089C2, "S10089C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S10089C2C1Ev();
extern void _ZN8S10089C2D1Ev();
Name_Map name_map_S10089C2[] = {
  NSPAIR(_ZN8S10089C2C1Ev),
  NSPAIR(_ZN8S10089C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10089C2[];
extern void _ZN8S10089C2D1Ev();
extern void _ZN8S10089C2D0Ev();
extern void _ZN8S10089C22v6Ev();
extern void _ZN8S10089C22v7Ev();
extern void _ZN8S10089C22v8Ev();
extern void _ZN8S10089C22v9Ev();
extern void _ZN8S10089C23v10Ev();
static  VTBL_ENTRY vtc_S10089C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10089C2[0]),
  (VTBL_ENTRY)&_ZN8S10089C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10089C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10089C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10089C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10089C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10089C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10089C23v10Ev,
};
extern VTBL_ENTRY _ZTI8S10089C2[];
extern  VTBL_ENTRY _ZTV8S10089C2[];
Class_Descriptor cd_S10089C2 = {  "S10089C2", // class name
  0,0,//no base classes
  &(vtc_S10089C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S10089C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10089C2),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  S10089C1  : S10089C2 {
  void *s10089c1f0[3];
  char s10089c1f1;
  ::S2121C13_nt s10089c1f2;
  ::S2121C13_nt s10089c1f3;
  virtual  ~S10089C1(); // _ZN8S10089C1D1Ev
  virtual void  v1(); // _ZN8S10089C12v1Ev
  virtual void  v2(); // _ZN8S10089C12v2Ev
  virtual void  v3(); // _ZN8S10089C12v3Ev
  virtual void  v4(); // _ZN8S10089C12v4Ev
  virtual void  v5(); // _ZN8S10089C12v5Ev
  S10089C1(); // tgen
};
//SIG(1 S10089C1) C1{ BC2{ vd v6 v7 v8 v9 v10} vd v1 v2 v3 v4 v5 Fp[3] Fc FC3{ m FC4{ m FL[2]}} FC3}


 S10089C1 ::~S10089C1(){ note_dtor("S10089C1", this);}
void  S10089C1 ::v1(){vfunc_called(this, "_ZN8S10089C12v1Ev");}
void  S10089C1 ::v2(){vfunc_called(this, "_ZN8S10089C12v2Ev");}
void  S10089C1 ::v3(){vfunc_called(this, "_ZN8S10089C12v3Ev");}
void  S10089C1 ::v4(){vfunc_called(this, "_ZN8S10089C12v4Ev");}
void  S10089C1 ::v5(){vfunc_called(this, "_ZN8S10089C12v5Ev");}
S10089C1 ::S10089C1(){ note_ctor("S10089C1", this);} // tgen

static void Test_S10089C1()
{
  extern Class_Descriptor cd_S10089C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,14)];
    init_test(&cd_S10089C1, buf);
    S10089C1 *dp, &lv = *(dp=new (buf) S10089C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S10089C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10089C1)");
    check_base_class_offset(lv, (S10089C2*), 0, "S10089C1");
    check_field_offset(lv, s10089c1f0, ABISELECT(8,4), "S10089C1.s10089c1f0");
    check_field_offset(lv, s10089c1f1, ABISELECT(32,16), "S10089C1.s10089c1f1");
    check_field_offset(lv, s10089c1f2, ABISELECT(40,20), "S10089C1.s10089c1f2");
    check_field_offset(lv, s10089c1f3, ABISELECT(56,36), "S10089C1.s10089c1f3");
    test_class_info(&lv, &cd_S10089C1);
    dp->~S10089C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10089C1(Test_S10089C1, "S10089C1", ABISELECT(72,52));

#else // __cplusplus

extern void _ZN8S10089C1C1Ev();
extern void _ZN8S10089C1D1Ev();
Name_Map name_map_S10089C1[] = {
  NSPAIR(_ZN8S10089C1C1Ev),
  NSPAIR(_ZN8S10089C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10089C2;
extern VTBL_ENTRY _ZTI8S10089C2[];
extern  VTBL_ENTRY _ZTV8S10089C2[];
static Base_Class bases_S10089C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10089C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S10089C1[];
extern void _ZN8S10089C1D1Ev();
extern void _ZN8S10089C1D0Ev();
extern void _ZN8S10089C22v6Ev();
extern void _ZN8S10089C22v7Ev();
extern void _ZN8S10089C22v8Ev();
extern void _ZN8S10089C22v9Ev();
extern void _ZN8S10089C23v10Ev();
extern void _ZN8S10089C12v1Ev();
extern void _ZN8S10089C12v2Ev();
extern void _ZN8S10089C12v3Ev();
extern void _ZN8S10089C12v4Ev();
extern void _ZN8S10089C12v5Ev();
static  VTBL_ENTRY vtc_S10089C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10089C1[0]),
  (VTBL_ENTRY)&_ZN8S10089C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10089C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10089C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10089C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10089C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10089C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10089C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10089C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10089C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10089C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10089C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10089C12v5Ev,
};
extern VTBL_ENTRY _ZTI8S10089C1[];
extern  VTBL_ENTRY _ZTV8S10089C1[];
Class_Descriptor cd_S10089C1 = {  "S10089C1", // class name
  bases_S10089C1, 1,
  &(vtc_S10089C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,52), // object size
  NSPAIRA(_ZTI8S10089C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10089C1),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  S7032C2  {
  virtual  ~S7032C2(); // _ZN7S7032C2D1Ev
  virtual void  v6(); // _ZN7S7032C22v6Ev
  virtual void  v7(); // _ZN7S7032C22v7Ev
  virtual void  v8(); // _ZN7S7032C22v8Ev
  virtual void  v9(); // _ZN7S7032C22v9Ev
  virtual void  v10(); // _ZN7S7032C23v10Ev
  S7032C2(); // tgen
};
//SIG(-1 S7032C2) C1{ vd v1 v2 v3 v4 v5}


 S7032C2 ::~S7032C2(){ note_dtor("S7032C2", this);}
void  S7032C2 ::v6(){vfunc_called(this, "_ZN7S7032C22v6Ev");}
void  S7032C2 ::v7(){vfunc_called(this, "_ZN7S7032C22v7Ev");}
void  S7032C2 ::v8(){vfunc_called(this, "_ZN7S7032C22v8Ev");}
void  S7032C2 ::v9(){vfunc_called(this, "_ZN7S7032C22v9Ev");}
void  S7032C2 ::v10(){vfunc_called(this, "_ZN7S7032C23v10Ev");}
S7032C2 ::S7032C2(){ note_ctor("S7032C2", this);} // tgen

static void Test_S7032C2()
{
  extern Class_Descriptor cd_S7032C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7032C2, buf);
    S7032C2 *dp, &lv = *(dp=new (buf) S7032C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7032C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7032C2)");
    test_class_info(&lv, &cd_S7032C2);
    dp->~S7032C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7032C2(Test_S7032C2, "S7032C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7032C2C1Ev();
extern void _ZN7S7032C2D1Ev();
Name_Map name_map_S7032C2[] = {
  NSPAIR(_ZN7S7032C2C1Ev),
  NSPAIR(_ZN7S7032C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7032C2[];
extern void _ZN7S7032C2D1Ev();
extern void _ZN7S7032C2D0Ev();
extern void _ZN7S7032C22v6Ev();
extern void _ZN7S7032C22v7Ev();
extern void _ZN7S7032C22v8Ev();
extern void _ZN7S7032C22v9Ev();
extern void _ZN7S7032C23v10Ev();
static  VTBL_ENTRY vtc_S7032C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7032C2[0]),
  (VTBL_ENTRY)&_ZN7S7032C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7032C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7032C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7032C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7032C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7032C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7032C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S7032C2[];
extern  VTBL_ENTRY _ZTV7S7032C2[];
Class_Descriptor cd_S7032C2 = {  "S7032C2", // class name
  0,0,//no base classes
  &(vtc_S7032C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7032C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7032C2),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  S7032C4_nt  {
  int s7032c4f0[3];
};
//SIG(-1 S7032C4_nt) C1{ Fi[3]}



//skip512 S7032C4_nt

#else // __cplusplus

Class_Descriptor cd_S7032C4_nt = {  "S7032C4_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  S7032C3_nt  : S7032C4_nt {
};
//SIG(-1 S7032C3_nt) C1{ BC2{ Fi[3]}}



//skip512 S7032C3_nt

#else // __cplusplus

extern Class_Descriptor cd_S7032C4_nt;
static Base_Class bases_S7032C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7032C4_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  S7032C1  : S7032C2 {
  ::S7032C3_nt s7032c1f0;
  int s7032c1f1;
  void *s7032c1f2;
  int s7032c1f3[258];
  virtual  ~S7032C1(); // _ZN7S7032C1D1Ev
  virtual void  v1(); // _ZN7S7032C12v1Ev
  virtual void  v2(); // _ZN7S7032C12v2Ev
  virtual void  v3(); // _ZN7S7032C12v3Ev
  virtual void  v4(); // _ZN7S7032C12v4Ev
  virtual void  v5(); // _ZN7S7032C12v5Ev
  S7032C1(); // tgen
};
//SIG(1 S7032C1) C1{ BC2{ vd v6 v7 v8 v9 v10} vd v1 v2 v3 v4 v5 FC3{ BC4{ Fi[3]}} Fi Fp Fi[258]}


 S7032C1 ::~S7032C1(){ note_dtor("S7032C1", this);}
void  S7032C1 ::v1(){vfunc_called(this, "_ZN7S7032C12v1Ev");}
void  S7032C1 ::v2(){vfunc_called(this, "_ZN7S7032C12v2Ev");}
void  S7032C1 ::v3(){vfunc_called(this, "_ZN7S7032C12v3Ev");}
void  S7032C1 ::v4(){vfunc_called(this, "_ZN7S7032C12v4Ev");}
void  S7032C1 ::v5(){vfunc_called(this, "_ZN7S7032C12v5Ev");}
S7032C1 ::S7032C1(){ note_ctor("S7032C1", this);} // tgen

static void Test_S7032C1()
{
  extern Class_Descriptor cd_S7032C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(134,265)];
    init_test(&cd_S7032C1, buf);
    S7032C1 *dp, &lv = *(dp=new (buf) S7032C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1064,1056), "sizeof(S7032C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7032C1)");
    check_base_class_offset(lv, (S7032C2*), 0, "S7032C1");
    check_field_offset(lv, s7032c1f0, ABISELECT(8,4), "S7032C1.s7032c1f0");
    check_field_offset(lv, s7032c1f1, ABISELECT(20,16), "S7032C1.s7032c1f1");
    check_field_offset(lv, s7032c1f2, ABISELECT(24,20), "S7032C1.s7032c1f2");
    check_field_offset(lv, s7032c1f3, ABISELECT(32,24), "S7032C1.s7032c1f3");
    test_class_info(&lv, &cd_S7032C1);
    dp->~S7032C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7032C1(Test_S7032C1, "S7032C1", ABISELECT(1064,1056));

#else // __cplusplus

extern void _ZN7S7032C1C1Ev();
extern void _ZN7S7032C1D1Ev();
Name_Map name_map_S7032C1[] = {
  NSPAIR(_ZN7S7032C1C1Ev),
  NSPAIR(_ZN7S7032C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7032C2;
extern VTBL_ENTRY _ZTI7S7032C2[];
extern  VTBL_ENTRY _ZTV7S7032C2[];
static Base_Class bases_S7032C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7032C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S7032C1[];
extern void _ZN7S7032C1D1Ev();
extern void _ZN7S7032C1D0Ev();
extern void _ZN7S7032C22v6Ev();
extern void _ZN7S7032C22v7Ev();
extern void _ZN7S7032C22v8Ev();
extern void _ZN7S7032C22v9Ev();
extern void _ZN7S7032C23v10Ev();
extern void _ZN7S7032C12v1Ev();
extern void _ZN7S7032C12v2Ev();
extern void _ZN7S7032C12v3Ev();
extern void _ZN7S7032C12v4Ev();
extern void _ZN7S7032C12v5Ev();
static  VTBL_ENTRY vtc_S7032C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7032C1[0]),
  (VTBL_ENTRY)&_ZN7S7032C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7032C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7032C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7032C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7032C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7032C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7032C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7032C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7032C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7032C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7032C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7032C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S7032C1[];
extern  VTBL_ENTRY _ZTV7S7032C1[];
Class_Descriptor cd_S7032C1 = {  "S7032C1", // class name
  bases_S7032C1, 1,
  &(vtc_S7032C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1064,1056), // object size
  NSPAIRA(_ZTI7S7032C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7032C1),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  S2608C2  : S3350C8_nt {
};
//SIG(-1 S2608C2) C1{ BC2{ m Fi}}



static void Test_S2608C2()
{
  extern Class_Descriptor cd_S2608C2;
  void *lvp;
  {
    int buf[2];
    init_test(&cd_S2608C2, buf);
    S2608C2 &lv = *(new (buf) S2608C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), 4, "sizeof(S2608C2)");
    check2(__alignof__(lv), 4, "__alignof__(S2608C2)");
    check_base_class_offset(lv, (S3350C8_nt*), 0, "S2608C2");
    test_class_info(&lv, &cd_S2608C2);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2608C2(Test_S2608C2, "S2608C2", 4);

#else // __cplusplus

extern Class_Descriptor cd_S3350C8_nt;
extern VTBL_ENTRY _ZTI10S3350C8_nt[];
static Base_Class bases_S2608C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3350C8_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 _ZTI7S2608C2[];
Class_Descriptor cd_S2608C2 = {  "S2608C2", // class name
  bases_S2608C2, 1,
  0, // no vftv
  0, //no vtt
  4, // object size
  NSPAIRA(_ZTI7S2608C2),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  S2608C4  {
  virtual  ~S2608C4(); // _ZN7S2608C4D1Ev
  virtual void  v7(); // _ZN7S2608C42v7Ev
  virtual void  v8(); // _ZN7S2608C42v8Ev
  virtual void  v9(); // _ZN7S2608C42v9Ev
  virtual void  v10(); // _ZN7S2608C43v10Ev
  virtual void  v11(); // _ZN7S2608C43v11Ev
  S2608C4(); // tgen
};
//SIG(-1 S2608C4) C1{ vd v1 v2 v3 v4 v5}


 S2608C4 ::~S2608C4(){ note_dtor("S2608C4", this);}
void  S2608C4 ::v7(){vfunc_called(this, "_ZN7S2608C42v7Ev");}
void  S2608C4 ::v8(){vfunc_called(this, "_ZN7S2608C42v8Ev");}
void  S2608C4 ::v9(){vfunc_called(this, "_ZN7S2608C42v9Ev");}
void  S2608C4 ::v10(){vfunc_called(this, "_ZN7S2608C43v10Ev");}
void  S2608C4 ::v11(){vfunc_called(this, "_ZN7S2608C43v11Ev");}
S2608C4 ::S2608C4(){ note_ctor("S2608C4", this);} // tgen

static void Test_S2608C4()
{
  extern Class_Descriptor cd_S2608C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S2608C4, buf);
    S2608C4 *dp, &lv = *(dp=new (buf) S2608C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S2608C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2608C4)");
    test_class_info(&lv, &cd_S2608C4);
    dp->~S2608C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2608C4(Test_S2608C4, "S2608C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S2608C4C1Ev();
extern void _ZN7S2608C4D1Ev();
Name_Map name_map_S2608C4[] = {
  NSPAIR(_ZN7S2608C4C1Ev),
  NSPAIR(_ZN7S2608C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2608C4[];
extern void _ZN7S2608C4D1Ev();
extern void _ZN7S2608C4D0Ev();
extern void _ZN7S2608C42v7Ev();
extern void _ZN7S2608C42v8Ev();
extern void _ZN7S2608C42v9Ev();
extern void _ZN7S2608C43v10Ev();
extern void _ZN7S2608C43v11Ev();
static  VTBL_ENTRY vtc_S2608C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2608C4[0]),
  (VTBL_ENTRY)&_ZN7S2608C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2608C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2608C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2608C42v8Ev,
  (VTBL_ENTRY)&_ZN7S2608C42v9Ev,
  (VTBL_ENTRY)&_ZN7S2608C43v10Ev,
  (VTBL_ENTRY)&_ZN7S2608C43v11Ev,
};
extern VTBL_ENTRY _ZTI7S2608C4[];
extern  VTBL_ENTRY _ZTV7S2608C4[];
Class_Descriptor cd_S2608C4 = {  "S2608C4", // class name
  0,0,//no base classes
  &(vtc_S2608C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2608C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2608C4),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  S2608C1  : S2608C2 , S2608C4 {
  ::S21811C13_nt s2608c1f0;
  virtual  ~S2608C1(); // _ZN7S2608C1D1Ev
  virtual void  v1(); // _ZN7S2608C12v1Ev
  virtual void  v2(); // _ZN7S2608C12v2Ev
  virtual void  v3(); // _ZN7S2608C12v3Ev
  virtual void  v4(); // _ZN7S2608C12v4Ev
  virtual void  v5(); // _ZN7S2608C12v5Ev
  virtual void  v6(); // _ZN7S2608C12v6Ev
  S2608C1(); // tgen
};
//SIG(1 S2608C1) C1{ BC2{ BC3{ m Fi}} BC4{ vd v7 v8 v9 v10 v11} vd v1 v2 v3 v4 v5 v6 FC5{ m Fp}}


 S2608C1 ::~S2608C1(){ note_dtor("S2608C1", this);}
void  S2608C1 ::v1(){vfunc_called(this, "_ZN7S2608C12v1Ev");}
void  S2608C1 ::v2(){vfunc_called(this, "_ZN7S2608C12v2Ev");}
void  S2608C1 ::v3(){vfunc_called(this, "_ZN7S2608C12v3Ev");}
void  S2608C1 ::v4(){vfunc_called(this, "_ZN7S2608C12v4Ev");}
void  S2608C1 ::v5(){vfunc_called(this, "_ZN7S2608C12v5Ev");}
void  S2608C1 ::v6(){vfunc_called(this, "_ZN7S2608C12v6Ev");}
S2608C1 ::S2608C1(){ note_ctor("S2608C1", this);} // tgen

static void Test_S2608C1()
{
  extern Class_Descriptor cd_S2608C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S2608C1, buf);
    S2608C1 *dp, &lv = *(dp=new (buf) S2608C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S2608C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2608C1)");
    check_base_class_offset(lv, (S3350C8_nt*)(S2608C2*), ABISELECT(8,4), "S2608C1");
    check_base_class_offset(lv, (S2608C2*), ABISELECT(8,4), "S2608C1");
    check_base_class_offset(lv, (S2608C4*), 0, "S2608C1");
    check_field_offset(lv, s2608c1f0, ABISELECT(16,8), "S2608C1.s2608c1f0");
    test_class_info(&lv, &cd_S2608C1);
    dp->~S2608C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2608C1(Test_S2608C1, "S2608C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S2608C1C1Ev();
extern void _ZN7S2608C1D1Ev();
Name_Map name_map_S2608C1[] = {
  NSPAIR(_ZN7S2608C1C1Ev),
  NSPAIR(_ZN7S2608C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3350C8_nt;
extern VTBL_ENTRY _ZTI10S3350C8_nt[];
extern Class_Descriptor cd_S2608C2;
extern VTBL_ENTRY _ZTI7S2608C2[];
extern Class_Descriptor cd_S2608C4;
extern VTBL_ENTRY _ZTI7S2608C4[];
extern  VTBL_ENTRY _ZTV7S2608C4[];
static Base_Class bases_S2608C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3350C8_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2608C2,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2608C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S2608C1[];
extern void _ZN7S2608C1D1Ev();
extern void _ZN7S2608C1D0Ev();
extern void _ZN7S2608C42v7Ev();
extern void _ZN7S2608C42v8Ev();
extern void _ZN7S2608C42v9Ev();
extern void _ZN7S2608C43v10Ev();
extern void _ZN7S2608C43v11Ev();
extern void _ZN7S2608C12v1Ev();
extern void _ZN7S2608C12v2Ev();
extern void _ZN7S2608C12v3Ev();
extern void _ZN7S2608C12v4Ev();
extern void _ZN7S2608C12v5Ev();
extern void _ZN7S2608C12v6Ev();
static  VTBL_ENTRY vtc_S2608C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2608C1[0]),
  (VTBL_ENTRY)&_ZN7S2608C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2608C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2608C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2608C42v8Ev,
  (VTBL_ENTRY)&_ZN7S2608C42v9Ev,
  (VTBL_ENTRY)&_ZN7S2608C43v10Ev,
  (VTBL_ENTRY)&_ZN7S2608C43v11Ev,
  (VTBL_ENTRY)&_ZN7S2608C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2608C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2608C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2608C12v4Ev,
  (VTBL_ENTRY)&_ZN7S2608C12v5Ev,
  (VTBL_ENTRY)&_ZN7S2608C12v6Ev,
};
extern VTBL_ENTRY _ZTI7S2608C1[];
extern  VTBL_ENTRY _ZTV7S2608C1[];
Class_Descriptor cd_S2608C1 = {  "S2608C1", // class name
  bases_S2608C1, 3,
  &(vtc_S2608C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S2608C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2608C1),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  S3345C3  {
  virtual  ~S3345C3(); // _ZN7S3345C3D1Ev
  virtual void  v6(); // _ZN7S3345C32v6Ev
  virtual void  v7(); // _ZN7S3345C32v7Ev
  virtual void  v8(); // _ZN7S3345C32v8Ev
  virtual void  v9(); // _ZN7S3345C32v9Ev
  virtual void  v10(); // _ZN7S3345C33v10Ev
  S3345C3(); // tgen
};
//SIG(-1 S3345C3) C1{ vd v1 v2 v3 v4 v5}


 S3345C3 ::~S3345C3(){ note_dtor("S3345C3", this);}
void  S3345C3 ::v6(){vfunc_called(this, "_ZN7S3345C32v6Ev");}
void  S3345C3 ::v7(){vfunc_called(this, "_ZN7S3345C32v7Ev");}
void  S3345C3 ::v8(){vfunc_called(this, "_ZN7S3345C32v8Ev");}
void  S3345C3 ::v9(){vfunc_called(this, "_ZN7S3345C32v9Ev");}
void  S3345C3 ::v10(){vfunc_called(this, "_ZN7S3345C33v10Ev");}
S3345C3 ::S3345C3(){ note_ctor("S3345C3", this);} // tgen

static void Test_S3345C3()
{
  extern Class_Descriptor cd_S3345C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3345C3, buf);
    S3345C3 *dp, &lv = *(dp=new (buf) S3345C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3345C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3345C3)");
    test_class_info(&lv, &cd_S3345C3);
    dp->~S3345C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3345C3(Test_S3345C3, "S3345C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3345C3C1Ev();
extern void _ZN7S3345C3D1Ev();
Name_Map name_map_S3345C3[] = {
  NSPAIR(_ZN7S3345C3C1Ev),
  NSPAIR(_ZN7S3345C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3345C3[];
extern void _ZN7S3345C3D1Ev();
extern void _ZN7S3345C3D0Ev();
extern void _ZN7S3345C32v6Ev();
extern void _ZN7S3345C32v7Ev();
extern void _ZN7S3345C32v8Ev();
extern void _ZN7S3345C32v9Ev();
extern void _ZN7S3345C33v10Ev();
static  VTBL_ENTRY vtc_S3345C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3345C3[0]),
  (VTBL_ENTRY)&_ZN7S3345C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3345C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3345C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3345C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3345C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3345C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3345C33v10Ev,
};
extern VTBL_ENTRY _ZTI7S3345C3[];
extern  VTBL_ENTRY _ZTV7S3345C3[];
Class_Descriptor cd_S3345C3 = {  "S3345C3", // class name
  0,0,//no base classes
  &(vtc_S3345C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3345C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3345C3),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  S3345C2  : S3345C3 {
  ::S3345C3 s3345c2f0;
  virtual  ~S3345C2(); // _ZN7S3345C2D1Ev
  virtual void  v11(); // _ZN7S3345C23v11Ev
  virtual void  v12(); // _ZN7S3345C23v12Ev
  virtual void  v13(); // _ZN7S3345C23v13Ev
  virtual void  v14(); // _ZN7S3345C23v14Ev
  virtual void  v15(); // _ZN7S3345C23v15Ev
  S3345C2(); // tgen
};
//SIG(-1 S3345C2) C1{ BC2{ vd v6 v7 v8 v9 v10} vd v1 v2 v3 v4 v5 FC2}


 S3345C2 ::~S3345C2(){ note_dtor("S3345C2", this);}
void  S3345C2 ::v11(){vfunc_called(this, "_ZN7S3345C23v11Ev");}
void  S3345C2 ::v12(){vfunc_called(this, "_ZN7S3345C23v12Ev");}
void  S3345C2 ::v13(){vfunc_called(this, "_ZN7S3345C23v13Ev");}
void  S3345C2 ::v14(){vfunc_called(this, "_ZN7S3345C23v14Ev");}
void  S3345C2 ::v15(){vfunc_called(this, "_ZN7S3345C23v15Ev");}
S3345C2 ::S3345C2(){ note_ctor("S3345C2", this);} // tgen

static void Test_S3345C2()
{
  extern Class_Descriptor cd_S3345C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3345C2, buf);
    S3345C2 *dp, &lv = *(dp=new (buf) S3345C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3345C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3345C2)");
    check_base_class_offset(lv, (S3345C3*), 0, "S3345C2");
    check_field_offset(lv, s3345c2f0, ABISELECT(8,4), "S3345C2.s3345c2f0");
    test_class_info(&lv, &cd_S3345C2);
    dp->~S3345C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3345C2(Test_S3345C2, "S3345C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3345C2C1Ev();
extern void _ZN7S3345C2D1Ev();
Name_Map name_map_S3345C2[] = {
  NSPAIR(_ZN7S3345C2C1Ev),
  NSPAIR(_ZN7S3345C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3345C3;
extern VTBL_ENTRY _ZTI7S3345C3[];
extern  VTBL_ENTRY _ZTV7S3345C3[];
static Base_Class bases_S3345C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3345C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S3345C2[];
extern void _ZN7S3345C2D1Ev();
extern void _ZN7S3345C2D0Ev();
extern void _ZN7S3345C32v6Ev();
extern void _ZN7S3345C32v7Ev();
extern void _ZN7S3345C32v8Ev();
extern void _ZN7S3345C32v9Ev();
extern void _ZN7S3345C33v10Ev();
extern void _ZN7S3345C23v11Ev();
extern void _ZN7S3345C23v12Ev();
extern void _ZN7S3345C23v13Ev();
extern void _ZN7S3345C23v14Ev();
extern void _ZN7S3345C23v15Ev();
static  VTBL_ENTRY vtc_S3345C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3345C2[0]),
  (VTBL_ENTRY)&_ZN7S3345C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3345C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3345C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3345C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3345C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3345C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3345C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3345C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3345C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3345C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3345C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3345C23v15Ev,
};
extern VTBL_ENTRY _ZTI7S3345C2[];
extern  VTBL_ENTRY _ZTV7S3345C2[];
Class_Descriptor cd_S3345C2 = {  "S3345C2", // class name
  bases_S3345C2, 1,
  &(vtc_S3345C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3345C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3345C2),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  S3345C1  : S3345C2 {
  virtual void  v1(); // _ZN7S3345C12v1Ev
  virtual void  v2(); // _ZN7S3345C12v2Ev
  virtual void  v3(); // _ZN7S3345C12v3Ev
  virtual void  v4(); // _ZN7S3345C12v4Ev
  virtual void  v5(); // _ZN7S3345C12v5Ev
  ~S3345C1(); // tgen
  S3345C1(); // tgen
};
//SIG(1 S3345C1) C1{ BC2{ BC3{ vd v6 v7 v8 v9 v10} vd v11 v12 v13 v14 v15 FC3} v1 v2 v3 v4 v5}


void  S3345C1 ::v1(){vfunc_called(this, "_ZN7S3345C12v1Ev");}
void  S3345C1 ::v2(){vfunc_called(this, "_ZN7S3345C12v2Ev");}
void  S3345C1 ::v3(){vfunc_called(this, "_ZN7S3345C12v3Ev");}
void  S3345C1 ::v4(){vfunc_called(this, "_ZN7S3345C12v4Ev");}
void  S3345C1 ::v5(){vfunc_called(this, "_ZN7S3345C12v5Ev");}
S3345C1 ::~S3345C1(){ note_dtor("S3345C1", this);} // tgen
S3345C1 ::S3345C1(){ note_ctor("S3345C1", this);} // tgen

static void Test_S3345C1()
{
  extern Class_Descriptor cd_S3345C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3345C1, buf);
    S3345C1 *dp, &lv = *(dp=new (buf) S3345C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3345C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3345C1)");
    check_base_class_offset(lv, (S3345C3*)(S3345C2*), 0, "S3345C1");
    check_base_class_offset(lv, (S3345C2*), 0, "S3345C1");
    test_class_info(&lv, &cd_S3345C1);
    dp->~S3345C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3345C1(Test_S3345C1, "S3345C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3345C1C1Ev();
extern void _ZN7S3345C1D1Ev();
Name_Map name_map_S3345C1[] = {
  NSPAIR(_ZN7S3345C1C1Ev),
  NSPAIR(_ZN7S3345C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3345C3;
extern VTBL_ENTRY _ZTI7S3345C3[];
extern  VTBL_ENTRY _ZTV7S3345C3[];
extern Class_Descriptor cd_S3345C2;
extern VTBL_ENTRY _ZTI7S3345C2[];
extern  VTBL_ENTRY _ZTV7S3345C2[];
static Base_Class bases_S3345C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3345C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S3345C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3345C1[];
extern void _ZN7S3345C1D1Ev();
extern void _ZN7S3345C1D0Ev();
extern void _ZN7S3345C32v6Ev();
extern void _ZN7S3345C32v7Ev();
extern void _ZN7S3345C32v8Ev();
extern void _ZN7S3345C32v9Ev();
extern void _ZN7S3345C33v10Ev();
extern void _ZN7S3345C23v11Ev();
extern void _ZN7S3345C23v12Ev();
extern void _ZN7S3345C23v13Ev();
extern void _ZN7S3345C23v14Ev();
extern void _ZN7S3345C23v15Ev();
extern void _ZN7S3345C12v1Ev();
extern void _ZN7S3345C12v2Ev();
extern void _ZN7S3345C12v3Ev();
extern void _ZN7S3345C12v4Ev();
extern void _ZN7S3345C12v5Ev();
static  VTBL_ENTRY vtc_S3345C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3345C1[0]),
  (VTBL_ENTRY)&_ZN7S3345C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3345C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3345C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3345C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3345C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3345C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3345C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3345C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3345C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3345C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3345C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3345C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3345C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3345C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3345C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3345C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3345C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S3345C1[];
extern  VTBL_ENTRY _ZTV7S3345C1[];
Class_Descriptor cd_S3345C1 = {  "S3345C1", // class name
  bases_S3345C1, 2,
  &(vtc_S3345C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3345C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3345C1),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20363C2  {
  virtual void  v7(); // _ZN8S20363C22v7Ev
  virtual void  v8(); // _ZN8S20363C22v8Ev
  virtual void  v9(); // _ZN8S20363C22v9Ev
  virtual void  v10(); // _ZN8S20363C23v10Ev
  ~S20363C2(); // tgen
  S20363C2(); // tgen
};
//SIG(-1 S20363C2) C1{ v1 v2 v3 v4}


void  S20363C2 ::v7(){vfunc_called(this, "_ZN8S20363C22v7Ev");}
void  S20363C2 ::v8(){vfunc_called(this, "_ZN8S20363C22v8Ev");}
void  S20363C2 ::v9(){vfunc_called(this, "_ZN8S20363C22v9Ev");}
void  S20363C2 ::v10(){vfunc_called(this, "_ZN8S20363C23v10Ev");}
S20363C2 ::~S20363C2(){ note_dtor("S20363C2", this);} // tgen
S20363C2 ::S20363C2(){ note_ctor("S20363C2", this);} // tgen

static void Test_S20363C2()
{
  extern Class_Descriptor cd_S20363C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20363C2, buf);
    S20363C2 *dp, &lv = *(dp=new (buf) S20363C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20363C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20363C2)");
    test_class_info(&lv, &cd_S20363C2);
    dp->~S20363C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20363C2(Test_S20363C2, "S20363C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20363C2C1Ev();
extern void _ZN8S20363C2D1Ev();
Name_Map name_map_S20363C2[] = {
  NSPAIR(_ZN8S20363C2C1Ev),
  NSPAIR(_ZN8S20363C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20363C2[];
extern void _ZN8S20363C22v7Ev();
extern void _ZN8S20363C22v8Ev();
extern void _ZN8S20363C22v9Ev();
extern void _ZN8S20363C23v10Ev();
static  VTBL_ENTRY vtc_S20363C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20363C2[0]),
  (VTBL_ENTRY)&_ZN8S20363C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20363C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20363C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20363C23v10Ev,
};
extern VTBL_ENTRY _ZTI8S20363C2[];
extern  VTBL_ENTRY _ZTV8S20363C2[];
Class_Descriptor cd_S20363C2 = {  "S20363C2", // class name
  0,0,//no base classes
  &(vtc_S20363C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20363C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20363C2),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  S20363C3  {
  virtual  ~S20363C3(); // _ZN8S20363C3D1Ev
  virtual void  v11(); // _ZN8S20363C33v11Ev
  virtual void  v12(); // _ZN8S20363C33v12Ev
  virtual void  v13(); // _ZN8S20363C33v13Ev
  virtual void  v14(); // _ZN8S20363C33v14Ev
  virtual void  v15(); // _ZN8S20363C33v15Ev
  S20363C3(); // tgen
};
//SIG(-1 S20363C3) C1{ vd v1 v2 v3 v4 v5}


 S20363C3 ::~S20363C3(){ note_dtor("S20363C3", this);}
void  S20363C3 ::v11(){vfunc_called(this, "_ZN8S20363C33v11Ev");}
void  S20363C3 ::v12(){vfunc_called(this, "_ZN8S20363C33v12Ev");}
void  S20363C3 ::v13(){vfunc_called(this, "_ZN8S20363C33v13Ev");}
void  S20363C3 ::v14(){vfunc_called(this, "_ZN8S20363C33v14Ev");}
void  S20363C3 ::v15(){vfunc_called(this, "_ZN8S20363C33v15Ev");}
S20363C3 ::S20363C3(){ note_ctor("S20363C3", this);} // tgen

static void Test_S20363C3()
{
  extern Class_Descriptor cd_S20363C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20363C3, buf);
    S20363C3 *dp, &lv = *(dp=new (buf) S20363C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20363C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20363C3)");
    test_class_info(&lv, &cd_S20363C3);
    dp->~S20363C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20363C3(Test_S20363C3, "S20363C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20363C3C1Ev();
extern void _ZN8S20363C3D1Ev();
Name_Map name_map_S20363C3[] = {
  NSPAIR(_ZN8S20363C3C1Ev),
  NSPAIR(_ZN8S20363C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20363C3[];
extern void _ZN8S20363C3D1Ev();
extern void _ZN8S20363C3D0Ev();
extern void _ZN8S20363C33v11Ev();
extern void _ZN8S20363C33v12Ev();
extern void _ZN8S20363C33v13Ev();
extern void _ZN8S20363C33v14Ev();
extern void _ZN8S20363C33v15Ev();
static  VTBL_ENTRY vtc_S20363C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20363C3[0]),
  (VTBL_ENTRY)&_ZN8S20363C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20363C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20363C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20363C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20363C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20363C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20363C33v15Ev,
};
extern VTBL_ENTRY _ZTI8S20363C3[];
extern  VTBL_ENTRY _ZTV8S20363C3[];
Class_Descriptor cd_S20363C3 = {  "S20363C3", // class name
  0,0,//no base classes
  &(vtc_S20363C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20363C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20363C3),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  S20363C1  : virtual S20363C2 , virtual S20363C3 {
  virtual  ~S20363C1(); // _ZN8S20363C1D2Ev
  virtual void  v1(); // _ZN8S20363C12v1Ev
  virtual void  v2(); // _ZN8S20363C12v2Ev
  virtual void  v3(); // _ZN8S20363C12v3Ev
  virtual void  v4(); // _ZN8S20363C12v4Ev
  virtual void  v5(); // _ZN8S20363C12v5Ev
  virtual void  v6(); // _ZN8S20363C12v6Ev
  S20363C1(); // tgen
};
//SIG(1 S20363C1) C1{ VBC2{ v7 v8 v9 v10} VBC3{ vd v11 v12 v13 v14 v15} vd v1 v2 v3 v4 v5 v6}


 S20363C1 ::~S20363C1(){ note_dtor("S20363C1", this);}
void  S20363C1 ::v1(){vfunc_called(this, "_ZN8S20363C12v1Ev");}
void  S20363C1 ::v2(){vfunc_called(this, "_ZN8S20363C12v2Ev");}
void  S20363C1 ::v3(){vfunc_called(this, "_ZN8S20363C12v3Ev");}
void  S20363C1 ::v4(){vfunc_called(this, "_ZN8S20363C12v4Ev");}
void  S20363C1 ::v5(){vfunc_called(this, "_ZN8S20363C12v5Ev");}
void  S20363C1 ::v6(){vfunc_called(this, "_ZN8S20363C12v6Ev");}
S20363C1 ::S20363C1(){ note_ctor("S20363C1", this);} // tgen

static void Test_S20363C1()
{
  extern Class_Descriptor cd_S20363C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20363C1, buf);
    S20363C1 *dp, &lv = *(dp=new (buf) S20363C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20363C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20363C1)");
    check_base_class_offset(lv, (S20363C2*), 0, "S20363C1");
    check_base_class_offset(lv, (S20363C3*), ABISELECT(8,4), "S20363C1");
    test_class_info(&lv, &cd_S20363C1);
    dp->~S20363C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20363C1(Test_S20363C1, "S20363C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S20363C1C1Ev();
extern void _ZN8S20363C1D2Ev();
Name_Map name_map_S20363C1[] = {
  NSPAIR(_ZN8S20363C1C1Ev),
  NSPAIR(_ZN8S20363C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20363C2;
extern VTBL_ENTRY _ZTI8S20363C2[];
extern  VTBL_ENTRY _ZTV8S20363C2[];
extern Class_Descriptor cd_S20363C3;
extern VTBL_ENTRY _ZTI8S20363C3[];
extern  VTBL_ENTRY _ZTV8S20363C3[];
static Base_Class bases_S20363C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20363C2,    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},
  {&cd_S20363C3,    ABISELECT(8,4), //bcp->offset
    20, //bcp->virtual_function_table_offset
    8, //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
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20363C1[];
extern void _ZN8S20363C22v7Ev();
extern void _ZN8S20363C22v8Ev();
extern void _ZN8S20363C22v9Ev();
extern void _ZN8S20363C23v10Ev();
extern void _ZN8S20363C1D1Ev();
extern void _ZN8S20363C1D0Ev();
extern void _ZN8S20363C12v1Ev();
extern void _ZN8S20363C12v2Ev();
extern void _ZN8S20363C12v3Ev();
extern void _ZN8S20363C12v4Ev();
extern void _ZN8S20363C12v5Ev();
extern void _ZN8S20363C12v6Ev();
extern void ABISELECT(_ZTv0_n24_N8S20363C1D1Ev,_ZTv0_n12_N8S20363C1D1Ev)();
extern void ABISELECT(_ZThn8_N8S20363C1D1Ev,_ZThn4_N8S20363C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20363C1D0Ev,_ZTv0_n12_N8S20363C1D0Ev)();
extern void ABISELECT(_ZThn8_N8S20363C1D0Ev,_ZThn4_N8S20363C1D0Ev)() __attribute__((weak));
extern void _ZN8S20363C33v11Ev();
extern void _ZN8S20363C33v12Ev();
extern void _ZN8S20363C33v13Ev();
extern void _ZN8S20363C33v14Ev();
extern void _ZN8S20363C33v15Ev();
static  VTBL_ENTRY vtc_S20363C1[] = {
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20363C1[0]),
  (VTBL_ENTRY)&_ZN8S20363C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20363C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20363C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20363C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20363C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20363C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20363C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20363C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20363C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20363C12v4Ev,
  (VTBL_ENTRY)&_ZN8S20363C12v5Ev,
  (VTBL_ENTRY)&_ZN8S20363C12v6Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20363C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20363C1D1Ev,_ZTv0_n12_N8S20363C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20363C1D0Ev,_ZTv0_n12_N8S20363C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20363C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20363C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20363C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20363C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20363C33v15Ev,
};
extern VTBL_ENTRY _ZTV8S20363C1[];
static  VTT_ENTRY vtt_S20363C1[] = {
  {&(_ZTV8S20363C1[8]),  8,35},
  {&(_ZTV8S20363C1[8]),  8,35},
  {&(_ZTV8S20363C1[28]),  28,35},
};
extern VTBL_ENTRY _ZTI8S20363C1[];
extern  VTBL_ENTRY _ZTV8S20363C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20363C1[];
static VTBL_ENTRY alt_thunk_names46[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20363C1D0Ev,_ZTv0_n12_N8S20363C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20363C1D0Ev,_ZThn4_N8S20363C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20363C1D1Ev,_ZTv0_n12_N8S20363C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20363C1D1Ev,_ZThn4_N8S20363C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20363C1 = {  "S20363C1", // class name
  bases_S20363C1, 2,
  &(vtc_S20363C1[0]), // expected_vtbl_contents
  &(vtt_S20363C1[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20363C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20363C1),35, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20363C1),3, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names46,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3388C3  {
  virtual  ~S3388C3(); // _ZN7S3388C3D1Ev
  virtual void  v7(); // _ZN7S3388C32v7Ev
  virtual void  v8(); // _ZN7S3388C32v8Ev
  virtual void  v9(); // _ZN7S3388C32v9Ev
  virtual void  v10(); // _ZN7S3388C33v10Ev
  virtual void  v11(); // _ZN7S3388C33v11Ev
  S3388C3(); // tgen
};
//SIG(-1 S3388C3) C1{ vd v1 v2 v3 v4 v5}


 S3388C3 ::~S3388C3(){ note_dtor("S3388C3", this);}
void  S3388C3 ::v7(){vfunc_called(this, "_ZN7S3388C32v7Ev");}
void  S3388C3 ::v8(){vfunc_called(this, "_ZN7S3388C32v8Ev");}
void  S3388C3 ::v9(){vfunc_called(this, "_ZN7S3388C32v9Ev");}
void  S3388C3 ::v10(){vfunc_called(this, "_ZN7S3388C33v10Ev");}
void  S3388C3 ::v11(){vfunc_called(this, "_ZN7S3388C33v11Ev");}
S3388C3 ::S3388C3(){ note_ctor("S3388C3", this);} // tgen

static void Test_S3388C3()
{
  extern Class_Descriptor cd_S3388C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3388C3, buf);
    S3388C3 *dp, &lv = *(dp=new (buf) S3388C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3388C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3388C3)");
    test_class_info(&lv, &cd_S3388C3);
    dp->~S3388C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3388C3(Test_S3388C3, "S3388C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3388C3C1Ev();
extern void _ZN7S3388C3D1Ev();
Name_Map name_map_S3388C3[] = {
  NSPAIR(_ZN7S3388C3C1Ev),
  NSPAIR(_ZN7S3388C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3388C3[];
extern void _ZN7S3388C3D1Ev();
extern void _ZN7S3388C3D0Ev();
extern void _ZN7S3388C32v7Ev();
extern void _ZN7S3388C32v8Ev();
extern void _ZN7S3388C32v9Ev();
extern void _ZN7S3388C33v10Ev();
extern void _ZN7S3388C33v11Ev();
static  VTBL_ENTRY vtc_S3388C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3388C3[0]),
  (VTBL_ENTRY)&_ZN7S3388C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3388C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3388C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3388C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3388C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3388C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3388C33v11Ev,
};
extern VTBL_ENTRY _ZTI7S3388C3[];
extern  VTBL_ENTRY _ZTV7S3388C3[];
Class_Descriptor cd_S3388C3 = {  "S3388C3", // class name
  0,0,//no base classes
  &(vtc_S3388C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3388C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3388C3),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  S3388C2  : S3388C3 {
  void *s3388c2f0;
  virtual  ~S3388C2(); // _ZN7S3388C2D1Ev
  S3388C2(); // tgen
};
//SIG(-1 S3388C2) C1{ BC2{ vd v1 v2 v3 v4 v5} vd Fp}


 S3388C2 ::~S3388C2(){ note_dtor("S3388C2", this);}
S3388C2 ::S3388C2(){ note_ctor("S3388C2", this);} // tgen

static void Test_S3388C2()
{
  extern Class_Descriptor cd_S3388C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3388C2, buf);
    S3388C2 *dp, &lv = *(dp=new (buf) S3388C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3388C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3388C2)");
    check_base_class_offset(lv, (S3388C3*), 0, "S3388C2");
    check_field_offset(lv, s3388c2f0, ABISELECT(8,4), "S3388C2.s3388c2f0");
    test_class_info(&lv, &cd_S3388C2);
    dp->~S3388C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3388C2(Test_S3388C2, "S3388C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3388C2C1Ev();
extern void _ZN7S3388C2D1Ev();
Name_Map name_map_S3388C2[] = {
  NSPAIR(_ZN7S3388C2C1Ev),
  NSPAIR(_ZN7S3388C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3388C3;
extern VTBL_ENTRY _ZTI7S3388C3[];
extern  VTBL_ENTRY _ZTV7S3388C3[];
static Base_Class bases_S3388C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3388C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S3388C2[];
extern void _ZN7S3388C2D1Ev();
extern void _ZN7S3388C2D0Ev();
extern void _ZN7S3388C32v7Ev();
extern void _ZN7S3388C32v8Ev();
extern void _ZN7S3388C32v9Ev();
extern void _ZN7S3388C33v10Ev();
extern void _ZN7S3388C33v11Ev();
static  VTBL_ENTRY vtc_S3388C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3388C2[0]),
  (VTBL_ENTRY)&_ZN7S3388C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3388C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3388C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3388C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3388C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3388C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3388C33v11Ev,
};
extern VTBL_ENTRY _ZTI7S3388C2[];
extern  VTBL_ENTRY _ZTV7S3388C2[];
Class_Descriptor cd_S3388C2 = {  "S3388C2", // class name
  bases_S3388C2, 1,
  &(vtc_S3388C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3388C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3388C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3388C1  : S3388C2 {
  int s3388c1f0[2];
  void *s3388c1f1[2];
  virtual  ~S3388C1(); // _ZN7S3388C1D1Ev
  virtual void  v1(); // _ZN7S3388C12v1Ev
  virtual void  v2(); // _ZN7S3388C12v2Ev
  virtual void  v3(); // _ZN7S3388C12v3Ev
  virtual void  v4(); // _ZN7S3388C12v4Ev
  virtual void  v5(); // _ZN7S3388C12v5Ev
  virtual void  v6(); // _ZN7S3388C12v6Ev
  S3388C1(); // tgen
};
//SIG(1 S3388C1) C1{ BC2{ BC3{ vd v7 v8 v9 v10 v11} vd Fp} vd v1 v2 v3 v4 v5 v6 Fi[2] Fp[2]}


 S3388C1 ::~S3388C1(){ note_dtor("S3388C1", this);}
void  S3388C1 ::v1(){vfunc_called(this, "_ZN7S3388C12v1Ev");}
void  S3388C1 ::v2(){vfunc_called(this, "_ZN7S3388C12v2Ev");}
void  S3388C1 ::v3(){vfunc_called(this, "_ZN7S3388C12v3Ev");}
void  S3388C1 ::v4(){vfunc_called(this, "_ZN7S3388C12v4Ev");}
void  S3388C1 ::v5(){vfunc_called(this, "_ZN7S3388C12v5Ev");}
void  S3388C1 ::v6(){vfunc_called(this, "_ZN7S3388C12v6Ev");}
S3388C1 ::S3388C1(){ note_ctor("S3388C1", this);} // tgen

static void Test_S3388C1()
{
  extern Class_Descriptor cd_S3388C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S3388C1, buf);
    S3388C1 *dp, &lv = *(dp=new (buf) S3388C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S3388C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3388C1)");
    check_base_class_offset(lv, (S3388C3*)(S3388C2*), 0, "S3388C1");
    check_base_class_offset(lv, (S3388C2*), 0, "S3388C1");
    check_field_offset(lv, s3388c1f0, ABISELECT(16,8), "S3388C1.s3388c1f0");
    check_field_offset(lv, s3388c1f1, ABISELECT(24,16), "S3388C1.s3388c1f1");
    test_class_info(&lv, &cd_S3388C1);
    dp->~S3388C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3388C1(Test_S3388C1, "S3388C1", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN7S3388C1C1Ev();
extern void _ZN7S3388C1D1Ev();
Name_Map name_map_S3388C1[] = {
  NSPAIR(_ZN7S3388C1C1Ev),
  NSPAIR(_ZN7S3388C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3388C3;
extern VTBL_ENTRY _ZTI7S3388C3[];
extern  VTBL_ENTRY _ZTV7S3388C3[];
extern Class_Descriptor cd_S3388C2;
extern VTBL_ENTRY _ZTI7S3388C2[];
extern  VTBL_ENTRY _ZTV7S3388C2[];
static Base_Class bases_S3388C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3388C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S3388C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3388C1[];
extern void _ZN7S3388C1D1Ev();
extern void _ZN7S3388C1D0Ev();
extern void _ZN7S3388C32v7Ev();
extern void _ZN7S3388C32v8Ev();
extern void _ZN7S3388C32v9Ev();
extern void _ZN7S3388C33v10Ev();
extern void _ZN7S3388C33v11Ev();
extern void _ZN7S3388C12v1Ev();
extern void _ZN7S3388C12v2Ev();
extern void _ZN7S3388C12v3Ev();
extern void _ZN7S3388C12v4Ev();
extern void _ZN7S3388C12v5Ev();
extern void _ZN7S3388C12v6Ev();
static  VTBL_ENTRY vtc_S3388C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3388C1[0]),
  (VTBL_ENTRY)&_ZN7S3388C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3388C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3388C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3388C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3388C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3388C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3388C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3388C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3388C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3388C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3388C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3388C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3388C12v6Ev,
};
extern VTBL_ENTRY _ZTI7S3388C1[];
extern  VTBL_ENTRY _ZTV7S3388C1[];
Class_Descriptor cd_S3388C1 = {  "S3388C1", // class name
  bases_S3388C1, 2,
  &(vtc_S3388C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI7S3388C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3388C1),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  S10079C2  {
  virtual  ~S10079C2(); // _ZN8S10079C2D1Ev
  virtual void  v6(); // _ZN8S10079C22v6Ev
  virtual void  v7(); // _ZN8S10079C22v7Ev
  virtual void  v8(); // _ZN8S10079C22v8Ev
  virtual void  v9(); // _ZN8S10079C22v9Ev
  virtual void  v10(); // _ZN8S10079C23v10Ev
  S10079C2(); // tgen
};
//SIG(-1 S10079C2) C1{ vd v1 v2 v3 v4 v5}


 S10079C2 ::~S10079C2(){ note_dtor("S10079C2", this);}
void  S10079C2 ::v6(){vfunc_called(this, "_ZN8S10079C22v6Ev");}
void  S10079C2 ::v7(){vfunc_called(this, "_ZN8S10079C22v7Ev");}
void  S10079C2 ::v8(){vfunc_called(this, "_ZN8S10079C22v8Ev");}
void  S10079C2 ::v9(){vfunc_called(this, "_ZN8S10079C22v9Ev");}
void  S10079C2 ::v10(){vfunc_called(this, "_ZN8S10079C23v10Ev");}
S10079C2 ::S10079C2(){ note_ctor("S10079C2", this);} // tgen

static void Test_S10079C2()
{
  extern Class_Descriptor cd_S10079C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S10079C2, buf);
    S10079C2 *dp, &lv = *(dp=new (buf) S10079C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S10079C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10079C2)");
    test_class_info(&lv, &cd_S10079C2);
    dp->~S10079C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10079C2(Test_S10079C2, "S10079C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S10079C2C1Ev();
extern void _ZN8S10079C2D1Ev();
Name_Map name_map_S10079C2[] = {
  NSPAIR(_ZN8S10079C2C1Ev),
  NSPAIR(_ZN8S10079C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10079C2[];
extern void _ZN8S10079C2D1Ev();
extern void _ZN8S10079C2D0Ev();
extern void _ZN8S10079C22v6Ev();
extern void _ZN8S10079C22v7Ev();
extern void _ZN8S10079C22v8Ev();
extern void _ZN8S10079C22v9Ev();
extern void _ZN8S10079C23v10Ev();
static  VTBL_ENTRY vtc_S10079C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10079C2[0]),
  (VTBL_ENTRY)&_ZN8S10079C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10079C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10079C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10079C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10079C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10079C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10079C23v10Ev,
};
extern VTBL_ENTRY _ZTI8S10079C2[];
extern  VTBL_ENTRY _ZTV8S10079C2[];
Class_Descriptor cd_S10079C2 = {  "S10079C2", // class name
  0,0,//no base classes
  &(vtc_S10079C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S10079C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10079C2),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  S10079C1  : S10079C2 {
  char s10079c1f0;
  void *s10079c1f1;
  ::S21811C13_nt s10079c1f2;
  void *s10079c1f3;
  int s10079c1f4[5];
  virtual  ~S10079C1(); // _ZN8S10079C1D1Ev
  virtual void  v1(); // _ZN8S10079C12v1Ev
  virtual void  v2(); // _ZN8S10079C12v2Ev
  virtual void  v3(); // _ZN8S10079C12v3Ev
  virtual void  v4(); // _ZN8S10079C12v4Ev
  virtual void  v5(); // _ZN8S10079C12v5Ev
  S10079C1(); // tgen
};
//SIG(1 S10079C1) C1{ BC2{ vd v6 v7 v8 v9 v10} vd v1 v2 v3 v4 v5 Fc Fp FC3{ m Fp} Fp Fi[5]}


 S10079C1 ::~S10079C1(){ note_dtor("S10079C1", this);}
void  S10079C1 ::v1(){vfunc_called(this, "_ZN8S10079C12v1Ev");}
void  S10079C1 ::v2(){vfunc_called(this, "_ZN8S10079C12v2Ev");}
void  S10079C1 ::v3(){vfunc_called(this, "_ZN8S10079C12v3Ev");}
void  S10079C1 ::v4(){vfunc_called(this, "_ZN8S10079C12v4Ev");}
void  S10079C1 ::v5(){vfunc_called(this, "_ZN8S10079C12v5Ev");}
S10079C1 ::S10079C1(){ note_ctor("S10079C1", this);} // tgen

static void Test_S10079C1()
{
  extern Class_Descriptor cd_S10079C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,11)];
    init_test(&cd_S10079C1, buf);
    S10079C1 *dp, &lv = *(dp=new (buf) S10079C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S10079C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10079C1)");
    check_base_class_offset(lv, (S10079C2*), 0, "S10079C1");
    check_field_offset(lv, s10079c1f0, ABISELECT(8,4), "S10079C1.s10079c1f0");
    check_field_offset(lv, s10079c1f1, ABISELECT(16,8), "S10079C1.s10079c1f1");
    check_field_offset(lv, s10079c1f2, ABISELECT(24,12), "S10079C1.s10079c1f2");
    check_field_offset(lv, s10079c1f3, ABISELECT(32,16), "S10079C1.s10079c1f3");
    check_field_offset(lv, s10079c1f4, ABISELECT(40,20), "S10079C1.s10079c1f4");
    test_class_info(&lv, &cd_S10079C1);
    dp->~S10079C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10079C1(Test_S10079C1, "S10079C1", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN8S10079C1C1Ev();
extern void _ZN8S10079C1D1Ev();
Name_Map name_map_S10079C1[] = {
  NSPAIR(_ZN8S10079C1C1Ev),
  NSPAIR(_ZN8S10079C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10079C2;
extern VTBL_ENTRY _ZTI8S10079C2[];
extern  VTBL_ENTRY _ZTV8S10079C2[];
static Base_Class bases_S10079C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10079C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S10079C1[];
extern void _ZN8S10079C1D1Ev();
extern void _ZN8S10079C1D0Ev();
extern void _ZN8S10079C22v6Ev();
extern void _ZN8S10079C22v7Ev();
extern void _ZN8S10079C22v8Ev();
extern void _ZN8S10079C22v9Ev();
extern void _ZN8S10079C23v10Ev();
extern void _ZN8S10079C12v1Ev();
extern void _ZN8S10079C12v2Ev();
extern void _ZN8S10079C12v3Ev();
extern void _ZN8S10079C12v4Ev();
extern void _ZN8S10079C12v5Ev();
static  VTBL_ENTRY vtc_S10079C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10079C1[0]),
  (VTBL_ENTRY)&_ZN8S10079C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10079C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10079C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10079C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10079C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10079C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10079C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10079C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10079C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10079C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10079C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10079C12v5Ev,
};
extern VTBL_ENTRY _ZTI8S10079C1[];
extern  VTBL_ENTRY _ZTV8S10079C1[];
Class_Descriptor cd_S10079C1 = {  "S10079C1", // class name
  bases_S10079C1, 1,
  &(vtc_S10079C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI8S10079C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10079C1),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  S16738C1  {
  int s16738c1f0;
  ::S3350C4_nt s16738c1f1;
  ::S287C8_nt s16738c1f2;
  ::S3350C17 s16738c1f3;
  void  mf16738c1(); // _ZN8S16738C19mf16738c1Ev
};
//SIG(1 S16738C1) C1{ m Fi FC2{ m Fi[2]} FC3{ BC4{ BC5{ BC6{ m Fp Fi[2]}}}} FC7{ BC8{ BC6}}}


void  S16738C1 ::mf16738c1(){}

static void Test_S16738C1()
{
  {
    init_simple_test("S16738C1");
    S16738C1 lv;
    check2(sizeof(lv), ABISELECT(48,36), "sizeof(S16738C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16738C1)");
    check_field_offset(lv, s16738c1f0, 0, "S16738C1.s16738c1f0");
    check_field_offset(lv, s16738c1f1, 4, "S16738C1.s16738c1f1");
    check_field_offset(lv, s16738c1f2, ABISELECT(16,12), "S16738C1.s16738c1f2");
    check_field_offset(lv, s16738c1f3, ABISELECT(32,24), "S16738C1.s16738c1f3");
  }
}
static Arrange_To_Call_Me vS16738C1(Test_S16738C1, "S16738C1", ABISELECT(48,36));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20729C6  {
  virtual void  v2(); // _ZN8S20729C62v2Ev
  ~S20729C6(); // tgen
  S20729C6(); // tgen
};
//SIG(-1 S20729C6) C1{ v1}


void  S20729C6 ::v2(){vfunc_called(this, "_ZN8S20729C62v2Ev");}
S20729C6 ::~S20729C6(){ note_dtor("S20729C6", this);} // tgen
S20729C6 ::S20729C6(){ note_ctor("S20729C6", this);} // tgen

static void Test_S20729C6()
{
  extern Class_Descriptor cd_S20729C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20729C6, buf);
    S20729C6 *dp, &lv = *(dp=new (buf) S20729C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20729C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20729C6)");
    test_class_info(&lv, &cd_S20729C6);
    dp->~S20729C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20729C6(Test_S20729C6, "S20729C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20729C6C1Ev();
extern void _ZN8S20729C6D1Ev();
Name_Map name_map_S20729C6[] = {
  NSPAIR(_ZN8S20729C6C1Ev),
  NSPAIR(_ZN8S20729C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20729C6[];
extern void _ZN8S20729C62v2Ev();
static  VTBL_ENTRY vtc_S20729C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20729C6[0]),
  (VTBL_ENTRY)&_ZN8S20729C62v2Ev,
};
extern VTBL_ENTRY _ZTI8S20729C6[];
extern  VTBL_ENTRY _ZTV8S20729C6[];
Class_Descriptor cd_S20729C6 = {  "S20729C6", // class name
  0,0,//no base classes
  &(vtc_S20729C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20729C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20729C6),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  S20729C5  : virtual S2121C38 , S20729C6 , virtual S2121C28 {
  ~S20729C5(); // tgen
  S20729C5(); // tgen
};
//SIG(-1 S20729C5) C1{ VBC2{ m} BC3{ v1} VBC4{ m}}


S20729C5 ::~S20729C5(){ note_dtor("S20729C5", this);} // tgen
S20729C5 ::S20729C5(){ note_ctor("S20729C5", this);} // tgen

static void Test_S20729C5()
{
  extern Class_Descriptor cd_S20729C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20729C5, buf);
    S20729C5 *dp, &lv = *(dp=new (buf) S20729C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20729C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20729C5)");
    check_base_class_offset(lv, (S2121C38*), 0, "S20729C5");
    check_base_class_offset(lv, (S20729C6*), 0, "S20729C5");
    check_base_class_offset(lv, (S2121C28*), 0, "S20729C5");
    test_class_info(&lv, &cd_S20729C5);
    dp->~S20729C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20729C5(Test_S20729C5, "S20729C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20729C5C1Ev();
extern void _ZN8S20729C5D1Ev();
Name_Map name_map_S20729C5[] = {
  NSPAIR(_ZN8S20729C5C1Ev),
  NSPAIR(_ZN8S20729C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20729C6;
extern VTBL_ENTRY _ZTI8S20729C6[];
extern  VTBL_ENTRY _ZTV8S20729C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
static Base_Class bases_S20729C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20729C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S20729C5[];
extern void _ZN8S20729C62v2Ev();
static  VTBL_ENTRY vtc_S20729C5[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20729C5[0]),
  (VTBL_ENTRY)&_ZN8S20729C62v2Ev,
};
extern VTBL_ENTRY _ZTV8S20729C5[];
static  VTT_ENTRY vtt_S20729C5[] = {
  {&(_ZTV8S20729C5[4]),  4,5},
};
extern VTBL_ENTRY _ZTI8S20729C5[];
extern  VTBL_ENTRY _ZTV8S20729C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20729C5[];
Class_Descriptor cd_S20729C5 = {  "S20729C5", // class name
  bases_S20729C5, 3,
  &(vtc_S20729C5[0]), // expected_vtbl_contents
  &(vtt_S20729C5[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20729C5),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20729C5),5, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20729C5),1, //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  S20729C4  : S2121C38 , S20729C5 {
  virtual void  v3(); // _ZN8S20729C42v3Ev
  ~S20729C4(); // tgen
  S20729C4(); // tgen
};
//SIG(-1 S20729C4) C1{ BC2{ m} BC3{ VBC2 BC4{ v2} VBC5{ m}} v1}


void  S20729C4 ::v3(){vfunc_called(this, "_ZN8S20729C42v3Ev");}
S20729C4 ::~S20729C4(){ note_dtor("S20729C4", this);} // tgen
S20729C4 ::S20729C4(){ note_ctor("S20729C4", this);} // tgen

static void Test_S20729C4()
{
  extern Class_Descriptor cd_S20729C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20729C4, buf);
    S20729C4 *dp, &lv = *(dp=new (buf) S20729C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20729C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20729C4)");
    /*is_ambiguous_... S20729C4::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*), 0, "S20729C4");
    check_base_class_offset(lv, (S2121C38*)(S20729C5*), ABISELECT(8,4), "S20729C4");
    check_base_class_offset(lv, (S20729C6*)(S20729C5*), 0, "S20729C4");
    check_base_class_offset(lv, (S2121C28*)(S20729C5*), 0, "S20729C4");
    check_base_class_offset(lv, (S20729C5*), 0, "S20729C4");
    test_class_info(&lv, &cd_S20729C4);
    dp->~S20729C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20729C4(Test_S20729C4, "S20729C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S20729C4C1Ev();
extern void _ZN8S20729C4D1Ev();
Name_Map name_map_S20729C4[] = {
  NSPAIR(_ZN8S20729C4C1Ev),
  NSPAIR(_ZN8S20729C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20729C6;
extern VTBL_ENTRY _ZTI8S20729C6[];
extern  VTBL_ENTRY _ZTV8S20729C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20729C5;
extern VTBL_ENTRY _ZTI8S20729C5[];
extern  VTBL_ENTRY _ZTV8S20729C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20729C5[];
static Base_Class bases_S20729C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2121C38,    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, 1},
  {&cd_S20729C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20729C5,    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 _ZTI8S20729C4[];
extern void _ZN8S20729C62v2Ev();
extern void _ZN8S20729C42v3Ev();
static  VTBL_ENTRY vtc_S20729C4[] = {
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20729C4[0]),
  (VTBL_ENTRY)&_ZN8S20729C62v2Ev,
  (VTBL_ENTRY)&_ZN8S20729C42v3Ev,
};
extern VTBL_ENTRY _ZTV8S20729C4[];
extern void _ZN8S20729C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20729C5__8S20729C4[] = {
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20729C5[0]),
  (VTBL_ENTRY)&_ZN8S20729C62v2Ev,
};
static  VTT_ENTRY vtt_S20729C4[] = {
  {&(_ZTV8S20729C4[4]),  4,6},
  {&(_tg__ZTV8S20729C5__8S20729C4[4]),  4,5},
};
extern VTBL_ENTRY _ZTI8S20729C4[];
extern  VTBL_ENTRY _ZTV8S20729C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20729C4[];
Class_Descriptor cd_S20729C4 = {  "S20729C4", // class name
  bases_S20729C4, 5,
  &(vtc_S20729C4[0]), // expected_vtbl_contents
  &(vtt_S20729C4[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20729C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20729C4),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20729C4),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  S20729C2  : virtual S2121C38 , virtual S20729C4 , S20729C6 {
  int s20729c2f0;
  void *s20729c2f1;
  ~S20729C2(); // tgen
  S20729C2(); // tgen
};
//SIG(-1 S20729C2) C1{ VBC2{ m} VBC3{ BC2 BC4{ VBC2 BC5{ v1} VBC6{ m}} v2} BC5 Fi Fp}


S20729C2 ::~S20729C2(){ note_dtor("S20729C2", this);} // tgen
S20729C2 ::S20729C2(){ note_ctor("S20729C2", this);} // tgen

static void Test_S20729C2()
{
  extern Class_Descriptor cd_S20729C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S20729C2, buf);
    S20729C2 *dp, &lv = *(dp=new (buf) S20729C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S20729C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20729C2)");
    /*is_ambiguous_... S20729C2::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*), 0, "S20729C2");
    check_base_class_offset(lv, (S2121C38*)(S20729C5*)(S20729C4*), 0, "S20729C2");
    /*is_ambiguous_... S20729C4::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20729C4*), ABISELECT(24,12), "S20729C2");
    check_base_class_offset(lv, (S20729C6*)(S20729C5*)(S20729C4*), ABISELECT(24,12), "S20729C2");
    check_base_class_offset(lv, (S2121C28*)(S20729C5*)(S20729C4*), 0, "S20729C2");
    check_base_class_offset(lv, (S20729C5*)(S20729C4*), ABISELECT(24,12), "S20729C2");
    check_base_class_offset(lv, (S20729C4*), ABISELECT(24,12), "S20729C2");
    /*is_ambiguous_... S20729C2::S20729C6 */ AMB_check_base_class_offset(lv, (S20729C6*), 0, "S20729C2");
    check_field_offset(lv, s20729c2f0, ABISELECT(8,4), "S20729C2.s20729c2f0");
    check_field_offset(lv, s20729c2f1, ABISELECT(16,8), "S20729C2.s20729c2f1");
    test_class_info(&lv, &cd_S20729C2);
    dp->~S20729C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20729C2(Test_S20729C2, "S20729C2", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S20729C2C1Ev();
extern void _ZN8S20729C2D1Ev();
Name_Map name_map_S20729C2[] = {
  NSPAIR(_ZN8S20729C2C1Ev),
  NSPAIR(_ZN8S20729C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20729C6;
extern VTBL_ENTRY _ZTI8S20729C6[];
extern  VTBL_ENTRY _ZTV8S20729C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20729C5;
extern VTBL_ENTRY _ZTI8S20729C5[];
extern  VTBL_ENTRY _ZTV8S20729C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20729C5[];
extern Class_Descriptor cd_S20729C4;
extern VTBL_ENTRY _ZTI8S20729C4[];
extern  VTBL_ENTRY _ZTV8S20729C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20729C4[];
extern Class_Descriptor cd_S20729C6;
extern VTBL_ENTRY _ZTI8S20729C6[];
extern  VTBL_ENTRY _ZTV8S20729C6[];
static Base_Class bases_S20729C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2121C38,    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
    5, //immediately_derived
  0, 0},
  {&cd_S20729C6,    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_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20729C5,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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
    5, //immediately_derived
  0, 0},
  {&cd_S20729C4,    ABISELECT(24,12), //bcp->offset
    6, //bcp->virtual_function_table_offset
    6, //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},
  {&cd_S20729C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S20729C2[];
extern void _ZN8S20729C62v2Ev();
extern void _ZN8S20729C62v2Ev();
extern void _ZN8S20729C42v3Ev();
static  VTBL_ENTRY vtc_S20729C2[] = {
  0,
  ABISELECT(24,12),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20729C2[0]),
  (VTBL_ENTRY)&_ZN8S20729C62v2Ev,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20729C2[0]),
  (VTBL_ENTRY)&_ZN8S20729C62v2Ev,
  (VTBL_ENTRY)&_ZN8S20729C42v3Ev,
};
extern VTBL_ENTRY _ZTV8S20729C2[];
extern void _ZN8S20729C62v2Ev();
extern void _ZN8S20729C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20729C4__8S20729C2[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20729C4[0]),
  (VTBL_ENTRY)&_ZN8S20729C62v2Ev,
  (VTBL_ENTRY)&_ZN8S20729C42v3Ev,
};
extern void _ZN8S20729C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20729C58S20729C4__8S20729C2[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20729C5[0]),
  (VTBL_ENTRY)&_ZN8S20729C62v2Ev,
};
static  VTT_ENTRY vtt_S20729C2[] = {
  {&(_ZTV8S20729C2[5]),  5,14},
  {&(_ZTV8S20729C2[12]),  12,14},
  {&(_tg__ZTV8S20729C4__8S20729C2[4]),  4,6},
  {&(_tg__ZTV8S20729C58S20729C4__8S20729C2[4]),  4,5},
};
extern VTBL_ENTRY _ZTI8S20729C2[];
extern  VTBL_ENTRY _ZTV8S20729C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20729C2[];
Class_Descriptor cd_S20729C2 = {  "S20729C2", // class name
  bases_S20729C2, 7,
  &(vtc_S20729C2[0]), // expected_vtbl_contents
  &(vtt_S20729C2[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S20729C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20729C2),14, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20729C2),4, //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  S20729C1  : virtual S20729C2 {
  virtual void  v1(); // _ZN8S20729C12v1Ev
  ~S20729C1(); // tgen
  S20729C1(); // tgen
};
//SIG(1 S20729C1) C1{ VBC2{ VBC3{ m} VBC4{ BC3 BC5{ VBC3 BC6{ v2} VBC7{ m}} v3} BC6 Fi Fp} v1}


void  S20729C1 ::v1(){vfunc_called(this, "_ZN8S20729C12v1Ev");}
S20729C1 ::~S20729C1(){ note_dtor("S20729C1", this);} // tgen
S20729C1 ::S20729C1(){ note_ctor("S20729C1", this);} // tgen

static void Test_S20729C1()
{
  extern Class_Descriptor cd_S20729C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S20729C1, buf);
    S20729C1 *dp, &lv = *(dp=new (buf) S20729C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S20729C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20729C1)");
    /*is_ambiguous_... S20729C2::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20729C2*), ABISELECT(32,16), "S20729C1");
    check_base_class_offset(lv, (S2121C38*)(S20729C5*)(S20729C4*), ABISELECT(32,16), "S20729C1");
    /*is_ambiguous_... S20729C4::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20729C4*), 0, "S20729C1");
    check_base_class_offset(lv, (S20729C6*)(S20729C5*)(S20729C4*), 0, "S20729C1");
    check_base_class_offset(lv, (S2121C28*)(S20729C5*)(S20729C4*), 0, "S20729C1");
    check_base_class_offset(lv, (S20729C5*)(S20729C4*), 0, "S20729C1");
    check_base_class_offset(lv, (S20729C4*)(S20729C2*), 0, "S20729C1");
    /*is_ambiguous_... S20729C2::S20729C6 */ AMB_check_base_class_offset(lv, (S20729C6*)(S20729C2*), ABISELECT(8,4), "S20729C1");
    check_base_class_offset(lv, (S20729C2*), ABISELECT(8,4), "S20729C1");
    test_class_info(&lv, &cd_S20729C1);
    dp->~S20729C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20729C1(Test_S20729C1, "S20729C1", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S20729C1C1Ev();
extern void _ZN8S20729C1D1Ev();
Name_Map name_map_S20729C1[] = {
  NSPAIR(_ZN8S20729C1C1Ev),
  NSPAIR(_ZN8S20729C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20729C6;
extern VTBL_ENTRY _ZTI8S20729C6[];
extern  VTBL_ENTRY _ZTV8S20729C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20729C5;
extern VTBL_ENTRY _ZTI8S20729C5[];
extern  VTBL_ENTRY _ZTV8S20729C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20729C5[];
extern Class_Descriptor cd_S20729C4;
extern VTBL_ENTRY _ZTI8S20729C4[];
extern  VTBL_ENTRY _ZTV8S20729C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20729C4[];
extern Class_Descriptor cd_S20729C6;
extern VTBL_ENTRY _ZTI8S20729C6[];
extern  VTBL_ENTRY _ZTV8S20729C6[];
extern Class_Descriptor cd_S20729C2;
extern VTBL_ENTRY _ZTI8S20729C2[];
extern  VTBL_ENTRY _ZTV8S20729C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20729C2[];
static Base_Class bases_S20729C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    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, 1},
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20729C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20729C5,    0, //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
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20729C4,    0, //bcp->offset
    -1, //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
    7, //immediately_derived
  0, 1},
  {&cd_S20729C6,    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
    4, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20729C2,    ABISELECT(8,4), //bcp->offset
    11, //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
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20729C1[];
extern void _ZN8S20729C62v2Ev();
extern void _ZN8S20729C42v3Ev();
extern void _ZN8S20729C12v1Ev();
extern void _ZN8S20729C62v2Ev();
static  VTBL_ENTRY vtc_S20729C1[] = {
  0,
  ABISELECT(8,4),
  0,
  0,
  0,
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20729C1[0]),
  (VTBL_ENTRY)&_ZN8S20729C62v2Ev,
  (VTBL_ENTRY)&_ZN8S20729C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20729C12v1Ev,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(24,12),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20729C1[0]),
  (VTBL_ENTRY)&_ZN8S20729C62v2Ev,
};
extern VTBL_ENTRY _ZTV8S20729C1[];
extern void _ZN8S20729C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20729C2__8S20729C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20729C2[0]),
  (VTBL_ENTRY)&_ZN8S20729C62v2Ev,
};
extern void _ZN8S20729C62v2Ev();
extern void _ZN8S20729C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20729C4__8S20729C2__8S20729C1[] = {
  0,
  0,
  0,
  ABISELECT(32,16),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S20729C2[0]),
  (VTBL_ENTRY)&_ZN8S20729C62v2Ev,
  (VTBL_ENTRY)&_ZN8S20729C42v3Ev,
};
extern void _ZN8S20729C62v2Ev();
extern void _ZN8S20729C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20729C4__8S20729C1[] = {
  0,
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20729C4[0]),
  (VTBL_ENTRY)&_ZN8S20729C62v2Ev,
  (VTBL_ENTRY)&_ZN8S20729C42v3Ev,
};
extern void _ZN8S20729C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20729C58S20729C4__8S20729C1[] = {
  0,
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20729C5[0]),
  (VTBL_ENTRY)&_ZN8S20729C62v2Ev,
};
static  VTT_ENTRY vtt_S20729C1[] = {
  {&(_ZTV8S20729C1[8]),  8,18},
  {&(_ZTV8S20729C1[17]),  17,18},
  {&(_ZTV8S20729C1[8]),  8,18},
  {&(_tg__ZTV8S20729C2__8S20729C1[5]),  5,6},
  {&(_tg__ZTV8S20729C4__8S20729C2__8S20729C1[6]),  6,8},
  {&(_tg__ZTV8S20729C4__8S20729C1[4]),  4,6},
  {&(_tg__ZTV8S20729C58S20729C4__8S20729C1[4]),  4,5},
};
extern VTBL_ENTRY _ZTI8S20729C1[];
extern  VTBL_ENTRY _ZTV8S20729C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20729C1[];
Class_Descriptor cd_S20729C1 = {  "S20729C1", // class name
  bases_S20729C1, 8,
  &(vtc_S20729C1[0]), // expected_vtbl_contents
  &(vtt_S20729C1[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S20729C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20729C1),18, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20729C1),7, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3389C3  {
  virtual  ~S3389C3(); // _ZN7S3389C3D1Ev
  virtual void  v7(); // _ZN7S3389C32v7Ev
  virtual void  v8(); // _ZN7S3389C32v8Ev
  virtual void  v9(); // _ZN7S3389C32v9Ev
  virtual void  v10(); // _ZN7S3389C33v10Ev
  virtual void  v11(); // _ZN7S3389C33v11Ev
  S3389C3(); // tgen
};
//SIG(-1 S3389C3) C1{ vd v1 v2 v3 v4 v5}


 S3389C3 ::~S3389C3(){ note_dtor("S3389C3", this);}
void  S3389C3 ::v7(){vfunc_called(this, "_ZN7S3389C32v7Ev");}
void  S3389C3 ::v8(){vfunc_called(this, "_ZN7S3389C32v8Ev");}
void  S3389C3 ::v9(){vfunc_called(this, "_ZN7S3389C32v9Ev");}
void  S3389C3 ::v10(){vfunc_called(this, "_ZN7S3389C33v10Ev");}
void  S3389C3 ::v11(){vfunc_called(this, "_ZN7S3389C33v11Ev");}
S3389C3 ::S3389C3(){ note_ctor("S3389C3", this);} // tgen

static void Test_S3389C3()
{
  extern Class_Descriptor cd_S3389C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3389C3, buf);
    S3389C3 *dp, &lv = *(dp=new (buf) S3389C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3389C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3389C3)");
    test_class_info(&lv, &cd_S3389C3);
    dp->~S3389C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3389C3(Test_S3389C3, "S3389C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3389C3C1Ev();
extern void _ZN7S3389C3D1Ev();
Name_Map name_map_S3389C3[] = {
  NSPAIR(_ZN7S3389C3C1Ev),
  NSPAIR(_ZN7S3389C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3389C3[];
extern void _ZN7S3389C3D1Ev();
extern void _ZN7S3389C3D0Ev();
extern void _ZN7S3389C32v7Ev();
extern void _ZN7S3389C32v8Ev();
extern void _ZN7S3389C32v9Ev();
extern void _ZN7S3389C33v10Ev();
extern void _ZN7S3389C33v11Ev();
static  VTBL_ENTRY vtc_S3389C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3389C3[0]),
  (VTBL_ENTRY)&_ZN7S3389C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3389C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3389C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3389C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3389C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3389C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3389C33v11Ev,
};
extern VTBL_ENTRY _ZTI7S3389C3[];
extern  VTBL_ENTRY _ZTV7S3389C3[];
Class_Descriptor cd_S3389C3 = {  "S3389C3", // class name
  0,0,//no base classes
  &(vtc_S3389C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3389C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3389C3),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  S3389C2  : S3389C3 {
  void *s3389c2f0;
  virtual  ~S3389C2(); // _ZN7S3389C2D1Ev
  S3389C2(); // tgen
};
//SIG(-1 S3389C2) C1{ BC2{ vd v1 v2 v3 v4 v5} vd Fp}


 S3389C2 ::~S3389C2(){ note_dtor("S3389C2", this);}
S3389C2 ::S3389C2(){ note_ctor("S3389C2", this);} // tgen

static void Test_S3389C2()
{
  extern Class_Descriptor cd_S3389C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3389C2, buf);
    S3389C2 *dp, &lv = *(dp=new (buf) S3389C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3389C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3389C2)");
    check_base_class_offset(lv, (S3389C3*), 0, "S3389C2");
    check_field_offset(lv, s3389c2f0, ABISELECT(8,4), "S3389C2.s3389c2f0");
    test_class_info(&lv, &cd_S3389C2);
    dp->~S3389C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3389C2(Test_S3389C2, "S3389C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3389C2C1Ev();
extern void _ZN7S3389C2D1Ev();
Name_Map name_map_S3389C2[] = {
  NSPAIR(_ZN7S3389C2C1Ev),
  NSPAIR(_ZN7S3389C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3389C3;
extern VTBL_ENTRY _ZTI7S3389C3[];
extern  VTBL_ENTRY _ZTV7S3389C3[];
static Base_Class bases_S3389C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3389C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S3389C2[];
extern void _ZN7S3389C2D1Ev();
extern void _ZN7S3389C2D0Ev();
extern void _ZN7S3389C32v7Ev();
extern void _ZN7S3389C32v8Ev();
extern void _ZN7S3389C32v9Ev();
extern void _ZN7S3389C33v10Ev();
extern void _ZN7S3389C33v11Ev();
static  VTBL_ENTRY vtc_S3389C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3389C2[0]),
  (VTBL_ENTRY)&_ZN7S3389C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3389C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3389C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3389C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3389C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3389C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3389C33v11Ev,
};
extern VTBL_ENTRY _ZTI7S3389C2[];
extern  VTBL_ENTRY _ZTV7S3389C2[];
Class_Descriptor cd_S3389C2 = {  "S3389C2", // class name
  bases_S3389C2, 1,
  &(vtc_S3389C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3389C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3389C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3389C1  : S3389C2 {
  int s3389c1f0[2];
  virtual  ~S3389C1(); // _ZN7S3389C1D1Ev
  virtual void  v1(); // _ZN7S3389C12v1Ev
  virtual void  v2(); // _ZN7S3389C12v2Ev
  virtual void  v3(); // _ZN7S3389C12v3Ev
  virtual void  v4(); // _ZN7S3389C12v4Ev
  virtual void  v5(); // _ZN7S3389C12v5Ev
  virtual void  v6(); // _ZN7S3389C12v6Ev
  S3389C1(); // tgen
};
//SIG(1 S3389C1) C1{ BC2{ BC3{ vd v7 v8 v9 v10 v11} vd Fp} vd v1 v2 v3 v4 v5 v6 Fi[2]}


 S3389C1 ::~S3389C1(){ note_dtor("S3389C1", this);}
void  S3389C1 ::v1(){vfunc_called(this, "_ZN7S3389C12v1Ev");}
void  S3389C1 ::v2(){vfunc_called(this, "_ZN7S3389C12v2Ev");}
void  S3389C1 ::v3(){vfunc_called(this, "_ZN7S3389C12v3Ev");}
void  S3389C1 ::v4(){vfunc_called(this, "_ZN7S3389C12v4Ev");}
void  S3389C1 ::v5(){vfunc_called(this, "_ZN7S3389C12v5Ev");}
void  S3389C1 ::v6(){vfunc_called(this, "_ZN7S3389C12v6Ev");}
S3389C1 ::S3389C1(){ note_ctor("S3389C1", this);} // tgen

static void Test_S3389C1()
{
  extern Class_Descriptor cd_S3389C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S3389C1, buf);
    S3389C1 *dp, &lv = *(dp=new (buf) S3389C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S3389C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3389C1)");
    check_base_class_offset(lv, (S3389C3*)(S3389C2*), 0, "S3389C1");
    check_base_class_offset(lv, (S3389C2*), 0, "S3389C1");
    check_field_offset(lv, s3389c1f0, ABISELECT(16,8), "S3389C1.s3389c1f0");
    test_class_info(&lv, &cd_S3389C1);
    dp->~S3389C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3389C1(Test_S3389C1, "S3389C1", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S3389C1C1Ev();
extern void _ZN7S3389C1D1Ev();
Name_Map name_map_S3389C1[] = {
  NSPAIR(_ZN7S3389C1C1Ev),
  NSPAIR(_ZN7S3389C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3389C3;
extern VTBL_ENTRY _ZTI7S3389C3[];
extern  VTBL_ENTRY _ZTV7S3389C3[];
extern Class_Descriptor cd_S3389C2;
extern VTBL_ENTRY _ZTI7S3389C2[];
extern  VTBL_ENTRY _ZTV7S3389C2[];
static Base_Class bases_S3389C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3389C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S3389C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3389C1[];
extern void _ZN7S3389C1D1Ev();
extern void _ZN7S3389C1D0Ev();
extern void _ZN7S3389C32v7Ev();
extern void _ZN7S3389C32v8Ev();
extern void _ZN7S3389C32v9Ev();
extern void _ZN7S3389C33v10Ev();
extern void _ZN7S3389C33v11Ev();
extern void _ZN7S3389C12v1Ev();
extern void _ZN7S3389C12v2Ev();
extern void _ZN7S3389C12v3Ev();
extern void _ZN7S3389C12v4Ev();
extern void _ZN7S3389C12v5Ev();
extern void _ZN7S3389C12v6Ev();
static  VTBL_ENTRY vtc_S3389C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3389C1[0]),
  (VTBL_ENTRY)&_ZN7S3389C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3389C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3389C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3389C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3389C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3389C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3389C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3389C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3389C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3389C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3389C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3389C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3389C12v6Ev,
};
extern VTBL_ENTRY _ZTI7S3389C1[];
extern  VTBL_ENTRY _ZTV7S3389C1[];
Class_Descriptor cd_S3389C1 = {  "S3389C1", // class name
  bases_S3389C1, 2,
  &(vtc_S3389C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S3389C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3389C1),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  S10119C2  {
  void *s10119c2f0[2];
  int s10119c2f1;
  virtual  ~S10119C2(); // _ZN8S10119C2D1Ev
  virtual void  v7(); // _ZN8S10119C22v7Ev
  virtual void  v8(); // _ZN8S10119C22v8Ev
  virtual void  v9(); // _ZN8S10119C22v9Ev
  virtual void  v10(); // _ZN8S10119C23v10Ev
  virtual void  v11(); // _ZN8S10119C23v11Ev
  virtual void  v12(); // _ZN8S10119C23v12Ev
  S10119C2(); // tgen
};
//SIG(-1 S10119C2) C1{ vd v1 v2 v3 v4 v5 v6 Fp[2] Fi}


 S10119C2 ::~S10119C2(){ note_dtor("S10119C2", this);}
void  S10119C2 ::v7(){vfunc_called(this, "_ZN8S10119C22v7Ev");}
void  S10119C2 ::v8(){vfunc_called(this, "_ZN8S10119C22v8Ev");}
void  S10119C2 ::v9(){vfunc_called(this, "_ZN8S10119C22v9Ev");}
void  S10119C2 ::v10(){vfunc_called(this, "_ZN8S10119C23v10Ev");}
void  S10119C2 ::v11(){vfunc_called(this, "_ZN8S10119C23v11Ev");}
void  S10119C2 ::v12(){vfunc_called(this, "_ZN8S10119C23v12Ev");}
S10119C2 ::S10119C2(){ note_ctor("S10119C2", this);} // tgen

static void Test_S10119C2()
{
  extern Class_Descriptor cd_S10119C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S10119C2, buf);
    S10119C2 *dp, &lv = *(dp=new (buf) S10119C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S10119C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10119C2)");
    check_field_offset(lv, s10119c2f0, ABISELECT(8,4), "S10119C2.s10119c2f0");
    check_field_offset(lv, s10119c2f1, ABISELECT(24,12), "S10119C2.s10119c2f1");
    test_class_info(&lv, &cd_S10119C2);
    dp->~S10119C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10119C2(Test_S10119C2, "S10119C2", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S10119C2C1Ev();
extern void _ZN8S10119C2D1Ev();
Name_Map name_map_S10119C2[] = {
  NSPAIR(_ZN8S10119C2C1Ev),
  NSPAIR(_ZN8S10119C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10119C2[];
extern void _ZN8S10119C2D1Ev();
extern void _ZN8S10119C2D0Ev();
extern void _ZN8S10119C22v7Ev();
extern void _ZN8S10119C22v8Ev();
extern void _ZN8S10119C22v9Ev();
extern void _ZN8S10119C23v10Ev();
extern void _ZN8S10119C23v11Ev();
extern void _ZN8S10119C23v12Ev();
static  VTBL_ENTRY vtc_S10119C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10119C2[0]),
  (VTBL_ENTRY)&_ZN8S10119C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10119C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10119C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10119C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10119C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10119C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10119C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10119C23v12Ev,
};
extern VTBL_ENTRY _ZTI8S10119C2[];
extern  VTBL_ENTRY _ZTV8S10119C2[];
Class_Descriptor cd_S10119C2 = {  "S10119C2", // class name
  0,0,//no base classes
  &(vtc_S10119C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S10119C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10119C2),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  S10119C1  : S10119C2 {
  virtual  ~S10119C1(); // _ZN8S10119C1D1Ev
  virtual void  v1(); // _ZN8S10119C12v1Ev
  virtual void  v2(); // _ZN8S10119C12v2Ev
  virtual void  v3(); // _ZN8S10119C12v3Ev
  virtual void  v4(); // _ZN8S10119C12v4Ev
  virtual void  v5(); // _ZN8S10119C12v5Ev
  virtual void  v6(); // _ZN8S10119C12v6Ev
  S10119C1(); // tgen
};
//SIG(1 S10119C1) C1{ BC2{ vd v7 v8 v9 v10 v11 v12 Fp[2] Fi} vd v1 v2 v3 v4 v5 v6}


 S10119C1 ::~S10119C1(){ note_dtor("S10119C1", this);}
void  S10119C1 ::v1(){vfunc_called(this, "_ZN8S10119C12v1Ev");}
void  S10119C1 ::v2(){vfunc_called(this, "_ZN8S10119C12v2Ev");}
void  S10119C1 ::v3(){vfunc_called(this, "_ZN8S10119C12v3Ev");}
void  S10119C1 ::v4(){vfunc_called(this, "_ZN8S10119C12v4Ev");}
void  S10119C1 ::v5(){vfunc_called(this, "_ZN8S10119C12v5Ev");}
void  S10119C1 ::v6(){vfunc_called(this, "_ZN8S10119C12v6Ev");}
S10119C1 ::S10119C1(){ note_ctor("S10119C1", this);} // tgen

static void Test_S10119C1()
{
  extern Class_Descriptor cd_S10119C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S10119C1, buf);
    S10119C1 *dp, &lv = *(dp=new (buf) S10119C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S10119C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10119C1)");
    check_base_class_offset(lv, (S10119C2*), 0, "S10119C1");
    test_class_info(&lv, &cd_S10119C1);
    dp->~S10119C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10119C1(Test_S10119C1, "S10119C1", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S10119C1C1Ev();
extern void _ZN8S10119C1D1Ev();
Name_Map name_map_S10119C1[] = {
  NSPAIR(_ZN8S10119C1C1Ev),
  NSPAIR(_ZN8S10119C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10119C2;
extern VTBL_ENTRY _ZTI8S10119C2[];
extern  VTBL_ENTRY _ZTV8S10119C2[];
static Base_Class bases_S10119C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10119C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S10119C1[];
extern void _ZN8S10119C1D1Ev();
extern void _ZN8S10119C1D0Ev();
extern void _ZN8S10119C22v7Ev();
extern void _ZN8S10119C22v8Ev();
extern void _ZN8S10119C22v9Ev();
extern void _ZN8S10119C23v10Ev();
extern void _ZN8S10119C23v11Ev();
extern void _ZN8S10119C23v12Ev();
extern void _ZN8S10119C12v1Ev();
extern void _ZN8S10119C12v2Ev();
extern void _ZN8S10119C12v3Ev();
extern void _ZN8S10119C12v4Ev();
extern void _ZN8S10119C12v5Ev();
extern void _ZN8S10119C12v6Ev();
static  VTBL_ENTRY vtc_S10119C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10119C1[0]),
  (VTBL_ENTRY)&_ZN8S10119C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10119C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10119C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10119C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10119C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10119C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10119C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10119C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10119C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10119C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10119C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10119C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10119C12v5Ev,
  (VTBL_ENTRY)&_ZN8S10119C12v6Ev,
};
extern VTBL_ENTRY _ZTI8S10119C1[];
extern  VTBL_ENTRY _ZTV8S10119C1[];
Class_Descriptor cd_S10119C1 = {  "S10119C1", // class name
  bases_S10119C1, 1,
  &(vtc_S10119C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S10119C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10119C1),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  S3346C3  {
  virtual  ~S3346C3(); // _ZN7S3346C3D1Ev
  virtual void  v6(); // _ZN7S3346C32v6Ev
  virtual void  v7(); // _ZN7S3346C32v7Ev
  virtual void  v8(); // _ZN7S3346C32v8Ev
  virtual void  v9(); // _ZN7S3346C32v9Ev
  virtual void  v10(); // _ZN7S3346C33v10Ev
  S3346C3(); // tgen
};
//SIG(-1 S3346C3) C1{ vd v1 v2 v3 v4 v5}


 S3346C3 ::~S3346C3(){ note_dtor("S3346C3", this);}
void  S3346C3 ::v6(){vfunc_called(this, "_ZN7S3346C32v6Ev");}
void  S3346C3 ::v7(){vfunc_called(this, "_ZN7S3346C32v7Ev");}
void  S3346C3 ::v8(){vfunc_called(this, "_ZN7S3346C32v8Ev");}
void  S3346C3 ::v9(){vfunc_called(this, "_ZN7S3346C32v9Ev");}
void  S3346C3 ::v10(){vfunc_called(this, "_ZN7S3346C33v10Ev");}
S3346C3 ::S3346C3(){ note_ctor("S3346C3", this);} // tgen

static void Test_S3346C3()
{
  extern Class_Descriptor cd_S3346C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3346C3, buf);
    S3346C3 *dp, &lv = *(dp=new (buf) S3346C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3346C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3346C3)");
    test_class_info(&lv, &cd_S3346C3);
    dp->~S3346C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3346C3(Test_S3346C3, "S3346C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3346C3C1Ev();
extern void _ZN7S3346C3D1Ev();
Name_Map name_map_S3346C3[] = {
  NSPAIR(_ZN7S3346C3C1Ev),
  NSPAIR(_ZN7S3346C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3346C3[];
extern void _ZN7S3346C3D1Ev();
extern void _ZN7S3346C3D0Ev();
extern void _ZN7S3346C32v6Ev();
extern void _ZN7S3346C32v7Ev();
extern void _ZN7S3346C32v8Ev();
extern void _ZN7S3346C32v9Ev();
extern void _ZN7S3346C33v10Ev();
static  VTBL_ENTRY vtc_S3346C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3346C3[0]),
  (VTBL_ENTRY)&_ZN7S3346C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3346C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3346C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3346C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3346C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3346C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3346C33v10Ev,
};
extern VTBL_ENTRY _ZTI7S3346C3[];
extern  VTBL_ENTRY _ZTV7S3346C3[];
Class_Descriptor cd_S3346C3 = {  "S3346C3", // class name
  0,0,//no base classes
  &(vtc_S3346C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3346C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3346C3),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  S3346C2  : S3346C3 {
  void *s3346c2f0;
  virtual  ~S3346C2(); // _ZN7S3346C2D1Ev
  S3346C2(); // tgen
};
//SIG(-1 S3346C2) C1{ BC2{ vd v1 v2 v3 v4 v5} vd Fp}


 S3346C2 ::~S3346C2(){ note_dtor("S3346C2", this);}
S3346C2 ::S3346C2(){ note_ctor("S3346C2", this);} // tgen

static void Test_S3346C2()
{
  extern Class_Descriptor cd_S3346C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3346C2, buf);
    S3346C2 *dp, &lv = *(dp=new (buf) S3346C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3346C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3346C2)");
    check_base_class_offset(lv, (S3346C3*), 0, "S3346C2");
    check_field_offset(lv, s3346c2f0, ABISELECT(8,4), "S3346C2.s3346c2f0");
    test_class_info(&lv, &cd_S3346C2);
    dp->~S3346C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3346C2(Test_S3346C2, "S3346C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3346C2C1Ev();
extern void _ZN7S3346C2D1Ev();
Name_Map name_map_S3346C2[] = {
  NSPAIR(_ZN7S3346C2C1Ev),
  NSPAIR(_ZN7S3346C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3346C3;
extern VTBL_ENTRY _ZTI7S3346C3[];
extern  VTBL_ENTRY _ZTV7S3346C3[];
static Base_Class bases_S3346C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3346C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S3346C2[];
extern void _ZN7S3346C2D1Ev();
extern void _ZN7S3346C2D0Ev();
extern void _ZN7S3346C32v6Ev();
extern void _ZN7S3346C32v7Ev();
extern void _ZN7S3346C32v8Ev();
extern void _ZN7S3346C32v9Ev();
extern void _ZN7S3346C33v10Ev();
static  VTBL_ENTRY vtc_S3346C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3346C2[0]),
  (VTBL_ENTRY)&_ZN7S3346C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3346C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3346C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3346C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3346C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3346C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3346C33v10Ev,
};
extern VTBL_ENTRY _ZTI7S3346C2[];
extern  VTBL_ENTRY _ZTV7S3346C2[];
Class_Descriptor cd_S3346C2 = {  "S3346C2", // class name
  bases_S3346C2, 1,
  &(vtc_S3346C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3346C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3346C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3346C1  : S3346C2 {
  int s3346c1f0[2];
  virtual  ~S3346C1(); // _ZN7S3346C1D1Ev
  virtual void  v1(); // _ZN7S3346C12v1Ev
  virtual void  v2(); // _ZN7S3346C12v2Ev
  virtual void  v3(); // _ZN7S3346C12v3Ev
  virtual void  v4(); // _ZN7S3346C12v4Ev
  virtual void  v5(); // _ZN7S3346C12v5Ev
  S3346C1(); // tgen
};
//SIG(1 S3346C1) C1{ BC2{ BC3{ vd v6 v7 v8 v9 v10} vd Fp} vd v1 v2 v3 v4 v5 Fi[2]}


 S3346C1 ::~S3346C1(){ note_dtor("S3346C1", this);}
void  S3346C1 ::v1(){vfunc_called(this, "_ZN7S3346C12v1Ev");}
void  S3346C1 ::v2(){vfunc_called(this, "_ZN7S3346C12v2Ev");}
void  S3346C1 ::v3(){vfunc_called(this, "_ZN7S3346C12v3Ev");}
void  S3346C1 ::v4(){vfunc_called(this, "_ZN7S3346C12v4Ev");}
void  S3346C1 ::v5(){vfunc_called(this, "_ZN7S3346C12v5Ev");}
S3346C1 ::S3346C1(){ note_ctor("S3346C1", this);} // tgen

static void Test_S3346C1()
{
  extern Class_Descriptor cd_S3346C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S3346C1, buf);
    S3346C1 *dp, &lv = *(dp=new (buf) S3346C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S3346C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3346C1)");
    check_base_class_offset(lv, (S3346C3*)(S3346C2*), 0, "S3346C1");
    check_base_class_offset(lv, (S3346C2*), 0, "S3346C1");
    check_field_offset(lv, s3346c1f0, ABISELECT(16,8), "S3346C1.s3346c1f0");
    test_class_info(&lv, &cd_S3346C1);
    dp->~S3346C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3346C1(Test_S3346C1, "S3346C1", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S3346C1C1Ev();
extern void _ZN7S3346C1D1Ev();
Name_Map name_map_S3346C1[] = {
  NSPAIR(_ZN7S3346C1C1Ev),
  NSPAIR(_ZN7S3346C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3346C3;
extern VTBL_ENTRY _ZTI7S3346C3[];
extern  VTBL_ENTRY _ZTV7S3346C3[];
extern Class_Descriptor cd_S3346C2;
extern VTBL_ENTRY _ZTI7S3346C2[];
extern  VTBL_ENTRY _ZTV7S3346C2[];
static Base_Class bases_S3346C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3346C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S3346C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3346C1[];
extern void _ZN7S3346C1D1Ev();
extern void _ZN7S3346C1D0Ev();
extern void _ZN7S3346C32v6Ev();
extern void _ZN7S3346C32v7Ev();
extern void _ZN7S3346C32v8Ev();
extern void _ZN7S3346C32v9Ev();
extern void _ZN7S3346C33v10Ev();
extern void _ZN7S3346C12v1Ev();
extern void _ZN7S3346C12v2Ev();
extern void _ZN7S3346C12v3Ev();
extern void _ZN7S3346C12v4Ev();
extern void _ZN7S3346C12v5Ev();
static  VTBL_ENTRY vtc_S3346C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3346C1[0]),
  (VTBL_ENTRY)&_ZN7S3346C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3346C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3346C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3346C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3346C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3346C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3346C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3346C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3346C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3346C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3346C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3346C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S3346C1[];
extern  VTBL_ENTRY _ZTV7S3346C1[];
Class_Descriptor cd_S3346C1 = {  "S3346C1", // class name
  bases_S3346C1, 2,
  &(vtc_S3346C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S3346C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3346C1),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3770C2  : S6282C14_nt {
  int s3770c2f0[6];
  char s3770c2f1[2];
  virtual  ~S3770C2(); // _ZN7S3770C2D1Ev
  S3770C2(); // tgen
};
//SIG(-1 S3770C2) C1{ BC2{ vd m Fi} vd Fi[6] Fc[2]}


 S3770C2 ::~S3770C2(){ note_dtor("S3770C2", this);}
S3770C2 ::S3770C2(){ note_ctor("S3770C2", this);} // tgen

static void Test_S3770C2()
{
  extern Class_Descriptor cd_S3770C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,10)];
    init_test(&cd_S3770C2, buf);
    S3770C2 *dp, &lv = *(dp=new (buf) S3770C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,36), "sizeof(S3770C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3770C2)");
    check_base_class_offset(lv, (S6282C14_nt*), 0, "S3770C2");
    check_field_offset(lv, s3770c2f0, ABISELECT(12,8), "S3770C2.s3770c2f0");
    check_field_offset(lv, s3770c2f1, ABISELECT(36,32), "S3770C2.s3770c2f1");
    test_class_info(&lv, &cd_S3770C2);
    dp->~S3770C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3770C2(Test_S3770C2, "S3770C2", ABISELECT(40,36));

#else // __cplusplus

extern void _ZN7S3770C2C1Ev();
extern void _ZN7S3770C2D1Ev();
Name_Map name_map_S3770C2[] = {
  NSPAIR(_ZN7S3770C2C1Ev),
  NSPAIR(_ZN7S3770C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6282C14_nt;
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
extern  VTBL_ENTRY _ZTV11S6282C14_nt[];
static Base_Class bases_S3770C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6282C14_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 _ZTI7S3770C2[];
extern void _ZN7S3770C2D1Ev();
extern void _ZN7S3770C2D0Ev();
static  VTBL_ENTRY vtc_S3770C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3770C2[0]),
  (VTBL_ENTRY)&_ZN7S3770C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3770C2D0Ev,
};
extern VTBL_ENTRY _ZTI7S3770C2[];
extern  VTBL_ENTRY _ZTV7S3770C2[];
Class_Descriptor cd_S3770C2 = {  "S3770C2", // class name
  bases_S3770C2, 1,
  &(vtc_S3770C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,36), // object size
  NSPAIRA(_ZTI7S3770C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3770C2),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3770C1  : S3770C2 {
  ::S2185C10_nt s3770c1f0;
  int s3770c1f1;
  virtual  ~S3770C1(); // _ZN7S3770C1D1Ev
  S3770C1(); // tgen
};
//SIG(1 S3770C1) C1{ BC2{ BC3{ vd m Fi} vd Fi[6] Fc[2]} vd FC4{ m Fp Fi FC5{ m}} Fi}


 S3770C1 ::~S3770C1(){ note_dtor("S3770C1", this);}
S3770C1 ::S3770C1(){ note_ctor("S3770C1", this);} // tgen

static void Test_S3770C1()
{
  extern Class_Descriptor cd_S3770C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,14)];
    init_test(&cd_S3770C1, buf);
    S3770C1 *dp, &lv = *(dp=new (buf) S3770C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,52), "sizeof(S3770C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3770C1)");
    check_base_class_offset(lv, (S6282C14_nt*)(S3770C2*), 0, "S3770C1");
    check_base_class_offset(lv, (S3770C2*), 0, "S3770C1");
    check_field_offset(lv, s3770c1f0, ABISELECT(40,36), "S3770C1.s3770c1f0");
    check_field_offset(lv, s3770c1f1, ABISELECT(56,48), "S3770C1.s3770c1f1");
    test_class_info(&lv, &cd_S3770C1);
    dp->~S3770C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3770C1(Test_S3770C1, "S3770C1", ABISELECT(64,52));

#else // __cplusplus

extern void _ZN7S3770C1C1Ev();
extern void _ZN7S3770C1D1Ev();
Name_Map name_map_S3770C1[] = {
  NSPAIR(_ZN7S3770C1C1Ev),
  NSPAIR(_ZN7S3770C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6282C14_nt;
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
extern  VTBL_ENTRY _ZTV11S6282C14_nt[];
extern Class_Descriptor cd_S3770C2;
extern VTBL_ENTRY _ZTI7S3770C2[];
extern  VTBL_ENTRY _ZTV7S3770C2[];
static Base_Class bases_S3770C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6282C14_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_S3770C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3770C1[];
extern void _ZN7S3770C1D1Ev();
extern void _ZN7S3770C1D0Ev();
static  VTBL_ENTRY vtc_S3770C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3770C1[0]),
  (VTBL_ENTRY)&_ZN7S3770C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3770C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S3770C1[];
extern  VTBL_ENTRY _ZTV7S3770C1[];
Class_Descriptor cd_S3770C1 = {  "S3770C1", // class name
  bases_S3770C1, 2,
  &(vtc_S3770C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,52), // object size
  NSPAIRA(_ZTI7S3770C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3770C1),4, //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  S9933C2  {
  virtual  ~S9933C2(); // _ZN7S9933C2D1Ev
  virtual void  v5(); // _ZN7S9933C22v5Ev
  virtual void  v6(); // _ZN7S9933C22v6Ev
  virtual void  v7(); // _ZN7S9933C22v7Ev
  virtual void  v8(); // _ZN7S9933C22v8Ev
  virtual void  v9(); // _ZN7S9933C22v9Ev
  S9933C2(); // tgen
};
//SIG(-1 S9933C2) C1{ vd v1 v2 v3 v4 v5}


 S9933C2 ::~S9933C2(){ note_dtor("S9933C2", this);}
void  S9933C2 ::v5(){vfunc_called(this, "_ZN7S9933C22v5Ev");}
void  S9933C2 ::v6(){vfunc_called(this, "_ZN7S9933C22v6Ev");}
void  S9933C2 ::v7(){vfunc_called(this, "_ZN7S9933C22v7Ev");}
void  S9933C2 ::v8(){vfunc_called(this, "_ZN7S9933C22v8Ev");}
void  S9933C2 ::v9(){vfunc_called(this, "_ZN7S9933C22v9Ev");}
S9933C2 ::S9933C2(){ note_ctor("S9933C2", this);} // tgen

static void Test_S9933C2()
{
  extern Class_Descriptor cd_S9933C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9933C2, buf);
    S9933C2 *dp, &lv = *(dp=new (buf) S9933C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9933C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9933C2)");
    test_class_info(&lv, &cd_S9933C2);
    dp->~S9933C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9933C2(Test_S9933C2, "S9933C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9933C2C1Ev();
extern void _ZN7S9933C2D1Ev();
Name_Map name_map_S9933C2[] = {
  NSPAIR(_ZN7S9933C2C1Ev),
  NSPAIR(_ZN7S9933C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9933C2[];
extern void _ZN7S9933C2D1Ev();
extern void _ZN7S9933C2D0Ev();
extern void _ZN7S9933C22v5Ev();
extern void _ZN7S9933C22v6Ev();
extern void _ZN7S9933C22v7Ev();
extern void _ZN7S9933C22v8Ev();
extern void _ZN7S9933C22v9Ev();
static  VTBL_ENTRY vtc_S9933C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9933C2[0]),
  (VTBL_ENTRY)&_ZN7S9933C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9933C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9933C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9933C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9933C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9933C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9933C22v9Ev,
};
extern VTBL_ENTRY _ZTI7S9933C2[];
extern  VTBL_ENTRY _ZTV7S9933C2[];
Class_Descriptor cd_S9933C2 = {  "S9933C2", // class name
  0,0,//no base classes
  &(vtc_S9933C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9933C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9933C2),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  S9933C1  : S9933C2 {
  int s9933c1f0[2];
  ::S3350C4_nt s9933c1f1;
  char s9933c1f2;
  virtual void  v1(); // _ZN7S9933C12v1Ev
  virtual void  v2(); // _ZN7S9933C12v2Ev
  virtual void  v3(); // _ZN7S9933C12v3Ev
  virtual void  v4(); // _ZN7S9933C12v4Ev
  ~S9933C1(); // tgen
  S9933C1(); // tgen
};
//SIG(1 S9933C1) C1{ BC2{ vd v5 v6 v7 v8 v9} v1 v2 v3 v4 Fi[2] FC3{ m Fi[2]} Fc}


void  S9933C1 ::v1(){vfunc_called(this, "_ZN7S9933C12v1Ev");}
void  S9933C1 ::v2(){vfunc_called(this, "_ZN7S9933C12v2Ev");}
void  S9933C1 ::v3(){vfunc_called(this, "_ZN7S9933C12v3Ev");}
void  S9933C1 ::v4(){vfunc_called(this, "_ZN7S9933C12v4Ev");}
S9933C1 ::~S9933C1(){ note_dtor("S9933C1", this);} // tgen
S9933C1 ::S9933C1(){ note_ctor("S9933C1", this);} // tgen

static void Test_S9933C1()
{
  extern Class_Descriptor cd_S9933C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,7)];
    init_test(&cd_S9933C1, buf);
    S9933C1 *dp, &lv = *(dp=new (buf) S9933C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S9933C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9933C1)");
    check_base_class_offset(lv, (S9933C2*), 0, "S9933C1");
    check_field_offset(lv, s9933c1f0, ABISELECT(8,4), "S9933C1.s9933c1f0");
    check_field_offset(lv, s9933c1f1, ABISELECT(16,12), "S9933C1.s9933c1f1");
    check_field_offset(lv, s9933c1f2, ABISELECT(24,20), "S9933C1.s9933c1f2");
    test_class_info(&lv, &cd_S9933C1);
    dp->~S9933C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9933C1(Test_S9933C1, "S9933C1", ABISELECT(32,24));

#else // __cplusplus

extern void _ZN7S9933C1C1Ev();
extern void _ZN7S9933C1D1Ev();
Name_Map name_map_S9933C1[] = {
  NSPAIR(_ZN7S9933C1C1Ev),
  NSPAIR(_ZN7S9933C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9933C2;
extern VTBL_ENTRY _ZTI7S9933C2[];
extern  VTBL_ENTRY _ZTV7S9933C2[];
static Base_Class bases_S9933C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9933C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S9933C1[];
extern void _ZN7S9933C1D1Ev();
extern void _ZN7S9933C1D0Ev();
extern void _ZN7S9933C22v5Ev();
extern void _ZN7S9933C22v6Ev();
extern void _ZN7S9933C22v7Ev();
extern void _ZN7S9933C22v8Ev();
extern void _ZN7S9933C22v9Ev();
extern void _ZN7S9933C12v1Ev();
extern void _ZN7S9933C12v2Ev();
extern void _ZN7S9933C12v3Ev();
extern void _ZN7S9933C12v4Ev();
static  VTBL_ENTRY vtc_S9933C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9933C1[0]),
  (VTBL_ENTRY)&_ZN7S9933C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9933C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9933C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9933C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9933C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9933C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9933C22v9Ev,
  (VTBL_ENTRY)&_ZN7S9933C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9933C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9933C12v3Ev,
  (VTBL_ENTRY)&_ZN7S9933C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S9933C1[];
extern  VTBL_ENTRY _ZTV7S9933C1[];
Class_Descriptor cd_S9933C1 = {  "S9933C1", // class name
  bases_S9933C1, 1,
  &(vtc_S9933C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,24), // object size
  NSPAIRA(_ZTI7S9933C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9933C1),13, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2603C2  : S3350C8_nt {
};
//SIG(-1 S2603C2) C1{ BC2{ m Fi}}



static void Test_S2603C2()
{
  extern Class_Descriptor cd_S2603C2;
  void *lvp;
  {
    int buf[2];
    init_test(&cd_S2603C2, buf);
    S2603C2 &lv = *(new (buf) S2603C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), 4, "sizeof(S2603C2)");
    check2(__alignof__(lv), 4, "__alignof__(S2603C2)");
    check_base_class_offset(lv, (S3350C8_nt*), 0, "S2603C2");
    test_class_info(&lv, &cd_S2603C2);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2603C2(Test_S2603C2, "S2603C2", 4);

#else // __cplusplus

extern Class_Descriptor cd_S3350C8_nt;
extern VTBL_ENTRY _ZTI10S3350C8_nt[];
static Base_Class bases_S2603C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3350C8_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 _ZTI7S2603C2[];
Class_Descriptor cd_S2603C2 = {  "S2603C2", // class name
  bases_S2603C2, 1,
  0, // no vftv
  0, //no vtt
  4, // object size
  NSPAIRA(_ZTI7S2603C2),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  S2603C4  {
  virtual  ~S2603C4(); // _ZN7S2603C4D1Ev
  virtual void  v6(); // _ZN7S2603C42v6Ev
  virtual void  v7(); // _ZN7S2603C42v7Ev
  virtual void  v8(); // _ZN7S2603C42v8Ev
  virtual void  v9(); // _ZN7S2603C42v9Ev
  virtual void  v10(); // _ZN7S2603C43v10Ev
  S2603C4(); // tgen
};
//SIG(-1 S2603C4) C1{ vd v1 v2 v3 v4 v5}


 S2603C4 ::~S2603C4(){ note_dtor("S2603C4", this);}
void  S2603C4 ::v6(){vfunc_called(this, "_ZN7S2603C42v6Ev");}
void  S2603C4 ::v7(){vfunc_called(this, "_ZN7S2603C42v7Ev");}
void  S2603C4 ::v8(){vfunc_called(this, "_ZN7S2603C42v8Ev");}
void  S2603C4 ::v9(){vfunc_called(this, "_ZN7S2603C42v9Ev");}
void  S2603C4 ::v10(){vfunc_called(this, "_ZN7S2603C43v10Ev");}
S2603C4 ::S2603C4(){ note_ctor("S2603C4", this);} // tgen

static void Test_S2603C4()
{
  extern Class_Descriptor cd_S2603C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S2603C4, buf);
    S2603C4 *dp, &lv = *(dp=new (buf) S2603C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S2603C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2603C4)");
    test_class_info(&lv, &cd_S2603C4);
    dp->~S2603C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2603C4(Test_S2603C4, "S2603C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S2603C4C1Ev();
extern void _ZN7S2603C4D1Ev();
Name_Map name_map_S2603C4[] = {
  NSPAIR(_ZN7S2603C4C1Ev),
  NSPAIR(_ZN7S2603C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2603C4[];
extern void _ZN7S2603C4D1Ev();
extern void _ZN7S2603C4D0Ev();
extern void _ZN7S2603C42v6Ev();
extern void _ZN7S2603C42v7Ev();
extern void _ZN7S2603C42v8Ev();
extern void _ZN7S2603C42v9Ev();
extern void _ZN7S2603C43v10Ev();
static  VTBL_ENTRY vtc_S2603C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2603C4[0]),
  (VTBL_ENTRY)&_ZN7S2603C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2603C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2603C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2603C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2603C42v8Ev,
  (VTBL_ENTRY)&_ZN7S2603C42v9Ev,
  (VTBL_ENTRY)&_ZN7S2603C43v10Ev,
};
extern VTBL_ENTRY _ZTI7S2603C4[];
extern  VTBL_ENTRY _ZTV7S2603C4[];
Class_Descriptor cd_S2603C4 = {  "S2603C4", // class name
  0,0,//no base classes
  &(vtc_S2603C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2603C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2603C4),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  S2603C1  : S2603C2 , S2603C4 {
  void *s2603c1f0;
  virtual void  v1(); // _ZN7S2603C12v1Ev
  virtual void  v2(); // _ZN7S2603C12v2Ev
  virtual void  v3(); // _ZN7S2603C12v3Ev
  virtual void  v4(); // _ZN7S2603C12v4Ev
  virtual void  v5(); // _ZN7S2603C12v5Ev
  ~S2603C1(); // tgen
  S2603C1(); // tgen
};
//SIG(1 S2603C1) C1{ BC2{ BC3{ m Fi}} BC4{ vd v6 v7 v8 v9 v10} v1 v2 v3 v4 v5 Fp}


void  S2603C1 ::v1(){vfunc_called(this, "_ZN7S2603C12v1Ev");}
void  S2603C1 ::v2(){vfunc_called(this, "_ZN7S2603C12v2Ev");}
void  S2603C1 ::v3(){vfunc_called(this, "_ZN7S2603C12v3Ev");}
void  S2603C1 ::v4(){vfunc_called(this, "_ZN7S2603C12v4Ev");}
void  S2603C1 ::v5(){vfunc_called(this, "_ZN7S2603C12v5Ev");}
S2603C1 ::~S2603C1(){ note_dtor("S2603C1", this);} // tgen
S2603C1 ::S2603C1(){ note_ctor("S2603C1", this);} // tgen

static void Test_S2603C1()
{
  extern Class_Descriptor cd_S2603C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S2603C1, buf);
    S2603C1 *dp, &lv = *(dp=new (buf) S2603C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S2603C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2603C1)");
    check_base_class_offset(lv, (S3350C8_nt*)(S2603C2*), ABISELECT(8,4), "S2603C1");
    check_base_class_offset(lv, (S2603C2*), ABISELECT(8,4), "S2603C1");
    check_base_class_offset(lv, (S2603C4*), 0, "S2603C1");
    check_field_offset(lv, s2603c1f0, ABISELECT(16,8), "S2603C1.s2603c1f0");
    test_class_info(&lv, &cd_S2603C1);
    dp->~S2603C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2603C1(Test_S2603C1, "S2603C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S2603C1C1Ev();
extern void _ZN7S2603C1D1Ev();
Name_Map name_map_S2603C1[] = {
  NSPAIR(_ZN7S2603C1C1Ev),
  NSPAIR(_ZN7S2603C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3350C8_nt;
extern VTBL_ENTRY _ZTI10S3350C8_nt[];
extern Class_Descriptor cd_S2603C2;
extern VTBL_ENTRY _ZTI7S2603C2[];
extern Class_Descriptor cd_S2603C4;
extern VTBL_ENTRY _ZTI7S2603C4[];
extern  VTBL_ENTRY _ZTV7S2603C4[];
static Base_Class bases_S2603C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3350C8_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2603C2,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2603C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S2603C1[];
extern void _ZN7S2603C1D1Ev();
extern void _ZN7S2603C1D0Ev();
extern void _ZN7S2603C42v6Ev();
extern void _ZN7S2603C42v7Ev();
extern void _ZN7S2603C42v8Ev();
extern void _ZN7S2603C42v9Ev();
extern void _ZN7S2603C43v10Ev();
extern void _ZN7S2603C12v1Ev();
extern void _ZN7S2603C12v2Ev();
extern void _ZN7S2603C12v3Ev();
extern void _ZN7S2603C12v4Ev();
extern void _ZN7S2603C12v5Ev();
static  VTBL_ENTRY vtc_S2603C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2603C1[0]),
  (VTBL_ENTRY)&_ZN7S2603C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2603C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2603C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2603C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2603C42v8Ev,
  (VTBL_ENTRY)&_ZN7S2603C42v9Ev,
  (VTBL_ENTRY)&_ZN7S2603C43v10Ev,
  (VTBL_ENTRY)&_ZN7S2603C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2603C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2603C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2603C12v4Ev,
  (VTBL_ENTRY)&_ZN7S2603C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S2603C1[];
extern  VTBL_ENTRY _ZTV7S2603C1[];
Class_Descriptor cd_S2603C1 = {  "S2603C1", // class name
  bases_S2603C1, 3,
  &(vtc_S2603C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S2603C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2603C1),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10088C2  {
  virtual  ~S10088C2(); // _ZN8S10088C2D1Ev
  virtual void  v6(); // _ZN8S10088C22v6Ev
  virtual void  v7(); // _ZN8S10088C22v7Ev
  virtual void  v8(); // _ZN8S10088C22v8Ev
  virtual void  v9(); // _ZN8S10088C22v9Ev
  virtual void  v10(); // _ZN8S10088C23v10Ev
  S10088C2(); // tgen
};
//SIG(-1 S10088C2) C1{ vd v1 v2 v3 v4 v5}


 S10088C2 ::~S10088C2(){ note_dtor("S10088C2", this);}
void  S10088C2 ::v6(){vfunc_called(this, "_ZN8S10088C22v6Ev");}
void  S10088C2 ::v7(){vfunc_called(this, "_ZN8S10088C22v7Ev");}
void  S10088C2 ::v8(){vfunc_called(this, "_ZN8S10088C22v8Ev");}
void  S10088C2 ::v9(){vfunc_called(this, "_ZN8S10088C22v9Ev");}
void  S10088C2 ::v10(){vfunc_called(this, "_ZN8S10088C23v10Ev");}
S10088C2 ::S10088C2(){ note_ctor("S10088C2", this);} // tgen

static void Test_S10088C2()
{
  extern Class_Descriptor cd_S10088C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S10088C2, buf);
    S10088C2 *dp, &lv = *(dp=new (buf) S10088C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S10088C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10088C2)");
    test_class_info(&lv, &cd_S10088C2);
    dp->~S10088C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10088C2(Test_S10088C2, "S10088C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S10088C2C1Ev();
extern void _ZN8S10088C2D1Ev();
Name_Map name_map_S10088C2[] = {
  NSPAIR(_ZN8S10088C2C1Ev),
  NSPAIR(_ZN8S10088C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10088C2[];
extern void _ZN8S10088C2D1Ev();
extern void _ZN8S10088C2D0Ev();
extern void _ZN8S10088C22v6Ev();
extern void _ZN8S10088C22v7Ev();
extern void _ZN8S10088C22v8Ev();
extern void _ZN8S10088C22v9Ev();
extern void _ZN8S10088C23v10Ev();
static  VTBL_ENTRY vtc_S10088C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10088C2[0]),
  (VTBL_ENTRY)&_ZN8S10088C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10088C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10088C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10088C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10088C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10088C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10088C23v10Ev,
};
extern VTBL_ENTRY _ZTI8S10088C2[];
extern  VTBL_ENTRY _ZTV8S10088C2[];
Class_Descriptor cd_S10088C2 = {  "S10088C2", // class name
  0,0,//no base classes
  &(vtc_S10088C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S10088C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10088C2),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  S10088C1  : S10088C2 {
  void *s10088c1f0[23];
  char s10088c1f1;
  int s10088c1f2;
  virtual  ~S10088C1(); // _ZN8S10088C1D1Ev
  virtual void  v1(); // _ZN8S10088C12v1Ev
  virtual void  v2(); // _ZN8S10088C12v2Ev
  virtual void  v3(); // _ZN8S10088C12v3Ev
  virtual void  v4(); // _ZN8S10088C12v4Ev
  virtual void  v5(); // _ZN8S10088C12v5Ev
  S10088C1(); // tgen
};
//SIG(1 S10088C1) C1{ BC2{ vd v6 v7 v8 v9 v10} vd v1 v2 v3 v4 v5 Fp[23] Fc Fi}


 S10088C1 ::~S10088C1(){ note_dtor("S10088C1", this);}
void  S10088C1 ::v1(){vfunc_called(this, "_ZN8S10088C12v1Ev");}
void  S10088C1 ::v2(){vfunc_called(this, "_ZN8S10088C12v2Ev");}
void  S10088C1 ::v3(){vfunc_called(this, "_ZN8S10088C12v3Ev");}
void  S10088C1 ::v4(){vfunc_called(this, "_ZN8S10088C12v4Ev");}
void  S10088C1 ::v5(){vfunc_called(this, "_ZN8S10088C12v5Ev");}
S10088C1 ::S10088C1(){ note_ctor("S10088C1", this);} // tgen

static void Test_S10088C1()
{
  extern Class_Descriptor cd_S10088C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,27)];
    init_test(&cd_S10088C1, buf);
    S10088C1 *dp, &lv = *(dp=new (buf) S10088C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,104), "sizeof(S10088C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10088C1)");
    check_base_class_offset(lv, (S10088C2*), 0, "S10088C1");
    check_field_offset(lv, s10088c1f0, ABISELECT(8,4), "S10088C1.s10088c1f0");
    check_field_offset(lv, s10088c1f1, ABISELECT(192,96), "S10088C1.s10088c1f1");
    check_field_offset(lv, s10088c1f2, ABISELECT(196,100), "S10088C1.s10088c1f2");
    test_class_info(&lv, &cd_S10088C1);
    dp->~S10088C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10088C1(Test_S10088C1, "S10088C1", ABISELECT(200,104));

#else // __cplusplus

extern void _ZN8S10088C1C1Ev();
extern void _ZN8S10088C1D1Ev();
Name_Map name_map_S10088C1[] = {
  NSPAIR(_ZN8S10088C1C1Ev),
  NSPAIR(_ZN8S10088C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10088C2;
extern VTBL_ENTRY _ZTI8S10088C2[];
extern  VTBL_ENTRY _ZTV8S10088C2[];
static Base_Class bases_S10088C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10088C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S10088C1[];
extern void _ZN8S10088C1D1Ev();
extern void _ZN8S10088C1D0Ev();
extern void _ZN8S10088C22v6Ev();
extern void _ZN8S10088C22v7Ev();
extern void _ZN8S10088C22v8Ev();
extern void _ZN8S10088C22v9Ev();
extern void _ZN8S10088C23v10Ev();
extern void _ZN8S10088C12v1Ev();
extern void _ZN8S10088C12v2Ev();
extern void _ZN8S10088C12v3Ev();
extern void _ZN8S10088C12v4Ev();
extern void _ZN8S10088C12v5Ev();
static  VTBL_ENTRY vtc_S10088C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10088C1[0]),
  (VTBL_ENTRY)&_ZN8S10088C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10088C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10088C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10088C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10088C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10088C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10088C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10088C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10088C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10088C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10088C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10088C12v5Ev,
};
extern VTBL_ENTRY _ZTI8S10088C1[];
extern  VTBL_ENTRY _ZTV8S10088C1[];
Class_Descriptor cd_S10088C1 = {  "S10088C1", // class name
  bases_S10088C1, 1,
  &(vtc_S10088C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(200,104), // object size
  NSPAIRA(_ZTI8S10088C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10088C1),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3771C2  : S6282C14_nt {
  int s3771c2f0[6];
  char s3771c2f1[2];
  virtual  ~S3771C2(); // _ZN7S3771C2D1Ev
  S3771C2(); // tgen
};
//SIG(-1 S3771C2) C1{ BC2{ vd m Fi} vd Fi[6] Fc[2]}


 S3771C2 ::~S3771C2(){ note_dtor("S3771C2", this);}
S3771C2 ::S3771C2(){ note_ctor("S3771C2", this);} // tgen

static void Test_S3771C2()
{
  extern Class_Descriptor cd_S3771C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,10)];
    init_test(&cd_S3771C2, buf);
    S3771C2 *dp, &lv = *(dp=new (buf) S3771C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,36), "sizeof(S3771C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3771C2)");
    check_base_class_offset(lv, (S6282C14_nt*), 0, "S3771C2");
    check_field_offset(lv, s3771c2f0, ABISELECT(12,8), "S3771C2.s3771c2f0");
    check_field_offset(lv, s3771c2f1, ABISELECT(36,32), "S3771C2.s3771c2f1");
    test_class_info(&lv, &cd_S3771C2);
    dp->~S3771C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3771C2(Test_S3771C2, "S3771C2", ABISELECT(40,36));

#else // __cplusplus

extern void _ZN7S3771C2C1Ev();
extern void _ZN7S3771C2D1Ev();
Name_Map name_map_S3771C2[] = {
  NSPAIR(_ZN7S3771C2C1Ev),
  NSPAIR(_ZN7S3771C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6282C14_nt;
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
extern  VTBL_ENTRY _ZTV11S6282C14_nt[];
static Base_Class bases_S3771C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6282C14_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 _ZTI7S3771C2[];
extern void _ZN7S3771C2D1Ev();
extern void _ZN7S3771C2D0Ev();
static  VTBL_ENTRY vtc_S3771C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3771C2[0]),
  (VTBL_ENTRY)&_ZN7S3771C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3771C2D0Ev,
};
extern VTBL_ENTRY _ZTI7S3771C2[];
extern  VTBL_ENTRY _ZTV7S3771C2[];
Class_Descriptor cd_S3771C2 = {  "S3771C2", // class name
  bases_S3771C2, 1,
  &(vtc_S3771C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,36), // object size
  NSPAIRA(_ZTI7S3771C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3771C2),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3771C1  : S3771C2 {
  ::S2185C10_nt s3771c1f0;
  virtual  ~S3771C1(); // _ZN7S3771C1D1Ev
  S3771C1(); // tgen
};
//SIG(1 S3771C1) C1{ BC2{ BC3{ vd m Fi} vd Fi[6] Fc[2]} vd FC4{ m Fp Fi FC5{ m}}}


 S3771C1 ::~S3771C1(){ note_dtor("S3771C1", this);}
S3771C1 ::S3771C1(){ note_ctor("S3771C1", this);} // tgen

static void Test_S3771C1()
{
  extern Class_Descriptor cd_S3771C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,13)];
    init_test(&cd_S3771C1, buf);
    S3771C1 *dp, &lv = *(dp=new (buf) S3771C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,48), "sizeof(S3771C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3771C1)");
    check_base_class_offset(lv, (S6282C14_nt*)(S3771C2*), 0, "S3771C1");
    check_base_class_offset(lv, (S3771C2*), 0, "S3771C1");
    check_field_offset(lv, s3771c1f0, ABISELECT(40,36), "S3771C1.s3771c1f0");
    test_class_info(&lv, &cd_S3771C1);
    dp->~S3771C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3771C1(Test_S3771C1, "S3771C1", ABISELECT(56,48));

#else // __cplusplus

extern void _ZN7S3771C1C1Ev();
extern void _ZN7S3771C1D1Ev();
Name_Map name_map_S3771C1[] = {
  NSPAIR(_ZN7S3771C1C1Ev),
  NSPAIR(_ZN7S3771C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6282C14_nt;
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
extern  VTBL_ENTRY _ZTV11S6282C14_nt[];
extern Class_Descriptor cd_S3771C2;
extern VTBL_ENTRY _ZTI7S3771C2[];
extern  VTBL_ENTRY _ZTV7S3771C2[];
static Base_Class bases_S3771C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6282C14_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_S3771C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3771C1[];
extern void _ZN7S3771C1D1Ev();
extern void _ZN7S3771C1D0Ev();
static  VTBL_ENTRY vtc_S3771C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3771C1[0]),
  (VTBL_ENTRY)&_ZN7S3771C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3771C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S3771C1[];
extern  VTBL_ENTRY _ZTV7S3771C1[];
Class_Descriptor cd_S3771C1 = {  "S3771C1", // class name
  bases_S3771C1, 2,
  &(vtc_S3771C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,48), // object size
  NSPAIRA(_ZTI7S3771C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3771C1),4, //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  S10083C2  {
  virtual  ~S10083C2(); // _ZN8S10083C2D1Ev
  virtual void  v6(); // _ZN8S10083C22v6Ev
  virtual void  v7(); // _ZN8S10083C22v7Ev
  virtual void  v8(); // _ZN8S10083C22v8Ev
  virtual void  v9(); // _ZN8S10083C22v9Ev
  virtual void  v10(); // _ZN8S10083C23v10Ev
  S10083C2(); // tgen
};
//SIG(-1 S10083C2) C1{ vd v1 v2 v3 v4 v5}


 S10083C2 ::~S10083C2(){ note_dtor("S10083C2", this);}
void  S10083C2 ::v6(){vfunc_called(this, "_ZN8S10083C22v6Ev");}
void  S10083C2 ::v7(){vfunc_called(this, "_ZN8S10083C22v7Ev");}
void  S10083C2 ::v8(){vfunc_called(this, "_ZN8S10083C22v8Ev");}
void  S10083C2 ::v9(){vfunc_called(this, "_ZN8S10083C22v9Ev");}
void  S10083C2 ::v10(){vfunc_called(this, "_ZN8S10083C23v10Ev");}
S10083C2 ::S10083C2(){ note_ctor("S10083C2", this);} // tgen

static void Test_S10083C2()
{
  extern Class_Descriptor cd_S10083C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S10083C2, buf);
    S10083C2 *dp, &lv = *(dp=new (buf) S10083C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S10083C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10083C2)");
    test_class_info(&lv, &cd_S10083C2);
    dp->~S10083C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10083C2(Test_S10083C2, "S10083C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S10083C2C1Ev();
extern void _ZN8S10083C2D1Ev();
Name_Map name_map_S10083C2[] = {
  NSPAIR(_ZN8S10083C2C1Ev),
  NSPAIR(_ZN8S10083C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10083C2[];
extern void _ZN8S10083C2D1Ev();
extern void _ZN8S10083C2D0Ev();
extern void _ZN8S10083C22v6Ev();
extern void _ZN8S10083C22v7Ev();
extern void _ZN8S10083C22v8Ev();
extern void _ZN8S10083C22v9Ev();
extern void _ZN8S10083C23v10Ev();
static  VTBL_ENTRY vtc_S10083C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10083C2[0]),
  (VTBL_ENTRY)&_ZN8S10083C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10083C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10083C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10083C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10083C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10083C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10083C23v10Ev,
};
extern VTBL_ENTRY _ZTI8S10083C2[];
extern  VTBL_ENTRY _ZTV8S10083C2[];
Class_Descriptor cd_S10083C2 = {  "S10083C2", // class name
  0,0,//no base classes
  &(vtc_S10083C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S10083C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10083C2),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  S10083C1  : S10083C2 {
  ::S21811C13_nt s10083c1f0;
  int s10083c1f1;
  virtual  ~S10083C1(); // _ZN8S10083C1D1Ev
  virtual void  v1(); // _ZN8S10083C12v1Ev
  virtual void  v2(); // _ZN8S10083C12v2Ev
  virtual void  v3(); // _ZN8S10083C12v3Ev
  virtual void  v4(); // _ZN8S10083C12v4Ev
  virtual void  v5(); // _ZN8S10083C12v5Ev
  S10083C1(); // tgen
};
//SIG(1 S10083C1) C1{ BC2{ vd v6 v7 v8 v9 v10} vd v1 v2 v3 v4 v5 FC3{ m Fp} Fi}


 S10083C1 ::~S10083C1(){ note_dtor("S10083C1", this);}
void  S10083C1 ::v1(){vfunc_called(this, "_ZN8S10083C12v1Ev");}
void  S10083C1 ::v2(){vfunc_called(this, "_ZN8S10083C12v2Ev");}
void  S10083C1 ::v3(){vfunc_called(this, "_ZN8S10083C12v3Ev");}
void  S10083C1 ::v4(){vfunc_called(this, "_ZN8S10083C12v4Ev");}
void  S10083C1 ::v5(){vfunc_called(this, "_ZN8S10083C12v5Ev");}
S10083C1 ::S10083C1(){ note_ctor("S10083C1", this);} // tgen

static void Test_S10083C1()
{
  extern Class_Descriptor cd_S10083C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S10083C1, buf);
    S10083C1 *dp, &lv = *(dp=new (buf) S10083C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S10083C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10083C1)");
    check_base_class_offset(lv, (S10083C2*), 0, "S10083C1");
    check_field_offset(lv, s10083c1f0, ABISELECT(8,4), "S10083C1.s10083c1f0");
    check_field_offset(lv, s10083c1f1, ABISELECT(16,8), "S10083C1.s10083c1f1");
    test_class_info(&lv, &cd_S10083C1);
    dp->~S10083C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10083C1(Test_S10083C1, "S10083C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S10083C1C1Ev();
extern void _ZN8S10083C1D1Ev();
Name_Map name_map_S10083C1[] = {
  NSPAIR(_ZN8S10083C1C1Ev),
  NSPAIR(_ZN8S10083C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10083C2;
extern VTBL_ENTRY _ZTI8S10083C2[];
extern  VTBL_ENTRY _ZTV8S10083C2[];
static Base_Class bases_S10083C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10083C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S10083C1[];
extern void _ZN8S10083C1D1Ev();
extern void _ZN8S10083C1D0Ev();
extern void _ZN8S10083C22v6Ev();
extern void _ZN8S10083C22v7Ev();
extern void _ZN8S10083C22v8Ev();
extern void _ZN8S10083C22v9Ev();
extern void _ZN8S10083C23v10Ev();
extern void _ZN8S10083C12v1Ev();
extern void _ZN8S10083C12v2Ev();
extern void _ZN8S10083C12v3Ev();
extern void _ZN8S10083C12v4Ev();
extern void _ZN8S10083C12v5Ev();
static  VTBL_ENTRY vtc_S10083C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10083C1[0]),
  (VTBL_ENTRY)&_ZN8S10083C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10083C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10083C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10083C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10083C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10083C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10083C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10083C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10083C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10083C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10083C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10083C12v5Ev,
};
extern VTBL_ENTRY _ZTI8S10083C1[];
extern  VTBL_ENTRY _ZTV8S10083C1[];
Class_Descriptor cd_S10083C1 = {  "S10083C1", // class name
  bases_S10083C1, 1,
  &(vtc_S10083C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S10083C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10083C1),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  S9937C2  {
  virtual  ~S9937C2(); // _ZN7S9937C2D1Ev
  virtual void  v5(); // _ZN7S9937C22v5Ev
  virtual void  v6(); // _ZN7S9937C22v6Ev
  virtual void  v7(); // _ZN7S9937C22v7Ev
  virtual void  v8(); // _ZN7S9937C22v8Ev
  virtual void  v9(); // _ZN7S9937C22v9Ev
  S9937C2(); // tgen
};
//SIG(-1 S9937C2) C1{ vd v1 v2 v3 v4 v5}


 S9937C2 ::~S9937C2(){ note_dtor("S9937C2", this);}
void  S9937C2 ::v5(){vfunc_called(this, "_ZN7S9937C22v5Ev");}
void  S9937C2 ::v6(){vfunc_called(this, "_ZN7S9937C22v6Ev");}
void  S9937C2 ::v7(){vfunc_called(this, "_ZN7S9937C22v7Ev");}
void  S9937C2 ::v8(){vfunc_called(this, "_ZN7S9937C22v8Ev");}
void  S9937C2 ::v9(){vfunc_called(this, "_ZN7S9937C22v9Ev");}
S9937C2 ::S9937C2(){ note_ctor("S9937C2", this);} // tgen

static void Test_S9937C2()
{
  extern Class_Descriptor cd_S9937C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9937C2, buf);
    S9937C2 *dp, &lv = *(dp=new (buf) S9937C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9937C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9937C2)");
    test_class_info(&lv, &cd_S9937C2);
    dp->~S9937C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9937C2(Test_S9937C2, "S9937C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9937C2C1Ev();
extern void _ZN7S9937C2D1Ev();
Name_Map name_map_S9937C2[] = {
  NSPAIR(_ZN7S9937C2C1Ev),
  NSPAIR(_ZN7S9937C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9937C2[];
extern void _ZN7S9937C2D1Ev();
extern void _ZN7S9937C2D0Ev();
extern void _ZN7S9937C22v5Ev();
extern void _ZN7S9937C22v6Ev();
extern void _ZN7S9937C22v7Ev();
extern void _ZN7S9937C22v8Ev();
extern void _ZN7S9937C22v9Ev();
static  VTBL_ENTRY vtc_S9937C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9937C2[0]),
  (VTBL_ENTRY)&_ZN7S9937C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9937C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9937C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9937C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9937C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9937C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9937C22v9Ev,
};
extern VTBL_ENTRY _ZTI7S9937C2[];
extern  VTBL_ENTRY _ZTV7S9937C2[];
Class_Descriptor cd_S9937C2 = {  "S9937C2", // class name
  0,0,//no base classes
  &(vtc_S9937C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9937C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9937C2),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  S9937C1  : S9937C2 {
  int s9937c1f0[2];
  ::S3350C4_nt s9937c1f1;
  virtual void  v1(); // _ZN7S9937C12v1Ev
  virtual void  v2(); // _ZN7S9937C12v2Ev
  virtual void  v3(); // _ZN7S9937C12v3Ev
  virtual void  v4(); // _ZN7S9937C12v4Ev
  ~S9937C1(); // tgen
  S9937C1(); // tgen
};
//SIG(1 S9937C1) C1{ BC2{ vd v5 v6 v7 v8 v9} v1 v2 v3 v4 Fi[2] FC3{ m Fi[2]}}


void  S9937C1 ::v1(){vfunc_called(this, "_ZN7S9937C12v1Ev");}
void  S9937C1 ::v2(){vfunc_called(this, "_ZN7S9937C12v2Ev");}
void  S9937C1 ::v3(){vfunc_called(this, "_ZN7S9937C12v3Ev");}
void  S9937C1 ::v4(){vfunc_called(this, "_ZN7S9937C12v4Ev");}
S9937C1 ::~S9937C1(){ note_dtor("S9937C1", this);} // tgen
S9937C1 ::S9937C1(){ note_ctor("S9937C1", this);} // tgen

static void Test_S9937C1()
{
  extern Class_Descriptor cd_S9937C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,6)];
    init_test(&cd_S9937C1, buf);
    S9937C1 *dp, &lv = *(dp=new (buf) S9937C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S9937C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9937C1)");
    check_base_class_offset(lv, (S9937C2*), 0, "S9937C1");
    check_field_offset(lv, s9937c1f0, ABISELECT(8,4), "S9937C1.s9937c1f0");
    check_field_offset(lv, s9937c1f1, ABISELECT(16,12), "S9937C1.s9937c1f1");
    test_class_info(&lv, &cd_S9937C1);
    dp->~S9937C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9937C1(Test_S9937C1, "S9937C1", ABISELECT(24,20));

#else // __cplusplus

extern void _ZN7S9937C1C1Ev();
extern void _ZN7S9937C1D1Ev();
Name_Map name_map_S9937C1[] = {
  NSPAIR(_ZN7S9937C1C1Ev),
  NSPAIR(_ZN7S9937C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9937C2;
extern VTBL_ENTRY _ZTI7S9937C2[];
extern  VTBL_ENTRY _ZTV7S9937C2[];
static Base_Class bases_S9937C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9937C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S9937C1[];
extern void _ZN7S9937C1D1Ev();
extern void _ZN7S9937C1D0Ev();
extern void _ZN7S9937C22v5Ev();
extern void _ZN7S9937C22v6Ev();
extern void _ZN7S9937C22v7Ev();
extern void _ZN7S9937C22v8Ev();
extern void _ZN7S9937C22v9Ev();
extern void _ZN7S9937C12v1Ev();
extern void _ZN7S9937C12v2Ev();
extern void _ZN7S9937C12v3Ev();
extern void _ZN7S9937C12v4Ev();
static  VTBL_ENTRY vtc_S9937C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9937C1[0]),
  (VTBL_ENTRY)&_ZN7S9937C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9937C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9937C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9937C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9937C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9937C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9937C22v9Ev,
  (VTBL_ENTRY)&_ZN7S9937C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9937C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9937C12v3Ev,
  (VTBL_ENTRY)&_ZN7S9937C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S9937C1[];
extern  VTBL_ENTRY _ZTV7S9937C1[];
Class_Descriptor cd_S9937C1 = {  "S9937C1", // class name
  bases_S9937C1, 1,
  &(vtc_S9937C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,20), // object size
  NSPAIRA(_ZTI7S9937C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9937C1),13, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7286C6  {
  virtual void  v1(); // _ZN7S7286C62v1Ev
  ~S7286C6(); // tgen
  S7286C6(); // tgen
};
//SIG(-1 S7286C6) C1{ v1}


void  S7286C6 ::v1(){vfunc_called(this, "_ZN7S7286C62v1Ev");}
S7286C6 ::~S7286C6(){ note_dtor("S7286C6", this);} // tgen
S7286C6 ::S7286C6(){ note_ctor("S7286C6", this);} // tgen

static void Test_S7286C6()
{
  extern Class_Descriptor cd_S7286C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7286C6, buf);
    S7286C6 *dp, &lv = *(dp=new (buf) S7286C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7286C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7286C6)");
    test_class_info(&lv, &cd_S7286C6);
    dp->~S7286C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7286C6(Test_S7286C6, "S7286C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7286C6C1Ev();
extern void _ZN7S7286C6D1Ev();
Name_Map name_map_S7286C6[] = {
  NSPAIR(_ZN7S7286C6C1Ev),
  NSPAIR(_ZN7S7286C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7286C6[];
extern void _ZN7S7286C62v1Ev();
static  VTBL_ENTRY vtc_S7286C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7286C6[0]),
  (VTBL_ENTRY)&_ZN7S7286C62v1Ev,
};
extern VTBL_ENTRY _ZTI7S7286C6[];
extern  VTBL_ENTRY _ZTV7S7286C6[];
Class_Descriptor cd_S7286C6 = {  "S7286C6", // class name
  0,0,//no base classes
  &(vtc_S7286C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7286C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7286C6),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  S7286C5  : virtual S2121C38 , S7286C6 , virtual S2121C28 {
  ~S7286C5(); // tgen
  S7286C5(); // tgen
};
//SIG(-1 S7286C5) C1{ VBC2{ m} BC3{ v1} VBC4{ m}}


S7286C5 ::~S7286C5(){ note_dtor("S7286C5", this);} // tgen
S7286C5 ::S7286C5(){ note_ctor("S7286C5", this);} // tgen

static void Test_S7286C5()
{
  extern Class_Descriptor cd_S7286C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7286C5, buf);
    S7286C5 *dp, &lv = *(dp=new (buf) S7286C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7286C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7286C5)");
    check_base_class_offset(lv, (S2121C38*), 0, "S7286C5");
    check_base_class_offset(lv, (S7286C6*), 0, "S7286C5");
    check_base_class_offset(lv, (S2121C28*), 0, "S7286C5");
    test_class_info(&lv, &cd_S7286C5);
    dp->~S7286C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7286C5(Test_S7286C5, "S7286C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7286C5C1Ev();
extern void _ZN7S7286C5D1Ev();
Name_Map name_map_S7286C5[] = {
  NSPAIR(_ZN7S7286C5C1Ev),
  NSPAIR(_ZN7S7286C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S7286C6;
extern VTBL_ENTRY _ZTI7S7286C6[];
extern  VTBL_ENTRY _ZTV7S7286C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
static Base_Class bases_S7286C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S7286C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S7286C5[];
extern void _ZN7S7286C62v1Ev();
static  VTBL_ENTRY vtc_S7286C5[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7286C5[0]),
  (VTBL_ENTRY)&_ZN7S7286C62v1Ev,
};
extern VTBL_ENTRY _ZTV7S7286C5[];
static  VTT_ENTRY vtt_S7286C5[] = {
  {&(_ZTV7S7286C5[4]),  4,5},
};
extern VTBL_ENTRY _ZTI7S7286C5[];
extern  VTBL_ENTRY _ZTV7S7286C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7286C5[];
Class_Descriptor cd_S7286C5 = {  "S7286C5", // class name
  bases_S7286C5, 3,
  &(vtc_S7286C5[0]), // expected_vtbl_contents
  &(vtt_S7286C5[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7286C5),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7286C5),5, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7286C5),1, //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  S7286C3  : S2121C38 , S7286C5 {
  virtual void  v2(); // _ZN7S7286C32v2Ev
  ~S7286C3(); // tgen
  S7286C3(); // tgen
};
//SIG(-1 S7286C3) C1{ BC2{ m} BC3{ VBC2 BC4{ v2} VBC5{ m}} v1}


void  S7286C3 ::v2(){vfunc_called(this, "_ZN7S7286C32v2Ev");}
S7286C3 ::~S7286C3(){ note_dtor("S7286C3", this);} // tgen
S7286C3 ::S7286C3(){ note_ctor("S7286C3", this);} // tgen

static void Test_S7286C3()
{
  extern Class_Descriptor cd_S7286C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7286C3, buf);
    S7286C3 *dp, &lv = *(dp=new (buf) S7286C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7286C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7286C3)");
    /*is_ambiguous_... S7286C3::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*), 0, "S7286C3");
    check_base_class_offset(lv, (S2121C38*)(S7286C5*), ABISELECT(8,4), "S7286C3");
    check_base_class_offset(lv, (S7286C6*)(S7286C5*), 0, "S7286C3");
    check_base_class_offset(lv, (S2121C28*)(S7286C5*), 0, "S7286C3");
    check_base_class_offset(lv, (S7286C5*), 0, "S7286C3");
    test_class_info(&lv, &cd_S7286C3);
    dp->~S7286C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7286C3(Test_S7286C3, "S7286C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7286C3C1Ev();
extern void _ZN7S7286C3D1Ev();
Name_Map name_map_S7286C3[] = {
  NSPAIR(_ZN7S7286C3C1Ev),
  NSPAIR(_ZN7S7286C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S7286C6;
extern VTBL_ENTRY _ZTI7S7286C6[];
extern  VTBL_ENTRY _ZTV7S7286C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S7286C5;
extern VTBL_ENTRY _ZTI7S7286C5[];
extern  VTBL_ENTRY _ZTV7S7286C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7286C5[];
static Base_Class bases_S7286C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2121C38,    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, 1},
  {&cd_S7286C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7286C5,    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 _ZTI7S7286C3[];
extern void _ZN7S7286C62v1Ev();
extern void _ZN7S7286C32v2Ev();
static  VTBL_ENTRY vtc_S7286C3[] = {
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7286C3[0]),
  (VTBL_ENTRY)&_ZN7S7286C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7286C32v2Ev,
};
extern VTBL_ENTRY _ZTV7S7286C3[];
extern void _ZN7S7286C62v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7286C5__7S7286C3[] = {
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7286C5[0]),
  (VTBL_ENTRY)&_ZN7S7286C62v1Ev,
};
static  VTT_ENTRY vtt_S7286C3[] = {
  {&(_ZTV7S7286C3[4]),  4,6},
  {&(_tg__ZTV7S7286C5__7S7286C3[4]),  4,5},
};
extern VTBL_ENTRY _ZTI7S7286C3[];
extern  VTBL_ENTRY _ZTV7S7286C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7286C3[];
Class_Descriptor cd_S7286C3 = {  "S7286C3", // class name
  bases_S7286C3, 5,
  &(vtc_S7286C3[0]), // expected_vtbl_contents
  &(vtt_S7286C3[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7286C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7286C3),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7286C3),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  S7286C2  : virtual S7286C3 {
  int s7286c2f0;
  ~S7286C2(); // tgen
  S7286C2(); // tgen
};
//SIG(-1 S7286C2) C1{ VBC2{ BC3{ m} BC4{ VBC3 BC5{ v1} VBC6{ m}} v2} Fi}


S7286C2 ::~S7286C2(){ note_dtor("S7286C2", this);} // tgen
S7286C2 ::S7286C2(){ note_ctor("S7286C2", this);} // tgen

static void Test_S7286C2()
{
  extern Class_Descriptor cd_S7286C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S7286C2, buf);
    S7286C2 *dp, &lv = *(dp=new (buf) S7286C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S7286C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7286C2)");
    /*is_ambiguous_... S7286C3::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S7286C3*), 0, "S7286C2");
    check_base_class_offset(lv, (S2121C38*)(S7286C5*)(S7286C3*), ABISELECT(12,8), "S7286C2");
    check_base_class_offset(lv, (S7286C6*)(S7286C5*)(S7286C3*), 0, "S7286C2");
    check_base_class_offset(lv, (S2121C28*)(S7286C5*)(S7286C3*), 0, "S7286C2");
    check_base_class_offset(lv, (S7286C5*)(S7286C3*), 0, "S7286C2");
    check_base_class_offset(lv, (S7286C3*), 0, "S7286C2");
    check_field_offset(lv, s7286c2f0, ABISELECT(8,4), "S7286C2.s7286c2f0");
    test_class_info(&lv, &cd_S7286C2);
    dp->~S7286C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7286C2(Test_S7286C2, "S7286C2", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S7286C2C1Ev();
extern void _ZN7S7286C2D1Ev();
Name_Map name_map_S7286C2[] = {
  NSPAIR(_ZN7S7286C2C1Ev),
  NSPAIR(_ZN7S7286C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S7286C6;
extern VTBL_ENTRY _ZTI7S7286C6[];
extern  VTBL_ENTRY _ZTV7S7286C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S7286C5;
extern VTBL_ENTRY _ZTI7S7286C5[];
extern  VTBL_ENTRY _ZTV7S7286C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7286C5[];
extern Class_Descriptor cd_S7286C3;
extern VTBL_ENTRY _ZTI7S7286C3[];
extern  VTBL_ENTRY _ZTV7S7286C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7286C3[];
static Base_Class bases_S7286C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2121C38,    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
    4, //immediately_derived
  0, 1},
  {&cd_S7286C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7286C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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
    5, //immediately_derived
  0, 0},
  {&cd_S7286C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //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 _ZTI7S7286C2[];
extern void _ZN7S7286C62v1Ev();
extern void _ZN7S7286C32v2Ev();
static  VTBL_ENTRY vtc_S7286C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7286C2[0]),
  (VTBL_ENTRY)&_ZN7S7286C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7286C32v2Ev,
};
extern VTBL_ENTRY _ZTV7S7286C2[];
extern void _ZN7S7286C62v1Ev();
extern void _ZN7S7286C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7286C3__7S7286C2[] = {
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7286C3[0]),
  (VTBL_ENTRY)&_ZN7S7286C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7286C32v2Ev,
};
extern void _ZN7S7286C62v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7286C57S7286C3__7S7286C2[] = {
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7286C5[0]),
  (VTBL_ENTRY)&_ZN7S7286C62v1Ev,
};
static  VTT_ENTRY vtt_S7286C2[] = {
  {&(_ZTV7S7286C2[7]),  7,9},
  {&(_ZTV7S7286C2[7]),  7,9},
  {&(_tg__ZTV7S7286C3__7S7286C2[4]),  4,6},
  {&(_tg__ZTV7S7286C57S7286C3__7S7286C2[4]),  4,5},
};
extern VTBL_ENTRY _ZTI7S7286C2[];
extern  VTBL_ENTRY _ZTV7S7286C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7286C2[];
Class_Descriptor cd_S7286C2 = {  "S7286C2", // class name
  bases_S7286C2, 6,
  &(vtc_S7286C2[0]), // expected_vtbl_contents
  &(vtt_S7286C2[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S7286C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7286C2),9, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7286C2),4, //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  S7286C1  : S7286C2 , S2121C24 {
  ~S7286C1(); // tgen
  S7286C1(); // tgen
};
//SIG(1 S7286C1) C1{ BC2{ VBC3{ BC4{ m} BC5{ VBC4 BC6{ v1} VBC7{ m}} v2} Fi} BC8{ m}}


S7286C1 ::~S7286C1(){ note_dtor("S7286C1", this);} // tgen
S7286C1 ::S7286C1(){ note_ctor("S7286C1", this);} // tgen

static void Test_S7286C1()
{
  extern Class_Descriptor cd_S7286C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S7286C1, buf);
    S7286C1 *dp, &lv = *(dp=new (buf) S7286C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S7286C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7286C1)");
    /*is_ambiguous_... S7286C3::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S7286C3*), 0, "S7286C1");
    check_base_class_offset(lv, (S2121C38*)(S7286C5*)(S7286C3*), ABISELECT(12,8), "S7286C1");
    check_base_class_offset(lv, (S7286C6*)(S7286C5*)(S7286C3*), 0, "S7286C1");
    check_base_class_offset(lv, (S2121C28*)(S7286C5*)(S7286C3*), 0, "S7286C1");
    check_base_class_offset(lv, (S7286C5*)(S7286C3*), 0, "S7286C1");
    check_base_class_offset(lv, (S7286C3*)(S7286C2*), 0, "S7286C1");
    check_base_class_offset(lv, (S7286C2*), 0, "S7286C1");
    check_base_class_offset(lv, (S2121C24*), 0, "S7286C1");
    test_class_info(&lv, &cd_S7286C1);
    dp->~S7286C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7286C1(Test_S7286C1, "S7286C1", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S7286C1C1Ev();
extern void _ZN7S7286C1D1Ev();
Name_Map name_map_S7286C1[] = {
  NSPAIR(_ZN7S7286C1C1Ev),
  NSPAIR(_ZN7S7286C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S7286C6;
extern VTBL_ENTRY _ZTI7S7286C6[];
extern  VTBL_ENTRY _ZTV7S7286C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S7286C5;
extern VTBL_ENTRY _ZTI7S7286C5[];
extern  VTBL_ENTRY _ZTV7S7286C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7286C5[];
extern Class_Descriptor cd_S7286C3;
extern VTBL_ENTRY _ZTI7S7286C3[];
extern  VTBL_ENTRY _ZTV7S7286C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7286C3[];
extern Class_Descriptor cd_S7286C2;
extern VTBL_ENTRY _ZTI7S7286C2[];
extern  VTBL_ENTRY _ZTV7S7286C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7286C2[];
extern Class_Descriptor cd_S2121C24;
extern VTBL_ENTRY _ZTI8S2121C24[];
static Base_Class bases_S7286C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2121C38,    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
    4, //immediately_derived
  0, 1},
  {&cd_S7286C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7286C5,    0, //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
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7286C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7286C2,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S7286C1[];
extern void _ZN7S7286C62v1Ev();
extern void _ZN7S7286C32v2Ev();
static  VTBL_ENTRY vtc_S7286C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7286C1[0]),
  (VTBL_ENTRY)&_ZN7S7286C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7286C32v2Ev,
};
extern VTBL_ENTRY _ZTV7S7286C1[];
extern void _ZN7S7286C62v1Ev();
extern void _ZN7S7286C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7286C2__7S7286C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7286C2[0]),
  (VTBL_ENTRY)&_ZN7S7286C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7286C32v2Ev,
};
extern void _ZN7S7286C62v1Ev();
extern void _ZN7S7286C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7286C3__7S7286C1[] = {
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7286C3[0]),
  (VTBL_ENTRY)&_ZN7S7286C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7286C32v2Ev,
};
extern void _ZN7S7286C62v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7286C57S7286C3__7S7286C1[] = {
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7286C5[0]),
  (VTBL_ENTRY)&_ZN7S7286C62v1Ev,
};
static  VTT_ENTRY vtt_S7286C1[] = {
  {&(_ZTV7S7286C1[7]),  7,9},
  {&(_tg__ZTV7S7286C2__7S7286C1[7]),  7,9},
  {&(_tg__ZTV7S7286C2__7S7286C1[7]),  7,9},
  {&(_ZTV7S7286C1[7]),  7,9},
  {&(_tg__ZTV7S7286C3__7S7286C1[4]),  4,6},
  {&(_tg__ZTV7S7286C57S7286C3__7S7286C1[4]),  4,5},
};
extern VTBL_ENTRY _ZTI7S7286C1[];
extern  VTBL_ENTRY _ZTV7S7286C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7286C1[];
Class_Descriptor cd_S7286C1 = {  "S7286C1", // class name
  bases_S7286C1, 8,
  &(vtc_S7286C1[0]), // expected_vtbl_contents
  &(vtt_S7286C1[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S7286C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7286C1),9, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7286C1),6, //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  S10251C2  {
  virtual  ~S10251C2(); // _ZN8S10251C2D1Ev
  virtual void  v8(); // _ZN8S10251C22v8Ev
  virtual void  v9(); // _ZN8S10251C22v9Ev
  virtual void  v10(); // _ZN8S10251C23v10Ev
  virtual void  v11(); // _ZN8S10251C23v11Ev
  virtual void  v12(); // _ZN8S10251C23v12Ev
  S10251C2(); // tgen
};
//SIG(-1 S10251C2) C1{ vd v1 v2 v3 v4 v5}


 S10251C2 ::~S10251C2(){ note_dtor("S10251C2", this);}
void  S10251C2 ::v8(){vfunc_called(this, "_ZN8S10251C22v8Ev");}
void  S10251C2 ::v9(){vfunc_called(this, "_ZN8S10251C22v9Ev");}
void  S10251C2 ::v10(){vfunc_called(this, "_ZN8S10251C23v10Ev");}
void  S10251C2 ::v11(){vfunc_called(this, "_ZN8S10251C23v11Ev");}
void  S10251C2 ::v12(){vfunc_called(this, "_ZN8S10251C23v12Ev");}
S10251C2 ::S10251C2(){ note_ctor("S10251C2", this);} // tgen

static void Test_S10251C2()
{
  extern Class_Descriptor cd_S10251C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S10251C2, buf);
    S10251C2 *dp, &lv = *(dp=new (buf) S10251C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S10251C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10251C2)");
    test_class_info(&lv, &cd_S10251C2);
    dp->~S10251C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10251C2(Test_S10251C2, "S10251C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S10251C2C1Ev();
extern void _ZN8S10251C2D1Ev();
Name_Map name_map_S10251C2[] = {
  NSPAIR(_ZN8S10251C2C1Ev),
  NSPAIR(_ZN8S10251C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10251C2[];
extern void _ZN8S10251C2D1Ev();
extern void _ZN8S10251C2D0Ev();
extern void _ZN8S10251C22v8Ev();
extern void _ZN8S10251C22v9Ev();
extern void _ZN8S10251C23v10Ev();
extern void _ZN8S10251C23v11Ev();
extern void _ZN8S10251C23v12Ev();
static  VTBL_ENTRY vtc_S10251C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10251C2[0]),
  (VTBL_ENTRY)&_ZN8S10251C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10251C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10251C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10251C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10251C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10251C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10251C23v12Ev,
};
extern VTBL_ENTRY _ZTI8S10251C2[];
extern  VTBL_ENTRY _ZTV8S10251C2[];
Class_Descriptor cd_S10251C2 = {  "S10251C2", // class name
  0,0,//no base classes
  &(vtc_S10251C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S10251C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10251C2),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  S10251C1  : S10251C2 {
  void *s10251c1f0;
  virtual  ~S10251C1(); // _ZN8S10251C1D1Ev
  virtual void  v1(); // _ZN8S10251C12v1Ev
  virtual void  v2(); // _ZN8S10251C12v2Ev
  virtual void  v3(); // _ZN8S10251C12v3Ev
  virtual void  v4(); // _ZN8S10251C12v4Ev
  virtual void  v5(); // _ZN8S10251C12v5Ev
  virtual void  v6(); // _ZN8S10251C12v6Ev
  virtual void  v7(); // _ZN8S10251C12v7Ev
  S10251C1(); // tgen
};
//SIG(1 S10251C1) C1{ BC2{ vd v8 v9 v10 v11 v12} vd v1 v2 v3 v4 v5 v6 v7 Fp}


 S10251C1 ::~S10251C1(){ note_dtor("S10251C1", this);}
void  S10251C1 ::v1(){vfunc_called(this, "_ZN8S10251C12v1Ev");}
void  S10251C1 ::v2(){vfunc_called(this, "_ZN8S10251C12v2Ev");}
void  S10251C1 ::v3(){vfunc_called(this, "_ZN8S10251C12v3Ev");}
void  S10251C1 ::v4(){vfunc_called(this, "_ZN8S10251C12v4Ev");}
void  S10251C1 ::v5(){vfunc_called(this, "_ZN8S10251C12v5Ev");}
void  S10251C1 ::v6(){vfunc_called(this, "_ZN8S10251C12v6Ev");}
void  S10251C1 ::v7(){vfunc_called(this, "_ZN8S10251C12v7Ev");}
S10251C1 ::S10251C1(){ note_ctor("S10251C1", this);} // tgen

static void Test_S10251C1()
{
  extern Class_Descriptor cd_S10251C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S10251C1, buf);
    S10251C1 *dp, &lv = *(dp=new (buf) S10251C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S10251C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10251C1)");
    check_base_class_offset(lv, (S10251C2*), 0, "S10251C1");
    check_field_offset(lv, s10251c1f0, ABISELECT(8,4), "S10251C1.s10251c1f0");
    test_class_info(&lv, &cd_S10251C1);
    dp->~S10251C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10251C1(Test_S10251C1, "S10251C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S10251C1C1Ev();
extern void _ZN8S10251C1D1Ev();
Name_Map name_map_S10251C1[] = {
  NSPAIR(_ZN8S10251C1C1Ev),
  NSPAIR(_ZN8S10251C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10251C2;
extern VTBL_ENTRY _ZTI8S10251C2[];
extern  VTBL_ENTRY _ZTV8S10251C2[];
static Base_Class bases_S10251C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10251C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S10251C1[];
extern void _ZN8S10251C1D1Ev();
extern void _ZN8S10251C1D0Ev();
extern void _ZN8S10251C22v8Ev();
extern void _ZN8S10251C22v9Ev();
extern void _ZN8S10251C23v10Ev();
extern void _ZN8S10251C23v11Ev();
extern void _ZN8S10251C23v12Ev();
extern void _ZN8S10251C12v1Ev();
extern void _ZN8S10251C12v2Ev();
extern void _ZN8S10251C12v3Ev();
extern void _ZN8S10251C12v4Ev();
extern void _ZN8S10251C12v5Ev();
extern void _ZN8S10251C12v6Ev();
extern void _ZN8S10251C12v7Ev();
static  VTBL_ENTRY vtc_S10251C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10251C1[0]),
  (VTBL_ENTRY)&_ZN8S10251C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10251C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10251C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10251C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10251C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10251C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10251C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10251C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10251C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10251C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10251C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10251C12v5Ev,
  (VTBL_ENTRY)&_ZN8S10251C12v6Ev,
  (VTBL_ENTRY)&_ZN8S10251C12v7Ev,
};
extern VTBL_ENTRY _ZTI8S10251C1[];
extern  VTBL_ENTRY _ZTV8S10251C1[];
Class_Descriptor cd_S10251C1 = {  "S10251C1", // class name
  bases_S10251C1, 1,
  &(vtc_S10251C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S10251C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10251C1),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  S9511C2  {
  virtual  ~S9511C2(); // _ZN7S9511C2D1Ev
  virtual void  v3(); // _ZN7S9511C22v3Ev
  virtual void  v4(); // _ZN7S9511C22v4Ev
  virtual void  v5(); // _ZN7S9511C22v5Ev
  virtual void  v6(); // _ZN7S9511C22v6Ev
  virtual void  v7(); // _ZN7S9511C22v7Ev
  S9511C2(); // tgen
};
//SIG(-1 S9511C2) C1{ vd v1 v2 v3 v4 v5}


 S9511C2 ::~S9511C2(){ note_dtor("S9511C2", this);}
void  S9511C2 ::v3(){vfunc_called(this, "_ZN7S9511C22v3Ev");}
void  S9511C2 ::v4(){vfunc_called(this, "_ZN7S9511C22v4Ev");}
void  S9511C2 ::v5(){vfunc_called(this, "_ZN7S9511C22v5Ev");}
void  S9511C2 ::v6(){vfunc_called(this, "_ZN7S9511C22v6Ev");}
void  S9511C2 ::v7(){vfunc_called(this, "_ZN7S9511C22v7Ev");}
S9511C2 ::S9511C2(){ note_ctor("S9511C2", this);} // tgen

static void Test_S9511C2()
{
  extern Class_Descriptor cd_S9511C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9511C2, buf);
    S9511C2 *dp, &lv = *(dp=new (buf) S9511C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9511C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9511C2)");
    test_class_info(&lv, &cd_S9511C2);
    dp->~S9511C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9511C2(Test_S9511C2, "S9511C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9511C2C1Ev();
extern void _ZN7S9511C2D1Ev();
Name_Map name_map_S9511C2[] = {
  NSPAIR(_ZN7S9511C2C1Ev),
  NSPAIR(_ZN7S9511C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9511C2[];
extern void _ZN7S9511C2D1Ev();
extern void _ZN7S9511C2D0Ev();
extern void _ZN7S9511C22v3Ev();
extern void _ZN7S9511C22v4Ev();
extern void _ZN7S9511C22v5Ev();
extern void _ZN7S9511C22v6Ev();
extern void _ZN7S9511C22v7Ev();
static  VTBL_ENTRY vtc_S9511C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9511C2[0]),
  (VTBL_ENTRY)&_ZN7S9511C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9511C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9511C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9511C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9511C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9511C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9511C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S9511C2[];
extern  VTBL_ENTRY _ZTV7S9511C2[];
Class_Descriptor cd_S9511C2 = {  "S9511C2", // class name
  0,0,//no base classes
  &(vtc_S9511C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9511C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9511C2),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  S9511C1  : S9511C2 {
  int s9511c1f0;
  void *s9511c1f1;
  int s9511c1f2;
  void *s9511c1f3;
  char s9511c1f4[6];
  int s9511c1f5;
  virtual  ~S9511C1(); // _ZN7S9511C1D1Ev
  virtual void  v1(); // _ZN7S9511C12v1Ev
  virtual void  v2(); // _ZN7S9511C12v2Ev
  S9511C1(); // tgen
};
//SIG(1 S9511C1) C1{ BC2{ vd v3 v4 v5 v6 v7} vd v1 v2 Fi Fp Fi Fp Fc[6] Fi}


 S9511C1 ::~S9511C1(){ note_dtor("S9511C1", this);}
void  S9511C1 ::v1(){vfunc_called(this, "_ZN7S9511C12v1Ev");}
void  S9511C1 ::v2(){vfunc_called(this, "_ZN7S9511C12v2Ev");}
S9511C1 ::S9511C1(){ note_ctor("S9511C1", this);} // tgen

static void Test_S9511C1()
{
  extern Class_Descriptor cd_S9511C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,9)];
    init_test(&cd_S9511C1, buf);
    S9511C1 *dp, &lv = *(dp=new (buf) S9511C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S9511C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9511C1)");
    check_base_class_offset(lv, (S9511C2*), 0, "S9511C1");
    check_field_offset(lv, s9511c1f0, ABISELECT(8,4), "S9511C1.s9511c1f0");
    check_field_offset(lv, s9511c1f1, ABISELECT(16,8), "S9511C1.s9511c1f1");
    check_field_offset(lv, s9511c1f2, ABISELECT(24,12), "S9511C1.s9511c1f2");
    check_field_offset(lv, s9511c1f3, ABISELECT(32,16), "S9511C1.s9511c1f3");
    check_field_offset(lv, s9511c1f4, ABISELECT(40,20), "S9511C1.s9511c1f4");
    check_field_offset(lv, s9511c1f5, ABISELECT(48,28), "S9511C1.s9511c1f5");
    test_class_info(&lv, &cd_S9511C1);
    dp->~S9511C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9511C1(Test_S9511C1, "S9511C1", ABISELECT(56,32));

#else // __cplusplus

extern void _ZN7S9511C1C1Ev();
extern void _ZN7S9511C1D1Ev();
Name_Map name_map_S9511C1[] = {
  NSPAIR(_ZN7S9511C1C1Ev),
  NSPAIR(_ZN7S9511C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9511C2;
extern VTBL_ENTRY _ZTI7S9511C2[];
extern  VTBL_ENTRY _ZTV7S9511C2[];
static Base_Class bases_S9511C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9511C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S9511C1[];
extern void _ZN7S9511C1D1Ev();
extern void _ZN7S9511C1D0Ev();
extern void _ZN7S9511C22v3Ev();
extern void _ZN7S9511C22v4Ev();
extern void _ZN7S9511C22v5Ev();
extern void _ZN7S9511C22v6Ev();
extern void _ZN7S9511C22v7Ev();
extern void _ZN7S9511C12v1Ev();
extern void _ZN7S9511C12v2Ev();
static  VTBL_ENTRY vtc_S9511C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9511C1[0]),
  (VTBL_ENTRY)&_ZN7S9511C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9511C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9511C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9511C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9511C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9511C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9511C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9511C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9511C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9511C1[];
extern  VTBL_ENTRY _ZTV7S9511C1[];
Class_Descriptor cd_S9511C1 = {  "S9511C1", // class name
  bases_S9511C1, 1,
  &(vtc_S9511C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI7S9511C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9511C1),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7033C2  {
  virtual  ~S7033C2(); // _ZN7S7033C2D1Ev
  virtual void  v6(); // _ZN7S7033C22v6Ev
  virtual void  v7(); // _ZN7S7033C22v7Ev
  virtual void  v8(); // _ZN7S7033C22v8Ev
  virtual void  v9(); // _ZN7S7033C22v9Ev
  virtual void  v10(); // _ZN7S7033C23v10Ev
  S7033C2(); // tgen
};
//SIG(-1 S7033C2) C1{ vd v1 v2 v3 v4 v5}


 S7033C2 ::~S7033C2(){ note_dtor("S7033C2", this);}
void  S7033C2 ::v6(){vfunc_called(this, "_ZN7S7033C22v6Ev");}
void  S7033C2 ::v7(){vfunc_called(this, "_ZN7S7033C22v7Ev");}
void  S7033C2 ::v8(){vfunc_called(this, "_ZN7S7033C22v8Ev");}
void  S7033C2 ::v9(){vfunc_called(this, "_ZN7S7033C22v9Ev");}
void  S7033C2 ::v10(){vfunc_called(this, "_ZN7S7033C23v10Ev");}
S7033C2 ::S7033C2(){ note_ctor("S7033C2", this);} // tgen

static void Test_S7033C2()
{
  extern Class_Descriptor cd_S7033C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7033C2, buf);
    S7033C2 *dp, &lv = *(dp=new (buf) S7033C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7033C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7033C2)");
    test_class_info(&lv, &cd_S7033C2);
    dp->~S7033C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7033C2(Test_S7033C2, "S7033C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7033C2C1Ev();
extern void _ZN7S7033C2D1Ev();
Name_Map name_map_S7033C2[] = {
  NSPAIR(_ZN7S7033C2C1Ev),
  NSPAIR(_ZN7S7033C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7033C2[];
extern void _ZN7S7033C2D1Ev();
extern void _ZN7S7033C2D0Ev();
extern void _ZN7S7033C22v6Ev();
extern void _ZN7S7033C22v7Ev();
extern void _ZN7S7033C22v8Ev();
extern void _ZN7S7033C22v9Ev();
extern void _ZN7S7033C23v10Ev();
static  VTBL_ENTRY vtc_S7033C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7033C2[0]),
  (VTBL_ENTRY)&_ZN7S7033C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7033C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7033C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7033C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7033C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7033C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7033C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S7033C2[];
extern  VTBL_ENTRY _ZTV7S7033C2[];
Class_Descriptor cd_S7033C2 = {  "S7033C2", // class name
  0,0,//no base classes
  &(vtc_S7033C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7033C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7033C2),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  S7033C1  : S7033C2 {
  void *s7033c1f0;
  char s7033c1f1[64];
  virtual  ~S7033C1(); // _ZN7S7033C1D1Ev
  virtual void  v1(); // _ZN7S7033C12v1Ev
  virtual void  v2(); // _ZN7S7033C12v2Ev
  virtual void  v3(); // _ZN7S7033C12v3Ev
  virtual void  v4(); // _ZN7S7033C12v4Ev
  virtual void  v5(); // _ZN7S7033C12v5Ev
  S7033C1(); // tgen
};
//SIG(1 S7033C1) C1{ BC2{ vd v6 v7 v8 v9 v10} vd v1 v2 v3 v4 v5 Fp Fc[64]}


 S7033C1 ::~S7033C1(){ note_dtor("S7033C1", this);}
void  S7033C1 ::v1(){vfunc_called(this, "_ZN7S7033C12v1Ev");}
void  S7033C1 ::v2(){vfunc_called(this, "_ZN7S7033C12v2Ev");}
void  S7033C1 ::v3(){vfunc_called(this, "_ZN7S7033C12v3Ev");}
void  S7033C1 ::v4(){vfunc_called(this, "_ZN7S7033C12v4Ev");}
void  S7033C1 ::v5(){vfunc_called(this, "_ZN7S7033C12v5Ev");}
S7033C1 ::S7033C1(){ note_ctor("S7033C1", this);} // tgen

static void Test_S7033C1()
{
  extern Class_Descriptor cd_S7033C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,19)];
    init_test(&cd_S7033C1, buf);
    S7033C1 *dp, &lv = *(dp=new (buf) S7033C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,72), "sizeof(S7033C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7033C1)");
    check_base_class_offset(lv, (S7033C2*), 0, "S7033C1");
    check_field_offset(lv, s7033c1f0, ABISELECT(8,4), "S7033C1.s7033c1f0");
    check_field_offset(lv, s7033c1f1, ABISELECT(16,8), "S7033C1.s7033c1f1");
    test_class_info(&lv, &cd_S7033C1);
    dp->~S7033C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7033C1(Test_S7033C1, "S7033C1", ABISELECT(80,72));

#else // __cplusplus

extern void _ZN7S7033C1C1Ev();
extern void _ZN7S7033C1D1Ev();
Name_Map name_map_S7033C1[] = {
  NSPAIR(_ZN7S7033C1C1Ev),
  NSPAIR(_ZN7S7033C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7033C2;
extern VTBL_ENTRY _ZTI7S7033C2[];
extern  VTBL_ENTRY _ZTV7S7033C2[];
static Base_Class bases_S7033C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7033C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S7033C1[];
extern void _ZN7S7033C1D1Ev();
extern void _ZN7S7033C1D0Ev();
extern void _ZN7S7033C22v6Ev();
extern void _ZN7S7033C22v7Ev();
extern void _ZN7S7033C22v8Ev();
extern void _ZN7S7033C22v9Ev();
extern void _ZN7S7033C23v10Ev();
extern void _ZN7S7033C12v1Ev();
extern void _ZN7S7033C12v2Ev();
extern void _ZN7S7033C12v3Ev();
extern void _ZN7S7033C12v4Ev();
extern void _ZN7S7033C12v5Ev();
static  VTBL_ENTRY vtc_S7033C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7033C1[0]),
  (VTBL_ENTRY)&_ZN7S7033C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7033C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7033C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7033C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7033C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7033C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7033C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7033C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7033C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7033C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7033C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7033C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S7033C1[];
extern  VTBL_ENTRY _ZTV7S7033C1[];
Class_Descriptor cd_S7033C1 = {  "S7033C1", // class name
  bases_S7033C1, 1,
  &(vtc_S7033C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,72), // object size
  NSPAIRA(_ZTI7S7033C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7033C1),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3347C3  {
  virtual  ~S3347C3(); // _ZN7S3347C3D1Ev
  virtual void  v6(); // _ZN7S3347C32v6Ev
  virtual void  v7(); // _ZN7S3347C32v7Ev
  virtual void  v8(); // _ZN7S3347C32v8Ev
  virtual void  v9(); // _ZN7S3347C32v9Ev
  virtual void  v10(); // _ZN7S3347C33v10Ev
  S3347C3(); // tgen
};
//SIG(-1 S3347C3) C1{ vd v1 v2 v3 v4 v5}


 S3347C3 ::~S3347C3(){ note_dtor("S3347C3", this);}
void  S3347C3 ::v6(){vfunc_called(this, "_ZN7S3347C32v6Ev");}
void  S3347C3 ::v7(){vfunc_called(this, "_ZN7S3347C32v7Ev");}
void  S3347C3 ::v8(){vfunc_called(this, "_ZN7S3347C32v8Ev");}
void  S3347C3 ::v9(){vfunc_called(this, "_ZN7S3347C32v9Ev");}
void  S3347C3 ::v10(){vfunc_called(this, "_ZN7S3347C33v10Ev");}
S3347C3 ::S3347C3(){ note_ctor("S3347C3", this);} // tgen

static void Test_S3347C3()
{
  extern Class_Descriptor cd_S3347C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3347C3, buf);
    S3347C3 *dp, &lv = *(dp=new (buf) S3347C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3347C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3347C3)");
    test_class_info(&lv, &cd_S3347C3);
    dp->~S3347C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3347C3(Test_S3347C3, "S3347C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3347C3C1Ev();
extern void _ZN7S3347C3D1Ev();
Name_Map name_map_S3347C3[] = {
  NSPAIR(_ZN7S3347C3C1Ev),
  NSPAIR(_ZN7S3347C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3347C3[];
extern void _ZN7S3347C3D1Ev();
extern void _ZN7S3347C3D0Ev();
extern void _ZN7S3347C32v6Ev();
extern void _ZN7S3347C32v7Ev();
extern void _ZN7S3347C32v8Ev();
extern void _ZN7S3347C32v9Ev();
extern void _ZN7S3347C33v10Ev();
static  VTBL_ENTRY vtc_S3347C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3347C3[0]),
  (VTBL_ENTRY)&_ZN7S3347C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3347C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3347C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3347C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3347C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3347C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3347C33v10Ev,
};
extern VTBL_ENTRY _ZTI7S3347C3[];
extern  VTBL_ENTRY _ZTV7S3347C3[];
Class_Descriptor cd_S3347C3 = {  "S3347C3", // class name
  0,0,//no base classes
  &(vtc_S3347C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3347C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3347C3),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  S3347C2  : S3347C3 {
  void *s3347c2f0;
  virtual  ~S3347C2(); // _ZN7S3347C2D1Ev
  S3347C2(); // tgen
};
//SIG(-1 S3347C2) C1{ BC2{ vd v1 v2 v3 v4 v5} vd Fp}


 S3347C2 ::~S3347C2(){ note_dtor("S3347C2", this);}
S3347C2 ::S3347C2(){ note_ctor("S3347C2", this);} // tgen

static void Test_S3347C2()
{
  extern Class_Descriptor cd_S3347C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3347C2, buf);
    S3347C2 *dp, &lv = *(dp=new (buf) S3347C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3347C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3347C2)");
    check_base_class_offset(lv, (S3347C3*), 0, "S3347C2");
    check_field_offset(lv, s3347c2f0, ABISELECT(8,4), "S3347C2.s3347c2f0");
    test_class_info(&lv, &cd_S3347C2);
    dp->~S3347C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3347C2(Test_S3347C2, "S3347C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3347C2C1Ev();
extern void _ZN7S3347C2D1Ev();
Name_Map name_map_S3347C2[] = {
  NSPAIR(_ZN7S3347C2C1Ev),
  NSPAIR(_ZN7S3347C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3347C3;
extern VTBL_ENTRY _ZTI7S3347C3[];
extern  VTBL_ENTRY _ZTV7S3347C3[];
static Base_Class bases_S3347C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3347C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S3347C2[];
extern void _ZN7S3347C2D1Ev();
extern void _ZN7S3347C2D0Ev();
extern void _ZN7S3347C32v6Ev();
extern void _ZN7S3347C32v7Ev();
extern void _ZN7S3347C32v8Ev();
extern void _ZN7S3347C32v9Ev();
extern void _ZN7S3347C33v10Ev();
static  VTBL_ENTRY vtc_S3347C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3347C2[0]),
  (VTBL_ENTRY)&_ZN7S3347C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3347C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3347C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3347C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3347C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3347C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3347C33v10Ev,
};
extern VTBL_ENTRY _ZTI7S3347C2[];
extern  VTBL_ENTRY _ZTV7S3347C2[];
Class_Descriptor cd_S3347C2 = {  "S3347C2", // class name
  bases_S3347C2, 1,
  &(vtc_S3347C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3347C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3347C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3347C1  : S3347C2 {
  virtual  ~S3347C1(); // _ZN7S3347C1D1Ev
  virtual void  v1(); // _ZN7S3347C12v1Ev
  virtual void  v2(); // _ZN7S3347C12v2Ev
  virtual void  v3(); // _ZN7S3347C12v3Ev
  virtual void  v4(); // _ZN7S3347C12v4Ev
  virtual void  v5(); // _ZN7S3347C12v5Ev
  S3347C1(); // tgen
};
//SIG(1 S3347C1) C1{ BC2{ BC3{ vd v6 v7 v8 v9 v10} vd Fp} vd v1 v2 v3 v4 v5}


 S3347C1 ::~S3347C1(){ note_dtor("S3347C1", this);}
void  S3347C1 ::v1(){vfunc_called(this, "_ZN7S3347C12v1Ev");}
void  S3347C1 ::v2(){vfunc_called(this, "_ZN7S3347C12v2Ev");}
void  S3347C1 ::v3(){vfunc_called(this, "_ZN7S3347C12v3Ev");}
void  S3347C1 ::v4(){vfunc_called(this, "_ZN7S3347C12v4Ev");}
void  S3347C1 ::v5(){vfunc_called(this, "_ZN7S3347C12v5Ev");}
S3347C1 ::S3347C1(){ note_ctor("S3347C1", this);} // tgen

static void Test_S3347C1()
{
  extern Class_Descriptor cd_S3347C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3347C1, buf);
    S3347C1 *dp, &lv = *(dp=new (buf) S3347C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3347C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3347C1)");
    check_base_class_offset(lv, (S3347C3*)(S3347C2*), 0, "S3347C1");
    check_base_class_offset(lv, (S3347C2*), 0, "S3347C1");
    test_class_info(&lv, &cd_S3347C1);
    dp->~S3347C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3347C1(Test_S3347C1, "S3347C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3347C1C1Ev();
extern void _ZN7S3347C1D1Ev();
Name_Map name_map_S3347C1[] = {
  NSPAIR(_ZN7S3347C1C1Ev),
  NSPAIR(_ZN7S3347C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3347C3;
extern VTBL_ENTRY _ZTI7S3347C3[];
extern  VTBL_ENTRY _ZTV7S3347C3[];
extern Class_Descriptor cd_S3347C2;
extern VTBL_ENTRY _ZTI7S3347C2[];
extern  VTBL_ENTRY _ZTV7S3347C2[];
static Base_Class bases_S3347C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3347C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S3347C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3347C1[];
extern void _ZN7S3347C1D1Ev();
extern void _ZN7S3347C1D0Ev();
extern void _ZN7S3347C32v6Ev();
extern void _ZN7S3347C32v7Ev();
extern void _ZN7S3347C32v8Ev();
extern void _ZN7S3347C32v9Ev();
extern void _ZN7S3347C33v10Ev();
extern void _ZN7S3347C12v1Ev();
extern void _ZN7S3347C12v2Ev();
extern void _ZN7S3347C12v3Ev();
extern void _ZN7S3347C12v4Ev();
extern void _ZN7S3347C12v5Ev();
static  VTBL_ENTRY vtc_S3347C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3347C1[0]),
  (VTBL_ENTRY)&_ZN7S3347C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3347C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3347C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3347C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3347C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3347C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3347C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3347C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3347C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3347C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3347C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3347C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S3347C1[];
extern  VTBL_ENTRY _ZTV7S3347C1[];
Class_Descriptor cd_S3347C1 = {  "S3347C1", // class name
  bases_S3347C1, 2,
  &(vtc_S3347C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3347C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3347C1),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10084C2  {
  virtual  ~S10084C2(); // _ZN8S10084C2D1Ev
  virtual void  v6(); // _ZN8S10084C22v6Ev
  virtual void  v7(); // _ZN8S10084C22v7Ev
  virtual void  v8(); // _ZN8S10084C22v8Ev
  virtual void  v9(); // _ZN8S10084C22v9Ev
  virtual void  v10(); // _ZN8S10084C23v10Ev
  S10084C2(); // tgen
};
//SIG(-1 S10084C2) C1{ vd v1 v2 v3 v4 v5}


 S10084C2 ::~S10084C2(){ note_dtor("S10084C2", this);}
void  S10084C2 ::v6(){vfunc_called(this, "_ZN8S10084C22v6Ev");}
void  S10084C2 ::v7(){vfunc_called(this, "_ZN8S10084C22v7Ev");}
void  S10084C2 ::v8(){vfunc_called(this, "_ZN8S10084C22v8Ev");}
void  S10084C2 ::v9(){vfunc_called(this, "_ZN8S10084C22v9Ev");}
void  S10084C2 ::v10(){vfunc_called(this, "_ZN8S10084C23v10Ev");}
S10084C2 ::S10084C2(){ note_ctor("S10084C2", this);} // tgen

static void Test_S10084C2()
{
  extern Class_Descriptor cd_S10084C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S10084C2, buf);
    S10084C2 *dp, &lv = *(dp=new (buf) S10084C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S10084C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10084C2)");
    test_class_info(&lv, &cd_S10084C2);
    dp->~S10084C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10084C2(Test_S10084C2, "S10084C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S10084C2C1Ev();
extern void _ZN8S10084C2D1Ev();
Name_Map name_map_S10084C2[] = {
  NSPAIR(_ZN8S10084C2C1Ev),
  NSPAIR(_ZN8S10084C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10084C2[];
extern void _ZN8S10084C2D1Ev();
extern void _ZN8S10084C2D0Ev();
extern void _ZN8S10084C22v6Ev();
extern void _ZN8S10084C22v7Ev();
extern void _ZN8S10084C22v8Ev();
extern void _ZN8S10084C22v9Ev();
extern void _ZN8S10084C23v10Ev();
static  VTBL_ENTRY vtc_S10084C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10084C2[0]),
  (VTBL_ENTRY)&_ZN8S10084C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10084C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10084C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10084C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10084C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10084C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10084C23v10Ev,
};
extern VTBL_ENTRY _ZTI8S10084C2[];
extern  VTBL_ENTRY _ZTV8S10084C2[];
Class_Descriptor cd_S10084C2 = {  "S10084C2", // class name
  0,0,//no base classes
  &(vtc_S10084C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S10084C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10084C2),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  S10084C1  : S10084C2 {
  void *s10084c1f0;
  int s10084c1f1;
  long s10084c1f2;
  virtual  ~S10084C1(); // _ZN8S10084C1D1Ev
  virtual void  v1(); // _ZN8S10084C12v1Ev
  virtual void  v2(); // _ZN8S10084C12v2Ev
  virtual void  v3(); // _ZN8S10084C12v3Ev
  virtual void  v4(); // _ZN8S10084C12v4Ev
  virtual void  v5(); // _ZN8S10084C12v5Ev
  S10084C1(); // tgen
};
//SIG(1 S10084C1) C1{ BC2{ vd v6 v7 v8 v9 v10} vd v1 v2 v3 v4 v5 Fp Fi Fl}


 S10084C1 ::~S10084C1(){ note_dtor("S10084C1", this);}
void  S10084C1 ::v1(){vfunc_called(this, "_ZN8S10084C12v1Ev");}
void  S10084C1 ::v2(){vfunc_called(this, "_ZN8S10084C12v2Ev");}
void  S10084C1 ::v3(){vfunc_called(this, "_ZN8S10084C12v3Ev");}
void  S10084C1 ::v4(){vfunc_called(this, "_ZN8S10084C12v4Ev");}
void  S10084C1 ::v5(){vfunc_called(this, "_ZN8S10084C12v5Ev");}
S10084C1 ::S10084C1(){ note_ctor("S10084C1", this);} // tgen

static void Test_S10084C1()
{
  extern Class_Descriptor cd_S10084C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S10084C1, buf);
    S10084C1 *dp, &lv = *(dp=new (buf) S10084C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S10084C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10084C1)");
    check_base_class_offset(lv, (S10084C2*), 0, "S10084C1");
    check_field_offset(lv, s10084c1f0, ABISELECT(8,4), "S10084C1.s10084c1f0");
    check_field_offset(lv, s10084c1f1, ABISELECT(16,8), "S10084C1.s10084c1f1");
    check_field_offset(lv, s10084c1f2, ABISELECT(24,12), "S10084C1.s10084c1f2");
    test_class_info(&lv, &cd_S10084C1);
    dp->~S10084C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10084C1(Test_S10084C1, "S10084C1", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S10084C1C1Ev();
extern void _ZN8S10084C1D1Ev();
Name_Map name_map_S10084C1[] = {
  NSPAIR(_ZN8S10084C1C1Ev),
  NSPAIR(_ZN8S10084C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10084C2;
extern VTBL_ENTRY _ZTI8S10084C2[];
extern  VTBL_ENTRY _ZTV8S10084C2[];
static Base_Class bases_S10084C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10084C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S10084C1[];
extern void _ZN8S10084C1D1Ev();
extern void _ZN8S10084C1D0Ev();
extern void _ZN8S10084C22v6Ev();
extern void _ZN8S10084C22v7Ev();
extern void _ZN8S10084C22v8Ev();
extern void _ZN8S10084C22v9Ev();
extern void _ZN8S10084C23v10Ev();
extern void _ZN8S10084C12v1Ev();
extern void _ZN8S10084C12v2Ev();
extern void _ZN8S10084C12v3Ev();
extern void _ZN8S10084C12v4Ev();
extern void _ZN8S10084C12v5Ev();
static  VTBL_ENTRY vtc_S10084C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10084C1[0]),
  (VTBL_ENTRY)&_ZN8S10084C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10084C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10084C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10084C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10084C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10084C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10084C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10084C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10084C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10084C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10084C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10084C12v5Ev,
};
extern VTBL_ENTRY _ZTI8S10084C1[];
extern  VTBL_ENTRY _ZTV8S10084C1[];
Class_Descriptor cd_S10084C1 = {  "S10084C1", // class name
  bases_S10084C1, 1,
  &(vtc_S10084C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S10084C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10084C1),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9938C2  {
  virtual  ~S9938C2(); // _ZN7S9938C2D1Ev
  virtual void  v5(); // _ZN7S9938C22v5Ev
  virtual void  v6(); // _ZN7S9938C22v6Ev
  virtual void  v7(); // _ZN7S9938C22v7Ev
  virtual void  v8(); // _ZN7S9938C22v8Ev
  virtual void  v9(); // _ZN7S9938C22v9Ev
  S9938C2(); // tgen
};
//SIG(-1 S9938C2) C1{ vd v1 v2 v3 v4 v5}


 S9938C2 ::~S9938C2(){ note_dtor("S9938C2", this);}
void  S9938C2 ::v5(){vfunc_called(this, "_ZN7S9938C22v5Ev");}
void  S9938C2 ::v6(){vfunc_called(this, "_ZN7S9938C22v6Ev");}
void  S9938C2 ::v7(){vfunc_called(this, "_ZN7S9938C22v7Ev");}
void  S9938C2 ::v8(){vfunc_called(this, "_ZN7S9938C22v8Ev");}
void  S9938C2 ::v9(){vfunc_called(this, "_ZN7S9938C22v9Ev");}
S9938C2 ::S9938C2(){ note_ctor("S9938C2", this);} // tgen

static void Test_S9938C2()
{
  extern Class_Descriptor cd_S9938C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9938C2, buf);
    S9938C2 *dp, &lv = *(dp=new (buf) S9938C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9938C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9938C2)");
    test_class_info(&lv, &cd_S9938C2);
    dp->~S9938C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9938C2(Test_S9938C2, "S9938C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9938C2C1Ev();
extern void _ZN7S9938C2D1Ev();
Name_Map name_map_S9938C2[] = {
  NSPAIR(_ZN7S9938C2C1Ev),
  NSPAIR(_ZN7S9938C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9938C2[];
extern void _ZN7S9938C2D1Ev();
extern void _ZN7S9938C2D0Ev();
extern void _ZN7S9938C22v5Ev();
extern void _ZN7S9938C22v6Ev();
extern void _ZN7S9938C22v7Ev();
extern void _ZN7S9938C22v8Ev();
extern void _ZN7S9938C22v9Ev();
static  VTBL_ENTRY vtc_S9938C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9938C2[0]),
  (VTBL_ENTRY)&_ZN7S9938C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9938C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9938C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9938C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9938C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9938C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9938C22v9Ev,
};
extern VTBL_ENTRY _ZTI7S9938C2[];
extern  VTBL_ENTRY _ZTV7S9938C2[];
Class_Descriptor cd_S9938C2 = {  "S9938C2", // class name
  0,0,//no base classes
  &(vtc_S9938C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9938C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9938C2),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  S9938C1  : S9938C2 {
  int s9938c1f0[4];
  char s9938c1f1[2];
  int s9938c1f2;
  virtual void  v1(); // _ZN7S9938C12v1Ev
  virtual void  v2(); // _ZN7S9938C12v2Ev
  virtual void  v3(); // _ZN7S9938C12v3Ev
  virtual void  v4(); // _ZN7S9938C12v4Ev
  ~S9938C1(); // tgen
  S9938C1(); // tgen
};
//SIG(1 S9938C1) C1{ BC2{ vd v5 v6 v7 v8 v9} v1 v2 v3 v4 Fi[4] Fc[2] Fi}


void  S9938C1 ::v1(){vfunc_called(this, "_ZN7S9938C12v1Ev");}
void  S9938C1 ::v2(){vfunc_called(this, "_ZN7S9938C12v2Ev");}
void  S9938C1 ::v3(){vfunc_called(this, "_ZN7S9938C12v3Ev");}
void  S9938C1 ::v4(){vfunc_called(this, "_ZN7S9938C12v4Ev");}
S9938C1 ::~S9938C1(){ note_dtor("S9938C1", this);} // tgen
S9938C1 ::S9938C1(){ note_ctor("S9938C1", this);} // tgen

static void Test_S9938C1()
{
  extern Class_Descriptor cd_S9938C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,8)];
    init_test(&cd_S9938C1, buf);
    S9938C1 *dp, &lv = *(dp=new (buf) S9938C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,28), "sizeof(S9938C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9938C1)");
    check_base_class_offset(lv, (S9938C2*), 0, "S9938C1");
    check_field_offset(lv, s9938c1f0, ABISELECT(8,4), "S9938C1.s9938c1f0");
    check_field_offset(lv, s9938c1f1, ABISELECT(24,20), "S9938C1.s9938c1f1");
    check_field_offset(lv, s9938c1f2, ABISELECT(28,24), "S9938C1.s9938c1f2");
    test_class_info(&lv, &cd_S9938C1);
    dp->~S9938C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9938C1(Test_S9938C1, "S9938C1", ABISELECT(32,28));

#else // __cplusplus

extern void _ZN7S9938C1C1Ev();
extern void _ZN7S9938C1D1Ev();
Name_Map name_map_S9938C1[] = {
  NSPAIR(_ZN7S9938C1C1Ev),
  NSPAIR(_ZN7S9938C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9938C2;
extern VTBL_ENTRY _ZTI7S9938C2[];
extern  VTBL_ENTRY _ZTV7S9938C2[];
static Base_Class bases_S9938C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9938C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S9938C1[];
extern void _ZN7S9938C1D1Ev();
extern void _ZN7S9938C1D0Ev();
extern void _ZN7S9938C22v5Ev();
extern void _ZN7S9938C22v6Ev();
extern void _ZN7S9938C22v7Ev();
extern void _ZN7S9938C22v8Ev();
extern void _ZN7S9938C22v9Ev();
extern void _ZN7S9938C12v1Ev();
extern void _ZN7S9938C12v2Ev();
extern void _ZN7S9938C12v3Ev();
extern void _ZN7S9938C12v4Ev();
static  VTBL_ENTRY vtc_S9938C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9938C1[0]),
  (VTBL_ENTRY)&_ZN7S9938C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9938C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9938C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9938C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9938C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9938C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9938C22v9Ev,
  (VTBL_ENTRY)&_ZN7S9938C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9938C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9938C12v3Ev,
  (VTBL_ENTRY)&_ZN7S9938C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S9938C1[];
extern  VTBL_ENTRY _ZTV7S9938C1[];
Class_Descriptor cd_S9938C1 = {  "S9938C1", // class name
  bases_S9938C1, 1,
  &(vtc_S9938C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,28), // object size
  NSPAIRA(_ZTI7S9938C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9938C1),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  S9932C2  {
  virtual  ~S9932C2(); // _ZN7S9932C2D1Ev
  virtual void  v5(); // _ZN7S9932C22v5Ev
  virtual void  v6(); // _ZN7S9932C22v6Ev
  virtual void  v7(); // _ZN7S9932C22v7Ev
  virtual void  v8(); // _ZN7S9932C22v8Ev
  virtual void  v9(); // _ZN7S9932C22v9Ev
  S9932C2(); // tgen
};
//SIG(-1 S9932C2) C1{ vd v1 v2 v3 v4 v5}


 S9932C2 ::~S9932C2(){ note_dtor("S9932C2", this);}
void  S9932C2 ::v5(){vfunc_called(this, "_ZN7S9932C22v5Ev");}
void  S9932C2 ::v6(){vfunc_called(this, "_ZN7S9932C22v6Ev");}
void  S9932C2 ::v7(){vfunc_called(this, "_ZN7S9932C22v7Ev");}
void  S9932C2 ::v8(){vfunc_called(this, "_ZN7S9932C22v8Ev");}
void  S9932C2 ::v9(){vfunc_called(this, "_ZN7S9932C22v9Ev");}
S9932C2 ::S9932C2(){ note_ctor("S9932C2", this);} // tgen

static void Test_S9932C2()
{
  extern Class_Descriptor cd_S9932C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9932C2, buf);
    S9932C2 *dp, &lv = *(dp=new (buf) S9932C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9932C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9932C2)");
    test_class_info(&lv, &cd_S9932C2);
    dp->~S9932C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9932C2(Test_S9932C2, "S9932C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9932C2C1Ev();
extern void _ZN7S9932C2D1Ev();
Name_Map name_map_S9932C2[] = {
  NSPAIR(_ZN7S9932C2C1Ev),
  NSPAIR(_ZN7S9932C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9932C2[];
extern void _ZN7S9932C2D1Ev();
extern void _ZN7S9932C2D0Ev();
extern void _ZN7S9932C22v5Ev();
extern void _ZN7S9932C22v6Ev();
extern void _ZN7S9932C22v7Ev();
extern void _ZN7S9932C22v8Ev();
extern void _ZN7S9932C22v9Ev();
static  VTBL_ENTRY vtc_S9932C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9932C2[0]),
  (VTBL_ENTRY)&_ZN7S9932C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9932C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9932C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9932C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9932C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9932C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9932C22v9Ev,
};
extern VTBL_ENTRY _ZTI7S9932C2[];
extern  VTBL_ENTRY _ZTV7S9932C2[];
Class_Descriptor cd_S9932C2 = {  "S9932C2", // class name
  0,0,//no base classes
  &(vtc_S9932C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9932C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9932C2),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  S9932C1  : S9932C2 {
  int s9932c1f0[2];
  char s9932c1f1[2];
  int s9932c1f2;
  virtual void  v1(); // _ZN7S9932C12v1Ev
  virtual void  v2(); // _ZN7S9932C12v2Ev
  virtual void  v3(); // _ZN7S9932C12v3Ev
  virtual void  v4(); // _ZN7S9932C12v4Ev
  ~S9932C1(); // tgen
  S9932C1(); // tgen
};
//SIG(1 S9932C1) C1{ BC2{ vd v5 v6 v7 v8 v9} v1 v2 v3 v4 Fi[2] Fc[2] Fi}


void  S9932C1 ::v1(){vfunc_called(this, "_ZN7S9932C12v1Ev");}
void  S9932C1 ::v2(){vfunc_called(this, "_ZN7S9932C12v2Ev");}
void  S9932C1 ::v3(){vfunc_called(this, "_ZN7S9932C12v3Ev");}
void  S9932C1 ::v4(){vfunc_called(this, "_ZN7S9932C12v4Ev");}
S9932C1 ::~S9932C1(){ note_dtor("S9932C1", this);} // tgen
S9932C1 ::S9932C1(){ note_ctor("S9932C1", this);} // tgen

static void Test_S9932C1()
{
  extern Class_Descriptor cd_S9932C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,6)];
    init_test(&cd_S9932C1, buf);
    S9932C1 *dp, &lv = *(dp=new (buf) S9932C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S9932C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9932C1)");
    check_base_class_offset(lv, (S9932C2*), 0, "S9932C1");
    check_field_offset(lv, s9932c1f0, ABISELECT(8,4), "S9932C1.s9932c1f0");
    check_field_offset(lv, s9932c1f1, ABISELECT(16,12), "S9932C1.s9932c1f1");
    check_field_offset(lv, s9932c1f2, ABISELECT(20,16), "S9932C1.s9932c1f2");
    test_class_info(&lv, &cd_S9932C1);
    dp->~S9932C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9932C1(Test_S9932C1, "S9932C1", ABISELECT(24,20));

#else // __cplusplus

extern void _ZN7S9932C1C1Ev();
extern void _ZN7S9932C1D1Ev();
Name_Map name_map_S9932C1[] = {
  NSPAIR(_ZN7S9932C1C1Ev),
  NSPAIR(_ZN7S9932C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9932C2;
extern VTBL_ENTRY _ZTI7S9932C2[];
extern  VTBL_ENTRY _ZTV7S9932C2[];
static Base_Class bases_S9932C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9932C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S9932C1[];
extern void _ZN7S9932C1D1Ev();
extern void _ZN7S9932C1D0Ev();
extern void _ZN7S9932C22v5Ev();
extern void _ZN7S9932C22v6Ev();
extern void _ZN7S9932C22v7Ev();
extern void _ZN7S9932C22v8Ev();
extern void _ZN7S9932C22v9Ev();
extern void _ZN7S9932C12v1Ev();
extern void _ZN7S9932C12v2Ev();
extern void _ZN7S9932C12v3Ev();
extern void _ZN7S9932C12v4Ev();
static  VTBL_ENTRY vtc_S9932C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9932C1[0]),
  (VTBL_ENTRY)&_ZN7S9932C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9932C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9932C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9932C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9932C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9932C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9932C22v9Ev,
  (VTBL_ENTRY)&_ZN7S9932C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9932C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9932C12v3Ev,
  (VTBL_ENTRY)&_ZN7S9932C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S9932C1[];
extern  VTBL_ENTRY _ZTV7S9932C1[];
Class_Descriptor cd_S9932C1 = {  "S9932C1", // class name
  bases_S9932C1, 1,
  &(vtc_S9932C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,20), // object size
  NSPAIRA(_ZTI7S9932C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9932C1),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  S10086C2  {
  virtual  ~S10086C2(); // _ZN8S10086C2D1Ev
  virtual void  v6(); // _ZN8S10086C22v6Ev
  virtual void  v7(); // _ZN8S10086C22v7Ev
  virtual void  v8(); // _ZN8S10086C22v8Ev
  virtual void  v9(); // _ZN8S10086C22v9Ev
  virtual void  v10(); // _ZN8S10086C23v10Ev
  S10086C2(); // tgen
};
//SIG(-1 S10086C2) C1{ vd v1 v2 v3 v4 v5}


 S10086C2 ::~S10086C2(){ note_dtor("S10086C2", this);}
void  S10086C2 ::v6(){vfunc_called(this, "_ZN8S10086C22v6Ev");}
void  S10086C2 ::v7(){vfunc_called(this, "_ZN8S10086C22v7Ev");}
void  S10086C2 ::v8(){vfunc_called(this, "_ZN8S10086C22v8Ev");}
void  S10086C2 ::v9(){vfunc_called(this, "_ZN8S10086C22v9Ev");}
void  S10086C2 ::v10(){vfunc_called(this, "_ZN8S10086C23v10Ev");}
S10086C2 ::S10086C2(){ note_ctor("S10086C2", this);} // tgen

static void Test_S10086C2()
{
  extern Class_Descriptor cd_S10086C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S10086C2, buf);
    S10086C2 *dp, &lv = *(dp=new (buf) S10086C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S10086C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10086C2)");
    test_class_info(&lv, &cd_S10086C2);
    dp->~S10086C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10086C2(Test_S10086C2, "S10086C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S10086C2C1Ev();
extern void _ZN8S10086C2D1Ev();
Name_Map name_map_S10086C2[] = {
  NSPAIR(_ZN8S10086C2C1Ev),
  NSPAIR(_ZN8S10086C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10086C2[];
extern void _ZN8S10086C2D1Ev();
extern void _ZN8S10086C2D0Ev();
extern void _ZN8S10086C22v6Ev();
extern void _ZN8S10086C22v7Ev();
extern void _ZN8S10086C22v8Ev();
extern void _ZN8S10086C22v9Ev();
extern void _ZN8S10086C23v10Ev();
static  VTBL_ENTRY vtc_S10086C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10086C2[0]),
  (VTBL_ENTRY)&_ZN8S10086C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10086C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10086C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10086C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10086C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10086C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10086C23v10Ev,
};
extern VTBL_ENTRY _ZTI8S10086C2[];
extern  VTBL_ENTRY _ZTV8S10086C2[];
Class_Descriptor cd_S10086C2 = {  "S10086C2", // class name
  0,0,//no base classes
  &(vtc_S10086C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S10086C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10086C2),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  S10086C1  : S10086C2 {
  void *s10086c1f0[15];
  virtual  ~S10086C1(); // _ZN8S10086C1D1Ev
  virtual void  v1(); // _ZN8S10086C12v1Ev
  virtual void  v2(); // _ZN8S10086C12v2Ev
  virtual void  v3(); // _ZN8S10086C12v3Ev
  virtual void  v4(); // _ZN8S10086C12v4Ev
  virtual void  v5(); // _ZN8S10086C12v5Ev
  S10086C1(); // tgen
};
//SIG(1 S10086C1) C1{ BC2{ vd v6 v7 v8 v9 v10} vd v1 v2 v3 v4 v5 Fp[15]}


 S10086C1 ::~S10086C1(){ note_dtor("S10086C1", this);}
void  S10086C1 ::v1(){vfunc_called(this, "_ZN8S10086C12v1Ev");}
void  S10086C1 ::v2(){vfunc_called(this, "_ZN8S10086C12v2Ev");}
void  S10086C1 ::v3(){vfunc_called(this, "_ZN8S10086C12v3Ev");}
void  S10086C1 ::v4(){vfunc_called(this, "_ZN8S10086C12v4Ev");}
void  S10086C1 ::v5(){vfunc_called(this, "_ZN8S10086C12v5Ev");}
S10086C1 ::S10086C1(){ note_ctor("S10086C1", this);} // tgen

static void Test_S10086C1()
{
  extern Class_Descriptor cd_S10086C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[17];
    init_test(&cd_S10086C1, buf);
    S10086C1 *dp, &lv = *(dp=new (buf) S10086C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,64), "sizeof(S10086C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10086C1)");
    check_base_class_offset(lv, (S10086C2*), 0, "S10086C1");
    check_field_offset(lv, s10086c1f0, ABISELECT(8,4), "S10086C1.s10086c1f0");
    test_class_info(&lv, &cd_S10086C1);
    dp->~S10086C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10086C1(Test_S10086C1, "S10086C1", ABISELECT(128,64));

#else // __cplusplus

extern void _ZN8S10086C1C1Ev();
extern void _ZN8S10086C1D1Ev();
Name_Map name_map_S10086C1[] = {
  NSPAIR(_ZN8S10086C1C1Ev),
  NSPAIR(_ZN8S10086C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10086C2;
extern VTBL_ENTRY _ZTI8S10086C2[];
extern  VTBL_ENTRY _ZTV8S10086C2[];
static Base_Class bases_S10086C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10086C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S10086C1[];
extern void _ZN8S10086C1D1Ev();
extern void _ZN8S10086C1D0Ev();
extern void _ZN8S10086C22v6Ev();
extern void _ZN8S10086C22v7Ev();
extern void _ZN8S10086C22v8Ev();
extern void _ZN8S10086C22v9Ev();
extern void _ZN8S10086C23v10Ev();
extern void _ZN8S10086C12v1Ev();
extern void _ZN8S10086C12v2Ev();
extern void _ZN8S10086C12v3Ev();
extern void _ZN8S10086C12v4Ev();
extern void _ZN8S10086C12v5Ev();
static  VTBL_ENTRY vtc_S10086C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10086C1[0]),
  (VTBL_ENTRY)&_ZN8S10086C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10086C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10086C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10086C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10086C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10086C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10086C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10086C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10086C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10086C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10086C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10086C12v5Ev,
};
extern VTBL_ENTRY _ZTI8S10086C1[];
extern  VTBL_ENTRY _ZTV8S10086C1[];
Class_Descriptor cd_S10086C1 = {  "S10086C1", // class name
  bases_S10086C1, 1,
  &(vtc_S10086C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,64), // object size
  NSPAIRA(_ZTI8S10086C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10086C1),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10087C2  {
  virtual  ~S10087C2(); // _ZN8S10087C2D1Ev
  virtual void  v6(); // _ZN8S10087C22v6Ev
  virtual void  v7(); // _ZN8S10087C22v7Ev
  virtual void  v8(); // _ZN8S10087C22v8Ev
  virtual void  v9(); // _ZN8S10087C22v9Ev
  virtual void  v10(); // _ZN8S10087C23v10Ev
  S10087C2(); // tgen
};
//SIG(-1 S10087C2) C1{ vd v1 v2 v3 v4 v5}


 S10087C2 ::~S10087C2(){ note_dtor("S10087C2", this);}
void  S10087C2 ::v6(){vfunc_called(this, "_ZN8S10087C22v6Ev");}
void  S10087C2 ::v7(){vfunc_called(this, "_ZN8S10087C22v7Ev");}
void  S10087C2 ::v8(){vfunc_called(this, "_ZN8S10087C22v8Ev");}
void  S10087C2 ::v9(){vfunc_called(this, "_ZN8S10087C22v9Ev");}
void  S10087C2 ::v10(){vfunc_called(this, "_ZN8S10087C23v10Ev");}
S10087C2 ::S10087C2(){ note_ctor("S10087C2", this);} // tgen

static void Test_S10087C2()
{
  extern Class_Descriptor cd_S10087C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S10087C2, buf);
    S10087C2 *dp, &lv = *(dp=new (buf) S10087C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S10087C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10087C2)");
    test_class_info(&lv, &cd_S10087C2);
    dp->~S10087C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10087C2(Test_S10087C2, "S10087C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S10087C2C1Ev();
extern void _ZN8S10087C2D1Ev();
Name_Map name_map_S10087C2[] = {
  NSPAIR(_ZN8S10087C2C1Ev),
  NSPAIR(_ZN8S10087C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10087C2[];
extern void _ZN8S10087C2D1Ev();
extern void _ZN8S10087C2D0Ev();
extern void _ZN8S10087C22v6Ev();
extern void _ZN8S10087C22v7Ev();
extern void _ZN8S10087C22v8Ev();
extern void _ZN8S10087C22v9Ev();
extern void _ZN8S10087C23v10Ev();
static  VTBL_ENTRY vtc_S10087C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10087C2[0]),
  (VTBL_ENTRY)&_ZN8S10087C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10087C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10087C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10087C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10087C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10087C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10087C23v10Ev,
};
extern VTBL_ENTRY _ZTI8S10087C2[];
extern  VTBL_ENTRY _ZTV8S10087C2[];
Class_Descriptor cd_S10087C2 = {  "S10087C2", // class name
  0,0,//no base classes
  &(vtc_S10087C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S10087C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10087C2),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  S10087C1  : S10087C2 {
  void *s10087c1f0[2];
  virtual  ~S10087C1(); // _ZN8S10087C1D1Ev
  virtual void  v1(); // _ZN8S10087C12v1Ev
  virtual void  v2(); // _ZN8S10087C12v2Ev
  virtual void  v3(); // _ZN8S10087C12v3Ev
  virtual void  v4(); // _ZN8S10087C12v4Ev
  virtual void  v5(); // _ZN8S10087C12v5Ev
  S10087C1(); // tgen
};
//SIG(1 S10087C1) C1{ BC2{ vd v6 v7 v8 v9 v10} vd v1 v2 v3 v4 v5 Fp[2]}


 S10087C1 ::~S10087C1(){ note_dtor("S10087C1", this);}
void  S10087C1 ::v1(){vfunc_called(this, "_ZN8S10087C12v1Ev");}
void  S10087C1 ::v2(){vfunc_called(this, "_ZN8S10087C12v2Ev");}
void  S10087C1 ::v3(){vfunc_called(this, "_ZN8S10087C12v3Ev");}
void  S10087C1 ::v4(){vfunc_called(this, "_ZN8S10087C12v4Ev");}
void  S10087C1 ::v5(){vfunc_called(this, "_ZN8S10087C12v5Ev");}
S10087C1 ::S10087C1(){ note_ctor("S10087C1", this);} // tgen

static void Test_S10087C1()
{
  extern Class_Descriptor cd_S10087C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S10087C1, buf);
    S10087C1 *dp, &lv = *(dp=new (buf) S10087C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S10087C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10087C1)");
    check_base_class_offset(lv, (S10087C2*), 0, "S10087C1");
    check_field_offset(lv, s10087c1f0, ABISELECT(8,4), "S10087C1.s10087c1f0");
    test_class_info(&lv, &cd_S10087C1);
    dp->~S10087C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10087C1(Test_S10087C1, "S10087C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S10087C1C1Ev();
extern void _ZN8S10087C1D1Ev();
Name_Map name_map_S10087C1[] = {
  NSPAIR(_ZN8S10087C1C1Ev),
  NSPAIR(_ZN8S10087C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10087C2;
extern VTBL_ENTRY _ZTI8S10087C2[];
extern  VTBL_ENTRY _ZTV8S10087C2[];
static Base_Class bases_S10087C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10087C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S10087C1[];
extern void _ZN8S10087C1D1Ev();
extern void _ZN8S10087C1D0Ev();
extern void _ZN8S10087C22v6Ev();
extern void _ZN8S10087C22v7Ev();
extern void _ZN8S10087C22v8Ev();
extern void _ZN8S10087C22v9Ev();
extern void _ZN8S10087C23v10Ev();
extern void _ZN8S10087C12v1Ev();
extern void _ZN8S10087C12v2Ev();
extern void _ZN8S10087C12v3Ev();
extern void _ZN8S10087C12v4Ev();
extern void _ZN8S10087C12v5Ev();
static  VTBL_ENTRY vtc_S10087C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10087C1[0]),
  (VTBL_ENTRY)&_ZN8S10087C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10087C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10087C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10087C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10087C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10087C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10087C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10087C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10087C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10087C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10087C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10087C12v5Ev,
};
extern VTBL_ENTRY _ZTI8S10087C1[];
extern  VTBL_ENTRY _ZTV8S10087C1[];
Class_Descriptor cd_S10087C1 = {  "S10087C1", // class name
  bases_S10087C1, 1,
  &(vtc_S10087C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S10087C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10087C1),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10085C2  {
  virtual  ~S10085C2(); // _ZN8S10085C2D1Ev
  virtual void  v6(); // _ZN8S10085C22v6Ev
  virtual void  v7(); // _ZN8S10085C22v7Ev
  virtual void  v8(); // _ZN8S10085C22v8Ev
  virtual void  v9(); // _ZN8S10085C22v9Ev
  virtual void  v10(); // _ZN8S10085C23v10Ev
  S10085C2(); // tgen
};
//SIG(-1 S10085C2) C1{ vd v1 v2 v3 v4 v5}


 S10085C2 ::~S10085C2(){ note_dtor("S10085C2", this);}
void  S10085C2 ::v6(){vfunc_called(this, "_ZN8S10085C22v6Ev");}
void  S10085C2 ::v7(){vfunc_called(this, "_ZN8S10085C22v7Ev");}
void  S10085C2 ::v8(){vfunc_called(this, "_ZN8S10085C22v8Ev");}
void  S10085C2 ::v9(){vfunc_called(this, "_ZN8S10085C22v9Ev");}
void  S10085C2 ::v10(){vfunc_called(this, "_ZN8S10085C23v10Ev");}
S10085C2 ::S10085C2(){ note_ctor("S10085C2", this);} // tgen

static void Test_S10085C2()
{
  extern Class_Descriptor cd_S10085C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S10085C2, buf);
    S10085C2 *dp, &lv = *(dp=new (buf) S10085C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S10085C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10085C2)");
    test_class_info(&lv, &cd_S10085C2);
    dp->~S10085C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10085C2(Test_S10085C2, "S10085C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S10085C2C1Ev();
extern void _ZN8S10085C2D1Ev();
Name_Map name_map_S10085C2[] = {
  NSPAIR(_ZN8S10085C2C1Ev),
  NSPAIR(_ZN8S10085C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10085C2[];
extern void _ZN8S10085C2D1Ev();
extern void _ZN8S10085C2D0Ev();
extern void _ZN8S10085C22v6Ev();
extern void _ZN8S10085C22v7Ev();
extern void _ZN8S10085C22v8Ev();
extern void _ZN8S10085C22v9Ev();
extern void _ZN8S10085C23v10Ev();
static  VTBL_ENTRY vtc_S10085C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10085C2[0]),
  (VTBL_ENTRY)&_ZN8S10085C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10085C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10085C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10085C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10085C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10085C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10085C23v10Ev,
};
extern VTBL_ENTRY _ZTI8S10085C2[];
extern  VTBL_ENTRY _ZTV8S10085C2[];
Class_Descriptor cd_S10085C2 = {  "S10085C2", // class name
  0,0,//no base classes
  &(vtc_S10085C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S10085C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10085C2),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  S10085C1  : S10085C2 {
  void *s10085c1f0;
  int s10085c1f1;
  virtual  ~S10085C1(); // _ZN8S10085C1D1Ev
  virtual void  v1(); // _ZN8S10085C12v1Ev
  virtual void  v2(); // _ZN8S10085C12v2Ev
  virtual void  v3(); // _ZN8S10085C12v3Ev
  virtual void  v4(); // _ZN8S10085C12v4Ev
  virtual void  v5(); // _ZN8S10085C12v5Ev
  S10085C1(); // tgen
};
//SIG(1 S10085C1) C1{ BC2{ vd v6 v7 v8 v9 v10} vd v1 v2 v3 v4 v5 Fp Fi}


 S10085C1 ::~S10085C1(){ note_dtor("S10085C1", this);}
void  S10085C1 ::v1(){vfunc_called(this, "_ZN8S10085C12v1Ev");}
void  S10085C1 ::v2(){vfunc_called(this, "_ZN8S10085C12v2Ev");}
void  S10085C1 ::v3(){vfunc_called(this, "_ZN8S10085C12v3Ev");}
void  S10085C1 ::v4(){vfunc_called(this, "_ZN8S10085C12v4Ev");}
void  S10085C1 ::v5(){vfunc_called(this, "_ZN8S10085C12v5Ev");}
S10085C1 ::S10085C1(){ note_ctor("S10085C1", this);} // tgen

static void Test_S10085C1()
{
  extern Class_Descriptor cd_S10085C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S10085C1, buf);
    S10085C1 *dp, &lv = *(dp=new (buf) S10085C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S10085C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10085C1)");
    check_base_class_offset(lv, (S10085C2*), 0, "S10085C1");
    check_field_offset(lv, s10085c1f0, ABISELECT(8,4), "S10085C1.s10085c1f0");
    check_field_offset(lv, s10085c1f1, ABISELECT(16,8), "S10085C1.s10085c1f1");
    test_class_info(&lv, &cd_S10085C1);
    dp->~S10085C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10085C1(Test_S10085C1, "S10085C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S10085C1C1Ev();
extern void _ZN8S10085C1D1Ev();
Name_Map name_map_S10085C1[] = {
  NSPAIR(_ZN8S10085C1C1Ev),
  NSPAIR(_ZN8S10085C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10085C2;
extern VTBL_ENTRY _ZTI8S10085C2[];
extern  VTBL_ENTRY _ZTV8S10085C2[];
static Base_Class bases_S10085C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10085C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S10085C1[];
extern void _ZN8S10085C1D1Ev();
extern void _ZN8S10085C1D0Ev();
extern void _ZN8S10085C22v6Ev();
extern void _ZN8S10085C22v7Ev();
extern void _ZN8S10085C22v8Ev();
extern void _ZN8S10085C22v9Ev();
extern void _ZN8S10085C23v10Ev();
extern void _ZN8S10085C12v1Ev();
extern void _ZN8S10085C12v2Ev();
extern void _ZN8S10085C12v3Ev();
extern void _ZN8S10085C12v4Ev();
extern void _ZN8S10085C12v5Ev();
static  VTBL_ENTRY vtc_S10085C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10085C1[0]),
  (VTBL_ENTRY)&_ZN8S10085C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10085C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10085C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10085C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10085C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10085C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10085C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10085C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10085C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10085C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10085C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10085C12v5Ev,
};
extern VTBL_ENTRY _ZTI8S10085C1[];
extern  VTBL_ENTRY _ZTV8S10085C1[];
Class_Descriptor cd_S10085C1 = {  "S10085C1", // class name
  bases_S10085C1, 1,
  &(vtc_S10085C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S10085C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10085C1),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5271C3  {
  virtual  ~S5271C3(); // _ZN7S5271C3D1Ev
  virtual void  v5(); // _ZN7S5271C32v5Ev
  virtual void  v6(); // _ZN7S5271C32v6Ev
  virtual void  v7(); // _ZN7S5271C32v7Ev
  virtual void  v8(); // _ZN7S5271C32v8Ev
  virtual void  v9(); // _ZN7S5271C32v9Ev
  S5271C3(); // tgen
};
//SIG(-1 S5271C3) C1{ vd v1 v2 v3 v4 v5}


 S5271C3 ::~S5271C3(){ note_dtor("S5271C3", this);}
void  S5271C3 ::v5(){vfunc_called(this, "_ZN7S5271C32v5Ev");}
void  S5271C3 ::v6(){vfunc_called(this, "_ZN7S5271C32v6Ev");}
void  S5271C3 ::v7(){vfunc_called(this, "_ZN7S5271C32v7Ev");}
void  S5271C3 ::v8(){vfunc_called(this, "_ZN7S5271C32v8Ev");}
void  S5271C3 ::v9(){vfunc_called(this, "_ZN7S5271C32v9Ev");}
S5271C3 ::S5271C3(){ note_ctor("S5271C3", this);} // tgen

static void Test_S5271C3()
{
  extern Class_Descriptor cd_S5271C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S5271C3, buf);
    S5271C3 *dp, &lv = *(dp=new (buf) S5271C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S5271C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5271C3)");
    test_class_info(&lv, &cd_S5271C3);
    dp->~S5271C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5271C3(Test_S5271C3, "S5271C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S5271C3C1Ev();
extern void _ZN7S5271C3D1Ev();
Name_Map name_map_S5271C3[] = {
  NSPAIR(_ZN7S5271C3C1Ev),
  NSPAIR(_ZN7S5271C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5271C3[];
extern void _ZN7S5271C3D1Ev();
extern void _ZN7S5271C3D0Ev();
extern void _ZN7S5271C32v5Ev();
extern void _ZN7S5271C32v6Ev();
extern void _ZN7S5271C32v7Ev();
extern void _ZN7S5271C32v8Ev();
extern void _ZN7S5271C32v9Ev();
static  VTBL_ENTRY vtc_S5271C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5271C3[0]),
  (VTBL_ENTRY)&_ZN7S5271C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5271C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5271C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5271C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5271C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5271C32v8Ev,
  (VTBL_ENTRY)&_ZN7S5271C32v9Ev,
};
extern VTBL_ENTRY _ZTI7S5271C3[];
extern  VTBL_ENTRY _ZTV7S5271C3[];
Class_Descriptor cd_S5271C3 = {  "S5271C3", // class name
  0,0,//no base classes
  &(vtc_S5271C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S5271C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5271C3),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  S5271C2  : S5271C3 {
  void *s5271c2f0[2];
  ~S5271C2(); // tgen
  S5271C2(); // tgen
};
//SIG(-1 S5271C2) C1{ BC2{ vd v1 v2 v3 v4 v5} Fp[2]}


S5271C2 ::~S5271C2(){ note_dtor("S5271C2", this);} // tgen
S5271C2 ::S5271C2(){ note_ctor("S5271C2", this);} // tgen

static void Test_S5271C2()
{
  extern Class_Descriptor cd_S5271C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S5271C2, buf);
    S5271C2 *dp, &lv = *(dp=new (buf) S5271C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S5271C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5271C2)");
    check_base_class_offset(lv, (S5271C3*), 0, "S5271C2");
    check_field_offset(lv, s5271c2f0, ABISELECT(8,4), "S5271C2.s5271c2f0");
    test_class_info(&lv, &cd_S5271C2);
    dp->~S5271C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5271C2(Test_S5271C2, "S5271C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S5271C2C1Ev();
extern void _ZN7S5271C2D1Ev();
Name_Map name_map_S5271C2[] = {
  NSPAIR(_ZN7S5271C2C1Ev),
  NSPAIR(_ZN7S5271C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5271C3;
extern VTBL_ENTRY _ZTI7S5271C3[];
extern  VTBL_ENTRY _ZTV7S5271C3[];
static Base_Class bases_S5271C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5271C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S5271C2[];
extern void _ZN7S5271C2D1Ev();
extern void _ZN7S5271C2D0Ev();
extern void _ZN7S5271C32v5Ev();
extern void _ZN7S5271C32v6Ev();
extern void _ZN7S5271C32v7Ev();
extern void _ZN7S5271C32v8Ev();
extern void _ZN7S5271C32v9Ev();
static  VTBL_ENTRY vtc_S5271C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5271C2[0]),
  (VTBL_ENTRY)&_ZN7S5271C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5271C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5271C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5271C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5271C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5271C32v8Ev,
  (VTBL_ENTRY)&_ZN7S5271C32v9Ev,
};
extern VTBL_ENTRY _ZTI7S5271C2[];
extern  VTBL_ENTRY _ZTV7S5271C2[];
Class_Descriptor cd_S5271C2 = {  "S5271C2", // class name
  bases_S5271C2, 1,
  &(vtc_S5271C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S5271C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5271C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5271C1  : S5271C2 {
  int s5271c1f0;
  virtual void  v1(); // _ZN7S5271C12v1Ev
  virtual void  v2(); // _ZN7S5271C12v2Ev
  virtual void  v3(); // _ZN7S5271C12v3Ev
  virtual void  v4(); // _ZN7S5271C12v4Ev
  ~S5271C1(); // tgen
  S5271C1(); // tgen
};
//SIG(1 S5271C1) C1{ BC2{ BC3{ vd v5 v6 v7 v8 v9} Fp[2]} v1 v2 v3 v4 Fi}


void  S5271C1 ::v1(){vfunc_called(this, "_ZN7S5271C12v1Ev");}
void  S5271C1 ::v2(){vfunc_called(this, "_ZN7S5271C12v2Ev");}
void  S5271C1 ::v3(){vfunc_called(this, "_ZN7S5271C12v3Ev");}
void  S5271C1 ::v4(){vfunc_called(this, "_ZN7S5271C12v4Ev");}
S5271C1 ::~S5271C1(){ note_dtor("S5271C1", this);} // tgen
S5271C1 ::S5271C1(){ note_ctor("S5271C1", this);} // tgen

static void Test_S5271C1()
{
  extern Class_Descriptor cd_S5271C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S5271C1, buf);
    S5271C1 *dp, &lv = *(dp=new (buf) S5271C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S5271C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5271C1)");
    check_base_class_offset(lv, (S5271C3*)(S5271C2*), 0, "S5271C1");
    check_base_class_offset(lv, (S5271C2*), 0, "S5271C1");
    check_field_offset(lv, s5271c1f0, ABISELECT(24,12), "S5271C1.s5271c1f0");
    test_class_info(&lv, &cd_S5271C1);
    dp->~S5271C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5271C1(Test_S5271C1, "S5271C1", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S5271C1C1Ev();
extern void _ZN7S5271C1D1Ev();
Name_Map name_map_S5271C1[] = {
  NSPAIR(_ZN7S5271C1C1Ev),
  NSPAIR(_ZN7S5271C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5271C3;
extern VTBL_ENTRY _ZTI7S5271C3[];
extern  VTBL_ENTRY _ZTV7S5271C3[];
extern Class_Descriptor cd_S5271C2;
extern VTBL_ENTRY _ZTI7S5271C2[];
extern  VTBL_ENTRY _ZTV7S5271C2[];
static Base_Class bases_S5271C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5271C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S5271C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S5271C1[];
extern void _ZN7S5271C1D1Ev();
extern void _ZN7S5271C1D0Ev();
extern void _ZN7S5271C32v5Ev();
extern void _ZN7S5271C32v6Ev();
extern void _ZN7S5271C32v7Ev();
extern void _ZN7S5271C32v8Ev();
extern void _ZN7S5271C32v9Ev();
extern void _ZN7S5271C12v1Ev();
extern void _ZN7S5271C12v2Ev();
extern void _ZN7S5271C12v3Ev();
extern void _ZN7S5271C12v4Ev();
static  VTBL_ENTRY vtc_S5271C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5271C1[0]),
  (VTBL_ENTRY)&_ZN7S5271C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5271C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5271C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5271C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5271C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5271C32v8Ev,
  (VTBL_ENTRY)&_ZN7S5271C32v9Ev,
  (VTBL_ENTRY)&_ZN7S5271C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5271C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5271C12v3Ev,
  (VTBL_ENTRY)&_ZN7S5271C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S5271C1[];
extern  VTBL_ENTRY _ZTV7S5271C1[];
Class_Descriptor cd_S5271C1 = {  "S5271C1", // class name
  bases_S5271C1, 2,
  &(vtc_S5271C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S5271C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5271C1),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  S10091C2  {
  virtual  ~S10091C2(); // _ZN8S10091C2D1Ev
  virtual void  v6(); // _ZN8S10091C22v6Ev
  virtual void  v7(); // _ZN8S10091C22v7Ev
  virtual void  v8(); // _ZN8S10091C22v8Ev
  virtual void  v9(); // _ZN8S10091C22v9Ev
  virtual void  v10(); // _ZN8S10091C23v10Ev
  S10091C2(); // tgen
};
//SIG(-1 S10091C2) C1{ vd v1 v2 v3 v4 v5}


 S10091C2 ::~S10091C2(){ note_dtor("S10091C2", this);}
void  S10091C2 ::v6(){vfunc_called(this, "_ZN8S10091C22v6Ev");}
void  S10091C2 ::v7(){vfunc_called(this, "_ZN8S10091C22v7Ev");}
void  S10091C2 ::v8(){vfunc_called(this, "_ZN8S10091C22v8Ev");}
void  S10091C2 ::v9(){vfunc_called(this, "_ZN8S10091C22v9Ev");}
void  S10091C2 ::v10(){vfunc_called(this, "_ZN8S10091C23v10Ev");}
S10091C2 ::S10091C2(){ note_ctor("S10091C2", this);} // tgen

static void Test_S10091C2()
{
  extern Class_Descriptor cd_S10091C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S10091C2, buf);
    S10091C2 *dp, &lv = *(dp=new (buf) S10091C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S10091C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10091C2)");
    test_class_info(&lv, &cd_S10091C2);
    dp->~S10091C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10091C2(Test_S10091C2, "S10091C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S10091C2C1Ev();
extern void _ZN8S10091C2D1Ev();
Name_Map name_map_S10091C2[] = {
  NSPAIR(_ZN8S10091C2C1Ev),
  NSPAIR(_ZN8S10091C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10091C2[];
extern void _ZN8S10091C2D1Ev();
extern void _ZN8S10091C2D0Ev();
extern void _ZN8S10091C22v6Ev();
extern void _ZN8S10091C22v7Ev();
extern void _ZN8S10091C22v8Ev();
extern void _ZN8S10091C22v9Ev();
extern void _ZN8S10091C23v10Ev();
static  VTBL_ENTRY vtc_S10091C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10091C2[0]),
  (VTBL_ENTRY)&_ZN8S10091C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10091C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10091C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10091C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10091C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10091C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10091C23v10Ev,
};
extern VTBL_ENTRY _ZTI8S10091C2[];
extern  VTBL_ENTRY _ZTV8S10091C2[];
Class_Descriptor cd_S10091C2 = {  "S10091C2", // class name
  0,0,//no base classes
  &(vtc_S10091C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S10091C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10091C2),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  S10091C1  : S10091C2 {
  void *s10091c1f0;
  virtual  ~S10091C1(); // _ZN8S10091C1D1Ev
  virtual void  v1(); // _ZN8S10091C12v1Ev
  virtual void  v2(); // _ZN8S10091C12v2Ev
  virtual void  v3(); // _ZN8S10091C12v3Ev
  virtual void  v4(); // _ZN8S10091C12v4Ev
  virtual void  v5(); // _ZN8S10091C12v5Ev
  S10091C1(); // tgen
};
//SIG(1 S10091C1) C1{ BC2{ vd v6 v7 v8 v9 v10} vd v1 v2 v3 v4 v5 Fp}


 S10091C1 ::~S10091C1(){ note_dtor("S10091C1", this);}
void  S10091C1 ::v1(){vfunc_called(this, "_ZN8S10091C12v1Ev");}
void  S10091C1 ::v2(){vfunc_called(this, "_ZN8S10091C12v2Ev");}
void  S10091C1 ::v3(){vfunc_called(this, "_ZN8S10091C12v3Ev");}
void  S10091C1 ::v4(){vfunc_called(this, "_ZN8S10091C12v4Ev");}
void  S10091C1 ::v5(){vfunc_called(this, "_ZN8S10091C12v5Ev");}
S10091C1 ::S10091C1(){ note_ctor("S10091C1", this);} // tgen

static void Test_S10091C1()
{
  extern Class_Descriptor cd_S10091C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S10091C1, buf);
    S10091C1 *dp, &lv = *(dp=new (buf) S10091C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S10091C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10091C1)");
    check_base_class_offset(lv, (S10091C2*), 0, "S10091C1");
    check_field_offset(lv, s10091c1f0, ABISELECT(8,4), "S10091C1.s10091c1f0");
    test_class_info(&lv, &cd_S10091C1);
    dp->~S10091C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10091C1(Test_S10091C1, "S10091C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S10091C1C1Ev();
extern void _ZN8S10091C1D1Ev();
Name_Map name_map_S10091C1[] = {
  NSPAIR(_ZN8S10091C1C1Ev),
  NSPAIR(_ZN8S10091C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10091C2;
extern VTBL_ENTRY _ZTI8S10091C2[];
extern  VTBL_ENTRY _ZTV8S10091C2[];
static Base_Class bases_S10091C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10091C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S10091C1[];
extern void _ZN8S10091C1D1Ev();
extern void _ZN8S10091C1D0Ev();
extern void _ZN8S10091C22v6Ev();
extern void _ZN8S10091C22v7Ev();
extern void _ZN8S10091C22v8Ev();
extern void _ZN8S10091C22v9Ev();
extern void _ZN8S10091C23v10Ev();
extern void _ZN8S10091C12v1Ev();
extern void _ZN8S10091C12v2Ev();
extern void _ZN8S10091C12v3Ev();
extern void _ZN8S10091C12v4Ev();
extern void _ZN8S10091C12v5Ev();
static  VTBL_ENTRY vtc_S10091C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10091C1[0]),
  (VTBL_ENTRY)&_ZN8S10091C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10091C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10091C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10091C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10091C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10091C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10091C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10091C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10091C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10091C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10091C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10091C12v5Ev,
};
extern VTBL_ENTRY _ZTI8S10091C1[];
extern  VTBL_ENTRY _ZTV8S10091C1[];
Class_Descriptor cd_S10091C1 = {  "S10091C1", // class name
  bases_S10091C1, 1,
  &(vtc_S10091C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S10091C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10091C1),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5272C3  {
  virtual  ~S5272C3(); // _ZN7S5272C3D1Ev
  virtual void  v5(); // _ZN7S5272C32v5Ev
  virtual void  v6(); // _ZN7S5272C32v6Ev
  virtual void  v7(); // _ZN7S5272C32v7Ev
  virtual void  v8(); // _ZN7S5272C32v8Ev
  virtual void  v9(); // _ZN7S5272C32v9Ev
  S5272C3(); // tgen
};
//SIG(-1 S5272C3) C1{ vd v1 v2 v3 v4 v5}


 S5272C3 ::~S5272C3(){ note_dtor("S5272C3", this);}
void  S5272C3 ::v5(){vfunc_called(this, "_ZN7S5272C32v5Ev");}
void  S5272C3 ::v6(){vfunc_called(this, "_ZN7S5272C32v6Ev");}
void  S5272C3 ::v7(){vfunc_called(this, "_ZN7S5272C32v7Ev");}
void  S5272C3 ::v8(){vfunc_called(this, "_ZN7S5272C32v8Ev");}
void  S5272C3 ::v9(){vfunc_called(this, "_ZN7S5272C32v9Ev");}
S5272C3 ::S5272C3(){ note_ctor("S5272C3", this);} // tgen

static void Test_S5272C3()
{
  extern Class_Descriptor cd_S5272C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S5272C3, buf);
    S5272C3 *dp, &lv = *(dp=new (buf) S5272C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S5272C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5272C3)");
    test_class_info(&lv, &cd_S5272C3);
    dp->~S5272C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5272C3(Test_S5272C3, "S5272C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S5272C3C1Ev();
extern void _ZN7S5272C3D1Ev();
Name_Map name_map_S5272C3[] = {
  NSPAIR(_ZN7S5272C3C1Ev),
  NSPAIR(_ZN7S5272C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5272C3[];
extern void _ZN7S5272C3D1Ev();
extern void _ZN7S5272C3D0Ev();
extern void _ZN7S5272C32v5Ev();
extern void _ZN7S5272C32v6Ev();
extern void _ZN7S5272C32v7Ev();
extern void _ZN7S5272C32v8Ev();
extern void _ZN7S5272C32v9Ev();
static  VTBL_ENTRY vtc_S5272C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5272C3[0]),
  (VTBL_ENTRY)&_ZN7S5272C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5272C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5272C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5272C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5272C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5272C32v8Ev,
  (VTBL_ENTRY)&_ZN7S5272C32v9Ev,
};
extern VTBL_ENTRY _ZTI7S5272C3[];
extern  VTBL_ENTRY _ZTV7S5272C3[];
Class_Descriptor cd_S5272C3 = {  "S5272C3", // class name
  0,0,//no base classes
  &(vtc_S5272C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S5272C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5272C3),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  S5272C2  : S5272C3 {
  void *s5272c2f0[2];
  ~S5272C2(); // tgen
  S5272C2(); // tgen
};
//SIG(-1 S5272C2) C1{ BC2{ vd v1 v2 v3 v4 v5} Fp[2]}


S5272C2 ::~S5272C2(){ note_dtor("S5272C2", this);} // tgen
S5272C2 ::S5272C2(){ note_ctor("S5272C2", this);} // tgen

static void Test_S5272C2()
{
  extern Class_Descriptor cd_S5272C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S5272C2, buf);
    S5272C2 *dp, &lv = *(dp=new (buf) S5272C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S5272C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5272C2)");
    check_base_class_offset(lv, (S5272C3*), 0, "S5272C2");
    check_field_offset(lv, s5272c2f0, ABISELECT(8,4), "S5272C2.s5272c2f0");
    test_class_info(&lv, &cd_S5272C2);
    dp->~S5272C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5272C2(Test_S5272C2, "S5272C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S5272C2C1Ev();
extern void _ZN7S5272C2D1Ev();
Name_Map name_map_S5272C2[] = {
  NSPAIR(_ZN7S5272C2C1Ev),
  NSPAIR(_ZN7S5272C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5272C3;
extern VTBL_ENTRY _ZTI7S5272C3[];
extern  VTBL_ENTRY _ZTV7S5272C3[];
static Base_Class bases_S5272C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5272C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S5272C2[];
extern void _ZN7S5272C2D1Ev();
extern void _ZN7S5272C2D0Ev();
extern void _ZN7S5272C32v5Ev();
extern void _ZN7S5272C32v6Ev();
extern void _ZN7S5272C32v7Ev();
extern void _ZN7S5272C32v8Ev();
extern void _ZN7S5272C32v9Ev();
static  VTBL_ENTRY vtc_S5272C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5272C2[0]),
  (VTBL_ENTRY)&_ZN7S5272C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5272C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5272C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5272C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5272C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5272C32v8Ev,
  (VTBL_ENTRY)&_ZN7S5272C32v9Ev,
};
extern VTBL_ENTRY _ZTI7S5272C2[];
extern  VTBL_ENTRY _ZTV7S5272C2[];
Class_Descriptor cd_S5272C2 = {  "S5272C2", // class name
  bases_S5272C2, 1,
  &(vtc_S5272C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S5272C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5272C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5272C1  : S5272C2 {
  virtual void  v1(); // _ZN7S5272C12v1Ev
  virtual void  v2(); // _ZN7S5272C12v2Ev
  virtual void  v3(); // _ZN7S5272C12v3Ev
  virtual void  v4(); // _ZN7S5272C12v4Ev
  ~S5272C1(); // tgen
  S5272C1(); // tgen
};
//SIG(1 S5272C1) C1{ BC2{ BC3{ vd v5 v6 v7 v8 v9} Fp[2]} v1 v2 v3 v4}


void  S5272C1 ::v1(){vfunc_called(this, "_ZN7S5272C12v1Ev");}
void  S5272C1 ::v2(){vfunc_called(this, "_ZN7S5272C12v2Ev");}
void  S5272C1 ::v3(){vfunc_called(this, "_ZN7S5272C12v3Ev");}
void  S5272C1 ::v4(){vfunc_called(this, "_ZN7S5272C12v4Ev");}
S5272C1 ::~S5272C1(){ note_dtor("S5272C1", this);} // tgen
S5272C1 ::S5272C1(){ note_ctor("S5272C1", this);} // tgen

static void Test_S5272C1()
{
  extern Class_Descriptor cd_S5272C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S5272C1, buf);
    S5272C1 *dp, &lv = *(dp=new (buf) S5272C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S5272C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5272C1)");
    check_base_class_offset(lv, (S5272C3*)(S5272C2*), 0, "S5272C1");
    check_base_class_offset(lv, (S5272C2*), 0, "S5272C1");
    test_class_info(&lv, &cd_S5272C1);
    dp->~S5272C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5272C1(Test_S5272C1, "S5272C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S5272C1C1Ev();
extern void _ZN7S5272C1D1Ev();
Name_Map name_map_S5272C1[] = {
  NSPAIR(_ZN7S5272C1C1Ev),
  NSPAIR(_ZN7S5272C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5272C3;
extern VTBL_ENTRY _ZTI7S5272C3[];
extern  VTBL_ENTRY _ZTV7S5272C3[];
extern Class_Descriptor cd_S5272C2;
extern VTBL_ENTRY _ZTI7S5272C2[];
extern  VTBL_ENTRY _ZTV7S5272C2[];
static Base_Class bases_S5272C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5272C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S5272C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S5272C1[];
extern void _ZN7S5272C1D1Ev();
extern void _ZN7S5272C1D0Ev();
extern void _ZN7S5272C32v5Ev();
extern void _ZN7S5272C32v6Ev();
extern void _ZN7S5272C32v7Ev();
extern void _ZN7S5272C32v8Ev();
extern void _ZN7S5272C32v9Ev();
extern void _ZN7S5272C12v1Ev();
extern void _ZN7S5272C12v2Ev();
extern void _ZN7S5272C12v3Ev();
extern void _ZN7S5272C12v4Ev();
static  VTBL_ENTRY vtc_S5272C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5272C1[0]),
  (VTBL_ENTRY)&_ZN7S5272C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5272C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5272C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5272C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5272C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5272C32v8Ev,
  (VTBL_ENTRY)&_ZN7S5272C32v9Ev,
  (VTBL_ENTRY)&_ZN7S5272C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5272C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5272C12v3Ev,
  (VTBL_ENTRY)&_ZN7S5272C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S5272C1[];
extern  VTBL_ENTRY _ZTV7S5272C1[];
Class_Descriptor cd_S5272C1 = {  "S5272C1", // class name
  bases_S5272C1, 2,
  &(vtc_S5272C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S5272C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5272C1),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  S7044C2  {
  virtual  ~S7044C2(); // _ZN7S7044C2D1Ev
  virtual void  v6(); // _ZN7S7044C22v6Ev
  virtual void  v7(); // _ZN7S7044C22v7Ev
  virtual void  v8(); // _ZN7S7044C22v8Ev
  virtual void  v9(); // _ZN7S7044C22v9Ev
  virtual void  v10(); // _ZN7S7044C23v10Ev
  S7044C2(); // tgen
};
//SIG(-1 S7044C2) C1{ vd v1 v2 v3 v4 v5}


 S7044C2 ::~S7044C2(){ note_dtor("S7044C2", this);}
void  S7044C2 ::v6(){vfunc_called(this, "_ZN7S7044C22v6Ev");}
void  S7044C2 ::v7(){vfunc_called(this, "_ZN7S7044C22v7Ev");}
void  S7044C2 ::v8(){vfunc_called(this, "_ZN7S7044C22v8Ev");}
void  S7044C2 ::v9(){vfunc_called(this, "_ZN7S7044C22v9Ev");}
void  S7044C2 ::v10(){vfunc_called(this, "_ZN7S7044C23v10Ev");}
S7044C2 ::S7044C2(){ note_ctor("S7044C2", this);} // tgen

static void Test_S7044C2()
{
  extern Class_Descriptor cd_S7044C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7044C2, buf);
    S7044C2 *dp, &lv = *(dp=new (buf) S7044C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7044C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7044C2)");
    test_class_info(&lv, &cd_S7044C2);
    dp->~S7044C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7044C2(Test_S7044C2, "S7044C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7044C2C1Ev();
extern void _ZN7S7044C2D1Ev();
Name_Map name_map_S7044C2[] = {
  NSPAIR(_ZN7S7044C2C1Ev),
  NSPAIR(_ZN7S7044C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7044C2[];
extern void _ZN7S7044C2D1Ev();
extern void _ZN7S7044C2D0Ev();
extern void _ZN7S7044C22v6Ev();
extern void _ZN7S7044C22v7Ev();
extern void _ZN7S7044C22v8Ev();
extern void _ZN7S7044C22v9Ev();
extern void _ZN7S7044C23v10Ev();
static  VTBL_ENTRY vtc_S7044C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7044C2[0]),
  (VTBL_ENTRY)&_ZN7S7044C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7044C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7044C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7044C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7044C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7044C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7044C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S7044C2[];
extern  VTBL_ENTRY _ZTV7S7044C2[];
Class_Descriptor cd_S7044C2 = {  "S7044C2", // class name
  0,0,//no base classes
  &(vtc_S7044C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7044C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7044C2),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  S7044C1  : S7044C2 {
  void *s7044c1f0;
  virtual  ~S7044C1(); // _ZN7S7044C1D1Ev
  virtual void  v1(); // _ZN7S7044C12v1Ev
  virtual void  v2(); // _ZN7S7044C12v2Ev
  virtual void  v3(); // _ZN7S7044C12v3Ev
  virtual void  v4(); // _ZN7S7044C12v4Ev
  virtual void  v5(); // _ZN7S7044C12v5Ev
  S7044C1(); // tgen
};
//SIG(1 S7044C1) C1{ BC2{ vd v6 v7 v8 v9 v10} vd v1 v2 v3 v4 v5 Fp}


 S7044C1 ::~S7044C1(){ note_dtor("S7044C1", this);}
void  S7044C1 ::v1(){vfunc_called(this, "_ZN7S7044C12v1Ev");}
void  S7044C1 ::v2(){vfunc_called(this, "_ZN7S7044C12v2Ev");}
void  S7044C1 ::v3(){vfunc_called(this, "_ZN7S7044C12v3Ev");}
void  S7044C1 ::v4(){vfunc_called(this, "_ZN7S7044C12v4Ev");}
void  S7044C1 ::v5(){vfunc_called(this, "_ZN7S7044C12v5Ev");}
S7044C1 ::S7044C1(){ note_ctor("S7044C1", this);} // tgen

static void Test_S7044C1()
{
  extern Class_Descriptor cd_S7044C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7044C1, buf);
    S7044C1 *dp, &lv = *(dp=new (buf) S7044C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7044C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7044C1)");
    check_base_class_offset(lv, (S7044C2*), 0, "S7044C1");
    check_field_offset(lv, s7044c1f0, ABISELECT(8,4), "S7044C1.s7044c1f0");
    test_class_info(&lv, &cd_S7044C1);
    dp->~S7044C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7044C1(Test_S7044C1, "S7044C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7044C1C1Ev();
extern void _ZN7S7044C1D1Ev();
Name_Map name_map_S7044C1[] = {
  NSPAIR(_ZN7S7044C1C1Ev),
  NSPAIR(_ZN7S7044C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7044C2;
extern VTBL_ENTRY _ZTI7S7044C2[];
extern  VTBL_ENTRY _ZTV7S7044C2[];
static Base_Class bases_S7044C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7044C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S7044C1[];
extern void _ZN7S7044C1D1Ev();
extern void _ZN7S7044C1D0Ev();
extern void _ZN7S7044C22v6Ev();
extern void _ZN7S7044C22v7Ev();
extern void _ZN7S7044C22v8Ev();
extern void _ZN7S7044C22v9Ev();
extern void _ZN7S7044C23v10Ev();
extern void _ZN7S7044C12v1Ev();
extern void _ZN7S7044C12v2Ev();
extern void _ZN7S7044C12v3Ev();
extern void _ZN7S7044C12v4Ev();
extern void _ZN7S7044C12v5Ev();
static  VTBL_ENTRY vtc_S7044C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7044C1[0]),
  (VTBL_ENTRY)&_ZN7S7044C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7044C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7044C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7044C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7044C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7044C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7044C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7044C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7044C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7044C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7044C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7044C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S7044C1[];
extern  VTBL_ENTRY _ZTV7S7044C1[];
Class_Descriptor cd_S7044C1 = {  "S7044C1", // class name
  bases_S7044C1, 1,
  &(vtc_S7044C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7044C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7044C1),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9943C2  {
  virtual  ~S9943C2(); // _ZN7S9943C2D1Ev
  virtual void  v5(); // _ZN7S9943C22v5Ev
  virtual void  v6(); // _ZN7S9943C22v6Ev
  virtual void  v7(); // _ZN7S9943C22v7Ev
  virtual void  v8(); // _ZN7S9943C22v8Ev
  virtual void  v9(); // _ZN7S9943C22v9Ev
  S9943C2(); // tgen
};
//SIG(-1 S9943C2) C1{ vd v1 v2 v3 v4 v5}


 S9943C2 ::~S9943C2(){ note_dtor("S9943C2", this);}
void  S9943C2 ::v5(){vfunc_called(this, "_ZN7S9943C22v5Ev");}
void  S9943C2 ::v6(){vfunc_called(this, "_ZN7S9943C22v6Ev");}
void  S9943C2 ::v7(){vfunc_called(this, "_ZN7S9943C22v7Ev");}
void  S9943C2 ::v8(){vfunc_called(this, "_ZN7S9943C22v8Ev");}
void  S9943C2 ::v9(){vfunc_called(this, "_ZN7S9943C22v9Ev");}
S9943C2 ::S9943C2(){ note_ctor("S9943C2", this);} // tgen

static void Test_S9943C2()
{
  extern Class_Descriptor cd_S9943C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9943C2, buf);
    S9943C2 *dp, &lv = *(dp=new (buf) S9943C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9943C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9943C2)");
    test_class_info(&lv, &cd_S9943C2);
    dp->~S9943C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9943C2(Test_S9943C2, "S9943C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9943C2C1Ev();
extern void _ZN7S9943C2D1Ev();
Name_Map name_map_S9943C2[] = {
  NSPAIR(_ZN7S9943C2C1Ev),
  NSPAIR(_ZN7S9943C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9943C2[];
extern void _ZN7S9943C2D1Ev();
extern void _ZN7S9943C2D0Ev();
extern void _ZN7S9943C22v5Ev();
extern void _ZN7S9943C22v6Ev();
extern void _ZN7S9943C22v7Ev();
extern void _ZN7S9943C22v8Ev();
extern void _ZN7S9943C22v9Ev();
static  VTBL_ENTRY vtc_S9943C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9943C2[0]),
  (VTBL_ENTRY)&_ZN7S9943C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9943C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9943C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9943C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9943C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9943C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9943C22v9Ev,
};
extern VTBL_ENTRY _ZTI7S9943C2[];
extern  VTBL_ENTRY _ZTV7S9943C2[];
Class_Descriptor cd_S9943C2 = {  "S9943C2", // class name
  0,0,//no base classes
  &(vtc_S9943C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9943C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9943C2),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  S9943C1  : S9943C2 {
  int s9943c1f0[19];
  virtual  ~S9943C1(); // _ZN7S9943C1D1Ev
  virtual void  v1(); // _ZN7S9943C12v1Ev
  virtual void  v2(); // _ZN7S9943C12v2Ev
  virtual void  v3(); // _ZN7S9943C12v3Ev
  virtual void  v4(); // _ZN7S9943C12v4Ev
  S9943C1(); // tgen
};
//SIG(1 S9943C1) C1{ BC2{ vd v5 v6 v7 v8 v9} vd v1 v2 v3 v4 Fi[19]}


 S9943C1 ::~S9943C1(){ note_dtor("S9943C1", this);}
void  S9943C1 ::v1(){vfunc_called(this, "_ZN7S9943C12v1Ev");}
void  S9943C1 ::v2(){vfunc_called(this, "_ZN7S9943C12v2Ev");}
void  S9943C1 ::v3(){vfunc_called(this, "_ZN7S9943C12v3Ev");}
void  S9943C1 ::v4(){vfunc_called(this, "_ZN7S9943C12v4Ev");}
S9943C1 ::S9943C1(){ note_ctor("S9943C1", this);} // tgen

static void Test_S9943C1()
{
  extern Class_Descriptor cd_S9943C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,21)];
    init_test(&cd_S9943C1, buf);
    S9943C1 *dp, &lv = *(dp=new (buf) S9943C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,80), "sizeof(S9943C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9943C1)");
    check_base_class_offset(lv, (S9943C2*), 0, "S9943C1");
    check_field_offset(lv, s9943c1f0, ABISELECT(8,4), "S9943C1.s9943c1f0");
    test_class_info(&lv, &cd_S9943C1);
    dp->~S9943C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9943C1(Test_S9943C1, "S9943C1", ABISELECT(88,80));

#else // __cplusplus

extern void _ZN7S9943C1C1Ev();
extern void _ZN7S9943C1D1Ev();
Name_Map name_map_S9943C1[] = {
  NSPAIR(_ZN7S9943C1C1Ev),
  NSPAIR(_ZN7S9943C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9943C2;
extern VTBL_ENTRY _ZTI7S9943C2[];
extern  VTBL_ENTRY _ZTV7S9943C2[];
static Base_Class bases_S9943C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9943C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S9943C1[];
extern void _ZN7S9943C1D1Ev();
extern void _ZN7S9943C1D0Ev();
extern void _ZN7S9943C22v5Ev();
extern void _ZN7S9943C22v6Ev();
extern void _ZN7S9943C22v7Ev();
extern void _ZN7S9943C22v8Ev();
extern void _ZN7S9943C22v9Ev();
extern void _ZN7S9943C12v1Ev();
extern void _ZN7S9943C12v2Ev();
extern void _ZN7S9943C12v3Ev();
extern void _ZN7S9943C12v4Ev();
static  VTBL_ENTRY vtc_S9943C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9943C1[0]),
  (VTBL_ENTRY)&_ZN7S9943C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9943C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9943C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9943C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9943C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9943C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9943C22v9Ev,
  (VTBL_ENTRY)&_ZN7S9943C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9943C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9943C12v3Ev,
  (VTBL_ENTRY)&_ZN7S9943C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S9943C1[];
extern  VTBL_ENTRY _ZTV7S9943C1[];
Class_Descriptor cd_S9943C1 = {  "S9943C1", // class name
  bases_S9943C1, 1,
  &(vtc_S9943C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,80), // object size
  NSPAIRA(_ZTI7S9943C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9943C1),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  S9812C2  {
  virtual  ~S9812C2(); // _ZN7S9812C2D1Ev
  virtual void  v4(); // _ZN7S9812C22v4Ev
  virtual void  v5(); // _ZN7S9812C22v5Ev
  virtual void  v6(); // _ZN7S9812C22v6Ev
  virtual void  v7(); // _ZN7S9812C22v7Ev
  virtual void  v8(); // _ZN7S9812C22v8Ev
  S9812C2(); // tgen
};
//SIG(-1 S9812C2) C1{ vd v1 v2 v3 v4 v5}


 S9812C2 ::~S9812C2(){ note_dtor("S9812C2", this);}
void  S9812C2 ::v4(){vfunc_called(this, "_ZN7S9812C22v4Ev");}
void  S9812C2 ::v5(){vfunc_called(this, "_ZN7S9812C22v5Ev");}
void  S9812C2 ::v6(){vfunc_called(this, "_ZN7S9812C22v6Ev");}
void  S9812C2 ::v7(){vfunc_called(this, "_ZN7S9812C22v7Ev");}
void  S9812C2 ::v8(){vfunc_called(this, "_ZN7S9812C22v8Ev");}
S9812C2 ::S9812C2(){ note_ctor("S9812C2", this);} // tgen

static void Test_S9812C2()
{
  extern Class_Descriptor cd_S9812C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9812C2, buf);
    S9812C2 *dp, &lv = *(dp=new (buf) S9812C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9812C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9812C2)");
    test_class_info(&lv, &cd_S9812C2);
    dp->~S9812C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9812C2(Test_S9812C2, "S9812C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9812C2C1Ev();
extern void _ZN7S9812C2D1Ev();
Name_Map name_map_S9812C2[] = {
  NSPAIR(_ZN7S9812C2C1Ev),
  NSPAIR(_ZN7S9812C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9812C2[];
extern void _ZN7S9812C2D1Ev();
extern void _ZN7S9812C2D0Ev();
extern void _ZN7S9812C22v4Ev();
extern void _ZN7S9812C22v5Ev();
extern void _ZN7S9812C22v6Ev();
extern void _ZN7S9812C22v7Ev();
extern void _ZN7S9812C22v8Ev();
static  VTBL_ENTRY vtc_S9812C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9812C2[0]),
  (VTBL_ENTRY)&_ZN7S9812C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9812C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9812C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9812C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9812C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9812C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9812C22v8Ev,
};
extern VTBL_ENTRY _ZTI7S9812C2[];
extern  VTBL_ENTRY _ZTV7S9812C2[];
Class_Descriptor cd_S9812C2 = {  "S9812C2", // class name
  0,0,//no base classes
  &(vtc_S9812C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9812C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9812C2),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  S9812C1  : S9812C2 {
  char s9812c1f0[64];
  virtual  ~S9812C1(); // _ZN7S9812C1D1Ev
  virtual void  v1(); // _ZN7S9812C12v1Ev
  virtual void  v2(); // _ZN7S9812C12v2Ev
  virtual void  v3(); // _ZN7S9812C12v3Ev
  S9812C1(); // tgen
};
//SIG(1 S9812C1) C1{ BC2{ vd v4 v5 v6 v7 v8} vd v1 v2 v3 Fc[64]}


 S9812C1 ::~S9812C1(){ note_dtor("S9812C1", this);}
void  S9812C1 ::v1(){vfunc_called(this, "_ZN7S9812C12v1Ev");}
void  S9812C1 ::v2(){vfunc_called(this, "_ZN7S9812C12v2Ev");}
void  S9812C1 ::v3(){vfunc_called(this, "_ZN7S9812C12v3Ev");}
S9812C1 ::S9812C1(){ note_ctor("S9812C1", this);} // tgen

static void Test_S9812C1()
{
  extern Class_Descriptor cd_S9812C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,18)];
    init_test(&cd_S9812C1, buf);
    S9812C1 *dp, &lv = *(dp=new (buf) S9812C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,68), "sizeof(S9812C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9812C1)");
    check_base_class_offset(lv, (S9812C2*), 0, "S9812C1");
    check_field_offset(lv, s9812c1f0, ABISELECT(8,4), "S9812C1.s9812c1f0");
    test_class_info(&lv, &cd_S9812C1);
    dp->~S9812C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9812C1(Test_S9812C1, "S9812C1", ABISELECT(72,68));

#else // __cplusplus

extern void _ZN7S9812C1C1Ev();
extern void _ZN7S9812C1D1Ev();
Name_Map name_map_S9812C1[] = {
  NSPAIR(_ZN7S9812C1C1Ev),
  NSPAIR(_ZN7S9812C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9812C2;
extern VTBL_ENTRY _ZTI7S9812C2[];
extern  VTBL_ENTRY _ZTV7S9812C2[];
static Base_Class bases_S9812C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9812C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S9812C1[];
extern void _ZN7S9812C1D1Ev();
extern void _ZN7S9812C1D0Ev();
extern void _ZN7S9812C22v4Ev();
extern void _ZN7S9812C22v5Ev();
extern void _ZN7S9812C22v6Ev();
extern void _ZN7S9812C22v7Ev();
extern void _ZN7S9812C22v8Ev();
extern void _ZN7S9812C12v1Ev();
extern void _ZN7S9812C12v2Ev();
extern void _ZN7S9812C12v3Ev();
static  VTBL_ENTRY vtc_S9812C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9812C1[0]),
  (VTBL_ENTRY)&_ZN7S9812C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9812C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9812C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9812C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9812C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9812C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9812C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9812C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9812C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9812C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S9812C1[];
extern  VTBL_ENTRY _ZTV7S9812C1[];
Class_Descriptor cd_S9812C1 = {  "S9812C1", // class name
  bases_S9812C1, 1,
  &(vtc_S9812C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,68), // object size
  NSPAIRA(_ZTI7S9812C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9812C1),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  S7043C2  {
  virtual  ~S7043C2(); // _ZN7S7043C2D1Ev
  virtual void  v6(); // _ZN7S7043C22v6Ev
  virtual void  v7(); // _ZN7S7043C22v7Ev
  virtual void  v8(); // _ZN7S7043C22v8Ev
  virtual void  v9(); // _ZN7S7043C22v9Ev
  virtual void  v10(); // _ZN7S7043C23v10Ev
  S7043C2(); // tgen
};
//SIG(-1 S7043C2) C1{ vd v1 v2 v3 v4 v5}


 S7043C2 ::~S7043C2(){ note_dtor("S7043C2", this);}
void  S7043C2 ::v6(){vfunc_called(this, "_ZN7S7043C22v6Ev");}
void  S7043C2 ::v7(){vfunc_called(this, "_ZN7S7043C22v7Ev");}
void  S7043C2 ::v8(){vfunc_called(this, "_ZN7S7043C22v8Ev");}
void  S7043C2 ::v9(){vfunc_called(this, "_ZN7S7043C22v9Ev");}
void  S7043C2 ::v10(){vfunc_called(this, "_ZN7S7043C23v10Ev");}
S7043C2 ::S7043C2(){ note_ctor("S7043C2", this);} // tgen

static void Test_S7043C2()
{
  extern Class_Descriptor cd_S7043C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7043C2, buf);
    S7043C2 *dp, &lv = *(dp=new (buf) S7043C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7043C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7043C2)");
    test_class_info(&lv, &cd_S7043C2);
    dp->~S7043C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7043C2(Test_S7043C2, "S7043C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7043C2C1Ev();
extern void _ZN7S7043C2D1Ev();
Name_Map name_map_S7043C2[] = {
  NSPAIR(_ZN7S7043C2C1Ev),
  NSPAIR(_ZN7S7043C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7043C2[];
extern void _ZN7S7043C2D1Ev();
extern void _ZN7S7043C2D0Ev();
extern void _ZN7S7043C22v6Ev();
extern void _ZN7S7043C22v7Ev();
extern void _ZN7S7043C22v8Ev();
extern void _ZN7S7043C22v9Ev();
extern void _ZN7S7043C23v10Ev();
static  VTBL_ENTRY vtc_S7043C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7043C2[0]),
  (VTBL_ENTRY)&_ZN7S7043C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7043C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7043C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7043C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7043C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7043C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7043C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S7043C2[];
extern  VTBL_ENTRY _ZTV7S7043C2[];
Class_Descriptor cd_S7043C2 = {  "S7043C2", // class name
  0,0,//no base classes
  &(vtc_S7043C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7043C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7043C2),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  S7043C1  : S7043C2 {
  virtual  ~S7043C1(); // _ZN7S7043C1D1Ev
  virtual void  v1(); // _ZN7S7043C12v1Ev
  virtual void  v2(); // _ZN7S7043C12v2Ev
  virtual void  v3(); // _ZN7S7043C12v3Ev
  virtual void  v4(); // _ZN7S7043C12v4Ev
  virtual void  v5(); // _ZN7S7043C12v5Ev
  S7043C1(); // tgen
};
//SIG(1 S7043C1) C1{ BC2{ vd v6 v7 v8 v9 v10} vd v1 v2 v3 v4 v5}


 S7043C1 ::~S7043C1(){ note_dtor("S7043C1", this);}
void  S7043C1 ::v1(){vfunc_called(this, "_ZN7S7043C12v1Ev");}
void  S7043C1 ::v2(){vfunc_called(this, "_ZN7S7043C12v2Ev");}
void  S7043C1 ::v3(){vfunc_called(this, "_ZN7S7043C12v3Ev");}
void  S7043C1 ::v4(){vfunc_called(this, "_ZN7S7043C12v4Ev");}
void  S7043C1 ::v5(){vfunc_called(this, "_ZN7S7043C12v5Ev");}
S7043C1 ::S7043C1(){ note_ctor("S7043C1", this);} // tgen

static void Test_S7043C1()
{
  extern Class_Descriptor cd_S7043C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7043C1, buf);
    S7043C1 *dp, &lv = *(dp=new (buf) S7043C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7043C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7043C1)");
    check_base_class_offset(lv, (S7043C2*), 0, "S7043C1");
    test_class_info(&lv, &cd_S7043C1);
    dp->~S7043C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7043C1(Test_S7043C1, "S7043C1", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7043C1C1Ev();
extern void _ZN7S7043C1D1Ev();
Name_Map name_map_S7043C1[] = {
  NSPAIR(_ZN7S7043C1C1Ev),
  NSPAIR(_ZN7S7043C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7043C2;
extern VTBL_ENTRY _ZTI7S7043C2[];
extern  VTBL_ENTRY _ZTV7S7043C2[];
static Base_Class bases_S7043C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7043C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S7043C1[];
extern void _ZN7S7043C1D1Ev();
extern void _ZN7S7043C1D0Ev();
extern void _ZN7S7043C22v6Ev();
extern void _ZN7S7043C22v7Ev();
extern void _ZN7S7043C22v8Ev();
extern void _ZN7S7043C22v9Ev();
extern void _ZN7S7043C23v10Ev();
extern void _ZN7S7043C12v1Ev();
extern void _ZN7S7043C12v2Ev();
extern void _ZN7S7043C12v3Ev();
extern void _ZN7S7043C12v4Ev();
extern void _ZN7S7043C12v5Ev();
static  VTBL_ENTRY vtc_S7043C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7043C1[0]),
  (VTBL_ENTRY)&_ZN7S7043C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7043C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7043C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7043C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7043C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7043C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7043C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7043C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7043C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7043C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7043C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7043C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S7043C1[];
extern  VTBL_ENTRY _ZTV7S7043C1[];
Class_Descriptor cd_S7043C1 = {  "S7043C1", // class name
  bases_S7043C1, 1,
  &(vtc_S7043C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7043C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7043C1),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10077C2  {
  virtual  ~S10077C2(); // _ZN8S10077C2D1Ev
  virtual void  v6(); // _ZN8S10077C22v6Ev
  virtual void  v7(); // _ZN8S10077C22v7Ev
  virtual void  v8(); // _ZN8S10077C22v8Ev
  virtual void  v9(); // _ZN8S10077C22v9Ev
  virtual void  v10(); // _ZN8S10077C23v10Ev
  S10077C2(); // tgen
};
//SIG(-1 S10077C2) C1{ vd v1 v2 v3 v4 v5}


 S10077C2 ::~S10077C2(){ note_dtor("S10077C2", this);}
void  S10077C2 ::v6(){vfunc_called(this, "_ZN8S10077C22v6Ev");}
void  S10077C2 ::v7(){vfunc_called(this, "_ZN8S10077C22v7Ev");}
void  S10077C2 ::v8(){vfunc_called(this, "_ZN8S10077C22v8Ev");}
void  S10077C2 ::v9(){vfunc_called(this, "_ZN8S10077C22v9Ev");}
void  S10077C2 ::v10(){vfunc_called(this, "_ZN8S10077C23v10Ev");}
S10077C2 ::S10077C2(){ note_ctor("S10077C2", this);} // tgen

static void Test_S10077C2()
{
  extern Class_Descriptor cd_S10077C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S10077C2, buf);
    S10077C2 *dp, &lv = *(dp=new (buf) S10077C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S10077C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10077C2)");
    test_class_info(&lv, &cd_S10077C2);
    dp->~S10077C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10077C2(Test_S10077C2, "S10077C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S10077C2C1Ev();
extern void _ZN8S10077C2D1Ev();
Name_Map name_map_S10077C2[] = {
  NSPAIR(_ZN8S10077C2C1Ev),
  NSPAIR(_ZN8S10077C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10077C2[];
extern void _ZN8S10077C2D1Ev();
extern void _ZN8S10077C2D0Ev();
extern void _ZN8S10077C22v6Ev();
extern void _ZN8S10077C22v7Ev();
extern void _ZN8S10077C22v8Ev();
extern void _ZN8S10077C22v9Ev();
extern void _ZN8S10077C23v10Ev();
static  VTBL_ENTRY vtc_S10077C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10077C2[0]),
  (VTBL_ENTRY)&_ZN8S10077C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10077C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10077C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10077C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10077C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10077C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10077C23v10Ev,
};
extern VTBL_ENTRY _ZTI8S10077C2[];
extern  VTBL_ENTRY _ZTV8S10077C2[];
Class_Descriptor cd_S10077C2 = {  "S10077C2", // class name
  0,0,//no base classes
  &(vtc_S10077C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S10077C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10077C2),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  S10077C1  : S10077C2 {
  void *s10077c1f0;
  virtual void  v1(); // _ZN8S10077C12v1Ev
  virtual void  v2(); // _ZN8S10077C12v2Ev
  virtual void  v3(); // _ZN8S10077C12v3Ev
  virtual void  v4(); // _ZN8S10077C12v4Ev
  virtual void  v5(); // _ZN8S10077C12v5Ev
  ~S10077C1(); // tgen
  S10077C1(); // tgen
};
//SIG(1 S10077C1) C1{ BC2{ vd v6 v7 v8 v9 v10} v1 v2 v3 v4 v5 Fp}


void  S10077C1 ::v1(){vfunc_called(this, "_ZN8S10077C12v1Ev");}
void  S10077C1 ::v2(){vfunc_called(this, "_ZN8S10077C12v2Ev");}
void  S10077C1 ::v3(){vfunc_called(this, "_ZN8S10077C12v3Ev");}
void  S10077C1 ::v4(){vfunc_called(this, "_ZN8S10077C12v4Ev");}
void  S10077C1 ::v5(){vfunc_called(this, "_ZN8S10077C12v5Ev");}
S10077C1 ::~S10077C1(){ note_dtor("S10077C1", this);} // tgen
S10077C1 ::S10077C1(){ note_ctor("S10077C1", this);} // tgen

static void Test_S10077C1()
{
  extern Class_Descriptor cd_S10077C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S10077C1, buf);
    S10077C1 *dp, &lv = *(dp=new (buf) S10077C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S10077C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10077C1)");
    check_base_class_offset(lv, (S10077C2*), 0, "S10077C1");
    check_field_offset(lv, s10077c1f0, ABISELECT(8,4), "S10077C1.s10077c1f0");
    test_class_info(&lv, &cd_S10077C1);
    dp->~S10077C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10077C1(Test_S10077C1, "S10077C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S10077C1C1Ev();
extern void _ZN8S10077C1D1Ev();
Name_Map name_map_S10077C1[] = {
  NSPAIR(_ZN8S10077C1C1Ev),
  NSPAIR(_ZN8S10077C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10077C2;
extern VTBL_ENTRY _ZTI8S10077C2[];
extern  VTBL_ENTRY _ZTV8S10077C2[];
static Base_Class bases_S10077C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10077C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI8S10077C1[];
extern void _ZN8S10077C1D1Ev();
extern void _ZN8S10077C1D0Ev();
extern void _ZN8S10077C22v6Ev();
extern void _ZN8S10077C22v7Ev();
extern void _ZN8S10077C22v8Ev();
extern void _ZN8S10077C22v9Ev();
extern void _ZN8S10077C23v10Ev();
extern void _ZN8S10077C12v1Ev();
extern void _ZN8S10077C12v2Ev();
extern void _ZN8S10077C12v3Ev();
extern void _ZN8S10077C12v4Ev();
extern void _ZN8S10077C12v5Ev();
static  VTBL_ENTRY vtc_S10077C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10077C1[0]),
  (VTBL_ENTRY)&_ZN8S10077C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10077C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10077C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10077C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10077C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10077C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10077C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10077C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10077C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10077C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10077C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10077C12v5Ev,
};
extern VTBL_ENTRY _ZTI8S10077C1[];
extern  VTBL_ENTRY _ZTV8S10077C1[];
Class_Descriptor cd_S10077C1 = {  "S10077C1", // class name
  bases_S10077C1, 1,
  &(vtc_S10077C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S10077C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10077C1),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9510C2  {
  virtual  ~S9510C2(); // _ZN7S9510C2D1Ev
  virtual void  v3(); // _ZN7S9510C22v3Ev
  virtual void  v4(); // _ZN7S9510C22v4Ev
  virtual void  v5(); // _ZN7S9510C22v5Ev
  virtual void  v6(); // _ZN7S9510C22v6Ev
  virtual void  v7(); // _ZN7S9510C22v7Ev
  S9510C2(); // tgen
};
//SIG(-1 S9510C2) C1{ vd v1 v2 v3 v4 v5}


 S9510C2 ::~S9510C2(){ note_dtor("S9510C2", this);}
void  S9510C2 ::v3(){vfunc_called(this, "_ZN7S9510C22v3Ev");}
void  S9510C2 ::v4(){vfunc_called(this, "_ZN7S9510C22v4Ev");}
void  S9510C2 ::v5(){vfunc_called(this, "_ZN7S9510C22v5Ev");}
void  S9510C2 ::v6(){vfunc_called(this, "_ZN7S9510C22v6Ev");}
void  S9510C2 ::v7(){vfunc_called(this, "_ZN7S9510C22v7Ev");}
S9510C2 ::S9510C2(){ note_ctor("S9510C2", this);} // tgen

static void Test_S9510C2()
{
  extern Class_Descriptor cd_S9510C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9510C2, buf);
    S9510C2 *dp, &lv = *(dp=new (buf) S9510C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9510C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9510C2)");
    test_class_info(&lv, &cd_S9510C2);
    dp->~S9510C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9510C2(Test_S9510C2, "S9510C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9510C2C1Ev();
extern void _ZN7S9510C2D1Ev();
Name_Map name_map_S9510C2[] = {
  NSPAIR(_ZN7S9510C2C1Ev),
  NSPAIR(_ZN7S9510C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9510C2[];
extern void _ZN7S9510C2D1Ev();
extern void _ZN7S9510C2D0Ev();
extern void _ZN7S9510C22v3Ev();
extern void _ZN7S9510C22v4Ev();
extern void _ZN7S9510C22v5Ev();
extern void _ZN7S9510C22v6Ev();
extern void _ZN7S9510C22v7Ev();
static  VTBL_ENTRY vtc_S9510C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9510C2[0]),
  (VTBL_ENTRY)&_ZN7S9510C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9510C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9510C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9510C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9510C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9510C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9510C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S9510C2[];
extern  VTBL_ENTRY _ZTV7S9510C2[];
Class_Descriptor cd_S9510C2 = {  "S9510C2", // class name
  0,0,//no base classes
  &(vtc_S9510C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9510C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9510C2),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  S9510C1  : S9510C2 {
  int s9510c1f0;
  void *s9510c1f1;
  char s9510c1f2;
  virtual  ~S9510C1(); // _ZN7S9510C1D1Ev
  virtual void  v1(); // _ZN7S9510C12v1Ev
  virtual void  v2(); // _ZN7S9510C12v2Ev
  S9510C1(); // tgen
};
//SIG(1 S9510C1) C1{ BC2{ vd v3 v4 v5 v6 v7} vd v1 v2 Fi Fp Fc}


 S9510C1 ::~S9510C1(){ note_dtor("S9510C1", this);}
void  S9510C1 ::v1(){vfunc_called(this, "_ZN7S9510C12v1Ev");}
void  S9510C1 ::v2(){vfunc_called(this, "_ZN7S9510C12v2Ev");}
S9510C1 ::S9510C1(){ note_ctor("S9510C1", this);} // tgen

static void Test_S9510C1()
{
  extern Class_Descriptor cd_S9510C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S9510C1, buf);
    S9510C1 *dp, &lv = *(dp=new (buf) S9510C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S9510C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9510C1)");
    check_base_class_offset(lv, (S9510C2*), 0, "S9510C1");
    check_field_offset(lv, s9510c1f0, ABISELECT(8,4), "S9510C1.s9510c1f0");
    check_field_offset(lv, s9510c1f1, ABISELECT(16,8), "S9510C1.s9510c1f1");
    check_field_offset(lv, s9510c1f2, ABISELECT(24,12), "S9510C1.s9510c1f2");
    test_class_info(&lv, &cd_S9510C1);
    dp->~S9510C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9510C1(Test_S9510C1, "S9510C1", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S9510C1C1Ev();
extern void _ZN7S9510C1D1Ev();
Name_Map name_map_S9510C1[] = {
  NSPAIR(_ZN7S9510C1C1Ev),
  NSPAIR(_ZN7S9510C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9510C2;
extern VTBL_ENTRY _ZTI7S9510C2[];
extern  VTBL_ENTRY _ZTV7S9510C2[];
static Base_Class bases_S9510C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9510C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S9510C1[];
extern void _ZN7S9510C1D1Ev();
extern void _ZN7S9510C1D0Ev();
extern void _ZN7S9510C22v3Ev();
extern void _ZN7S9510C22v4Ev();
extern void _ZN7S9510C22v5Ev();
extern void _ZN7S9510C22v6Ev();
extern void _ZN7S9510C22v7Ev();
extern void _ZN7S9510C12v1Ev();
extern void _ZN7S9510C12v2Ev();
static  VTBL_ENTRY vtc_S9510C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9510C1[0]),
  (VTBL_ENTRY)&_ZN7S9510C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9510C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9510C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9510C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9510C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9510C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9510C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9510C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9510C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9510C1[];
extern  VTBL_ENTRY _ZTV7S9510C1[];
Class_Descriptor cd_S9510C1 = {  "S9510C1", // class name
  bases_S9510C1, 1,
  &(vtc_S9510C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S9510C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9510C1),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17524C1  {
  void *s17524c1f0;
  ::S260C25_nt s17524c1f1;
  void  mf17524c1(); // _ZN8S17524C19mf17524c1Ev
};
//SIG(1 S17524C1) C1{ m Fp FC2{ FC3{ Fi[5]} FC4{ m Fi[2]} Fp Fi:1}}


void  S17524C1 ::mf17524c1(){}

static void Test_S17524C1()
{
  {
    init_simple_test("S17524C1");
    static S17524C1 lv;
    check2(sizeof(lv), ABISELECT(56,40), "sizeof(S17524C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17524C1)");
    check_field_offset(lv, s17524c1f0, 0, "S17524C1.s17524c1f0");
    check_field_offset(lv, s17524c1f1, ABISELECT(8,4), "S17524C1.s17524c1f1");
  }
}
static Arrange_To_Call_Me vS17524C1(Test_S17524C1, "S17524C1", ABISELECT(56,40));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20147C2  {
  virtual  ~S20147C2(); // _ZN8S20147C2D1Ev
  virtual void  v3(); // _ZN8S20147C22v3Ev
  virtual void  v4(); // _ZN8S20147C22v4Ev
  virtual void  v5(); // _ZN8S20147C22v5Ev
  virtual void  v6(); // _ZN8S20147C22v6Ev
  virtual void  v7(); // _ZN8S20147C22v7Ev
  S20147C2(); // tgen
};
//SIG(-1 S20147C2) C1{ vd v1 v2 v3 v4 v5}


 S20147C2 ::~S20147C2(){ note_dtor("S20147C2", this);}
void  S20147C2 ::v3(){vfunc_called(this, "_ZN8S20147C22v3Ev");}
void  S20147C2 ::v4(){vfunc_called(this, "_ZN8S20147C22v4Ev");}
void  S20147C2 ::v5(){vfunc_called(this, "_ZN8S20147C22v5Ev");}
void  S20147C2 ::v6(){vfunc_called(this, "_ZN8S20147C22v6Ev");}
void  S20147C2 ::v7(){vfunc_called(this, "_ZN8S20147C22v7Ev");}
S20147C2 ::S20147C2(){ note_ctor("S20147C2", this);} // tgen

static void Test_S20147C2()
{
  extern Class_Descriptor cd_S20147C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20147C2, buf);
    S20147C2 *dp, &lv = *(dp=new (buf) S20147C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20147C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20147C2)");
    test_class_info(&lv, &cd_S20147C2);
    dp->~S20147C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20147C2(Test_S20147C2, "S20147C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20147C2C1Ev();
extern void _ZN8S20147C2D1Ev();
Name_Map name_map_S20147C2[] = {
  NSPAIR(_ZN8S20147C2C1Ev),
  NSPAIR(_ZN8S20147C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20147C2[];
extern void _ZN8S20147C2D1Ev();
extern void _ZN8S20147C2D0Ev();
extern void _ZN8S20147C22v3Ev();
extern void _ZN8S20147C22v4Ev();
extern void _ZN8S20147C22v5Ev();
extern void _ZN8S20147C22v6Ev();
extern void _ZN8S20147C22v7Ev();
static  VTBL_ENTRY vtc_S20147C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20147C2[0]),
  (VTBL_ENTRY)&_ZN8S20147C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20147C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20147C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20147C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20147C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20147C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20147C22v7Ev,
};
extern VTBL_ENTRY _ZTI8S20147C2[];
extern  VTBL_ENTRY _ZTV8S20147C2[];
Class_Descriptor cd_S20147C2 = {  "S20147C2", // class name
  0,0,//no base classes
  &(vtc_S20147C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20147C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20147C2),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  S20147C1  : virtual S20147C2 {
  ::S15319C7 s20147c1f0;
  virtual  ~S20147C1(); // _ZN8S20147C1D2Ev
  virtual void  v1(); // _ZN8S20147C12v1Ev
  virtual void  v2(); // _ZN8S20147C12v2Ev
  S20147C1(); // tgen
};
//SIG(1 S20147C1) C1{ VBC2{ vd v3 v4 v5 v6 v7} vd v1 v2 FC3{}}


 S20147C1 ::~S20147C1(){ note_dtor("S20147C1", this);}
void  S20147C1 ::v1(){vfunc_called(this, "_ZN8S20147C12v1Ev");}
void  S20147C1 ::v2(){vfunc_called(this, "_ZN8S20147C12v2Ev");}
S20147C1 ::S20147C1(){ note_ctor("S20147C1", this);} // tgen

static void Test_S20147C1()
{
  extern Class_Descriptor cd_S20147C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20147C1, buf);
    S20147C1 *dp, &lv = *(dp=new (buf) S20147C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20147C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20147C1)");
    check_base_class_offset(lv, (S20147C2*), 0, "S20147C1");
    check_field_offset(lv, s20147c1f0, ABISELECT(8,4), "S20147C1.s20147c1f0");
    test_class_info(&lv, &cd_S20147C1);
    dp->~S20147C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20147C1(Test_S20147C1, "S20147C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S20147C1C1Ev();
extern void _ZN8S20147C1D2Ev();
Name_Map name_map_S20147C1[] = {
  NSPAIR(_ZN8S20147C1C1Ev),
  NSPAIR(_ZN8S20147C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20147C2;
extern VTBL_ENTRY _ZTI8S20147C2[];
extern  VTBL_ENTRY _ZTV8S20147C2[];
static Base_Class bases_S20147C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20147C2,    0, //bcp->offset
    -1, //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 _ZTI8S20147C1[];
extern void _ZN8S20147C1D1Ev();
extern void _ZN8S20147C1D0Ev();
extern void _ZN8S20147C22v3Ev();
extern void _ZN8S20147C22v4Ev();
extern void _ZN8S20147C22v5Ev();
extern void _ZN8S20147C22v6Ev();
extern void _ZN8S20147C22v7Ev();
extern void _ZN8S20147C12v1Ev();
extern void _ZN8S20147C12v2Ev();
static  VTBL_ENTRY vtc_S20147C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20147C1[0]),
  (VTBL_ENTRY)&_ZN8S20147C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20147C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20147C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20147C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20147C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20147C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20147C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20147C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20147C12v2Ev,
};
extern VTBL_ENTRY _ZTV8S20147C1[];
static  VTT_ENTRY vtt_S20147C1[] = {
  {&(_ZTV8S20147C1[9]),  9,18},
  {&(_ZTV8S20147C1[9]),  9,18},
};
extern VTBL_ENTRY _ZTI8S20147C1[];
extern  VTBL_ENTRY _ZTV8S20147C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20147C1[];
Class_Descriptor cd_S20147C1 = {  "S20147C1", // class name
  bases_S20147C1, 1,
  &(vtc_S20147C1[0]), // expected_vtbl_contents
  &(vtt_S20147C1[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20147C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20147C1),18, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20147C1),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  S9503C2  {
  virtual  ~S9503C2(); // _ZN7S9503C2D1Ev
  virtual void  v3(); // _ZN7S9503C22v3Ev
  virtual void  v4(); // _ZN7S9503C22v4Ev
  virtual void  v5(); // _ZN7S9503C22v5Ev
  virtual void  v6(); // _ZN7S9503C22v6Ev
  virtual void  v7(); // _ZN7S9503C22v7Ev
  S9503C2(); // tgen
};
//SIG(-1 S9503C2) C1{ vd v1 v2 v3 v4 v5}


 S9503C2 ::~S9503C2(){ note_dtor("S9503C2", this);}
void  S9503C2 ::v3(){vfunc_called(this, "_ZN7S9503C22v3Ev");}
void  S9503C2 ::v4(){vfunc_called(this, "_ZN7S9503C22v4Ev");}
void  S9503C2 ::v5(){vfunc_called(this, "_ZN7S9503C22v5Ev");}
void  S9503C2 ::v6(){vfunc_called(this, "_ZN7S9503C22v6Ev");}
void  S9503C2 ::v7(){vfunc_called(this, "_ZN7S9503C22v7Ev");}
S9503C2 ::S9503C2(){ note_ctor("S9503C2", this);} // tgen

static void Test_S9503C2()
{
  extern Class_Descriptor cd_S9503C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9503C2, buf);
    S9503C2 *dp, &lv = *(dp=new (buf) S9503C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9503C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9503C2)");
    test_class_info(&lv, &cd_S9503C2);
    dp->~S9503C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9503C2(Test_S9503C2, "S9503C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9503C2C1Ev();
extern void _ZN7S9503C2D1Ev();
Name_Map name_map_S9503C2[] = {
  NSPAIR(_ZN7S9503C2C1Ev),
  NSPAIR(_ZN7S9503C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9503C2[];
extern void _ZN7S9503C2D1Ev();
extern void _ZN7S9503C2D0Ev();
extern void _ZN7S9503C22v3Ev();
extern void _ZN7S9503C22v4Ev();
extern void _ZN7S9503C22v5Ev();
extern void _ZN7S9503C22v6Ev();
extern void _ZN7S9503C22v7Ev();
static  VTBL_ENTRY vtc_S9503C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9503C2[0]),
  (VTBL_ENTRY)&_ZN7S9503C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9503C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9503C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9503C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9503C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9503C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9503C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S9503C2[];
extern  VTBL_ENTRY _ZTV7S9503C2[];
Class_Descriptor cd_S9503C2 = {  "S9503C2", // class name
  0,0,//no base classes
  &(vtc_S9503C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9503C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9503C2),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  S9503C1  : S9503C2 {
  void *s9503c1f0;
  int s9503c1f1;
  virtual void  v1(); // _ZN7S9503C12v1Ev
  virtual void  v2(); // _ZN7S9503C12v2Ev
  ~S9503C1(); // tgen
  S9503C1(); // tgen
};
//SIG(1 S9503C1) C1{ BC2{ vd v3 v4 v5 v6 v7} v1 v2 Fp Fi}


void  S9503C1 ::v1(){vfunc_called(this, "_ZN7S9503C12v1Ev");}
void  S9503C1 ::v2(){vfunc_called(this, "_ZN7S9503C12v2Ev");}
S9503C1 ::~S9503C1(){ note_dtor("S9503C1", this);} // tgen
S9503C1 ::S9503C1(){ note_ctor("S9503C1", this);} // tgen

static void Test_S9503C1()
{
  extern Class_Descriptor cd_S9503C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S9503C1, buf);
    S9503C1 *dp, &lv = *(dp=new (buf) S9503C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S9503C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9503C1)");
    check_base_class_offset(lv, (S9503C2*), 0, "S9503C1");
    check_field_offset(lv, s9503c1f0, ABISELECT(8,4), "S9503C1.s9503c1f0");
    check_field_offset(lv, s9503c1f1, ABISELECT(16,8), "S9503C1.s9503c1f1");
    test_class_info(&lv, &cd_S9503C1);
    dp->~S9503C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9503C1(Test_S9503C1, "S9503C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S9503C1C1Ev();
extern void _ZN7S9503C1D1Ev();
Name_Map name_map_S9503C1[] = {
  NSPAIR(_ZN7S9503C1C1Ev),
  NSPAIR(_ZN7S9503C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9503C2;
extern VTBL_ENTRY _ZTI7S9503C2[];
extern  VTBL_ENTRY _ZTV7S9503C2[];
static Base_Class bases_S9503C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9503C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S9503C1[];
extern void _ZN7S9503C1D1Ev();
extern void _ZN7S9503C1D0Ev();
extern void _ZN7S9503C22v3Ev();
extern void _ZN7S9503C22v4Ev();
extern void _ZN7S9503C22v5Ev();
extern void _ZN7S9503C22v6Ev();
extern void _ZN7S9503C22v7Ev();
extern void _ZN7S9503C12v1Ev();
extern void _ZN7S9503C12v2Ev();
static  VTBL_ENTRY vtc_S9503C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9503C1[0]),
  (VTBL_ENTRY)&_ZN7S9503C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9503C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9503C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9503C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9503C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9503C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9503C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9503C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9503C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9503C1[];
extern  VTBL_ENTRY _ZTV7S9503C1[];
Class_Descriptor cd_S9503C1 = {  "S9503C1", // class name
  bases_S9503C1, 1,
  &(vtc_S9503C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S9503C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9503C1),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9940C2  {
  virtual  ~S9940C2(); // _ZN7S9940C2D1Ev
  virtual void  v5(); // _ZN7S9940C22v5Ev
  virtual void  v6(); // _ZN7S9940C22v6Ev
  virtual void  v7(); // _ZN7S9940C22v7Ev
  virtual void  v8(); // _ZN7S9940C22v8Ev
  virtual void  v9(); // _ZN7S9940C22v9Ev
  S9940C2(); // tgen
};
//SIG(-1 S9940C2) C1{ vd v1 v2 v3 v4 v5}


 S9940C2 ::~S9940C2(){ note_dtor("S9940C2", this);}
void  S9940C2 ::v5(){vfunc_called(this, "_ZN7S9940C22v5Ev");}
void  S9940C2 ::v6(){vfunc_called(this, "_ZN7S9940C22v6Ev");}
void  S9940C2 ::v7(){vfunc_called(this, "_ZN7S9940C22v7Ev");}
void  S9940C2 ::v8(){vfunc_called(this, "_ZN7S9940C22v8Ev");}
void  S9940C2 ::v9(){vfunc_called(this, "_ZN7S9940C22v9Ev");}
S9940C2 ::S9940C2(){ note_ctor("S9940C2", this);} // tgen

static void Test_S9940C2()
{
  extern Class_Descriptor cd_S9940C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9940C2, buf);
    S9940C2 *dp, &lv = *(dp=new (buf) S9940C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9940C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9940C2)");
    test_class_info(&lv, &cd_S9940C2);
    dp->~S9940C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9940C2(Test_S9940C2, "S9940C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9940C2C1Ev();
extern void _ZN7S9940C2D1Ev();
Name_Map name_map_S9940C2[] = {
  NSPAIR(_ZN7S9940C2C1Ev),
  NSPAIR(_ZN7S9940C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9940C2[];
extern void _ZN7S9940C2D1Ev();
extern void _ZN7S9940C2D0Ev();
extern void _ZN7S9940C22v5Ev();
extern void _ZN7S9940C22v6Ev();
extern void _ZN7S9940C22v7Ev();
extern void _ZN7S9940C22v8Ev();
extern void _ZN7S9940C22v9Ev();
static  VTBL_ENTRY vtc_S9940C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9940C2[0]),
  (VTBL_ENTRY)&_ZN7S9940C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9940C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9940C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9940C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9940C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9940C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9940C22v9Ev,
};
extern VTBL_ENTRY _ZTI7S9940C2[];
extern  VTBL_ENTRY _ZTV7S9940C2[];
Class_Descriptor cd_S9940C2 = {  "S9940C2", // class name
  0,0,//no base classes
  &(vtc_S9940C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9940C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9940C2),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  S9940C1  : S9940C2 {
  virtual void  v1(); // _ZN7S9940C12v1Ev
  virtual void  v2(); // _ZN7S9940C12v2Ev
  virtual void  v3(); // _ZN7S9940C12v3Ev
  virtual void  v4(); // _ZN7S9940C12v4Ev
  ~S9940C1(); // tgen
  S9940C1(); // tgen
};
//SIG(1 S9940C1) C1{ BC2{ vd v5 v6 v7 v8 v9} v1 v2 v3 v4}


void  S9940C1 ::v1(){vfunc_called(this, "_ZN7S9940C12v1Ev");}
void  S9940C1 ::v2(){vfunc_called(this, "_ZN7S9940C12v2Ev");}
void  S9940C1 ::v3(){vfunc_called(this, "_ZN7S9940C12v3Ev");}
void  S9940C1 ::v4(){vfunc_called(this, "_ZN7S9940C12v4Ev");}
S9940C1 ::~S9940C1(){ note_dtor("S9940C1", this);} // tgen
S9940C1 ::S9940C1(){ note_ctor("S9940C1", this);} // tgen

static void Test_S9940C1()
{
  extern Class_Descriptor cd_S9940C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9940C1, buf);
    S9940C1 *dp, &lv = *(dp=new (buf) S9940C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9940C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9940C1)");
    check_base_class_offset(lv, (S9940C2*), 0, "S9940C1");
    test_class_info(&lv, &cd_S9940C1);
    dp->~S9940C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9940C1(Test_S9940C1, "S9940C1", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9940C1C1Ev();
extern void _ZN7S9940C1D1Ev();
Name_Map name_map_S9940C1[] = {
  NSPAIR(_ZN7S9940C1C1Ev),
  NSPAIR(_ZN7S9940C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9940C2;
extern VTBL_ENTRY _ZTI7S9940C2[];
extern  VTBL_ENTRY _ZTV7S9940C2[];
static Base_Class bases_S9940C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9940C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S9940C1[];
extern void _ZN7S9940C1D1Ev();
extern void _ZN7S9940C1D0Ev();
extern void _ZN7S9940C22v5Ev();
extern void _ZN7S9940C22v6Ev();
extern void _ZN7S9940C22v7Ev();
extern void _ZN7S9940C22v8Ev();
extern void _ZN7S9940C22v9Ev();
extern void _ZN7S9940C12v1Ev();
extern void _ZN7S9940C12v2Ev();
extern void _ZN7S9940C12v3Ev();
extern void _ZN7S9940C12v4Ev();
static  VTBL_ENTRY vtc_S9940C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9940C1[0]),
  (VTBL_ENTRY)&_ZN7S9940C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9940C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9940C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9940C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9940C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9940C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9940C22v9Ev,
  (VTBL_ENTRY)&_ZN7S9940C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9940C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9940C12v3Ev,
  (VTBL_ENTRY)&_ZN7S9940C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S9940C1[];
extern  VTBL_ENTRY _ZTV7S9940C1[];
Class_Descriptor cd_S9940C1 = {  "S9940C1", // class name
  bases_S9940C1, 1,
  &(vtc_S9940C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9940C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9940C1),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  S9814C2  {
  virtual  ~S9814C2(); // _ZN7S9814C2D1Ev
  virtual void  v4(); // _ZN7S9814C22v4Ev
  virtual void  v5(); // _ZN7S9814C22v5Ev
  virtual void  v6(); // _ZN7S9814C22v6Ev
  virtual void  v7(); // _ZN7S9814C22v7Ev
  virtual void  v8(); // _ZN7S9814C22v8Ev
  S9814C2(); // tgen
};
//SIG(-1 S9814C2) C1{ vd v1 v2 v3 v4 v5}


 S9814C2 ::~S9814C2(){ note_dtor("S9814C2", this);}
void  S9814C2 ::v4(){vfunc_called(this, "_ZN7S9814C22v4Ev");}
void  S9814C2 ::v5(){vfunc_called(this, "_ZN7S9814C22v5Ev");}
void  S9814C2 ::v6(){vfunc_called(this, "_ZN7S9814C22v6Ev");}
void  S9814C2 ::v7(){vfunc_called(this, "_ZN7S9814C22v7Ev");}
void  S9814C2 ::v8(){vfunc_called(this, "_ZN7S9814C22v8Ev");}
S9814C2 ::S9814C2(){ note_ctor("S9814C2", this);} // tgen

static void Test_S9814C2()
{
  extern Class_Descriptor cd_S9814C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9814C2, buf);
    S9814C2 *dp, &lv = *(dp=new (buf) S9814C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9814C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9814C2)");
    test_class_info(&lv, &cd_S9814C2);
    dp->~S9814C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9814C2(Test_S9814C2, "S9814C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9814C2C1Ev();
extern void _ZN7S9814C2D1Ev();
Name_Map name_map_S9814C2[] = {
  NSPAIR(_ZN7S9814C2C1Ev),
  NSPAIR(_ZN7S9814C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9814C2[];
extern void _ZN7S9814C2D1Ev();
extern void _ZN7S9814C2D0Ev();
extern void _ZN7S9814C22v4Ev();
extern void _ZN7S9814C22v5Ev();
extern void _ZN7S9814C22v6Ev();
extern void _ZN7S9814C22v7Ev();
extern void _ZN7S9814C22v8Ev();
static  VTBL_ENTRY vtc_S9814C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9814C2[0]),
  (VTBL_ENTRY)&_ZN7S9814C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9814C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9814C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9814C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9814C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9814C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9814C22v8Ev,
};
extern VTBL_ENTRY _ZTI7S9814C2[];
extern  VTBL_ENTRY _ZTV7S9814C2[];
Class_Descriptor cd_S9814C2 = {  "S9814C2", // class name
  0,0,//no base classes
  &(vtc_S9814C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9814C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9814C2),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  S9814C1  : S9814C2 {
  virtual  ~S9814C1(); // _ZN7S9814C1D1Ev
  virtual void  v1(); // _ZN7S9814C12v1Ev
  virtual void  v2(); // _ZN7S9814C12v2Ev
  virtual void  v3(); // _ZN7S9814C12v3Ev
  S9814C1(); // tgen
};
//SIG(1 S9814C1) C1{ BC2{ vd v4 v5 v6 v7 v8} vd v1 v2 v3}


 S9814C1 ::~S9814C1(){ note_dtor("S9814C1", this);}
void  S9814C1 ::v1(){vfunc_called(this, "_ZN7S9814C12v1Ev");}
void  S9814C1 ::v2(){vfunc_called(this, "_ZN7S9814C12v2Ev");}
void  S9814C1 ::v3(){vfunc_called(this, "_ZN7S9814C12v3Ev");}
S9814C1 ::S9814C1(){ note_ctor("S9814C1", this);} // tgen

static void Test_S9814C1()
{
  extern Class_Descriptor cd_S9814C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9814C1, buf);
    S9814C1 *dp, &lv = *(dp=new (buf) S9814C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9814C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9814C1)");
    check_base_class_offset(lv, (S9814C2*), 0, "S9814C1");
    test_class_info(&lv, &cd_S9814C1);
    dp->~S9814C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9814C1(Test_S9814C1, "S9814C1", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9814C1C1Ev();
extern void _ZN7S9814C1D1Ev();
Name_Map name_map_S9814C1[] = {
  NSPAIR(_ZN7S9814C1C1Ev),
  NSPAIR(_ZN7S9814C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9814C2;
extern VTBL_ENTRY _ZTI7S9814C2[];
extern  VTBL_ENTRY _ZTV7S9814C2[];
static Base_Class bases_S9814C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9814C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S9814C1[];
extern void _ZN7S9814C1D1Ev();
extern void _ZN7S9814C1D0Ev();
extern void _ZN7S9814C22v4Ev();
extern void _ZN7S9814C22v5Ev();
extern void _ZN7S9814C22v6Ev();
extern void _ZN7S9814C22v7Ev();
extern void _ZN7S9814C22v8Ev();
extern void _ZN7S9814C12v1Ev();
extern void _ZN7S9814C12v2Ev();
extern void _ZN7S9814C12v3Ev();
static  VTBL_ENTRY vtc_S9814C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9814C1[0]),
  (VTBL_ENTRY)&_ZN7S9814C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9814C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9814C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9814C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9814C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9814C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9814C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9814C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9814C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9814C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S9814C1[];
extern  VTBL_ENTRY _ZTV7S9814C1[];
Class_Descriptor cd_S9814C1 = {  "S9814C1", // class name
  bases_S9814C1, 1,
  &(vtc_S9814C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9814C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9814C1),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  S9515C2  {
  virtual  ~S9515C2(); // _ZN7S9515C2D1Ev
  virtual void  v3(); // _ZN7S9515C22v3Ev
  virtual void  v4(); // _ZN7S9515C22v4Ev
  virtual void  v5(); // _ZN7S9515C22v5Ev
  virtual void  v6(); // _ZN7S9515C22v6Ev
  virtual void  v7(); // _ZN7S9515C22v7Ev
  S9515C2(); // tgen
};
//SIG(-1 S9515C2) C1{ vd v1 v2 v3 v4 v5}


 S9515C2 ::~S9515C2(){ note_dtor("S9515C2", this);}
void  S9515C2 ::v3(){vfunc_called(this, "_ZN7S9515C22v3Ev");}
void  S9515C2 ::v4(){vfunc_called(this, "_ZN7S9515C22v4Ev");}
void  S9515C2 ::v5(){vfunc_called(this, "_ZN7S9515C22v5Ev");}
void  S9515C2 ::v6(){vfunc_called(this, "_ZN7S9515C22v6Ev");}
void  S9515C2 ::v7(){vfunc_called(this, "_ZN7S9515C22v7Ev");}
S9515C2 ::S9515C2(){ note_ctor("S9515C2", this);} // tgen

static void Test_S9515C2()
{
  extern Class_Descriptor cd_S9515C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9515C2, buf);
    S9515C2 *dp, &lv = *(dp=new (buf) S9515C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9515C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9515C2)");
    test_class_info(&lv, &cd_S9515C2);
    dp->~S9515C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9515C2(Test_S9515C2, "S9515C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9515C2C1Ev();
extern void _ZN7S9515C2D1Ev();
Name_Map name_map_S9515C2[] = {
  NSPAIR(_ZN7S9515C2C1Ev),
  NSPAIR(_ZN7S9515C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9515C2[];
extern void _ZN7S9515C2D1Ev();
extern void _ZN7S9515C2D0Ev();
extern void _ZN7S9515C22v3Ev();
extern void _ZN7S9515C22v4Ev();
extern void _ZN7S9515C22v5Ev();
extern void _ZN7S9515C22v6Ev();
extern void _ZN7S9515C22v7Ev();
static  VTBL_ENTRY vtc_S9515C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9515C2[0]),
  (VTBL_ENTRY)&_ZN7S9515C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9515C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9515C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9515C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9515C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9515C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9515C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S9515C2[];
extern  VTBL_ENTRY _ZTV7S9515C2[];
Class_Descriptor cd_S9515C2 = {  "S9515C2", // class name
  0,0,//no base classes
  &(vtc_S9515C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9515C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9515C2),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  S9515C1  : S9515C2 {
  void *s9515c1f0;
  virtual  ~S9515C1(); // _ZN7S9515C1D1Ev
  virtual void  v1(); // _ZN7S9515C12v1Ev
  virtual void  v2(); // _ZN7S9515C12v2Ev
  S9515C1(); // tgen
};
//SIG(1 S9515C1) C1{ BC2{ vd v3 v4 v5 v6 v7} vd v1 v2 Fp}


 S9515C1 ::~S9515C1(){ note_dtor("S9515C1", this);}
void  S9515C1 ::v1(){vfunc_called(this, "_ZN7S9515C12v1Ev");}
void  S9515C1 ::v2(){vfunc_called(this, "_ZN7S9515C12v2Ev");}
S9515C1 ::S9515C1(){ note_ctor("S9515C1", this);} // tgen

static void Test_S9515C1()
{
  extern Class_Descriptor cd_S9515C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S9515C1, buf);
    S9515C1 *dp, &lv = *(dp=new (buf) S9515C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S9515C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9515C1)");
    check_base_class_offset(lv, (S9515C2*), 0, "S9515C1");
    check_field_offset(lv, s9515c1f0, ABISELECT(8,4), "S9515C1.s9515c1f0");
    test_class_info(&lv, &cd_S9515C1);
    dp->~S9515C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9515C1(Test_S9515C1, "S9515C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S9515C1C1Ev();
extern void _ZN7S9515C1D1Ev();
Name_Map name_map_S9515C1[] = {
  NSPAIR(_ZN7S9515C1C1Ev),
  NSPAIR(_ZN7S9515C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9515C2;
extern VTBL_ENTRY _ZTI7S9515C2[];
extern  VTBL_ENTRY _ZTV7S9515C2[];
static Base_Class bases_S9515C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9515C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S9515C1[];
extern void _ZN7S9515C1D1Ev();
extern void _ZN7S9515C1D0Ev();
extern void _ZN7S9515C22v3Ev();
extern void _ZN7S9515C22v4Ev();
extern void _ZN7S9515C22v5Ev();
extern void _ZN7S9515C22v6Ev();
extern void _ZN7S9515C22v7Ev();
extern void _ZN7S9515C12v1Ev();
extern void _ZN7S9515C12v2Ev();
static  VTBL_ENTRY vtc_S9515C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9515C1[0]),
  (VTBL_ENTRY)&_ZN7S9515C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9515C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9515C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9515C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9515C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9515C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9515C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9515C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9515C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9515C1[];
extern  VTBL_ENTRY _ZTV7S9515C1[];
Class_Descriptor cd_S9515C1 = {  "S9515C1", // class name
  bases_S9515C1, 1,
  &(vtc_S9515C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S9515C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9515C1),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16097C1  {
  ::S3350C8_nt s16097c1f0;
  ::S4845C8_nt s16097c1f1;
  void  mf16097c1(); // _ZN8S16097C19mf16097c1Ev
};
//SIG(1 S16097C1) C1{ m FC2{ m Fi} FC3{ Fi[2] Fc[448] Fi}}


void  S16097C1 ::mf16097c1(){}

static void Test_S16097C1()
{
  {
    init_simple_test("S16097C1");
    S16097C1 lv;
    check2(sizeof(lv), 464, "sizeof(S16097C1)");
    check2(__alignof__(lv), 4, "__alignof__(S16097C1)");
    check_field_offset(lv, s16097c1f0, 0, "S16097C1.s16097c1f0");
    check_field_offset(lv, s16097c1f1, 4, "S16097C1.s16097c1f1");
  }
}
static Arrange_To_Call_Me vS16097C1(Test_S16097C1, "S16097C1", 464);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9502C2  {
  virtual  ~S9502C2(); // _ZN7S9502C2D1Ev
  virtual void  v3(); // _ZN7S9502C22v3Ev
  virtual void  v4(); // _ZN7S9502C22v4Ev
  virtual void  v5(); // _ZN7S9502C22v5Ev
  virtual void  v6(); // _ZN7S9502C22v6Ev
  virtual void  v7(); // _ZN7S9502C22v7Ev
  S9502C2(); // tgen
};
//SIG(-1 S9502C2) C1{ vd v1 v2 v3 v4 v5}


 S9502C2 ::~S9502C2(){ note_dtor("S9502C2", this);}
void  S9502C2 ::v3(){vfunc_called(this, "_ZN7S9502C22v3Ev");}
void  S9502C2 ::v4(){vfunc_called(this, "_ZN7S9502C22v4Ev");}
void  S9502C2 ::v5(){vfunc_called(this, "_ZN7S9502C22v5Ev");}
void  S9502C2 ::v6(){vfunc_called(this, "_ZN7S9502C22v6Ev");}
void  S9502C2 ::v7(){vfunc_called(this, "_ZN7S9502C22v7Ev");}
S9502C2 ::S9502C2(){ note_ctor("S9502C2", this);} // tgen

static void Test_S9502C2()
{
  extern Class_Descriptor cd_S9502C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9502C2, buf);
    S9502C2 *dp, &lv = *(dp=new (buf) S9502C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9502C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9502C2)");
    test_class_info(&lv, &cd_S9502C2);
    dp->~S9502C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9502C2(Test_S9502C2, "S9502C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9502C2C1Ev();
extern void _ZN7S9502C2D1Ev();
Name_Map name_map_S9502C2[] = {
  NSPAIR(_ZN7S9502C2C1Ev),
  NSPAIR(_ZN7S9502C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9502C2[];
extern void _ZN7S9502C2D1Ev();
extern void _ZN7S9502C2D0Ev();
extern void _ZN7S9502C22v3Ev();
extern void _ZN7S9502C22v4Ev();
extern void _ZN7S9502C22v5Ev();
extern void _ZN7S9502C22v6Ev();
extern void _ZN7S9502C22v7Ev();
static  VTBL_ENTRY vtc_S9502C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9502C2[0]),
  (VTBL_ENTRY)&_ZN7S9502C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9502C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9502C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9502C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9502C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9502C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9502C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S9502C2[];
extern  VTBL_ENTRY _ZTV7S9502C2[];
Class_Descriptor cd_S9502C2 = {  "S9502C2", // class name
  0,0,//no base classes
  &(vtc_S9502C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9502C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9502C2),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  S9502C1  : S9502C2 {
  int s9502c1f0;
  virtual void  v1(); // _ZN7S9502C12v1Ev
  virtual void  v2(); // _ZN7S9502C12v2Ev
  ~S9502C1(); // tgen
  S9502C1(); // tgen
};
//SIG(1 S9502C1) C1{ BC2{ vd v3 v4 v5 v6 v7} v1 v2 Fi}


void  S9502C1 ::v1(){vfunc_called(this, "_ZN7S9502C12v1Ev");}
void  S9502C1 ::v2(){vfunc_called(this, "_ZN7S9502C12v2Ev");}
S9502C1 ::~S9502C1(){ note_dtor("S9502C1", this);} // tgen
S9502C1 ::S9502C1(){ note_ctor("S9502C1", this);} // tgen

static void Test_S9502C1()
{
  extern Class_Descriptor cd_S9502C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S9502C1, buf);
    S9502C1 *dp, &lv = *(dp=new (buf) S9502C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S9502C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9502C1)");
    check_base_class_offset(lv, (S9502C2*), 0, "S9502C1");
    check_field_offset(lv, s9502c1f0, ABISELECT(8,4), "S9502C1.s9502c1f0");
    test_class_info(&lv, &cd_S9502C1);
    dp->~S9502C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9502C1(Test_S9502C1, "S9502C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S9502C1C1Ev();
extern void _ZN7S9502C1D1Ev();
Name_Map name_map_S9502C1[] = {
  NSPAIR(_ZN7S9502C1C1Ev),
  NSPAIR(_ZN7S9502C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9502C2;
extern VTBL_ENTRY _ZTI7S9502C2[];
extern  VTBL_ENTRY _ZTV7S9502C2[];
static Base_Class bases_S9502C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9502C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S9502C1[];
extern void _ZN7S9502C1D1Ev();
extern void _ZN7S9502C1D0Ev();
extern void _ZN7S9502C22v3Ev();
extern void _ZN7S9502C22v4Ev();
extern void _ZN7S9502C22v5Ev();
extern void _ZN7S9502C22v6Ev();
extern void _ZN7S9502C22v7Ev();
extern void _ZN7S9502C12v1Ev();
extern void _ZN7S9502C12v2Ev();
static  VTBL_ENTRY vtc_S9502C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9502C1[0]),
  (VTBL_ENTRY)&_ZN7S9502C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9502C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9502C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9502C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9502C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9502C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9502C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9502C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9502C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9502C1[];
extern  VTBL_ENTRY _ZTV7S9502C1[];
Class_Descriptor cd_S9502C1 = {  "S9502C1", // class name
  bases_S9502C1, 1,
  &(vtc_S9502C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S9502C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9502C1),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8982C2  {
  virtual  ~S8982C2(); // _ZN7S8982C2D1Ev
  virtual void  v2(); // _ZN7S8982C22v2Ev
  virtual void  v3(); // _ZN7S8982C22v3Ev
  virtual void  v4(); // _ZN7S8982C22v4Ev
  virtual void  v5(); // _ZN7S8982C22v5Ev
  virtual void  v6(); // _ZN7S8982C22v6Ev
  S8982C2(); // tgen
};
//SIG(-1 S8982C2) C1{ vd v1 v2 v3 v4 v5}


 S8982C2 ::~S8982C2(){ note_dtor("S8982C2", this);}
void  S8982C2 ::v2(){vfunc_called(this, "_ZN7S8982C22v2Ev");}
void  S8982C2 ::v3(){vfunc_called(this, "_ZN7S8982C22v3Ev");}
void  S8982C2 ::v4(){vfunc_called(this, "_ZN7S8982C22v4Ev");}
void  S8982C2 ::v5(){vfunc_called(this, "_ZN7S8982C22v5Ev");}
void  S8982C2 ::v6(){vfunc_called(this, "_ZN7S8982C22v6Ev");}
S8982C2 ::S8982C2(){ note_ctor("S8982C2", this);} // tgen

static void Test_S8982C2()
{
  extern Class_Descriptor cd_S8982C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S8982C2, buf);
    S8982C2 *dp, &lv = *(dp=new (buf) S8982C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S8982C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8982C2)");
    test_class_info(&lv, &cd_S8982C2);
    dp->~S8982C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8982C2(Test_S8982C2, "S8982C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S8982C2C1Ev();
extern void _ZN7S8982C2D1Ev();
Name_Map name_map_S8982C2[] = {
  NSPAIR(_ZN7S8982C2C1Ev),
  NSPAIR(_ZN7S8982C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8982C2[];
extern void _ZN7S8982C2D1Ev();
extern void _ZN7S8982C2D0Ev();
extern void _ZN7S8982C22v2Ev();
extern void _ZN7S8982C22v3Ev();
extern void _ZN7S8982C22v4Ev();
extern void _ZN7S8982C22v5Ev();
extern void _ZN7S8982C22v6Ev();
static  VTBL_ENTRY vtc_S8982C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8982C2[0]),
  (VTBL_ENTRY)&_ZN7S8982C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8982C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8982C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8982C22v3Ev,
  (VTBL_ENTRY)&_ZN7S8982C22v4Ev,
  (VTBL_ENTRY)&_ZN7S8982C22v5Ev,
  (VTBL_ENTRY)&_ZN7S8982C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S8982C2[];
extern  VTBL_ENTRY _ZTV7S8982C2[];
Class_Descriptor cd_S8982C2 = {  "S8982C2", // class name
  0,0,//no base classes
  &(vtc_S8982C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S8982C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8982C2),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  S8982C1  : S8982C2 {
  void *s8982c1f0[2];
  virtual void  v1(); // _ZN7S8982C12v1Ev
  ~S8982C1(); // tgen
  S8982C1(); // tgen
};
//SIG(1 S8982C1) C1{ BC2{ vd v2 v3 v4 v5 v6} v1 Fp[2]}


void  S8982C1 ::v1(){vfunc_called(this, "_ZN7S8982C12v1Ev");}
S8982C1 ::~S8982C1(){ note_dtor("S8982C1", this);} // tgen
S8982C1 ::S8982C1(){ note_ctor("S8982C1", this);} // tgen

static void Test_S8982C1()
{
  extern Class_Descriptor cd_S8982C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S8982C1, buf);
    S8982C1 *dp, &lv = *(dp=new (buf) S8982C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S8982C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8982C1)");
    check_base_class_offset(lv, (S8982C2*), 0, "S8982C1");
    check_field_offset(lv, s8982c1f0, ABISELECT(8,4), "S8982C1.s8982c1f0");
    test_class_info(&lv, &cd_S8982C1);
    dp->~S8982C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8982C1(Test_S8982C1, "S8982C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S8982C1C1Ev();
extern void _ZN7S8982C1D1Ev();
Name_Map name_map_S8982C1[] = {
  NSPAIR(_ZN7S8982C1C1Ev),
  NSPAIR(_ZN7S8982C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8982C2;
extern VTBL_ENTRY _ZTI7S8982C2[];
extern  VTBL_ENTRY _ZTV7S8982C2[];
static Base_Class bases_S8982C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8982C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S8982C1[];
extern void _ZN7S8982C1D1Ev();
extern void _ZN7S8982C1D0Ev();
extern void _ZN7S8982C22v2Ev();
extern void _ZN7S8982C22v3Ev();
extern void _ZN7S8982C22v4Ev();
extern void _ZN7S8982C22v5Ev();
extern void _ZN7S8982C22v6Ev();
extern void _ZN7S8982C12v1Ev();
static  VTBL_ENTRY vtc_S8982C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8982C1[0]),
  (VTBL_ENTRY)&_ZN7S8982C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8982C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8982C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8982C22v3Ev,
  (VTBL_ENTRY)&_ZN7S8982C22v4Ev,
  (VTBL_ENTRY)&_ZN7S8982C22v5Ev,
  (VTBL_ENTRY)&_ZN7S8982C22v6Ev,
  (VTBL_ENTRY)&_ZN7S8982C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8982C1[];
extern  VTBL_ENTRY _ZTV7S8982C1[];
Class_Descriptor cd_S8982C1 = {  "S8982C1", // class name
  bases_S8982C1, 1,
  &(vtc_S8982C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S8982C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8982C1),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  S9516C2  {
  virtual  ~S9516C2(); // _ZN7S9516C2D1Ev
  virtual void  v3(); // _ZN7S9516C22v3Ev
  virtual void  v4(); // _ZN7S9516C22v4Ev
  virtual void  v5(); // _ZN7S9516C22v5Ev
  virtual void  v6(); // _ZN7S9516C22v6Ev
  virtual void  v7(); // _ZN7S9516C22v7Ev
  S9516C2(); // tgen
};
//SIG(-1 S9516C2) C1{ vd v1 v2 v3 v4 v5}


 S9516C2 ::~S9516C2(){ note_dtor("S9516C2", this);}
void  S9516C2 ::v3(){vfunc_called(this, "_ZN7S9516C22v3Ev");}
void  S9516C2 ::v4(){vfunc_called(this, "_ZN7S9516C22v4Ev");}
void  S9516C2 ::v5(){vfunc_called(this, "_ZN7S9516C22v5Ev");}
void  S9516C2 ::v6(){vfunc_called(this, "_ZN7S9516C22v6Ev");}
void  S9516C2 ::v7(){vfunc_called(this, "_ZN7S9516C22v7Ev");}
S9516C2 ::S9516C2(){ note_ctor("S9516C2", this);} // tgen

static void Test_S9516C2()
{
  extern Class_Descriptor cd_S9516C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9516C2, buf);
    S9516C2 *dp, &lv = *(dp=new (buf) S9516C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9516C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9516C2)");
    test_class_info(&lv, &cd_S9516C2);
    dp->~S9516C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9516C2(Test_S9516C2, "S9516C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9516C2C1Ev();
extern void _ZN7S9516C2D1Ev();
Name_Map name_map_S9516C2[] = {
  NSPAIR(_ZN7S9516C2C1Ev),
  NSPAIR(_ZN7S9516C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9516C2[];
extern void _ZN7S9516C2D1Ev();
extern void _ZN7S9516C2D0Ev();
extern void _ZN7S9516C22v3Ev();
extern void _ZN7S9516C22v4Ev();
extern void _ZN7S9516C22v5Ev();
extern void _ZN7S9516C22v6Ev();
extern void _ZN7S9516C22v7Ev();
static  VTBL_ENTRY vtc_S9516C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9516C2[0]),
  (VTBL_ENTRY)&_ZN7S9516C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9516C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9516C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9516C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9516C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9516C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9516C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S9516C2[];
extern  VTBL_ENTRY _ZTV7S9516C2[];
Class_Descriptor cd_S9516C2 = {  "S9516C2", // class name
  0,0,//no base classes
  &(vtc_S9516C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9516C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9516C2),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  S9516C1  : S9516C2 {
  virtual  ~S9516C1(); // _ZN7S9516C1D1Ev
  virtual void  v1(); // _ZN7S9516C12v1Ev
  virtual void  v2(); // _ZN7S9516C12v2Ev
  S9516C1(); // tgen
};
//SIG(1 S9516C1) C1{ BC2{ vd v3 v4 v5 v6 v7} vd v1 v2}


 S9516C1 ::~S9516C1(){ note_dtor("S9516C1", this);}
void  S9516C1 ::v1(){vfunc_called(this, "_ZN7S9516C12v1Ev");}
void  S9516C1 ::v2(){vfunc_called(this, "_ZN7S9516C12v2Ev");}
S9516C1 ::S9516C1(){ note_ctor("S9516C1", this);} // tgen

static void Test_S9516C1()
{
  extern Class_Descriptor cd_S9516C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9516C1, buf);
    S9516C1 *dp, &lv = *(dp=new (buf) S9516C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9516C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9516C1)");
    check_base_class_offset(lv, (S9516C2*), 0, "S9516C1");
    test_class_info(&lv, &cd_S9516C1);
    dp->~S9516C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9516C1(Test_S9516C1, "S9516C1", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9516C1C1Ev();
extern void _ZN7S9516C1D1Ev();
Name_Map name_map_S9516C1[] = {
  NSPAIR(_ZN7S9516C1C1Ev),
  NSPAIR(_ZN7S9516C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9516C2;
extern VTBL_ENTRY _ZTI7S9516C2[];
extern  VTBL_ENTRY _ZTV7S9516C2[];
static Base_Class bases_S9516C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9516C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S9516C1[];
extern void _ZN7S9516C1D1Ev();
extern void _ZN7S9516C1D0Ev();
extern void _ZN7S9516C22v3Ev();
extern void _ZN7S9516C22v4Ev();
extern void _ZN7S9516C22v5Ev();
extern void _ZN7S9516C22v6Ev();
extern void _ZN7S9516C22v7Ev();
extern void _ZN7S9516C12v1Ev();
extern void _ZN7S9516C12v2Ev();
static  VTBL_ENTRY vtc_S9516C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9516C1[0]),
  (VTBL_ENTRY)&_ZN7S9516C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9516C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9516C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9516C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9516C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9516C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9516C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9516C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9516C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9516C1[];
extern  VTBL_ENTRY _ZTV7S9516C1[];
Class_Descriptor cd_S9516C1 = {  "S9516C1", // class name
  bases_S9516C1, 1,
  &(vtc_S9516C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9516C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9516C1),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9811C2  {
  virtual  ~S9811C2(); // _ZN7S9811C2D1Ev
  virtual void  v4(); // _ZN7S9811C22v4Ev
  virtual void  v5(); // _ZN7S9811C22v5Ev
  virtual void  v6(); // _ZN7S9811C22v6Ev
  virtual void  v7(); // _ZN7S9811C22v7Ev
  virtual void  v8(); // _ZN7S9811C22v8Ev
  S9811C2(); // tgen
};
//SIG(-1 S9811C2) C1{ vd v1 v2 v3 v4 v5}


 S9811C2 ::~S9811C2(){ note_dtor("S9811C2", this);}
void  S9811C2 ::v4(){vfunc_called(this, "_ZN7S9811C22v4Ev");}
void  S9811C2 ::v5(){vfunc_called(this, "_ZN7S9811C22v5Ev");}
void  S9811C2 ::v6(){vfunc_called(this, "_ZN7S9811C22v6Ev");}
void  S9811C2 ::v7(){vfunc_called(this, "_ZN7S9811C22v7Ev");}
void  S9811C2 ::v8(){vfunc_called(this, "_ZN7S9811C22v8Ev");}
S9811C2 ::S9811C2(){ note_ctor("S9811C2", this);} // tgen

static void Test_S9811C2()
{
  extern Class_Descriptor cd_S9811C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9811C2, buf);
    S9811C2 *dp, &lv = *(dp=new (buf) S9811C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9811C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9811C2)");
    test_class_info(&lv, &cd_S9811C2);
    dp->~S9811C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9811C2(Test_S9811C2, "S9811C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9811C2C1Ev();
extern void _ZN7S9811C2D1Ev();
Name_Map name_map_S9811C2[] = {
  NSPAIR(_ZN7S9811C2C1Ev),
  NSPAIR(_ZN7S9811C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9811C2[];
extern void _ZN7S9811C2D1Ev();
extern void _ZN7S9811C2D0Ev();
extern void _ZN7S9811C22v4Ev();
extern void _ZN7S9811C22v5Ev();
extern void _ZN7S9811C22v6Ev();
extern void _ZN7S9811C22v7Ev();
extern void _ZN7S9811C22v8Ev();
static  VTBL_ENTRY vtc_S9811C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9811C2[0]),
  (VTBL_ENTRY)&_ZN7S9811C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9811C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9811C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9811C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9811C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9811C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9811C22v8Ev,
};
extern VTBL_ENTRY _ZTI7S9811C2[];
extern  VTBL_ENTRY _ZTV7S9811C2[];
Class_Descriptor cd_S9811C2 = {  "S9811C2", // class name
  0,0,//no base classes
  &(vtc_S9811C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9811C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9811C2),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  S9811C1  : S9811C2 {
  virtual void  v1(); // _ZN7S9811C12v1Ev
  virtual void  v2(); // _ZN7S9811C12v2Ev
  virtual void  v3(); // _ZN7S9811C12v3Ev
  ~S9811C1(); // tgen
  S9811C1(); // tgen
};
//SIG(1 S9811C1) C1{ BC2{ vd v4 v5 v6 v7 v8} v1 v2 v3}


void  S9811C1 ::v1(){vfunc_called(this, "_ZN7S9811C12v1Ev");}
void  S9811C1 ::v2(){vfunc_called(this, "_ZN7S9811C12v2Ev");}
void  S9811C1 ::v3(){vfunc_called(this, "_ZN7S9811C12v3Ev");}
S9811C1 ::~S9811C1(){ note_dtor("S9811C1", this);} // tgen
S9811C1 ::S9811C1(){ note_ctor("S9811C1", this);} // tgen

static void Test_S9811C1()
{
  extern Class_Descriptor cd_S9811C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9811C1, buf);
    S9811C1 *dp, &lv = *(dp=new (buf) S9811C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9811C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9811C1)");
    check_base_class_offset(lv, (S9811C2*), 0, "S9811C1");
    test_class_info(&lv, &cd_S9811C1);
    dp->~S9811C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9811C1(Test_S9811C1, "S9811C1", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9811C1C1Ev();
extern void _ZN7S9811C1D1Ev();
Name_Map name_map_S9811C1[] = {
  NSPAIR(_ZN7S9811C1C1Ev),
  NSPAIR(_ZN7S9811C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9811C2;
extern VTBL_ENTRY _ZTI7S9811C2[];
extern  VTBL_ENTRY _ZTV7S9811C2[];
static Base_Class bases_S9811C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9811C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S9811C1[];
extern void _ZN7S9811C1D1Ev();
extern void _ZN7S9811C1D0Ev();
extern void _ZN7S9811C22v4Ev();
extern void _ZN7S9811C22v5Ev();
extern void _ZN7S9811C22v6Ev();
extern void _ZN7S9811C22v7Ev();
extern void _ZN7S9811C22v8Ev();
extern void _ZN7S9811C12v1Ev();
extern void _ZN7S9811C12v2Ev();
extern void _ZN7S9811C12v3Ev();
static  VTBL_ENTRY vtc_S9811C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9811C1[0]),
  (VTBL_ENTRY)&_ZN7S9811C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9811C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9811C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9811C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9811C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9811C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9811C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9811C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9811C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9811C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S9811C1[];
extern  VTBL_ENTRY _ZTV7S9811C1[];
Class_Descriptor cd_S9811C1 = {  "S9811C1", // class name
  bases_S9811C1, 1,
  &(vtc_S9811C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9811C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9811C1),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  S9504C2  {
  virtual  ~S9504C2(); // _ZN7S9504C2D1Ev
  virtual void  v3(); // _ZN7S9504C22v3Ev
  virtual void  v4(); // _ZN7S9504C22v4Ev
  virtual void  v5(); // _ZN7S9504C22v5Ev
  virtual void  v6(); // _ZN7S9504C22v6Ev
  virtual void  v7(); // _ZN7S9504C22v7Ev
  S9504C2(); // tgen
};
//SIG(-1 S9504C2) C1{ vd v1 v2 v3 v4 v5}


 S9504C2 ::~S9504C2(){ note_dtor("S9504C2", this);}
void  S9504C2 ::v3(){vfunc_called(this, "_ZN7S9504C22v3Ev");}
void  S9504C2 ::v4(){vfunc_called(this, "_ZN7S9504C22v4Ev");}
void  S9504C2 ::v5(){vfunc_called(this, "_ZN7S9504C22v5Ev");}
void  S9504C2 ::v6(){vfunc_called(this, "_ZN7S9504C22v6Ev");}
void  S9504C2 ::v7(){vfunc_called(this, "_ZN7S9504C22v7Ev");}
S9504C2 ::S9504C2(){ note_ctor("S9504C2", this);} // tgen

static void Test_S9504C2()
{
  extern Class_Descriptor cd_S9504C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9504C2, buf);
    S9504C2 *dp, &lv = *(dp=new (buf) S9504C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9504C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9504C2)");
    test_class_info(&lv, &cd_S9504C2);
    dp->~S9504C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9504C2(Test_S9504C2, "S9504C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9504C2C1Ev();
extern void _ZN7S9504C2D1Ev();
Name_Map name_map_S9504C2[] = {
  NSPAIR(_ZN7S9504C2C1Ev),
  NSPAIR(_ZN7S9504C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9504C2[];
extern void _ZN7S9504C2D1Ev();
extern void _ZN7S9504C2D0Ev();
extern void _ZN7S9504C22v3Ev();
extern void _ZN7S9504C22v4Ev();
extern void _ZN7S9504C22v5Ev();
extern void _ZN7S9504C22v6Ev();
extern void _ZN7S9504C22v7Ev();
static  VTBL_ENTRY vtc_S9504C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9504C2[0]),
  (VTBL_ENTRY)&_ZN7S9504C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9504C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9504C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9504C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9504C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9504C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9504C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S9504C2[];
extern  VTBL_ENTRY _ZTV7S9504C2[];
Class_Descriptor cd_S9504C2 = {  "S9504C2", // class name
  0,0,//no base classes
  &(vtc_S9504C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9504C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9504C2),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  S9504C1  : S9504C2 {
  void *s9504c1f0;
  virtual void  v1(); // _ZN7S9504C12v1Ev
  virtual void  v2(); // _ZN7S9504C12v2Ev
  ~S9504C1(); // tgen
  S9504C1(); // tgen
};
//SIG(1 S9504C1) C1{ BC2{ vd v3 v4 v5 v6 v7} v1 v2 Fp}


void  S9504C1 ::v1(){vfunc_called(this, "_ZN7S9504C12v1Ev");}
void  S9504C1 ::v2(){vfunc_called(this, "_ZN7S9504C12v2Ev");}
S9504C1 ::~S9504C1(){ note_dtor("S9504C1", this);} // tgen
S9504C1 ::S9504C1(){ note_ctor("S9504C1", this);} // tgen

static void Test_S9504C1()
{
  extern Class_Descriptor cd_S9504C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S9504C1, buf);
    S9504C1 *dp, &lv = *(dp=new (buf) S9504C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S9504C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9504C1)");
    check_base_class_offset(lv, (S9504C2*), 0, "S9504C1");
    check_field_offset(lv, s9504c1f0, ABISELECT(8,4), "S9504C1.s9504c1f0");
    test_class_info(&lv, &cd_S9504C1);
    dp->~S9504C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9504C1(Test_S9504C1, "S9504C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S9504C1C1Ev();
extern void _ZN7S9504C1D1Ev();
Name_Map name_map_S9504C1[] = {
  NSPAIR(_ZN7S9504C1C1Ev),
  NSPAIR(_ZN7S9504C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9504C2;
extern VTBL_ENTRY _ZTI7S9504C2[];
extern  VTBL_ENTRY _ZTV7S9504C2[];
static Base_Class bases_S9504C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9504C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S9504C1[];
extern void _ZN7S9504C1D1Ev();
extern void _ZN7S9504C1D0Ev();
extern void _ZN7S9504C22v3Ev();
extern void _ZN7S9504C22v4Ev();
extern void _ZN7S9504C22v5Ev();
extern void _ZN7S9504C22v6Ev();
extern void _ZN7S9504C22v7Ev();
extern void _ZN7S9504C12v1Ev();
extern void _ZN7S9504C12v2Ev();
static  VTBL_ENTRY vtc_S9504C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9504C1[0]),
  (VTBL_ENTRY)&_ZN7S9504C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9504C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9504C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9504C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9504C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9504C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9504C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9504C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9504C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9504C1[];
extern  VTBL_ENTRY _ZTV7S9504C1[];
Class_Descriptor cd_S9504C1 = {  "S9504C1", // class name
  bases_S9504C1, 1,
  &(vtc_S9504C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S9504C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9504C1),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14092C1  {
  void *s14092c1f0;
  ::S4846C9_nt s14092c1f1;
  ::S8480C8_nt s14092c1f2;
  void *s14092c1f3;
};
//SIG(1 S14092C1) C1{ Fp FC2{ Fc[12]} FC3{ Fi Fp Fi} Fp}



static void Test_S14092C1()
{
  {
    init_simple_test("S14092C1");
    S14092C1 lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S14092C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14092C1)");
    check_field_offset(lv, s14092c1f0, 0, "S14092C1.s14092c1f0");
    check_field_offset(lv, s14092c1f1, ABISELECT(8,4), "S14092C1.s14092c1f1");
    check_field_offset(lv, s14092c1f2, ABISELECT(24,16), "S14092C1.s14092c1f2");
    check_field_offset(lv, s14092c1f3, ABISELECT(48,28), "S14092C1.s14092c1f3");
  }
}
static Arrange_To_Call_Me vS14092C1(Test_S14092C1, "S14092C1", ABISELECT(56,32));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20708C4  {
  virtual void  v1(); // _ZN8S20708C42v1Ev
  ~S20708C4(); // tgen
  S20708C4(); // tgen
};
//SIG(-1 S20708C4) C1{ v1}


void  S20708C4 ::v1(){vfunc_called(this, "_ZN8S20708C42v1Ev");}
S20708C4 ::~S20708C4(){ note_dtor("S20708C4", this);} // tgen
S20708C4 ::S20708C4(){ note_ctor("S20708C4", this);} // tgen

static void Test_S20708C4()
{
  extern Class_Descriptor cd_S20708C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20708C4, buf);
    S20708C4 *dp, &lv = *(dp=new (buf) S20708C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20708C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20708C4)");
    test_class_info(&lv, &cd_S20708C4);
    dp->~S20708C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20708C4(Test_S20708C4, "S20708C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20708C4C1Ev();
extern void _ZN8S20708C4D1Ev();
Name_Map name_map_S20708C4[] = {
  NSPAIR(_ZN8S20708C4C1Ev),
  NSPAIR(_ZN8S20708C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20708C4[];
extern void _ZN8S20708C42v1Ev();
static  VTBL_ENTRY vtc_S20708C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20708C4[0]),
  (VTBL_ENTRY)&_ZN8S20708C42v1Ev,
};
extern VTBL_ENTRY _ZTI8S20708C4[];
extern  VTBL_ENTRY _ZTV8S20708C4[];
Class_Descriptor cd_S20708C4 = {  "S20708C4", // class name
  0,0,//no base classes
  &(vtc_S20708C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20708C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20708C4),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  S20708C2  : virtual S2121C38 , S20708C4 , virtual S2121C28 {
  ~S20708C2(); // tgen
  S20708C2(); // tgen
};
//SIG(-1 S20708C2) C1{ VBC2{ m} BC3{ v1} VBC4{ m}}


S20708C2 ::~S20708C2(){ note_dtor("S20708C2", this);} // tgen
S20708C2 ::S20708C2(){ note_ctor("S20708C2", this);} // tgen

static void Test_S20708C2()
{
  extern Class_Descriptor cd_S20708C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20708C2, buf);
    S20708C2 *dp, &lv = *(dp=new (buf) S20708C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20708C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20708C2)");
    check_base_class_offset(lv, (S2121C38*), 0, "S20708C2");
    check_base_class_offset(lv, (S20708C4*), 0, "S20708C2");
    check_base_class_offset(lv, (S2121C28*), 0, "S20708C2");
    test_class_info(&lv, &cd_S20708C2);
    dp->~S20708C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20708C2(Test_S20708C2, "S20708C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20708C2C1Ev();
extern void _ZN8S20708C2D1Ev();
Name_Map name_map_S20708C2[] = {
  NSPAIR(_ZN8S20708C2C1Ev),
  NSPAIR(_ZN8S20708C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20708C4;
extern VTBL_ENTRY _ZTI8S20708C4[];
extern  VTBL_ENTRY _ZTV8S20708C4[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
static Base_Class bases_S20708C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20708C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S20708C2[];
extern void _ZN8S20708C42v1Ev();
static  VTBL_ENTRY vtc_S20708C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20708C2[0]),
  (VTBL_ENTRY)&_ZN8S20708C42v1Ev,
};
extern VTBL_ENTRY _ZTV8S20708C2[];
static  VTT_ENTRY vtt_S20708C2[] = {
  {&(_ZTV8S20708C2[4]),  4,5},
};
extern VTBL_ENTRY _ZTI8S20708C2[];
extern  VTBL_ENTRY _ZTV8S20708C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20708C2[];
Class_Descriptor cd_S20708C2 = {  "S20708C2", // class name
  bases_S20708C2, 3,
  &(vtc_S20708C2[0]), // expected_vtbl_contents
  &(vtt_S20708C2[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20708C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20708C2),5, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20708C2),1, //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  S20708C1  : virtual S20708C2 {
  ~S20708C1(); // tgen
  S20708C1(); // tgen
};
//SIG(1 S20708C1) C1{ VBC2{ VBC3{ m} BC4{ v1} VBC5{ m}}}


S20708C1 ::~S20708C1(){ note_dtor("S20708C1", this);} // tgen
S20708C1 ::S20708C1(){ note_ctor("S20708C1", this);} // tgen

static void Test_S20708C1()
{
  extern Class_Descriptor cd_S20708C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20708C1, buf);
    S20708C1 *dp, &lv = *(dp=new (buf) S20708C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20708C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20708C1)");
    check_base_class_offset(lv, (S2121C38*)(S20708C2*), 0, "S20708C1");
    check_base_class_offset(lv, (S20708C4*)(S20708C2*), 0, "S20708C1");
    check_base_class_offset(lv, (S2121C28*)(S20708C2*), 0, "S20708C1");
    check_base_class_offset(lv, (S20708C2*), 0, "S20708C1");
    test_class_info(&lv, &cd_S20708C1);
    dp->~S20708C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20708C1(Test_S20708C1, "S20708C1", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20708C1C1Ev();
extern void _ZN8S20708C1D1Ev();
Name_Map name_map_S20708C1[] = {
  NSPAIR(_ZN8S20708C1C1Ev),
  NSPAIR(_ZN8S20708C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20708C4;
extern VTBL_ENTRY _ZTI8S20708C4[];
extern  VTBL_ENTRY _ZTV8S20708C4[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20708C2;
extern VTBL_ENTRY _ZTI8S20708C2[];
extern  VTBL_ENTRY _ZTV8S20708C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20708C2[];
static Base_Class bases_S20708C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20708C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20708C2,    0, //bcp->offset
    -1, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20708C1[];
extern void _ZN8S20708C42v1Ev();
static  VTBL_ENTRY vtc_S20708C1[] = {
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20708C1[0]),
  (VTBL_ENTRY)&_ZN8S20708C42v1Ev,
};
extern VTBL_ENTRY _ZTV8S20708C1[];
extern void _ZN8S20708C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20708C2__8S20708C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20708C2[0]),
  (VTBL_ENTRY)&_ZN8S20708C42v1Ev,
};
static  VTT_ENTRY vtt_S20708C1[] = {
  {&(_ZTV8S20708C1[6]),  6,7},
  {&(_ZTV8S20708C1[6]),  6,7},
  {&(_tg__ZTV8S20708C2__8S20708C1[4]),  4,5},
};
extern VTBL_ENTRY _ZTI8S20708C1[];
extern  VTBL_ENTRY _ZTV8S20708C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20708C1[];
Class_Descriptor cd_S20708C1 = {  "S20708C1", // class name
  bases_S20708C1, 4,
  &(vtc_S20708C1[0]), // expected_vtbl_contents
  &(vtt_S20708C1[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20708C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20708C1),7, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20708C1),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  S8984C2  {
  virtual  ~S8984C2(); // _ZN7S8984C2D1Ev
  virtual void  v2(); // _ZN7S8984C22v2Ev
  virtual void  v3(); // _ZN7S8984C22v3Ev
  virtual void  v4(); // _ZN7S8984C22v4Ev
  virtual void  v5(); // _ZN7S8984C22v5Ev
  virtual void  v6(); // _ZN7S8984C22v6Ev
  S8984C2(); // tgen
};
//SIG(-1 S8984C2) C1{ vd v1 v2 v3 v4 v5}


 S8984C2 ::~S8984C2(){ note_dtor("S8984C2", this);}
void  S8984C2 ::v2(){vfunc_called(this, "_ZN7S8984C22v2Ev");}
void  S8984C2 ::v3(){vfunc_called(this, "_ZN7S8984C22v3Ev");}
void  S8984C2 ::v4(){vfunc_called(this, "_ZN7S8984C22v4Ev");}
void  S8984C2 ::v5(){vfunc_called(this, "_ZN7S8984C22v5Ev");}
void  S8984C2 ::v6(){vfunc_called(this, "_ZN7S8984C22v6Ev");}
S8984C2 ::S8984C2(){ note_ctor("S8984C2", this);} // tgen

static void Test_S8984C2()
{
  extern Class_Descriptor cd_S8984C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S8984C2, buf);
    S8984C2 *dp, &lv = *(dp=new (buf) S8984C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S8984C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8984C2)");
    test_class_info(&lv, &cd_S8984C2);
    dp->~S8984C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8984C2(Test_S8984C2, "S8984C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S8984C2C1Ev();
extern void _ZN7S8984C2D1Ev();
Name_Map name_map_S8984C2[] = {
  NSPAIR(_ZN7S8984C2C1Ev),
  NSPAIR(_ZN7S8984C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8984C2[];
extern void _ZN7S8984C2D1Ev();
extern void _ZN7S8984C2D0Ev();
extern void _ZN7S8984C22v2Ev();
extern void _ZN7S8984C22v3Ev();
extern void _ZN7S8984C22v4Ev();
extern void _ZN7S8984C22v5Ev();
extern void _ZN7S8984C22v6Ev();
static  VTBL_ENTRY vtc_S8984C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8984C2[0]),
  (VTBL_ENTRY)&_ZN7S8984C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8984C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8984C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8984C22v3Ev,
  (VTBL_ENTRY)&_ZN7S8984C22v4Ev,
  (VTBL_ENTRY)&_ZN7S8984C22v5Ev,
  (VTBL_ENTRY)&_ZN7S8984C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S8984C2[];
extern  VTBL_ENTRY _ZTV7S8984C2[];
Class_Descriptor cd_S8984C2 = {  "S8984C2", // class name
  0,0,//no base classes
  &(vtc_S8984C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S8984C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8984C2),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  S8984C1  : S8984C2 {
  virtual  ~S8984C1(); // _ZN7S8984C1D1Ev
  virtual void  v1(); // _ZN7S8984C12v1Ev
  S8984C1(); // tgen
};
//SIG(1 S8984C1) C1{ BC2{ vd v2 v3 v4 v5 v6} vd v1}


 S8984C1 ::~S8984C1(){ note_dtor("S8984C1", this);}
void  S8984C1 ::v1(){vfunc_called(this, "_ZN7S8984C12v1Ev");}
S8984C1 ::S8984C1(){ note_ctor("S8984C1", this);} // tgen

static void Test_S8984C1()
{
  extern Class_Descriptor cd_S8984C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S8984C1, buf);
    S8984C1 *dp, &lv = *(dp=new (buf) S8984C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S8984C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8984C1)");
    check_base_class_offset(lv, (S8984C2*), 0, "S8984C1");
    test_class_info(&lv, &cd_S8984C1);
    dp->~S8984C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8984C1(Test_S8984C1, "S8984C1", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S8984C1C1Ev();
extern void _ZN7S8984C1D1Ev();
Name_Map name_map_S8984C1[] = {
  NSPAIR(_ZN7S8984C1C1Ev),
  NSPAIR(_ZN7S8984C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8984C2;
extern VTBL_ENTRY _ZTI7S8984C2[];
extern  VTBL_ENTRY _ZTV7S8984C2[];
static Base_Class bases_S8984C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8984C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S8984C1[];
extern void _ZN7S8984C1D1Ev();
extern void _ZN7S8984C1D0Ev();
extern void _ZN7S8984C22v2Ev();
extern void _ZN7S8984C22v3Ev();
extern void _ZN7S8984C22v4Ev();
extern void _ZN7S8984C22v5Ev();
extern void _ZN7S8984C22v6Ev();
extern void _ZN7S8984C12v1Ev();
static  VTBL_ENTRY vtc_S8984C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8984C1[0]),
  (VTBL_ENTRY)&_ZN7S8984C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8984C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8984C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8984C22v3Ev,
  (VTBL_ENTRY)&_ZN7S8984C22v4Ev,
  (VTBL_ENTRY)&_ZN7S8984C22v5Ev,
  (VTBL_ENTRY)&_ZN7S8984C22v6Ev,
  (VTBL_ENTRY)&_ZN7S8984C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8984C1[];
extern  VTBL_ENTRY _ZTV7S8984C1[];
Class_Descriptor cd_S8984C1 = {  "S8984C1", // class name
  bases_S8984C1, 1,
  &(vtc_S8984C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S8984C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8984C1),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  S8981C2  {
  virtual  ~S8981C2(); // _ZN7S8981C2D1Ev
  virtual void  v2(); // _ZN7S8981C22v2Ev
  virtual void  v3(); // _ZN7S8981C22v3Ev
  virtual void  v4(); // _ZN7S8981C22v4Ev
  virtual void  v5(); // _ZN7S8981C22v5Ev
  virtual void  v6(); // _ZN7S8981C22v6Ev
  S8981C2(); // tgen
};
//SIG(-1 S8981C2) C1{ vd v1 v2 v3 v4 v5}


 S8981C2 ::~S8981C2(){ note_dtor("S8981C2", this);}
void  S8981C2 ::v2(){vfunc_called(this, "_ZN7S8981C22v2Ev");}
void  S8981C2 ::v3(){vfunc_called(this, "_ZN7S8981C22v3Ev");}
void  S8981C2 ::v4(){vfunc_called(this, "_ZN7S8981C22v4Ev");}
void  S8981C2 ::v5(){vfunc_called(this, "_ZN7S8981C22v5Ev");}
void  S8981C2 ::v6(){vfunc_called(this, "_ZN7S8981C22v6Ev");}
S8981C2 ::S8981C2(){ note_ctor("S8981C2", this);} // tgen

static void Test_S8981C2()
{
  extern Class_Descriptor cd_S8981C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S8981C2, buf);
    S8981C2 *dp, &lv = *(dp=new (buf) S8981C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S8981C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8981C2)");
    test_class_info(&lv, &cd_S8981C2);
    dp->~S8981C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8981C2(Test_S8981C2, "S8981C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S8981C2C1Ev();
extern void _ZN7S8981C2D1Ev();
Name_Map name_map_S8981C2[] = {
  NSPAIR(_ZN7S8981C2C1Ev),
  NSPAIR(_ZN7S8981C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8981C2[];
extern void _ZN7S8981C2D1Ev();
extern void _ZN7S8981C2D0Ev();
extern void _ZN7S8981C22v2Ev();
extern void _ZN7S8981C22v3Ev();
extern void _ZN7S8981C22v4Ev();
extern void _ZN7S8981C22v5Ev();
extern void _ZN7S8981C22v6Ev();
static  VTBL_ENTRY vtc_S8981C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8981C2[0]),
  (VTBL_ENTRY)&_ZN7S8981C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8981C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8981C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8981C22v3Ev,
  (VTBL_ENTRY)&_ZN7S8981C22v4Ev,
  (VTBL_ENTRY)&_ZN7S8981C22v5Ev,
  (VTBL_ENTRY)&_ZN7S8981C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S8981C2[];
extern  VTBL_ENTRY _ZTV7S8981C2[];
Class_Descriptor cd_S8981C2 = {  "S8981C2", // class name
  0,0,//no base classes
  &(vtc_S8981C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S8981C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8981C2),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  S8981C1  : S8981C2 {
  int s8981c1f0;
  virtual void  v1(); // _ZN7S8981C12v1Ev
  ~S8981C1(); // tgen
  S8981C1(); // tgen
};
//SIG(1 S8981C1) C1{ BC2{ vd v2 v3 v4 v5 v6} v1 Fi}


void  S8981C1 ::v1(){vfunc_called(this, "_ZN7S8981C12v1Ev");}
S8981C1 ::~S8981C1(){ note_dtor("S8981C1", this);} // tgen
S8981C1 ::S8981C1(){ note_ctor("S8981C1", this);} // tgen

static void Test_S8981C1()
{
  extern Class_Descriptor cd_S8981C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S8981C1, buf);
    S8981C1 *dp, &lv = *(dp=new (buf) S8981C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S8981C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8981C1)");
    check_base_class_offset(lv, (S8981C2*), 0, "S8981C1");
    check_field_offset(lv, s8981c1f0, ABISELECT(8,4), "S8981C1.s8981c1f0");
    test_class_info(&lv, &cd_S8981C1);
    dp->~S8981C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8981C1(Test_S8981C1, "S8981C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S8981C1C1Ev();
extern void _ZN7S8981C1D1Ev();
Name_Map name_map_S8981C1[] = {
  NSPAIR(_ZN7S8981C1C1Ev),
  NSPAIR(_ZN7S8981C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8981C2;
extern VTBL_ENTRY _ZTI7S8981C2[];
extern  VTBL_ENTRY _ZTV7S8981C2[];
static Base_Class bases_S8981C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8981C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S8981C1[];
extern void _ZN7S8981C1D1Ev();
extern void _ZN7S8981C1D0Ev();
extern void _ZN7S8981C22v2Ev();
extern void _ZN7S8981C22v3Ev();
extern void _ZN7S8981C22v4Ev();
extern void _ZN7S8981C22v5Ev();
extern void _ZN7S8981C22v6Ev();
extern void _ZN7S8981C12v1Ev();
static  VTBL_ENTRY vtc_S8981C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8981C1[0]),
  (VTBL_ENTRY)&_ZN7S8981C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8981C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8981C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8981C22v3Ev,
  (VTBL_ENTRY)&_ZN7S8981C22v4Ev,
  (VTBL_ENTRY)&_ZN7S8981C22v5Ev,
  (VTBL_ENTRY)&_ZN7S8981C22v6Ev,
  (VTBL_ENTRY)&_ZN7S8981C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8981C1[];
extern  VTBL_ENTRY _ZTV7S8981C1[];
Class_Descriptor cd_S8981C1 = {  "S8981C1", // class name
  bases_S8981C1, 1,
  &(vtc_S8981C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S8981C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8981C1),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  S8058C1  : S6282C14_nt , S8480C8_nt {
  ~S8058C1(); // tgen
  S8058C1(); // tgen
};
//SIG(1 S8058C1) C1{ BC2{ vd m Fi} BC3{ Fi Fp Fi}}


S8058C1 ::~S8058C1(){ note_dtor("S8058C1", this);} // tgen
S8058C1 ::S8058C1(){ note_ctor("S8058C1", this);} // tgen

static void Test_S8058C1()
{
  extern Class_Descriptor cd_S8058C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S8058C1, buf);
    S8058C1 *dp, &lv = *(dp=new (buf) S8058C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S8058C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8058C1)");
    check_base_class_offset(lv, (S6282C14_nt*), 0, "S8058C1");
    check_base_class_offset(lv, (S8480C8_nt*), ABISELECT(16,8), "S8058C1");
    test_class_info(&lv, &cd_S8058C1);
    dp->~S8058C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8058C1(Test_S8058C1, "S8058C1", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S8058C1C1Ev();
extern void _ZN7S8058C1D1Ev();
Name_Map name_map_S8058C1[] = {
  NSPAIR(_ZN7S8058C1C1Ev),
  NSPAIR(_ZN7S8058C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6282C14_nt;
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
extern  VTBL_ENTRY _ZTV11S6282C14_nt[];
extern Class_Descriptor cd_S8480C8_nt;
extern VTBL_ENTRY _ZTI10S8480C8_nt[];
static Base_Class bases_S8058C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6282C14_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_S8480C8_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8058C1[];
extern void _ZN7S8058C1D1Ev();
extern void _ZN7S8058C1D0Ev();
static  VTBL_ENTRY vtc_S8058C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8058C1[0]),
  (VTBL_ENTRY)&_ZN7S8058C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8058C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8058C1[];
extern  VTBL_ENTRY _ZTV7S8058C1[];
Class_Descriptor cd_S8058C1 = {  "S8058C1", // class name
  bases_S8058C1, 2,
  &(vtc_S8058C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S8058C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S8058C1),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8983C2  {
  virtual  ~S8983C2(); // _ZN7S8983C2D1Ev
  virtual void  v2(); // _ZN7S8983C22v2Ev
  virtual void  v3(); // _ZN7S8983C22v3Ev
  virtual void  v4(); // _ZN7S8983C22v4Ev
  virtual void  v5(); // _ZN7S8983C22v5Ev
  virtual void  v6(); // _ZN7S8983C22v6Ev
  S8983C2(); // tgen
};
//SIG(-1 S8983C2) C1{ vd v1 v2 v3 v4 v5}


 S8983C2 ::~S8983C2(){ note_dtor("S8983C2", this);}
void  S8983C2 ::v2(){vfunc_called(this, "_ZN7S8983C22v2Ev");}
void  S8983C2 ::v3(){vfunc_called(this, "_ZN7S8983C22v3Ev");}
void  S8983C2 ::v4(){vfunc_called(this, "_ZN7S8983C22v4Ev");}
void  S8983C2 ::v5(){vfunc_called(this, "_ZN7S8983C22v5Ev");}
void  S8983C2 ::v6(){vfunc_called(this, "_ZN7S8983C22v6Ev");}
S8983C2 ::S8983C2(){ note_ctor("S8983C2", this);} // tgen

static void Test_S8983C2()
{
  extern Class_Descriptor cd_S8983C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S8983C2, buf);
    S8983C2 *dp, &lv = *(dp=new (buf) S8983C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S8983C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8983C2)");
    test_class_info(&lv, &cd_S8983C2);
    dp->~S8983C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8983C2(Test_S8983C2, "S8983C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S8983C2C1Ev();
extern void _ZN7S8983C2D1Ev();
Name_Map name_map_S8983C2[] = {
  NSPAIR(_ZN7S8983C2C1Ev),
  NSPAIR(_ZN7S8983C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8983C2[];
extern void _ZN7S8983C2D1Ev();
extern void _ZN7S8983C2D0Ev();
extern void _ZN7S8983C22v2Ev();
extern void _ZN7S8983C22v3Ev();
extern void _ZN7S8983C22v4Ev();
extern void _ZN7S8983C22v5Ev();
extern void _ZN7S8983C22v6Ev();
static  VTBL_ENTRY vtc_S8983C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8983C2[0]),
  (VTBL_ENTRY)&_ZN7S8983C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8983C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8983C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8983C22v3Ev,
  (VTBL_ENTRY)&_ZN7S8983C22v4Ev,
  (VTBL_ENTRY)&_ZN7S8983C22v5Ev,
  (VTBL_ENTRY)&_ZN7S8983C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S8983C2[];
extern  VTBL_ENTRY _ZTV7S8983C2[];
Class_Descriptor cd_S8983C2 = {  "S8983C2", // class name
  0,0,//no base classes
  &(vtc_S8983C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S8983C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8983C2),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  S8983C1  : S8983C2 {
  virtual void  v1(); // _ZN7S8983C12v1Ev
  ~S8983C1(); // tgen
  S8983C1(); // tgen
};
//SIG(1 S8983C1) C1{ BC2{ vd v2 v3 v4 v5 v6} v1}


void  S8983C1 ::v1(){vfunc_called(this, "_ZN7S8983C12v1Ev");}
S8983C1 ::~S8983C1(){ note_dtor("S8983C1", this);} // tgen
S8983C1 ::S8983C1(){ note_ctor("S8983C1", this);} // tgen

static void Test_S8983C1()
{
  extern Class_Descriptor cd_S8983C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S8983C1, buf);
    S8983C1 *dp, &lv = *(dp=new (buf) S8983C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S8983C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8983C1)");
    check_base_class_offset(lv, (S8983C2*), 0, "S8983C1");
    test_class_info(&lv, &cd_S8983C1);
    dp->~S8983C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8983C1(Test_S8983C1, "S8983C1", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S8983C1C1Ev();
extern void _ZN7S8983C1D1Ev();
Name_Map name_map_S8983C1[] = {
  NSPAIR(_ZN7S8983C1C1Ev),
  NSPAIR(_ZN7S8983C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8983C2;
extern VTBL_ENTRY _ZTI7S8983C2[];
extern  VTBL_ENTRY _ZTV7S8983C2[];
static Base_Class bases_S8983C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8983C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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 _ZTI7S8983C1[];
extern void _ZN7S8983C1D1Ev();
extern void _ZN7S8983C1D0Ev();
extern void _ZN7S8983C22v2Ev();
extern void _ZN7S8983C22v3Ev();
extern void _ZN7S8983C22v4Ev();
extern void _ZN7S8983C22v5Ev();
extern void _ZN7S8983C22v6Ev();
extern void _ZN7S8983C12v1Ev();
static  VTBL_ENTRY vtc_S8983C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8983C1[0]),
  (VTBL_ENTRY)&_ZN7S8983C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8983C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8983C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8983C22v3Ev,
  (VTBL_ENTRY)&_ZN7S8983C22v4Ev,
  (VTBL_ENTRY)&_ZN7S8983C22v5Ev,
  (VTBL_ENTRY)&_ZN7S8983C22v6Ev,
  (VTBL_ENTRY)&_ZN7S8983C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8983C1[];
extern  VTBL_ENTRY _ZTV7S8983C1[];
Class_Descriptor cd_S8983C1 = {  "S8983C1", // class name
  bases_S8983C1, 1,
  &(vtc_S8983C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S8983C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8983C1),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  S14295C1  {
  void *s14295c1f0;
  int s14295c1f1[2];
  void *s14295c1f2;
  int s14295c1f3;
  char s14295c1f4;
  int s14295c1f5[3];
};
//SIG(1 S14295C1) C1{ Fp Fi[2] Fp Fi Fc Fi[3]}



static void Test_S14295C1()
{
  {
    init_simple_test("S14295C1");
    S14295C1 lv;
    check2(sizeof(lv), ABISELECT(48,36), "sizeof(S14295C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14295C1)");
    check_field_offset(lv, s14295c1f0, 0, "S14295C1.s14295c1f0");
    check_field_offset(lv, s14295c1f1, ABISELECT(8,4), "S14295C1.s14295c1f1");
    check_field_offset(lv, s14295c1f2, ABISELECT(16,12), "S14295C1.s14295c1f2");
    check_field_offset(lv, s14295c1f3, ABISELECT(24,16), "S14295C1.s14295c1f3");
    check_field_offset(lv, s14295c1f4, ABISELECT(28,20), "S14295C1.s14295c1f4");
    check_field_offset(lv, s14295c1f5, ABISELECT(32,24), "S14295C1.s14295c1f5");
  }
}
static Arrange_To_Call_Me vS14295C1(Test_S14295C1, "S14295C1", ABISELECT(48,36));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18724C1  {
  int s18724c1f0;
  void *s18724c1f1;
  __tsi64 s18724c1f2;
  virtual void  v1(); // _ZN8S18724C12v1Ev
  virtual void  v2(); // _ZN8S18724C12v2Ev
  virtual void  v3(); // _ZN8S18724C12v3Ev
  virtual void  v4(); // _ZN8S18724C12v4Ev
  virtual void  v5(); // _ZN8S18724C12v5Ev
  ~S18724C1(); // tgen
  S18724C1(); // tgen
};
//SIG(1 S18724C1) C1{ v1 v2 v3 v4 v5 Fi Fp FL}


void  S18724C1 ::v1(){vfunc_called(this, "_ZN8S18724C12v1Ev");}
void  S18724C1 ::v2(){vfunc_called(this, "_ZN8S18724C12v2Ev");}
void  S18724C1 ::v3(){vfunc_called(this, "_ZN8S18724C12v3Ev");}
void  S18724C1 ::v4(){vfunc_called(this, "_ZN8S18724C12v4Ev");}
void  S18724C1 ::v5(){vfunc_called(this, "_ZN8S18724C12v5Ev");}
S18724C1 ::~S18724C1(){ note_dtor("S18724C1", this);} // tgen
S18724C1 ::S18724C1(){ note_ctor("S18724C1", this);} // tgen

static void Test_S18724C1()
{
  extern Class_Descriptor cd_S18724C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S18724C1, buf);
    S18724C1 *dp, &lv = *(dp=new (buf) S18724C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S18724C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18724C1)");
    check_field_offset(lv, s18724c1f0, ABISELECT(8,4), "S18724C1.s18724c1f0");
    check_field_offset(lv, s18724c1f1, ABISELECT(16,8), "S18724C1.s18724c1f1");
    check_field_offset(lv, s18724c1f2, ABISELECT(24,12), "S18724C1.s18724c1f2");
    test_class_info(&lv, &cd_S18724C1);
    dp->~S18724C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18724C1(Test_S18724C1, "S18724C1", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S18724C1C1Ev();
extern void _ZN8S18724C1D1Ev();
Name_Map name_map_S18724C1[] = {
  NSPAIR(_ZN8S18724C1C1Ev),
  NSPAIR(_ZN8S18724C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18724C1[];
extern void _ZN8S18724C12v1Ev();
extern void _ZN8S18724C12v2Ev();
extern void _ZN8S18724C12v3Ev();
extern void _ZN8S18724C12v4Ev();
extern void _ZN8S18724C12v5Ev();
static  VTBL_ENTRY vtc_S18724C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18724C1[0]),
  (VTBL_ENTRY)&_ZN8S18724C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18724C12v2Ev,
  (VTBL_ENTRY)&_ZN8S18724C12v3Ev,
  (VTBL_ENTRY)&_ZN8S18724C12v4Ev,
  (VTBL_ENTRY)&_ZN8S18724C12v5Ev,
};
extern VTBL_ENTRY _ZTI8S18724C1[];
extern  VTBL_ENTRY _ZTV8S18724C1[];
Class_Descriptor cd_S18724C1 = {  "S18724C1", // class name
  0,0,//no base classes
  &(vtc_S18724C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S18724C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18724C1),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  S11528C1  {
  ::S4846C11_nt s11528c1f0;
  int s11528c1f1;
};
//SIG(1 S11528C1) C1{ FC2{ Fi[2] Fc[320] Fi} Fi}



static void Test_S11528C1()
{
  {
    init_simple_test("S11528C1");
    S11528C1 lv;
    check2(sizeof(lv), 336, "sizeof(S11528C1)");
    check2(__alignof__(lv), 4, "__alignof__(S11528C1)");
    check_field_offset(lv, s11528c1f0, 0, "S11528C1.s11528c1f0");
    check_field_offset(lv, s11528c1f1, 332, "S11528C1.s11528c1f1");
  }
}
static Arrange_To_Call_Me vS11528C1(Test_S11528C1, "S11528C1", 336);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9578C2_nt  {
  virtual  ~S9578C2_nt(); // _ZN10S9578C2_ntD1Ev
  virtual void  v3(); // _ZN10S9578C2_nt2v3Ev
  virtual void  v4(); // _ZN10S9578C2_nt2v4Ev
  S9578C2_nt(); // tgen
};
//SIG(-1 S9578C2_nt) C1{ vd v1 v2}


 S9578C2_nt ::~S9578C2_nt(){ note_dtor("S9578C2_nt", this);}
void  S9578C2_nt ::v3(){vfunc_called(this, "_ZN10S9578C2_nt2v3Ev");}
void  S9578C2_nt ::v4(){vfunc_called(this, "_ZN10S9578C2_nt2v4Ev");}
S9578C2_nt ::S9578C2_nt(){ note_ctor("S9578C2_nt", this);} // tgen

//skip512 S9578C2_nt

#else // __cplusplus

extern void _ZN10S9578C2_ntC1Ev();
extern void _ZN10S9578C2_ntD1Ev();
Name_Map name_map_S9578C2_nt[] = {
  NSPAIR(_ZN10S9578C2_ntC1Ev),
  NSPAIR(_ZN10S9578C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S9578C2_nt[];
extern void _ZN10S9578C2_ntD1Ev();
extern void _ZN10S9578C2_ntD0Ev();
extern void _ZN10S9578C2_nt2v3Ev();
extern void _ZN10S9578C2_nt2v4Ev();
static  VTBL_ENTRY vtc_S9578C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S9578C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S9578C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S9578C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S9578C2_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S9578C2_nt2v4Ev,
};
extern VTBL_ENTRY _ZTI10S9578C2_nt[];
VTBL_ENTRY *P__ZTI10S9578C2_nt = _ZTI10S9578C2_nt; 
extern  VTBL_ENTRY _ZTV10S9578C2_nt[];
Class_Descriptor cd_S9578C2_nt = {  "S9578C2_nt", // class name
  0,0,//no base classes
  &(vtc_S9578C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S9578C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S9578C2_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  S9578C1  : S9578C2_nt {
  virtual  ~S9578C1(); // _ZN7S9578C1D1Ev
  virtual void  v1(); // _ZN7S9578C12v1Ev
  virtual void  v2(); // _ZN7S9578C12v2Ev
  S9578C1(); // tgen
};
//SIG(1 S9578C1) C1{ BC2{ vd v3 v4} vd v1 v2}


 S9578C1 ::~S9578C1(){ note_dtor("S9578C1", this);}
void  S9578C1 ::v1(){vfunc_called(this, "_ZN7S9578C12v1Ev");}
void  S9578C1 ::v2(){vfunc_called(this, "_ZN7S9578C12v2Ev");}
S9578C1 ::S9578C1(){ note_ctor("S9578C1", this);} // tgen

static void Test_S9578C1()
{
  extern Class_Descriptor cd_S9578C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9578C1, buf);
    S9578C1 *dp, &lv = *(dp=new (buf) S9578C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9578C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9578C1)");
    check_base_class_offset(lv, (S9578C2_nt*), 0, "S9578C1");
    test_class_info(&lv, &cd_S9578C1);
    dp->~S9578C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9578C1(Test_S9578C1, "S9578C1", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9578C1C1Ev();
extern void _ZN7S9578C1D1Ev();
Name_Map name_map_S9578C1[] = {
  NSPAIR(_ZN7S9578C1C1Ev),
  NSPAIR(_ZN7S9578C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9578C2_nt;
extern VTBL_ENTRY _ZTI10S9578C2_nt[];
extern  VTBL_ENTRY _ZTV10S9578C2_nt[];
static Base_Class bases_S9578C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9578C2_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 _ZTI7S9578C1[];
extern void _ZN7S9578C1D1Ev();
extern void _ZN7S9578C1D0Ev();
extern void _ZN10S9578C2_nt2v3Ev();
extern void _ZN10S9578C2_nt2v4Ev();
extern void _ZN7S9578C12v1Ev();
extern void _ZN7S9578C12v2Ev();
static  VTBL_ENTRY vtc_S9578C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9578C1[0]),
  (VTBL_ENTRY)&_ZN7S9578C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9578C1D0Ev,
  (VTBL_ENTRY)&_ZN10S9578C2_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S9578C2_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S9578C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9578C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9578C1[];
extern  VTBL_ENTRY _ZTV7S9578C1[];
Class_Descriptor cd_S9578C1 = {  "S9578C1", // class name
  bases_S9578C1, 1,
  &(vtc_S9578C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9578C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9578C1),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  S21560C2_nt  {
  long s21560c2f0;
};
//SIG(-1 S21560C2_nt) C1{ Fl}



//skip512 S21560C2_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21560C1  {
  int s21560c1f0;
  char s21560c1f1;
  ::S21560C2_nt s21560c1f2;
  ::S21560C2_nt s21560c1f3;
  void  mf21560c1(); // _ZN8S21560C19mf21560c1Ev
  virtual  ~S21560C1(); // _ZN8S21560C1D1Ev
  S21560C1(); // tgen
};
//SIG(1 S21560C1) C1{ vd m Fi Fc FC2{ Fl} FC2}


void  S21560C1 ::mf21560c1(){}
 S21560C1 ::~S21560C1(){ note_dtor("S21560C1", this);}
S21560C1 ::S21560C1(){ note_ctor("S21560C1", this);} // tgen

static void Test_S21560C1()
{
  extern Class_Descriptor cd_S21560C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S21560C1, buf);
    S21560C1 *dp, &lv = *(dp=new (buf) S21560C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S21560C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21560C1)");
    check_field_offset(lv, s21560c1f0, ABISELECT(8,4), "S21560C1.s21560c1f0");
    check_field_offset(lv, s21560c1f1, ABISELECT(12,8), "S21560C1.s21560c1f1");
    check_field_offset(lv, s21560c1f2, ABISELECT(16,12), "S21560C1.s21560c1f2");
    check_field_offset(lv, s21560c1f3, ABISELECT(24,16), "S21560C1.s21560c1f3");
    test_class_info(&lv, &cd_S21560C1);
    dp->~S21560C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21560C1(Test_S21560C1, "S21560C1", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S21560C1C1Ev();
extern void _ZN8S21560C1D1Ev();
Name_Map name_map_S21560C1[] = {
  NSPAIR(_ZN8S21560C1C1Ev),
  NSPAIR(_ZN8S21560C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21560C1[];
extern void _ZN8S21560C1D1Ev();
extern void _ZN8S21560C1D0Ev();
static  VTBL_ENTRY vtc_S21560C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21560C1[0]),
  (VTBL_ENTRY)&_ZN8S21560C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21560C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21560C1[];
extern  VTBL_ENTRY _ZTV8S21560C1[];
Class_Descriptor cd_S21560C1 = {  "S21560C1", // class name
  0,0,//no base classes
  &(vtc_S21560C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S21560C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21560C1),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  S13881C1  {
  long s13881c1f0;
  short s13881c1f1[2];
  long s13881c1f2;
  short s13881c1f3[2];
  long s13881c1f4;
};
//SIG(1 S13881C1) C1{ Fl Fs[2] Fl Fs[2] Fl}



static void Test_S13881C1()
{
  {
    init_simple_test("S13881C1");
    S13881C1 lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S13881C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13881C1)");
    check_field_offset(lv, s13881c1f0, 0, "S13881C1.s13881c1f0");
    check_field_offset(lv, s13881c1f1, ABISELECT(8,4), "S13881C1.s13881c1f1");
    check_field_offset(lv, s13881c1f2, ABISELECT(16,8), "S13881C1.s13881c1f2");
    check_field_offset(lv, s13881c1f3, ABISELECT(24,12), "S13881C1.s13881c1f3");
    check_field_offset(lv, s13881c1f4, ABISELECT(32,16), "S13881C1.s13881c1f4");
  }
}
static Arrange_To_Call_Me vS13881C1(Test_S13881C1, "S13881C1", ABISELECT(40,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8139C1  : S6282C14_nt {
  void *s8139c1f0[2];
  virtual  ~S8139C1(); // _ZN7S8139C1D1Ev
  S8139C1(); // tgen
};
//SIG(1 S8139C1) C1{ BC2{ vd m Fi} vd Fp[2]}


 S8139C1 ::~S8139C1(){ note_dtor("S8139C1", this);}
S8139C1 ::S8139C1(){ note_ctor("S8139C1", this);} // tgen

static void Test_S8139C1()
{
  extern Class_Descriptor cd_S8139C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S8139C1, buf);
    S8139C1 *dp, &lv = *(dp=new (buf) S8139C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S8139C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8139C1)");
    check_base_class_offset(lv, (S6282C14_nt*), 0, "S8139C1");
    check_field_offset(lv, s8139c1f0, ABISELECT(16,8), "S8139C1.s8139c1f0");
    test_class_info(&lv, &cd_S8139C1);
    dp->~S8139C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8139C1(Test_S8139C1, "S8139C1", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S8139C1C1Ev();
extern void _ZN7S8139C1D1Ev();
Name_Map name_map_S8139C1[] = {
  NSPAIR(_ZN7S8139C1C1Ev),
  NSPAIR(_ZN7S8139C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6282C14_nt;
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
extern  VTBL_ENTRY _ZTV11S6282C14_nt[];
static Base_Class bases_S8139C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6282C14_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 _ZTI7S8139C1[];
extern void _ZN7S8139C1D1Ev();
extern void _ZN7S8139C1D0Ev();
static  VTBL_ENTRY vtc_S8139C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8139C1[0]),
  (VTBL_ENTRY)&_ZN7S8139C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8139C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8139C1[];
extern  VTBL_ENTRY _ZTV7S8139C1[];
Class_Descriptor cd_S8139C1 = {  "S8139C1", // class name
  bases_S8139C1, 1,
  &(vtc_S8139C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S8139C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8139C1),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18680C1  {
  __tsi64 s18680c1f0;
  short s18680c1f1[2];
  virtual void  v1(); // _ZN8S18680C12v1Ev
  virtual void  v2(); // _ZN8S18680C12v2Ev
  virtual void  v3(); // _ZN8S18680C12v3Ev
  virtual void  v4(); // _ZN8S18680C12v4Ev
  ~S18680C1(); // tgen
  S18680C1(); // tgen
};
//SIG(1 S18680C1) C1{ v1 v2 v3 v4 FL Fs[2]}


void  S18680C1 ::v1(){vfunc_called(this, "_ZN8S18680C12v1Ev");}
void  S18680C1 ::v2(){vfunc_called(this, "_ZN8S18680C12v2Ev");}
void  S18680C1 ::v3(){vfunc_called(this, "_ZN8S18680C12v3Ev");}
void  S18680C1 ::v4(){vfunc_called(this, "_ZN8S18680C12v4Ev");}
S18680C1 ::~S18680C1(){ note_dtor("S18680C1", this);} // tgen
S18680C1 ::S18680C1(){ note_ctor("S18680C1", this);} // tgen

static void Test_S18680C1()
{
  extern Class_Descriptor cd_S18680C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S18680C1, buf);
    S18680C1 *dp, &lv = *(dp=new (buf) S18680C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S18680C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18680C1)");
    check_field_offset(lv, s18680c1f0, ABISELECT(8,4), "S18680C1.s18680c1f0");
    check_field_offset(lv, s18680c1f1, ABISELECT(16,12), "S18680C1.s18680c1f1");
    test_class_info(&lv, &cd_S18680C1);
    dp->~S18680C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18680C1(Test_S18680C1, "S18680C1", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S18680C1C1Ev();
extern void _ZN8S18680C1D1Ev();
Name_Map name_map_S18680C1[] = {
  NSPAIR(_ZN8S18680C1C1Ev),
  NSPAIR(_ZN8S18680C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18680C1[];
extern void _ZN8S18680C12v1Ev();
extern void _ZN8S18680C12v2Ev();
extern void _ZN8S18680C12v3Ev();
extern void _ZN8S18680C12v4Ev();
static  VTBL_ENTRY vtc_S18680C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18680C1[0]),
  (VTBL_ENTRY)&_ZN8S18680C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18680C12v2Ev,
  (VTBL_ENTRY)&_ZN8S18680C12v3Ev,
  (VTBL_ENTRY)&_ZN8S18680C12v4Ev,
};
extern VTBL_ENTRY _ZTI8S18680C1[];
extern  VTBL_ENTRY _ZTV8S18680C1[];
Class_Descriptor cd_S18680C1 = {  "S18680C1", // class name
  0,0,//no base classes
  &(vtc_S18680C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S18680C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18680C1),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  S11170C2  {
  char s11170c2f0[21];
  int s11170c2f1;
};
//SIG(-1 S11170C2) C1{ Fc[21] Fi}



static void Test_S11170C2()
{
  {
    init_simple_test("S11170C2");
    S11170C2 lv;
    check2(sizeof(lv), 28, "sizeof(S11170C2)");
    check2(__alignof__(lv), 4, "__alignof__(S11170C2)");
    check_field_offset(lv, s11170c2f0, 0, "S11170C2.s11170c2f0");
    check_field_offset(lv, s11170c2f1, 24, "S11170C2.s11170c2f1");
  }
}
static Arrange_To_Call_Me vS11170C2(Test_S11170C2, "S11170C2", 28);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11170C1  {
  ::S11170C2 s11170c1f0;
  int s11170c1f1[3];
};
//SIG(1 S11170C1) C1{ FC2{ Fc[21] Fi} Fi[3]}



static void Test_S11170C1()
{
  {
    init_simple_test("S11170C1");
    S11170C1 lv;
    check2(sizeof(lv), 40, "sizeof(S11170C1)");
    check2(__alignof__(lv), 4, "__alignof__(S11170C1)");
    check_field_offset(lv, s11170c1f0, 0, "S11170C1.s11170c1f0");
    check_field_offset(lv, s11170c1f1, 28, "S11170C1.s11170c1f1");
  }
}
static Arrange_To_Call_Me vS11170C1(Test_S11170C1, "S11170C1", 40);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18434C1  {
  short s18434c1f0[2];
  int s18434c1f1;
  short s18434c1f2;
  int s18434c1f3[4];
  void  mf18434c1(); // _ZN8S18434C19mf18434c1Ev
};
//SIG(1 S18434C1) C1{ m Fs[2] Fi Fs Fi[4]}


void  S18434C1 ::mf18434c1(){}

static void Test_S18434C1()
{
  {
    init_simple_test("S18434C1");
    S18434C1 lv;
    check2(sizeof(lv), 28, "sizeof(S18434C1)");
    check2(__alignof__(lv), 4, "__alignof__(S18434C1)");
    check_field_offset(lv, s18434c1f0, 0, "S18434C1.s18434c1f0");
    check_field_offset(lv, s18434c1f1, 4, "S18434C1.s18434c1f1");
    check_field_offset(lv, s18434c1f2, 8, "S18434C1.s18434c1f2");
    check_field_offset(lv, s18434c1f3, 12, "S18434C1.s18434c1f3");
  }
}
static Arrange_To_Call_Me vS18434C1(Test_S18434C1, "S18434C1", 28);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10978C1  {
  char s10978c1f0[6];
  short s10978c1f1[8];
  char s10978c1f2[10];
};
//SIG(1 S10978C1) C1{ Fc[6] Fs[8] Fc[10]}



static void Test_S10978C1()
{
  {
    init_simple_test("S10978C1");
    S10978C1 lv;
    check2(sizeof(lv), 32, "sizeof(S10978C1)");
    check2(__alignof__(lv), 2, "__alignof__(S10978C1)");
    check_field_offset(lv, s10978c1f0, 0, "S10978C1.s10978c1f0");
    check_field_offset(lv, s10978c1f1, 6, "S10978C1.s10978c1f1");
    check_field_offset(lv, s10978c1f2, 22, "S10978C1.s10978c1f2");
  }
}
static Arrange_To_Call_Me vS10978C1(Test_S10978C1, "S10978C1", 32);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13030C1  {
  int s13030c1f0[2];
  char s13030c1f1[32];
  int s13030c1f2[5];
};
//SIG(1 S13030C1) C1{ Fi[2] Fc[32] Fi[5]}



static void Test_S13030C1()
{
  {
    init_simple_test("S13030C1");
    S13030C1 lv;
    check2(sizeof(lv), 60, "sizeof(S13030C1)");
    check2(__alignof__(lv), 4, "__alignof__(S13030C1)");
    check_field_offset(lv, s13030c1f0, 0, "S13030C1.s13030c1f0");
    check_field_offset(lv, s13030c1f1, 8, "S13030C1.s13030c1f1");
    check_field_offset(lv, s13030c1f2, 40, "S13030C1.s13030c1f2");
  }
}
static Arrange_To_Call_Me vS13030C1(Test_S13030C1, "S13030C1", 60);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12699C1  {
  int s12699c1f0;
  void *s12699c1f1;
  int s12699c1f2[2];
  char s12699c1f3[2];
};
//SIG(1 S12699C1) C1{ Fi Fp Fi[2] Fc[2]}



static void Test_S12699C1()
{
  {
    init_simple_test("S12699C1");
    S12699C1 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S12699C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12699C1)");
    check_field_offset(lv, s12699c1f0, 0, "S12699C1.s12699c1f0");
    check_field_offset(lv, s12699c1f1, ABISELECT(8,4), "S12699C1.s12699c1f1");
    check_field_offset(lv, s12699c1f2, ABISELECT(16,8), "S12699C1.s12699c1f2");
    check_field_offset(lv, s12699c1f3, ABISELECT(24,16), "S12699C1.s12699c1f3");
  }
}
static Arrange_To_Call_Me vS12699C1(Test_S12699C1, "S12699C1", ABISELECT(32,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

union  S17845C2  {
  short s17845c2f0;
  short s17845c2f1;
  void  mf17845c2(); // _ZN8S17845C29mf17845c2Ev
};
//SIG(1 S17845C2) U1{ m Fs Fs}

#endif // __cplusplus
#ifdef __cplusplus

struct  S17845C1  {
  void *s17845c1f0;
  ::S17845C2 s17845c1f1;
  void  mf17845c1(); // _ZN8S17845C19mf17845c1Ev
};
//SIG(1 S17845C1) C1{ m Fp FU2{ m Fs Fs}}


void  S17845C1 ::mf17845c1(){}

static void Test_S17845C1()
{
  {
    init_simple_test("S17845C1");
    S17845C1 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S17845C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17845C1)");
    check_field_offset(lv, s17845c1f0, 0, "S17845C1.s17845c1f0");
    check_field_offset(lv, s17845c1f1, ABISELECT(8,4), "S17845C1.s17845c1f1");
  }
}
static Arrange_To_Call_Me vS17845C1(Test_S17845C1, "S17845C1", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6233C1  : S2121C38 {
  void *s6233c1f0;
  int s6233c1f1[2];
  void *s6233c1f2;
};
//SIG(1 S6233C1) C1{ BC2{ m} Fp Fi[2] Fp}



static void Test_S6233C1()
{
  extern Class_Descriptor cd_S6233C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S6233C1, buf);
    S6233C1 &lv = *(new (buf) S6233C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S6233C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6233C1)");
    check_base_class_offset(lv, (S2121C38*), 0, "S6233C1");
    check_field_offset(lv, s6233c1f0, 0, "S6233C1.s6233c1f0");
    check_field_offset(lv, s6233c1f1, ABISELECT(8,4), "S6233C1.s6233c1f1");
    check_field_offset(lv, s6233c1f2, ABISELECT(16,12), "S6233C1.s6233c1f2");
    test_class_info(&lv, &cd_S6233C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6233C1(Test_S6233C1, "S6233C1", ABISELECT(24,16));

#else // __cplusplus

extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
static Base_Class bases_S6233C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S6233C1 = {  "S6233C1", // class name
  bases_S6233C1, 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  S21810C1  {
  void *s21810c1f0[2];
  int s21810c1f1[2];
  void  mf21810c1(); // _ZN8S21810C19mf21810c1Ev
  virtual  ~S21810C1(); // _ZN8S21810C1D1Ev
  S21810C1(); // tgen
};
//SIG(1 S21810C1) C1{ vd m Fp[2] Fi[2]}


void  S21810C1 ::mf21810c1(){}
 S21810C1 ::~S21810C1(){ note_dtor("S21810C1", this);}
S21810C1 ::S21810C1(){ note_ctor("S21810C1", this);} // tgen

static void Test_S21810C1()
{
  extern Class_Descriptor cd_S21810C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S21810C1, buf);
    S21810C1 *dp, &lv = *(dp=new (buf) S21810C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S21810C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21810C1)");
    check_field_offset(lv, s21810c1f0, ABISELECT(8,4), "S21810C1.s21810c1f0");
    check_field_offset(lv, s21810c1f1, ABISELECT(24,12), "S21810C1.s21810c1f1");
    test_class_info(&lv, &cd_S21810C1);
    dp->~S21810C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21810C1(Test_S21810C1, "S21810C1", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S21810C1C1Ev();
extern void _ZN8S21810C1D1Ev();
Name_Map name_map_S21810C1[] = {
  NSPAIR(_ZN8S21810C1C1Ev),
  NSPAIR(_ZN8S21810C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21810C1[];
extern void _ZN8S21810C1D1Ev();
extern void _ZN8S21810C1D0Ev();
static  VTBL_ENTRY vtc_S21810C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21810C1[0]),
  (VTBL_ENTRY)&_ZN8S21810C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21810C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21810C1[];
extern  VTBL_ENTRY _ZTV8S21810C1[];
Class_Descriptor cd_S21810C1 = {  "S21810C1", // class name
  0,0,//no base classes
  &(vtc_S21810C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S21810C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21810C1),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  S13051C1  {
  int s13051c1f0[2];
  char s13051c1f1[518];
  int s13051c1f2;
};
//SIG(1 S13051C1) C1{ Fi[2] Fc[518] Fi}



static void Test_S13051C1()
{
  {
    init_simple_test("S13051C1");
    S13051C1 lv;
    check2(sizeof(lv), 532, "sizeof(S13051C1)");
    check2(__alignof__(lv), 4, "__alignof__(S13051C1)");
    check_field_offset(lv, s13051c1f0, 0, "S13051C1.s13051c1f0");
    check_field_offset(lv, s13051c1f1, 8, "S13051C1.s13051c1f1");
    check_field_offset(lv, s13051c1f2, 528, "S13051C1.s13051c1f2");
  }
}
static Arrange_To_Call_Me vS13051C1(Test_S13051C1, "S13051C1", 532);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12257C1  {
  int s12257c1f0;
  char s12257c1f1[259];
  int s12257c1f2[3];
};
//SIG(1 S12257C1) C1{ Fi Fc[259] Fi[3]}



static void Test_S12257C1()
{
  {
    init_simple_test("S12257C1");
    S12257C1 lv;
    check2(sizeof(lv), 276, "sizeof(S12257C1)");
    check2(__alignof__(lv), 4, "__alignof__(S12257C1)");
    check_field_offset(lv, s12257c1f0, 0, "S12257C1.s12257c1f0");
    check_field_offset(lv, s12257c1f1, 4, "S12257C1.s12257c1f1");
    check_field_offset(lv, s12257c1f2, 264, "S12257C1.s12257c1f2");
  }
}
static Arrange_To_Call_Me vS12257C1(Test_S12257C1, "S12257C1", 276);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5555C2_nt  {
  void *s5555c2f0[2];
};
//SIG(-1 S5555C2_nt) C1{ Fp[2]}



//skip512 S5555C2_nt

#else // __cplusplus

Class_Descriptor cd_S5555C2_nt = {  "S5555C2_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  S5555C1  : S5555C2_nt {
  int s5555c1f0[2];
};
//SIG(1 S5555C1) C1{ BC2{ Fp[2]} Fi[2]}



static void Test_S5555C1()
{
  extern Class_Descriptor cd_S5555C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S5555C1, buf);
    S5555C1 &lv = *(new (buf) S5555C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S5555C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5555C1)");
    check_base_class_offset(lv, (S5555C2_nt*), 0, "S5555C1");
    check_field_offset(lv, s5555c1f0, ABISELECT(16,8), "S5555C1.s5555c1f0");
    test_class_info(&lv, &cd_S5555C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5555C1(Test_S5555C1, "S5555C1", ABISELECT(24,16));

#else // __cplusplus

extern Class_Descriptor cd_S5555C2_nt;
static Base_Class bases_S5555C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5555C2_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_S5555C1 = {  "S5555C1", // class name
  bases_S5555C1, 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  S5503C1  : S8480C8_nt {
  void *s5503c1f0;
};
//SIG(1 S5503C1) C1{ BC2{ Fi Fp Fi} Fp}



static void Test_S5503C1()
{
  extern Class_Descriptor cd_S5503C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S5503C1, buf);
    S5503C1 &lv = *(new (buf) S5503C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S5503C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5503C1)");
    check_base_class_offset(lv, (S8480C8_nt*), 0, "S5503C1");
    check_field_offset(lv, s5503c1f0, ABISELECT(24,12), "S5503C1.s5503c1f0");
    test_class_info(&lv, &cd_S5503C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5503C1(Test_S5503C1, "S5503C1", ABISELECT(32,16));

#else // __cplusplus

extern Class_Descriptor cd_S8480C8_nt;
extern VTBL_ENTRY _ZTI10S8480C8_nt[];
static Base_Class bases_S5503C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8480C8_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_S5503C1 = {  "S5503C1", // class name
  bases_S5503C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(32,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  S13959C1  {
  long s13959c1f0[2];
  short s13959c1f1[9];
  char s13959c1f2;
};
//SIG(1 S13959C1) C1{ Fl[2] Fs[9] Fc}



static void Test_S13959C1()
{
  {
    init_simple_test("S13959C1");
    S13959C1 lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S13959C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13959C1)");
    check_field_offset(lv, s13959c1f0, 0, "S13959C1.s13959c1f0");
    check_field_offset(lv, s13959c1f1, ABISELECT(16,8), "S13959C1.s13959c1f1");
    check_field_offset(lv, s13959c1f2, ABISELECT(34,26), "S13959C1.s13959c1f2");
  }
}
static Arrange_To_Call_Me vS13959C1(Test_S13959C1, "S13959C1", ABISELECT(40,28));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8266C2_nt  {
  void  mf8266c2(); // _ZN10S8266C2_nt8mf8266c2Ev
  virtual  ~S8266C2_nt(); // _ZN10S8266C2_ntD1Ev
  S8266C2_nt(); // tgen
};
//SIG(-1 S8266C2_nt) C1{ vd m}


void  S8266C2_nt ::mf8266c2(){}
 S8266C2_nt ::~S8266C2_nt(){ note_dtor("S8266C2_nt", this);}
S8266C2_nt ::S8266C2_nt(){ note_ctor("S8266C2_nt", this);} // tgen

//skip512 S8266C2_nt

#else // __cplusplus

extern void _ZN10S8266C2_ntC1Ev();
extern void _ZN10S8266C2_ntD1Ev();
Name_Map name_map_S8266C2_nt[] = {
  NSPAIR(_ZN10S8266C2_ntC1Ev),
  NSPAIR(_ZN10S8266C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S8266C2_nt[];
extern void _ZN10S8266C2_ntD1Ev();
extern void _ZN10S8266C2_ntD0Ev();
static  VTBL_ENTRY vtc_S8266C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S8266C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S8266C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S8266C2_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S8266C2_nt[];
VTBL_ENTRY *P__ZTI10S8266C2_nt = _ZTI10S8266C2_nt; 
extern  VTBL_ENTRY _ZTV10S8266C2_nt[];
Class_Descriptor cd_S8266C2_nt = {  "S8266C2_nt", // class name
  0,0,//no base classes
  &(vtc_S8266C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S8266C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S8266C2_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  S8266C1  : S8266C2_nt {
  int s8266c1f0;
  short s8266c1f1;
  ~S8266C1(); // tgen
  S8266C1(); // tgen
};
//SIG(1 S8266C1) C1{ BC2{ vd m} Fi Fs}


S8266C1 ::~S8266C1(){ note_dtor("S8266C1", this);} // tgen
S8266C1 ::S8266C1(){ note_ctor("S8266C1", this);} // tgen

static void Test_S8266C1()
{
  extern Class_Descriptor cd_S8266C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S8266C1, buf);
    S8266C1 *dp, &lv = *(dp=new (buf) S8266C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S8266C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8266C1)");
    check_base_class_offset(lv, (S8266C2_nt*), 0, "S8266C1");
    check_field_offset(lv, s8266c1f0, ABISELECT(8,4), "S8266C1.s8266c1f0");
    check_field_offset(lv, s8266c1f1, ABISELECT(12,8), "S8266C1.s8266c1f1");
    test_class_info(&lv, &cd_S8266C1);
    dp->~S8266C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8266C1(Test_S8266C1, "S8266C1", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S8266C1C1Ev();
extern void _ZN7S8266C1D1Ev();
Name_Map name_map_S8266C1[] = {
  NSPAIR(_ZN7S8266C1C1Ev),
  NSPAIR(_ZN7S8266C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8266C2_nt;
extern VTBL_ENTRY _ZTI10S8266C2_nt[];
extern  VTBL_ENTRY _ZTV10S8266C2_nt[];
static Base_Class bases_S8266C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8266C2_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 _ZTI7S8266C1[];
extern void _ZN7S8266C1D1Ev();
extern void _ZN7S8266C1D0Ev();
static  VTBL_ENTRY vtc_S8266C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8266C1[0]),
  (VTBL_ENTRY)&_ZN7S8266C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8266C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8266C1[];
extern  VTBL_ENTRY _ZTV7S8266C1[];
Class_Descriptor cd_S8266C1 = {  "S8266C1", // class name
  bases_S8266C1, 1,
  &(vtc_S8266C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S8266C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8266C1),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13257C1  {
  int s13257c1f0[2];
  short s13257c1f1[256];
};
//SIG(1 S13257C1) C1{ Fi[2] Fs[256]}



static void Test_S13257C1()
{
  {
    init_simple_test("S13257C1");
    S13257C1 lv;
    check2(sizeof(lv), 520, "sizeof(S13257C1)");
    check2(__alignof__(lv), 4, "__alignof__(S13257C1)");
    check_field_offset(lv, s13257c1f0, 0, "S13257C1.s13257c1f0");
    check_field_offset(lv, s13257c1f1, 8, "S13257C1.s13257c1f1");
  }
}
static Arrange_To_Call_Me vS13257C1(Test_S13257C1, "S13257C1", 520);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14064C1  {
  void *s14064c1f0;
  char s14064c1f1[132];
  int s14064c1f2;
};
//SIG(1 S14064C1) C1{ Fp Fc[132] Fi}



static void Test_S14064C1()
{
  {
    init_simple_test("S14064C1");
    S14064C1 lv;
    check2(sizeof(lv), ABISELECT(144,140), "sizeof(S14064C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14064C1)");
    check_field_offset(lv, s14064c1f0, 0, "S14064C1.s14064c1f0");
    check_field_offset(lv, s14064c1f1, ABISELECT(8,4), "S14064C1.s14064c1f1");
    check_field_offset(lv, s14064c1f2, ABISELECT(140,136), "S14064C1.s14064c1f2");
  }
}
static Arrange_To_Call_Me vS14064C1(Test_S14064C1, "S14064C1", ABISELECT(144,140));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15209C1  {
  char s15209c1f0[2];
  short s15209c1f1[6];
  void  mf15209c1(); // _ZN8S15209C19mf15209c1Ev
};
//SIG(1 S15209C1) C1{ m Fc[2] Fs[6]}


void  S15209C1 ::mf15209c1(){}

static void Test_S15209C1()
{
  {
    init_simple_test("S15209C1");
    S15209C1 lv;
    check2(sizeof(lv), 14, "sizeof(S15209C1)");
    check2(__alignof__(lv), 2, "__alignof__(S15209C1)");
    check_field_offset(lv, s15209c1f0, 0, "S15209C1.s15209c1f0");
    check_field_offset(lv, s15209c1f1, 2, "S15209C1.s15209c1f1");
  }
}
static Arrange_To_Call_Me vS15209C1(Test_S15209C1, "S15209C1", 14);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14589C1  {
  void *s14589c1f0[3];
  char s14589c1f1[61];
};
//SIG(1 S14589C1) C1{ Fp[3] Fc[61]}



static void Test_S14589C1()
{
  {
    init_simple_test("S14589C1");
    S14589C1 lv;
    check2(sizeof(lv), ABISELECT(88,76), "sizeof(S14589C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14589C1)");
    check_field_offset(lv, s14589c1f0, 0, "S14589C1.s14589c1f0");
    check_field_offset(lv, s14589c1f1, ABISELECT(24,12), "S14589C1.s14589c1f1");
  }
}
static Arrange_To_Call_Me vS14589C1(Test_S14589C1, "S14589C1", ABISELECT(88,76));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13602C1  {
  int s13602c1f0[7];
  char s13602c1f1[4];
};
//SIG(1 S13602C1) C1{ Fi[7] Fc[4]}



static void Test_S13602C1()
{
  {
    init_simple_test("S13602C1");
    S13602C1 lv;
    check2(sizeof(lv), 32, "sizeof(S13602C1)");
    check2(__alignof__(lv), 4, "__alignof__(S13602C1)");
    check_field_offset(lv, s13602c1f0, 0, "S13602C1.s13602c1f0");
    check_field_offset(lv, s13602c1f1, 28, "S13602C1.s13602c1f1");
  }
}
static Arrange_To_Call_Me vS13602C1(Test_S13602C1, "S13602C1", 32);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14033C1  {
  long s14033c1f0[6];
  short s14033c1f1[8];
};
//SIG(1 S14033C1) C1{ Fl[6] Fs[8]}



static void Test_S14033C1()
{
  {
    init_simple_test("S14033C1");
    S14033C1 lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S14033C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14033C1)");
    check_field_offset(lv, s14033c1f0, 0, "S14033C1.s14033c1f0");
    check_field_offset(lv, s14033c1f1, ABISELECT(48,24), "S14033C1.s14033c1f1");
  }
}
static Arrange_To_Call_Me vS14033C1(Test_S14033C1, "S14033C1", ABISELECT(64,40));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14821C1  {
  short s14821c1f0;
  int s14821c1f1;
  short s14821c1f2[3];
};
//SIG(1 S14821C1) C1{ Fs Fi Fs[3]}



static void Test_S14821C1()
{
  {
    init_simple_test("S14821C1");
    S14821C1 lv;
    check2(sizeof(lv), 16, "sizeof(S14821C1)");
    check2(__alignof__(lv), 4, "__alignof__(S14821C1)");
    check_field_offset(lv, s14821c1f0, 0, "S14821C1.s14821c1f0");
    check_field_offset(lv, s14821c1f1, 4, "S14821C1.s14821c1f1");
    check_field_offset(lv, s14821c1f2, 8, "S14821C1.s14821c1f2");
  }
}
static Arrange_To_Call_Me vS14821C1(Test_S14821C1, "S14821C1", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13637C1  {
  long s13637c1f0;
  char s13637c1f1;
  short s13637c1f2;
  long s13637c1f3;
};
//SIG(1 S13637C1) C1{ Fl Fc Fs Fl}



static void Test_S13637C1()
{
  {
    init_simple_test("S13637C1");
    S13637C1 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S13637C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13637C1)");
    check_field_offset(lv, s13637c1f0, 0, "S13637C1.s13637c1f0");
    check_field_offset(lv, s13637c1f1, ABISELECT(8,4), "S13637C1.s13637c1f1");
    check_field_offset(lv, s13637c1f2, ABISELECT(10,6), "S13637C1.s13637c1f2");
    check_field_offset(lv, s13637c1f3, ABISELECT(16,8), "S13637C1.s13637c1f3");
  }
}
static Arrange_To_Call_Me vS13637C1(Test_S13637C1, "S13637C1", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16599C1  {
  int s16599c1f0;
  char s16599c1f1[5];
  void  mf16599c1(); // _ZN8S16599C19mf16599c1Ev
};
//SIG(1 S16599C1) C1{ m Fi Fc[5]}


void  S16599C1 ::mf16599c1(){}

static void Test_S16599C1()
{
  {
    init_simple_test("S16599C1");
    S16599C1 lv;
    check2(sizeof(lv), 12, "sizeof(S16599C1)");
    check2(__alignof__(lv), 4, "__alignof__(S16599C1)");
    check_field_offset(lv, s16599c1f0, 0, "S16599C1.s16599c1f0");
    check_field_offset(lv, s16599c1f1, 4, "S16599C1.s16599c1f1");
  }
}
static Arrange_To_Call_Me vS16599C1(Test_S16599C1, "S16599C1", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15225C1  {
  char s15225c1f0[257];
  void  mf15225c1(); // _ZN8S15225C19mf15225c1Ev
};
//SIG(1 S15225C1) C1{ m Fc[257]}


void  S15225C1 ::mf15225c1(){}

static void Test_S15225C1()
{
  {
    init_simple_test("S15225C1");
    S15225C1 lv;
    check2(sizeof(lv), 257, "sizeof(S15225C1)");
    check2(__alignof__(lv), 1, "__alignof__(S15225C1)");
    check_field_offset(lv, s15225c1f0, 0, "S15225C1.s15225c1f0");
  }
}
static Arrange_To_Call_Me vS15225C1(Test_S15225C1, "S15225C1", 257);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10947C1  {
  char s10947c1f0[5];
  int s10947c1f1;
};
//SIG(1 S10947C1) C1{ Fc[5] Fi}



static void Test_S10947C1()
{
  {
    init_simple_test("S10947C1");
    S10947C1 lv;
    check2(sizeof(lv), 12, "sizeof(S10947C1)");
    check2(__alignof__(lv), 4, "__alignof__(S10947C1)");
    check_field_offset(lv, s10947c1f0, 0, "S10947C1.s10947c1f0");
    check_field_offset(lv, s10947c1f1, 8, "S10947C1.s10947c1f1");
  }
}
static Arrange_To_Call_Me vS10947C1(Test_S10947C1, "S10947C1", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10721C1  {
  char s10721c1f0[208];
};
//SIG(1 S10721C1) C1{ Fc[208]}



static void Test_S10721C1()
{
  {
    init_simple_test("S10721C1");
    S10721C1 lv;
    check2(sizeof(lv), 208, "sizeof(S10721C1)");
    check2(__alignof__(lv), 1, "__alignof__(S10721C1)");
    check_field_offset(lv, s10721c1f0, 0, "S10721C1.s10721c1f0");
  }
}
static Arrange_To_Call_Me vS10721C1(Test_S10721C1, "S10721C1", 208);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14829C1  {
  short s14829c1f0;
  long s14829c1f1;
};
//SIG(1 S14829C1) C1{ Fs Fl}



static void Test_S14829C1()
{
  {
    init_simple_test("S14829C1");
    S14829C1 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S14829C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14829C1)");
    check_field_offset(lv, s14829c1f0, 0, "S14829C1.s14829c1f0");
    check_field_offset(lv, s14829c1f1, ABISELECT(8,4), "S14829C1.s14829c1f1");
  }
}
static Arrange_To_Call_Me vS14829C1(Test_S14829C1, "S14829C1", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

